iamnbutler/shelfgoblinPublic

Shelf Goblin — discover LitRPG audiobooks, follow series, and track your library.

Split the reader app from private catalog production #5

Mergediamnbutlermerged 2 commits intomainfromrefs/pull/5/head
ConversationFiles changed
201 files changed+1630-36727
StackedSplit
.env.example+8 −15
.github/workflows/catalog-refresh.yml+94 −12
.github/workflows/ci.yml+3 −6
CLAUDE.md+57 −28
README.md+116 −176
docs/audio-coverage-proposal.md+40 −53
docs/catalog-strategy.md+26 −81
docs/quality-benchmarks.md+0 −157
docs/quality-index.md+0 −94
package-lock.json+59 −326
package.json+12 −31
packages/catalog-contract/.gitignore+2 −0
packages/catalog-contract/README.md+36 −0
packages/catalog-contract/package.json+56 −0
packages/catalog-contract/src/audio-coverage.ts+271 −0
packages/catalog-contract/src/catalog-health.ts+131 −0
packages/catalog-contract/src/catalog.ts+171 −0
packages/catalog-contract/src/edition.ts+56 −0
packages/catalog-contract/src/reader-context.ts+29 −0
packages/catalog-contract/src/recommend.ts+114 −0
packages/catalog-contract/src/series.ts+298 −0
packages/catalog-contract/tsconfig.json+23 −0
scripts/backend/automation/worker.test.ts+0 −248
scripts/backend/automation/worker.ts+0 −458
scripts/backend/backfill-series.ts+0 −228
scripts/backend/catalog.test.ts+0 −126
scripts/backend/catalog/adapters.ts+0 −106
scripts/backend/catalog/apostasy-adapter.test.ts+0 −127
scripts/backend/catalog/apostasy-adapter.ts+0 −119
scripts/backend/catalog/audio-links.test.ts+0 −30
scripts/backend/catalog/audio-links.ts+0 −39
scripts/backend/catalog/audio-title-aliases.test.ts+0 −133
scripts/backend/catalog/audio-title-aliases.ts+0 −133
scripts/backend/catalog/audio.test.ts+0 −281
scripts/backend/catalog/audio.ts+0 −178
scripts/backend/catalog/audit.test.ts+0 −331
scripts/backend/catalog/audit.ts+0 −259
scripts/backend/catalog/author-adapters.test.ts+0 −30
scripts/backend/catalog/author-adapters.ts+0 −61
scripts/backend/catalog/author-cli.ts+0 −93
scripts/backend/catalog/author-identity.test.ts+0 −32
scripts/backend/catalog/author-identity.ts+0 −35
scripts/backend/catalog/author-series.test.ts+0 −209
scripts/backend/catalog/author-series.ts+0 −211
scripts/backend/catalog/authors.test.ts+0 −460
scripts/backend/catalog/authors.ts+0 −548
scripts/backend/catalog/coverage-store.test.ts+0 −89
scripts/backend/catalog/coverage-store.ts+0 −83
scripts/backend/catalog/coverage.test.ts+0 −321
scripts/backend/catalog/coverage.ts+0 −2
scripts/backend/catalog/curation.ts+0 −25
scripts/backend/catalog/editorial.test.ts+0 −108
scripts/backend/catalog/editorial.ts+0 −102
scripts/backend/catalog/grind.test.ts+0 −315
scripts/backend/catalog/grind.ts+0 −317
scripts/backend/catalog/hardcover-reader.test.ts+0 −291
scripts/backend/catalog/hardcover-reader.ts+0 −270
scripts/backend/catalog/health.test.ts+0 −378
scripts/backend/catalog/health.ts+0 −498
scripts/backend/catalog/identified-audio.test.ts+0 −310
scripts/backend/catalog/identified-audio.ts+0 −124
scripts/backend/catalog/import.test.ts+0 −320
scripts/backend/catalog/import.ts+0 −201
scripts/backend/catalog/index.ts+0 −72
scripts/backend/catalog/inference-durability.test.ts+0 −134
scripts/backend/catalog/inference.ts+0 −190
scripts/backend/catalog/inputs.ts+0 −9
scripts/backend/catalog/mountaindale-adapter.test.ts+0 −127
scripts/backend/catalog/mountaindale-adapter.ts+0 −194
scripts/backend/catalog/paid-jev.test.ts+0 −350
scripts/backend/catalog/paid-jev.ts+0 −201
scripts/backend/catalog/pipeline.test.ts+0 −303
scripts/backend/catalog/pipeline.ts+0 −134
scripts/backend/catalog/publisher-adapters.test.ts+0 −100
scripts/backend/catalog/publisher-adapters.ts+0 −54
scripts/backend/catalog/queue.ts+0 −45
scripts/backend/catalog/reader-cli.ts+0 −148
scripts/backend/catalog/reader-corrections.ts+0 −119
scripts/backend/catalog/reader-evidence.test.ts+0 −1103
scripts/backend/catalog/reader-evidence.ts+0 −884
scripts/backend/catalog/reader-split.test.ts+0 −193
scripts/backend/catalog/reader-split.ts+0 −148
scripts/backend/catalog/run-accounting.test.ts+0 −51
scripts/backend/catalog/sarah-lin-adapter.test.ts+0 −185
scripts/backend/catalog/sarah-lin-adapter.ts+0 −144
scripts/backend/catalog/sources.ts+0 −103
scripts/backend/catalog/the-land-adapter.test.ts+0 −252
scripts/backend/catalog/the-land-adapter.ts+0 −148
scripts/backend/catalog/types.ts+0 −38
scripts/backend/classifiers/authors.ts+0 −14
scripts/backend/classifiers/content.ts+0 −43
scripts/backend/classifiers/subgenre.ts+0 −276
scripts/backend/config.ts+0 −350
scripts/backend/config/audible-searches.json+0 −279
scripts/backend/config/audible-series.json+0 −133
scripts/backend/config/author-content.json+0 −15
scripts/backend/config/catalog-audio-manifests.json+0 −1159
scripts/backend/config/catalog-audio-title-aliases.json+0 −46
scripts/backend/config/catalog-editorial-reviews.json+0 −1664
scripts/backend/config/catalog-seeds.json+0 −1153
scripts/backend/config/content-filters.json+0 −14
scripts/backend/config/content-overrides.json+0 −1
scripts/backend/config/curated-evidence.json+0 −3150
scripts/backend/config/export-filters.json+0 −118
scripts/backend/config/quality.json+0 −9
scripts/backend/config/reader-observation-corrections.json+0 −217
scripts/backend/config/reader-observation-splits.json+0 −291
scripts/backend/config/series-reference.json+0 −226
scripts/backend/config/sources.json+0 −20
scripts/backend/config/subgenres.json+0 −163
scripts/backend/covers/assets.ts+0 −30
scripts/backend/covers/content-cache.test.ts+0 −473
scripts/backend/covers/content-cache.ts+0 −243
scripts/backend/covers/content.ts+0 −35
scripts/backend/covers/enrich.ts+0 −93
scripts/backend/covers/vision-cache.test.ts+0 −346
scripts/backend/covers/vision-cache.ts+0 −206
scripts/backend/covers/vision.test.ts+0 −55
scripts/backend/covers/vision.ts+0 −165
scripts/backend/db.ts+0 −28
scripts/backend/db/index.ts+0 −524
scripts/backend/db/ingestion.test.ts+0 −73
scripts/backend/exporters/.gitkeep+0 −0

No textual changes.

scripts/backend/exporters/catalog.ts+0 −137
scripts/backend/exporters/health.ts+0 −66
scripts/backend/exporters/json.ts+0 −42
scripts/backend/exporters/series.test.ts+0 −88
scripts/backend/exporters/series.ts+0 −147
scripts/backend/fetchers/.gitkeep+0 −0

No textual changes.

scripts/backend/fetchers/audible.ts+0 −491
scripts/backend/fetchers/hardcover.ts+0 −234
scripts/backend/fetchers/royalroad.ts+0 −185
scripts/backend/fetchers/series.ts+0 −101
scripts/backend/fetchers/types.ts+0 −12
scripts/backend/http.test.ts+0 −186
scripts/backend/http.ts+0 −214
scripts/backend/index.ts+0 −199
scripts/backend/jev/assessment.ts+0 −57
scripts/backend/jev/client.test.ts+0 −29
scripts/backend/jev/client.ts+0 −81
scripts/backend/jev/enrich.ts+0 −44
scripts/backend/manual-backfill.ts+0 −169
scripts/backend/matchers/.gitkeep+0 −0

No textual changes.

scripts/backend/matchers/merger.ts+0 −245
scripts/backend/migrate.ts+0 −66
scripts/backend/migrations/.gitkeep+0 −0

No textual changes.

scripts/backend/migrations/001_initial.sql+0 −81
scripts/backend/migrations/002_cursor_results_found.sql+0 −14
scripts/backend/migrations/003_jev_assessments.sql+0 −10
scripts/backend/migrations/004_cover_assessments.sql+0 −24
scripts/backend/migrations/005_source_history.sql+0 −12
scripts/backend/migrations/006_catalog_pipeline.sql+0 −128
scripts/backend/migrations/007_author_profiles.sql+0 −32
scripts/backend/migrations/008_reader_evidence.sql+0 −41
scripts/backend/migrations/009_cover_inference_heads.sql+0 −21
scripts/backend/migrations/010_reader_trait_honesty.sql+0 −36
scripts/backend/migrations/011_quarantine_orphaned_tags.sql+0 −16
scripts/backend/migrations/012_cover_vision_history.sql+0 −54
scripts/backend/migrations/013_quality_index.sql+0 −20
scripts/backend/migrations/014_quality_index_head.sql+0 −10
scripts/backend/pipeline.ts+0 −519
scripts/backend/quality/assessment.test.ts+0 −311
scripts/backend/quality/assessment.ts+0 −248
scripts/backend/quality/benchmark.ts+0 −88
scripts/backend/quality/benchmarks.json+0 −944
scripts/backend/quality/claim-verifier.test.ts+0 −280
scripts/backend/quality/claim-verifier.ts+0 −212
scripts/backend/quality/claims-cli.test.ts+0 −141
scripts/backend/quality/claims-cli.ts+0 −161
scripts/backend/quality/claims.test.ts+0 −252
scripts/backend/quality/claims.ts+0 −247
scripts/backend/quality/cli.ts+0 −116
scripts/backend/quality/evidence.test.ts+0 −151
scripts/backend/quality/evidence.ts+0 −132
scripts/backend/quality/model-eval-fixtures.json+0 −134
scripts/backend/quality/model-eval.ts+0 −267
scripts/backend/quality/pipeline.test.ts+0 −150
scripts/backend/quality/pipeline.ts+0 −216
scripts/backend/quality/scoring.test.ts+0 −302
scripts/backend/quality/scoring.ts+0 −247
scripts/backend/quality/store.ts+0 −58
scripts/backend/quality/types.ts+0 −182
scripts/backend/scrape-series.ts+0 −31
scripts/backend/storage/archive.test.ts+0 −27
scripts/backend/storage/archive.ts+0 −70
scripts/backend/storage/backup.test.ts+0 −31
scripts/backend/storage/backup.ts+0 −63
scripts/backend/storage/history.ts+0 −25
scripts/backend/storage/integrity.test.ts+0 −31
scripts/backend/storage/verify-backup.test.ts+0 −193
scripts/backend/storage/verify-backup.ts+0 −266
src/lib/audio-coverage.ts+2 −271
src/lib/catalog-health.ts+2 −131
src/lib/catalog.ts+2 −171
src/lib/content-notes.ts+4 −3
src/lib/edition.ts+2 −56
src/lib/library-import.test.ts+10 −0
src/lib/reader-context.ts+2 −29
src/lib/recommend.ts+2 −114
src/lib/series.ts+2 −298
tsconfig.backend.json+0 −18