diff --git a/apps/blog/src/env.d.ts b/apps/blog/src/env.d.ts
new file mode 100644
index 0000000..f964fe0
--- /dev/null
+++ b/apps/blog/src/env.d.ts
@@ -0,0 +1 @@
+///
diff --git a/apps/blog/src/lib/db.ts b/apps/blog/src/lib/db.ts
new file mode 100644
index 0000000..f9d2ff2
--- /dev/null
+++ b/apps/blog/src/lib/db.ts
@@ -0,0 +1,50 @@
+import { createClient } from '@libsql/client';
+
+export const db = createClient({
+ url: import.meta.env.TURSO_DATABASE_URL,
+ authToken: import.meta.env.TURSO_AUTH_TOKEN,
+});
+
+export interface GuestbookEntry {
+ id: number;
+ name: string;
+ message: string;
+ url: string | null;
+ created_at: string;
+ approved: number;
+}
+
+export async function getApprovedEntries(): Promise {
+ const result = await db.execute(
+ 'SELECT * FROM guestbook WHERE approved = 1 ORDER BY created_at DESC'
+ );
+ return result.rows as unknown as GuestbookEntry[];
+}
+
+export async function getPendingEntries(): Promise {
+ const result = await db.execute(
+ 'SELECT * FROM guestbook WHERE approved = 0 ORDER BY created_at DESC'
+ );
+ return result.rows as unknown as GuestbookEntry[];
+}
+
+export async function createEntry(name: string, message: string, url: string | null): Promise {
+ await db.execute({
+ sql: 'INSERT INTO guestbook (name, message, url) VALUES (?, ?, ?)',
+ args: [name, message, url],
+ });
+}
+
+export async function approveEntry(id: number): Promise {
+ await db.execute({
+ sql: 'UPDATE guestbook SET approved = 1 WHERE id = ?',
+ args: [id],
+ });
+}
+
+export async function deleteEntry(id: number): Promise {
+ await db.execute({
+ sql: 'DELETE FROM guestbook WHERE id = ?',
+ args: [id],
+ });
+}