A simple Bluesky bot to make sense of the noise, with responses powered by Gemini, similar to Grok.

feat: update default db path & migration on setup

+1 -1
.env.example
··· 4 4 # PDS service URL (optional) 5 5 SERVICE="https://bsky.social" 6 6 7 - DB_PATH="data/sqlite.db" 7 + DB_PATH="sqlite.db" 8 8 GEMINI_MODEL="gemini-2.5-flash" 9 9 10 10 DID=""
+1 -1
.gitignore
··· 34 34 .DS_Store 35 35 36 36 # Database 37 - data 37 + *.db
+2 -3
docker-compose.yml
··· 6 6 environment: 7 7 - "AUTHORIZED_USERS=${AUTHORIZED_USERS}" 8 8 - "SERVICE=${SERVICE:?https://bsky.social}" 9 - - "DB_PATH=data/sqlite.db" 9 + - "DB_PATH=sqlite.db" 10 10 - "GEMINI_MODEL=${GEMINI_MODEL:-gemini-2.5-flash}" 11 11 - "DID=${DID:?}" 12 12 - "HANDLE=${HANDLE:?}" 13 13 - "BSKY_PASSWORD=${BSKY_PASSWORD:?}" 14 14 - "GEMINI_API_KEY=${GEMINI_API_KEY:?}" 15 15 volumes: 16 - - .:/app 17 - - aero_db:/app/data 16 + - aero_db:/sqlite.db
+6 -4
src/db/index.ts
··· 1 1 import { drizzle } from "drizzle-orm/bun-sqlite"; 2 + import { migrate } from "drizzle-orm/bun-sqlite/migrator"; 2 3 import { Database } from "bun:sqlite"; 3 4 import * as schema from "./schema"; 4 5 import { env } from "../env"; 5 - import { migrateDB } from "./migrate"; 6 - 7 - await migrateDB(); 8 6 9 7 const sqlite = new Database(env.DB_PATH); 10 - export default drizzle(sqlite, { schema }); 8 + const db = drizzle(sqlite, { schema }); 9 + 10 + migrate(db, { migrationsFolder: "./drizzle" }); 11 + 12 + export default db;
-10
src/db/migrate.ts
··· 1 - import { migrate } from "drizzle-orm/bun-sqlite/migrator"; 2 - import { drizzle } from "drizzle-orm/bun-sqlite"; 3 - import { Database } from "bun:sqlite"; 4 - import { env } from "../env"; 5 - 6 - export async function migrateDB() { 7 - const sqlite = new Database(env.DB_PATH); 8 - const db = drizzle(sqlite); 9 - await migrate(db, { migrationsFolder: "./drizzle" }); 10 - }