spb/chat-spboucher Public
Private universal chat interface over the OpenRouter ecosystem — 400+ models, branching, streaming, usage tracking. Next.js 16 + SQLite, PWA, deployed on m4m64a at chat.spboucher.ai
TypeScript 78.8%
CSS 15.1%
JavaScript 4.9%
Shell 1.2%
1// Author: Simon-Pierre Boucher2// Contact: contact@spboucher.ai3// Project: chat.spboucher.ai45import Database from "better-sqlite3";6import fs from "node:fs";7import path from "node:path";8import { migrate } from "./schema";910const DATA_DIR = path.resolve(/* turbopackIgnore: true */ process.env.CHAT_DATA_DIR || "./data");1112let db: Database.Database | null = null;1314export function dataDir(): string {15 return DATA_DIR;16}1718export function getDb(): Database.Database {19 if (db) return db;20 fs.mkdirSync(DATA_DIR, { recursive: true });21 fs.mkdirSync(path.join(DATA_DIR, "uploads"), { recursive: true });22 db = new Database(path.join(DATA_DIR, "chat.db"));23 db.pragma("journal_mode = WAL");24 db.pragma("foreign_keys = ON");25 db.pragma("busy_timeout = 5000");26 migrate(db);27 return db;28}29