diff --git a/src/routes/(protected)/frequencies/+page.server.ts b/src/routes/(protected)/frequencies/+page.server.ts
new file mode 100644
index 0000000..59bdfa1
--- /dev/null
+++ b/src/routes/(protected)/frequencies/+page.server.ts
@@ -0,0 +1,47 @@
+import type { PageServerLoad } from './$types';
+import { prisma } from '$lib/db';
+import { fail, type Actions, type RequestEvent } from '@sveltejs/kit';
+
+export const load: PageServerLoad = async () => {
+ const frequencies = await prisma.solfeggioFrequency.findMany({
+ include: {
+ _count: {
+ select: { affirmations: true }
+ }
+ }
+ });
+ return { frequencies };
+};
+
+export const actions: Actions = {
+ create: async ({ request }: RequestEvent) => {
+ const form = await request.formData();
+ const name = form.get('name') as string;
+ const value = Number(form.get('value'));
+
+ if (!name) {
+ return fail(400, { error: 'Name is required!', ...Object.fromEntries(form) });
+ }
+
+ if (!value || value <= 0) {
+ return fail(400, {
+ error: 'A valid frequency value is required!',
+ ...Object.fromEntries(form)
+ });
+ }
+
+ try {
+ const newFrequency = await prisma.solfeggioFrequency.create({
+ data: { name, value }
+ });
+
+ return { success: true, newFrequency };
+ } catch (err) {
+ console.log(err);
+ return fail(500, {
+ error: 'An unknown error has occurred. Please try again later.',
+ ...Object.fromEntries(form)
+ });
+ }
+ }
+};
diff --git a/src/routes/(protected)/frequencies/+page.svelte b/src/routes/(protected)/frequencies/+page.svelte
new file mode 100644
index 0000000..c5472ce
--- /dev/null
+++ b/src/routes/(protected)/frequencies/+page.svelte
@@ -0,0 +1,66 @@
+
+
+
+
+
Frequencies
+
+
+
+ {#if data.frequencies.length > 0}
+
+ {:else}
+
+
+
No frequencies yet
+
Click "Create +" to add your first one
+
+
+ {/if}
+
+
+{#if showModal}
+
+
+
+
+
Create New Frequency
+
+
+
+ {#if form?.error}
+
+ {form.error}
+
+ {/if}
+
+
+
+
+
+{/if}
diff --git a/src/routes/(protected)/frequencies/[id]/+page.server.ts b/src/routes/(protected)/frequencies/[id]/+page.server.ts
new file mode 100644
index 0000000..9e1cebd
--- /dev/null
+++ b/src/routes/(protected)/frequencies/[id]/+page.server.ts
@@ -0,0 +1,50 @@
+import type { PageServerLoad } from './$types';
+import { prisma } from '$lib/db';
+import { error, fail, type Actions, type RequestEvent, type ServerLoadEvent } from '@sveltejs/kit';
+
+export const load: PageServerLoad = async ({ params }: ServerLoadEvent) => {
+ const frequency = await prisma.solfeggioFrequency.findUnique({
+ where: { id: Number(params.id) }
+ });
+
+ if (!frequency) {
+ throw error(404, 'not found');
+ }
+
+ return { frequency };
+};
+
+export const actions: Actions = {
+ update: async ({ request }: RequestEvent) => {
+ const form = await request.formData();
+ const id = Number(form.get('id'));
+ const name = form.get('name') as string;
+ const value = Number(form.get('value'));
+
+ if (!name) {
+ return fail(400, { error: 'Name is required!', ...Object.fromEntries(form) });
+ }
+
+ if (!value || value <= 0) {
+ return fail(400, {
+ error: 'A valid frequency value is required!',
+ ...Object.fromEntries(form)
+ });
+ }
+
+ try {
+ const updatedFrequency = await prisma.solfeggioFrequency.update({
+ where: { id },
+ data: { name, value }
+ });
+
+ return { success: true, updatedFrequency };
+ } catch (err) {
+ console.log(err);
+ return fail(500, {
+ error: 'An unknown error has occurred. Please try again later. Your changes have not been saved.',
+ ...Object.fromEntries(form)
+ });
+ }
+ }
+};
diff --git a/src/routes/(protected)/frequencies/[id]/+page.svelte b/src/routes/(protected)/frequencies/[id]/+page.svelte
new file mode 100644
index 0000000..40247fb
--- /dev/null
+++ b/src/routes/(protected)/frequencies/[id]/+page.svelte
@@ -0,0 +1,47 @@
+
+
+
+
Back to Frequencies
+
+ {#if form?.error}
+
+ {form.error}
+
+ {/if}
+
+ {#if form?.success}
+
+ Frequency updated successfully! You will be redirected in {remainder} seconds.
+
+ {/if}
+
+
+
+
+