diff --git a/src/routes/database/characters/[id]/+page.server.ts b/src/routes/database/characters/[id]/+page.server.ts
new file mode 100644
index 00000000..3a650851
--- /dev/null
+++ b/src/routes/database/characters/[id]/+page.server.ts
@@ -0,0 +1,25 @@
+import type { PageServerLoad } from './$types'
+import { get } from '$lib/api/core'
+import { error } from '@sveltejs/kit'
+
+export const load: PageServerLoad = async ({ params, fetch }) => {
+ try {
+ const character = await get(fetch, `/characters/${params.id}`)
+
+ if (!character) {
+ throw error(404, 'Character not found')
+ }
+
+ return {
+ character
+ }
+ } catch (err) {
+ console.error('Failed to load character:', err)
+
+ if (err instanceof Error && 'status' in err && err.status === 404) {
+ throw error(404, 'Character not found')
+ }
+
+ throw error(500, 'Failed to load character')
+ }
+}
\ No newline at end of file
diff --git a/src/routes/database/characters/[id]/+page.svelte b/src/routes/database/characters/[id]/+page.svelte
new file mode 100644
index 00000000..ce84e3b3
--- /dev/null
+++ b/src/routes/database/characters/[id]/+page.svelte
@@ -0,0 +1,298 @@
+
The character you're looking for could not be found.
+ ++ {summon.call_description || 'No description available'} +
+No call effect information available
+ {/if} ++ {summon.aura_description || 'No description available'} +
+No aura effect information available
+ {/if} ++ {summon.sub_aura_description || 'No description available'} +
+The summon you're looking for could not be found.
+ +{skill.description || 'No description available'}
+No skills available
+ {/if} +The weapon you're looking for could not be found.
+ +