audio streaming app plyr.fm
38
fork

Configure Feed

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

docs: status update — costs export fix, AuDD removal complete (#1169)

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>

authored by

nate nowack
Claude Opus 4.6
and committed by
GitHub
57033434 a9563da3

+17 -3
+17 -3
STATUS.md
··· 47 47 48 48 ### March 2026 49 49 50 + #### costs export tied to release tags + legal date guard (PRs #1166-1168, Mar 20) 51 + 52 + **why**: merging PR #1163 (AuDD → AcoustID) changed the costs JSON shape (`audd` → `copyright_scanning`), which broke the production `/costs` page. the hourly `export_costs.py` runs from `main`, but the production frontend deploys on a separate release cadence — so the script's output shape changed before the frontend was ready for it. separately, the privacy policy content was updated (#1164) but the backend `terms_last_updated` config wasn't bumped, so users weren't prompted to re-accept. 53 + 54 + **what shipped**: 55 + - costs export workflow now checks out the **latest release tag** instead of `main`, so the script shape always matches the deployed frontend. data stays fresh (hourly from prod DB), but the shape only changes when a release is cut 56 + - CI-only guard on `export_costs.py` — refuses non-dry-run outside GitHub Actions 57 + - pre-commit hook (`check-legal-dates`) that catches two things: stale privacy policy "Last updated" dates when content changes, and `LegalSettings.terms_last_updated` falling behind the privacy policy date 58 + - removed dead `R2_BUCKET` / `R2_PUBLIC_BUCKET_URL` env vars from the workflow (script uses `R2_STATS_BUCKET` with defaults) 59 + - bumped `terms_last_updated` from `2026-02-06` to `2026-03-20` 60 + - filed #1165 for moderation staging environment (same class of problem — deploys directly to prod) 61 + 62 + --- 63 + 50 64 #### chromaprint.zig — standalone audio fingerprinting in pure zig (Mar 19) 51 65 52 66 **why**: plyr.fm pays AuDD ~$5/1000 requests for copyright moderation fingerprinting. AcoustID is a free, open-source alternative that uses Chromaprint fingerprints, but the official library requires FFmpeg. we wanted a zero-dependency fingerprinting tool. ··· 349 363 350 364 ### current focus 351 365 352 - replacing AuDD audio fingerprinting ($5/1000 requests) with free AcoustID lookups. a pure zig chromaprint library ([`@zzstoatzz.io/chromaprint.zig`](https://tangled.sh/@zzstoatzz.io/chromaprint.zig)) produces exact-match fingerprints against the reference `fpcalc` implementation. next step: integrate into the moderation service and remove AuDD from costs/terms. 366 + AuDD audio fingerprinting ($5/1000 requests) has been replaced with free AcoustID lookups via `fpcalc` (#1163). the moderation service now shells out to a vendored `fpcalc` binary and queries AcoustID directly. a pure zig chromaprint library ([`@zzstoatzz.io/chromaprint.zig`](https://tangled.sh/@zzstoatzz.io/chromaprint.zig)) was built as a learning exercise and produces exact-match fingerprints. next: add a staging environment for the moderation service (#1165). 353 367 354 368 ### known issues 355 369 - iOS PWA audio may hang on first play after backgrounding ··· 457 471 - fly.io (backend + redis + transcoder + moderation): ~$24/month 458 472 - neon postgres: $5/month 459 473 - cloudflare (R2 + pages + domain): ~$1/month 460 - - audd audio fingerprinting: $5-10/month (usage-based) — replacing with free AcoustID lookups 474 + - copyright scanning (AcoustID + fpcalc): $0 (replaced AuDD) 461 475 - replicate (genre classification): <$1/month (scales to zero, ~$0.00019/run) 462 476 - logfire: $0 (free tier) 463 477 ··· 485 499 486 500 --- 487 501 488 - this is a living document. last updated 2026-03-19 (chromaprint.zig, ambient theme polish, AuDD → AcoustID migration in progress). 502 + this is a living document. last updated 2026-03-20 (AuDD → AcoustID complete, costs export tied to release tags, terms re-acceptance fix). 489 503