Scaffolds a Next.js app with email/password auth, encrypted IMAP/SMTP/CalDAV mailbox connections, a background sync job, Claude-generated daily briefings, and an approve-before-send draft reply flow. Includes a clean design system (light/dark) and deployment config (systemd unit, credential rotation script). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012o9j9RezxbZVKQMrB7oRLY
16 lines
516 B
TypeScript
16 lines
516 B
TypeScript
import Database from "better-sqlite3";
|
|
import { drizzle } from "drizzle-orm/better-sqlite3";
|
|
import path from "node:path";
|
|
import fs from "node:fs";
|
|
import * as schema from "./schema";
|
|
|
|
const dataDir = process.env.DATA_DIR ?? path.join(process.cwd(), "data");
|
|
fs.mkdirSync(dataDir, { recursive: true });
|
|
|
|
const sqlite = new Database(path.join(dataDir, "db.sqlite"));
|
|
sqlite.pragma("journal_mode = WAL");
|
|
sqlite.pragma("foreign_keys = ON");
|
|
|
|
export const db = drizzle(sqlite, { schema });
|
|
export type DB = typeof db;
|