See the best posts from any Bluesky account
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Productionize SQLite config with WAL mode and tuned PRAGMAs

Set journal_mode=WAL, busy_timeout, synchronous=NORMAL, foreign_keys,
cache_size, and temp_store on every new connection via Knex pool hook.
This eliminates reader/writer contention across the three processes
(web, jetstream, queue) sharing the same SQLite file.

Also remove stale design context section from AGENTS.md.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

+11 -22
-22
AGENTS.md
··· 71 71 - Tests split into `tests/unit/` and `tests/functional/`. 72 72 - ClickHouse tests use real ClickHouse (docker compose). Never mock it — always drain query result streams to avoid hangs. 73 73 - Fixtures live next to specs (e.g. `clickhouse_store_fixtures.ts`). 74 - 75 - ## Design Context 76 - 77 - ### Users 78 - Bluesky users — primarily comics/funny posters, journalists, and anyone who posts for the joy of it. They come for a quick dopamine hit: "what's my best stuff?" Usage is fast and casual — check your top posts, maybe share a screenshot, move on. As the product matures, it becomes stickier: global leaderboards, in-app faving/reposting, post-of-the-day features, and milestone notifications via Bluesky DM ("congrats on the 1000 heart post"). 79 - 80 - ### Brand Personality 81 - **Simple, soft, fun.** The interface should feel like social media at its best — lighthearted, rewarding, zero friction. Not a dashboard. Not an analytics tool. A place where discovering your best posts genuinely makes you smile. Think of it as a trophy case that doesn't take itself too seriously. 82 - 83 - ### Aesthetic Direction 84 - - **Tone:** Minimal foundation with playful, deliberate details. Clean enough to feel fast, warm enough to feel human. Small animations that reward interaction — not spectacle, just little moments of delight. 85 - - **Reference:** Bluesky's visual language is a natural touchpoint — the airy feel, the rounded shapes, the blue. favs.blue should feel like it belongs in the same ecosystem without being a clone. It's the fun neighbor, not the corporate sibling. 86 - - **Anti-references:** Dense analytics dashboards. Dark-mode-with-neon "hacker" aesthetics. Anything that makes social media feel like work. 87 - - **Theme:** Light mode primary, dark mode supported. Both should feel equally considered. 88 - - **Color anchors:** Bluesky blue and heart red as the two emotional poles — discovery and appreciation. Neutrals should feel warm, not clinical. 89 - 90 - ### Design Principles 91 - 1. **Fast to feel, not just fast to load.** Every interaction should feel instant and rewarding. Optimistic UI, snappy transitions, no waiting states that feel like waiting. 92 - 2. **Delight in the details.** The big picture is simple. The magic is in the small things — a subtle animation when a post appears, the way numbers count up, the warmth of the color palette. 93 - 3. **Social media should be fun.** This is a celebration of good posts, not a performance report. The tone is congratulatory, never judgmental. Empty states are encouraging, not clinical. 94 - 4. **Belong to the Bluesky world.** Users should feel at home coming from Bluesky. Respect their visual vocabulary — rounded shapes, airy spacing, familiar blue — while adding favs.blue's own personality. 95 - 5. **Simple until it isn't.** Start minimal. As features like leaderboards, post-of-the-day, and notifications arrive, the design system should accommodate complexity without losing its lightness.
+11
config/database.ts
··· 23 23 filename: env.get('SQLITE_PATH') ?? app.tmpPath('db.sqlite3'), 24 24 }, 25 25 useNullAsDefault: true, 26 + pool: { 27 + afterCreate(conn: any, done: Function) { 28 + conn.pragma('journal_mode = WAL') 29 + conn.pragma('busy_timeout = 5000') 30 + conn.pragma('synchronous = NORMAL') 31 + conn.pragma('foreign_keys = ON') 32 + conn.pragma('cache_size = -64000') 33 + conn.pragma('temp_store = memory') 34 + done() 35 + }, 36 + }, 26 37 migrations: { 27 38 naturalSort: true, 28 39 paths: ['database/migrations'],