Storage
A private S3 bucket is the system of record. The local mirror is a cache. No database.
Storage
Flat files in a private S3 bucket. A local mirror outside any git repo. No database — not yet, probably not for years.
┌──────────────────────────────────────────────────────────────┐
│ SYSTEM OF RECORD — private S3 bucket │
│ versioning on, SSE, one IAM user, one lifecycle rule │
│ key: transcripts/<scope>/<YYYY>/<MM>/<file>.md │
└───────────────────────────┬──────────────────────────────────┘
│ aws s3 sync, scheduled
▼
┌──────────────────────────────────────────────────────────────┐
│ CACHE — ~/transcripts/ OUTSIDE every git repo │
│ disposable. Delete it, sync again, lose nothing. │
└───────────────────────────┬──────────────────────────────────┘
│ Glob / Grep / Read
▼
an agent
Why S3, not a private git repo
An existing standard decides it. That file was lost in the repo reorg and lives
only in git history — git show 1f9bd4f:docs/standards/aws-data.md:
“No side-channel local copies as a permanent data path.”
“Raw non-code assets belong in S3 when object storage is appropriate.”
A transcript is a raw non-code asset. The mirror is allowed because it is a cache, not the permanent path.
Deletion is the second reason. S3 removes an object and its versions on request.
Git cannot without filter-repo, which CLAUDE.md forbids. Git’s immutability
is a feature for specs and a liability for personal data — see
Consent.
The mirror lives outside any git repo. Settled, not open. A sync target
inside a checkout puts a client transcript one git add from a public site. Put
it at ~/transcripts/, and add a .gitignore entry as a second belt.
Not in docs/, either
Disqualified on disclosure, not cost. This wiki renders publicly today and
Google sign-in is parked in unmerged PR #17. npm run validate also caps a page
at 500 words; a transcript is thousands. The wiki holds the spec and the
pointers. Never the text.
The number that decides it
3 meetings/day × 3,000 words = 9,000 words/day
at ~6 bytes/word = 54 KB/day
× 250 working days = 13.5 MB/year, ~750 files
5 years = ~68 MB, ~3,750 files
S3 charges $0.023/GB-month, so year-one storage is $0.0003/month and 750 PUTs a year is $0.004. The whole data layer costs under $0.01/month and reads as $0.00 on the bill. Every managed search product carries a monthly floor that exceeds the lifetime cost of this data. That is the shape of the answer.
Why no database
Files are the lowest-entropy state. Files to database is one evening’s script. Database to files is an export job, schema archaeology, and an argument about which one is now the source of truth.
The corpus hits 10,000 files in year thirteen. Ranking, not speed, is what eventually breaks — and the fix has a trigger attached on the growth path. Not today.