🪻 distributed transcription service thistle.dunkirk.sh

feat: add transcription database schema and dependencies

- Add transcriptions table with status tracking
- Add eventsource-client for SSE support
- Configure environment variables for Whisper service
- Ignore uploads directory and .env file

💘 Generated with Crush

Co-Authored-By: Crush <crush@charm.land>

dunkirk.sh 38c106d5 8dd6999b

verified
+4
.env.example
···
+
# Whisper Service URL
+
# URL of the faster-whisper transcription server
+
# See README for setup instructions
+
WHISPER_SERVICE_URL=http://localhost:8000
+2
.gitignore
···
node_modules
thistle.db
+
uploads/
+
.env
+5
bun.lock
···
"": {
"name": "inky",
"dependencies": {
+
"eventsource-client": "^1.2.0",
"lit": "^3.3.1",
"ua-parser-js": "^2.0.6",
},
···
"csstype": ["csstype@3.1.3", "", {}, "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="],
"detect-europe-js": ["detect-europe-js@0.1.2", "", {}, "sha512-lgdERlL3u0aUdHocoouzT10d9I89VVhk0qNRmll7mXdGfJT1/wqZ2ZLA4oJAjeACPY5fT1wsbq2AT+GkuInsow=="],
+
+
"eventsource-client": ["eventsource-client@1.2.0", "", { "dependencies": { "eventsource-parser": "^3.0.0" } }, "sha512-kDI75RSzO3TwyG/K9w1ap8XwqSPcwi6jaMkNulfVeZmSeUM49U8kUzk1s+vKNt0tGrXgK47i+620Yasn1ccFiw=="],
+
+
"eventsource-parser": ["eventsource-parser@3.0.6", "", {}, "sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg=="],
"is-standalone-pwa": ["is-standalone-pwa@0.1.1", "", {}, "sha512-9Cbovsa52vNQCjdXOzeQq5CnCbAcRk05aU62K20WO372NrTv0NxibLFCK6lQ4/iZEFdEA3p3t2VNOn8AJ53F5g=="],
+1
package.json
···
"typescript": "^5"
},
"dependencies": {
+
"eventsource-client": "^1.2.0",
"lit": "^3.3.1",
"ua-parser-js": "^2.0.6"
}
+23 -1
src/db/schema.ts
···
const migrations = [
{
version: 1,
-
name: "Complete schema",
+
name: "Complete user schema",
sql: `
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
···
CREATE INDEX IF NOT EXISTS idx_sessions_user_id ON sessions(user_id);
CREATE INDEX IF NOT EXISTS idx_sessions_expires_at ON sessions(expires_at);
+
`,
+
},
+
{
+
version: 2,
+
name: "Add transcriptions table",
+
sql: `
+
CREATE TABLE IF NOT EXISTS transcriptions (
+
id TEXT PRIMARY KEY,
+
user_id INTEGER NOT NULL,
+
filename TEXT NOT NULL,
+
original_filename TEXT NOT NULL,
+
status TEXT NOT NULL DEFAULT 'uploading',
+
progress INTEGER NOT NULL DEFAULT 0,
+
transcript TEXT,
+
error_message TEXT,
+
created_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now')),
+
updated_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now')),
+
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
+
);
+
+
CREATE INDEX IF NOT EXISTS idx_transcriptions_user_id ON transcriptions(user_id);
+
CREATE INDEX IF NOT EXISTS idx_transcriptions_status ON transcriptions(status);
`,
},
];