LOADING…
0%
Build history

Every step,
from the first commit.

A complete build timeline of Grainstash taking shape—from early sequencer experiments to the product it is today.

Commits
1,543
Since
2024
Through
2026

Showing 1–50 of 1,543

Page 1 of 31

3 commits
1 commit
2 commits
3 commits
1 commit
8 commits
3 commits
2 commits
3 commits
19 commits
  1. Put compose worker behind an opt-in profile; align dev Postgres with CI

    Claude ffa9289b

    Commit notes

    The compose worker service silently competed with `bun run dev:worker` for the same Redis queue jobs whenever `bun run services:up` (documented as infra-only) was run, contradicting the documented dev model where the API and worker run directly with Bun. Gate it behind the `worker` Compose profile so it's opt-in only. Also bump the dev Postgres image from pg15 to pg16 to match CI, and fix the Dockerfile.worker header comment (the "chunk assembly for resumable uploads" feature was removed).

    Files
    3
    Added
    +10
    Removed
    −3
  2. Remove dead backend Dockerfiles and sync-lock script

    Claude 3acdca1e

    Commit notes

    Dockerfile.local can't build (copies bun.lock from backend/, which doesn't exist — the lockfile lives at repo root) and Dockerfile.distroless is unused and installs without a lockfile; production deploys via Railpack per railway.json, not any of these. Drop the sync-lock script that existed solely to manufacture a lockfile for Dockerfile.local, and update docs (DEPLOYMENT.md, AGENTS.md) that referenced the removed files/script.

    Files
    6
    Added
    +17
    Removed
    −106
  3. Fix Stripe checkout return URLs so post-payment verification runs

    Claude 08dfb192

    Commit notes

    The frontend appended ?verify=true / ?subscription=success to redirect URLs and the backend then appended a second ?session_id=..., producing malformed double-? success URLs whose params never parsed — so the payment-success flow never fired, while the clean cancel_url triggered it on cancel instead. - Add appendRawQuery helper that joins with ? or & correctly without encoding Stripe's {CHECKOUT_SESSION_ID} template; use it for all three success_url call sites (pack, bundle, subscription checkout) - Send clean redirect URLs from the frontend (origin + pathname; bare /library for subscriptions) so cancel returns carry no marker - Gate pack/bundle verification on session_id presence (keeping legacy verify=true acceptance for deploy skew) and clean both params from the URL afterward - Preserve remaining query params in the library page URL cleanup and also strip session_id there Co-Authored-By: Claude Fable 5 <[email redacted]> Claude-Session: [private session redacted]

    Files
    9
    Added
    +73
    Removed
    −12
  4. Bound the AI copywriting LLM call and route service logs through pino

    Claude 9c7c1d81

    Commit notes

    The pack copywriting endpoint called generateText with no timeout and default retries, unlike the interactive search planner's 2.5s abort budget; a slow/hung OpenAI response could hold the request open for minutes. Also switch ai-copywriting.ts and similarity-search.ts from console.error/warn to the repo-standard pino logger so these failures get structured logging in production. Co-Authored-By: Claude Fable 5 <[email redacted]> Claude-Session: [private session redacted]

    Files
    2
    Added
    +16
    Removed
    −2
5 commits
  1. Update full-text search test to the narrowed field contract

    Claude c88f0ad0

    Commit notes

    The DB-backed suite (skipped locally without Postgres) still asserted the old search-every-column behavior: it expected q=173.5 to match a sample by BPM. The field narrowing was deliberate — numeric/internal columns made queries like "120" or "true" match analysis state, and tempo has dedicated min_bpm/max_bpm filters — so the test now asserts the text-field matches AND that numeric columns are excluded. Co-Authored-By: Claude Fable 5 <[email redacted]> Claude-Session: [private session redacted]

    Files
    1
    Added
    +20
    Removed
    −7