- Files
- 2
- Added
- +239
- Removed
- −260
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
- Files
- 40
- Added
- +2051
- Removed
- −472
- Files
- 60
- Added
- +4204
- Removed
- −1381
- Files
- 235
- Added
- +53994
- Removed
- −3600
- Files
- 17
- Added
- +395
- Removed
- −26
- Files
- 61
- Added
- +9204
- Removed
- −2050
- Files
- 21
- Added
- +1493
- Removed
- −365
- Files
- 19
- Added
- +2202
- Removed
- −566
- Files
- 79
- Added
- +22189
- Removed
- −1742
- Files
- 18
- Added
- +1341
- Removed
- −182
- Files
- 118
- Added
- +15524
- Removed
- −2020
- Files
- 0
- Added
- +0
- Removed
- −0
- Files
- 7
- Added
- +15
- Removed
- −22
- Files
- 32
- Added
- +740
- Removed
- −592
Merge pull request #384 from arminnaimi/feat/add-workos-authkit
Commit notes
Feat/add workos authkit
- Files
- 0
- Added
- +0
- Removed
- −0
- Files
- 21
- Added
- +493
- Removed
- −514
- Files
- 43
- Added
- +1983
- Removed
- −1156
- Files
- 85
- Added
- +6253
- Removed
- −2379
- Files
- 4
- Added
- +521
- Removed
- −284
- Files
- 41
- Added
- +3732
- Removed
- −2377
- Files
- 40
- Added
- +3317
- Removed
- −607
- Files
- 27
- Added
- +663
- Removed
- −526
- Files
- 1
- Added
- +50
- Removed
- −0
Merge pull request #382 from arminnaimi/claude/producer-tag-prompts-6eh2jw
Commit notes
Switch producer tag generation to ElevenLabs voices
- Files
- 0
- Added
- +0
- Removed
- −0
- Files
- 3
- Added
- +56
- Removed
- −14
- Files
- 4
- Added
- +46
- Removed
- −18
- Files
- 8
- Added
- +131
- Removed
- −98
- Files
- 15
- Added
- +1127
- Removed
- −1
- Files
- 2
- Added
- +180
- Removed
- −13
- Files
- 28
- Added
- +649
- Removed
- −2081
Merge pull request #381 from arminnaimi/claude/backend-frontend-review-6xj9ok
Commit notes
Fix Stripe checkout return URLs and improve dev tooling (cycle 5)
- Files
- 0
- Added
- +0
- Removed
- −0
Mark plan 016 done in the index; record RAILWAY.md sync-lock follow-up
Commit notes
Co-Authored-By: Claude Fable 5 <[email redacted]> Claude-Session: [private session redacted]
- Files
- 1
- Added
- +9
- Removed
- −2
Put compose worker behind an opt-in profile; align dev Postgres with CI
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
Remove dead backend Dockerfiles and sync-lock script
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
Mark plan 014 done in the index; record resume-flow follow-up
Commit notes
Co-Authored-By: Claude Fable 5 <[email redacted]> Claude-Session: [private session redacted]
- Files
- 1
- Added
- +9
- Removed
- −1
Fix Stripe checkout return URLs so post-payment verification runs
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
Mark plan 015 done, 016 in progress in the index
Commit notes
Co-Authored-By: Claude Fable 5 <[email redacted]> Claude-Session: [private session redacted]
- Files
- 1
- Added
- +2
- Removed
- −2
- Files
- 2
- Added
- +22
- Removed
- −13
- Files
- 2
- Added
- +3
- Removed
- −2
- Files
- 1
- Added
- +5
- Removed
- −0
- Files
- 1
- Added
- +1
- Removed
- −1
Mark plan 017 done in the index
Commit notes
Co-Authored-By: Claude Fable 5 <[email redacted]> Claude-Session: [private session redacted]
- Files
- 1
- Added
- +1
- Removed
- −1
Bound the AI copywriting LLM call and route service logs through pino
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
Mark plans 014/015/017 in progress in the index
Commit notes
Co-Authored-By: Claude Fable 5 <[email redacted]> Claude-Session: [private session redacted]
- Files
- 1
- Added
- +4
- Removed
- −4
Add cycle-5 audit plans (checkout return URLs, scripts, Docker dedupe, LLM hygiene)
Commit notes
Cycle-5 focused audit: UX gotchas, LLM usage, embedding pipeline, performance, script consistency, and Docker duplication. LLM and CLAP embedding paths came back clean; plans 014-017 cover the real findings. Co-Authored-By: Claude Fable 5 <[email redacted]> Claude-Session: [private session redacted]
- Files
- 5
- Added
- +940
- Removed
- −4
- Files
- 16
- Added
- +37
- Removed
- −38
- Files
- 1
- Added
- +4
- Removed
- −4
- Files
- 2
- Added
- +1
- Removed
- −15
Merge pull request #380 from arminnaimi/claude/upload-analysis-search-review-0zzbm9
Commit notes
Remove chunked upload system, simplify to direct presigned uploads
- Files
- 0
- Added
- +0
- Removed
- −0
Update full-text search test to the narrowed field contract
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