iamnbutler/shelfgoblinPublic

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

Create LitRPG Hub with cached discovery and cover classification

IAiamnbutler authored
4b10f86Patch
Parent2cc4801
86 files changed+2838-2999Truncated
StackedSplit
.env.example+12 −0
.github/workflows/ci.yml+3 −1
.github/workflows/deploy.yml+4 −22
.gitignore+2 −0
CLAUDE.md+22 −29
README.md+93 −19
bun.lock+0 −374
docs/catalog-strategy.md+75 −0
docs/jev-discovery.md+35 −0
package-lock.json+301 −3
package.json+15 −9
scripts/backend/catalog.test.ts+117 −0
scripts/backend/classifiers/content.ts+43 −0
scripts/backend/classifiers/subgenre.ts+2 −4
scripts/backend/config/audible-series.json+133 −0
scripts/backend/config/content-overrides.json+1 −0
scripts/backend/config/subgenres.json+161 −56
scripts/backend/covers/assets.ts+30 −0
scripts/backend/covers/content.ts+35 −0
scripts/backend/covers/enrich.ts+90 −0
scripts/backend/covers/vision.test.ts+55 −0
scripts/backend/covers/vision.ts+129 −0
scripts/backend/db.ts+3 −3
scripts/backend/db/index.ts+50 −25
scripts/backend/db/ingestion.test.ts+73 −0
scripts/backend/exporters/catalog.ts+109 −0
scripts/backend/exporters/json.ts+42 −525
scripts/backend/fetchers/audible.ts+43 −35
scripts/backend/fetchers/hardcover.ts+1 −1
scripts/backend/fetchers/series.ts+101 −0
scripts/backend/jev/assessment.ts+57 −0
scripts/backend/jev/client.test.ts+29 −0
scripts/backend/jev/client.ts+66 −0
scripts/backend/jev/enrich.ts+44 −0
scripts/backend/matchers/merger.ts+2 −2
scripts/backend/migrations/003_jev_assessments.sql+10 −0
scripts/backend/migrations/004_cover_assessments.sql+24 −0
scripts/backend/migrations/005_source_history.sql+12 −0
scripts/backend/pipeline.ts+31 −9
scripts/backend/scrape-series.ts+31 −215
scripts/backend/storage/backup.test.ts+31 −0
scripts/backend/storage/backup.ts+62 −0
scripts/backend/storage/history.ts+25 −0
src/app.html+1 −5
src/lib/api.ts+0 −80
src/lib/catalog.ts+194 −0
src/lib/components/BookCard.svelte+0 −319
src/lib/components/BookDetail.svelte+41 −0
src/lib/components/BookTile.svelte+53 −0
src/lib/components/BrowseModal.svelte+0 −207
src/lib/components/FilterPopover.svelte+0 −149
src/lib/components/GenreFilter.svelte+0 −88
src/lib/components/Icon.svelte+24 −0
src/lib/components/SeasonNav.svelte+0 −120
src/lib/library.ts+24 −0
src/lib/styles.css+58 −0
src/lib/types.ts+0 −73
src/routes/+layout.svelte+1 −94
src/routes/+page.svelte+211 −505
static/data/1999.json+1 −1
static/data/2000.json+1 −1
static/data/2001.json+1 −1
static/data/2002.json+1 −1
static/data/2003.json+1 −1
static/data/2004.json+1 −1
static/data/2005.json+1 −1
static/data/2006.json+1 −1
static/data/2007.json+1 −1
static/data/2008.json+1 −1
static/data/2009.json+1 −1
static/data/2010.json+1 −1
static/data/2011.json+1 −1
static/data/2012.json+1 −1
static/data/2013.json+1 −1
static/data/2014.json+1 −1
static/data/2015.json+1 −1
static/data/2016.json+1 −1
static/data/2017.json+1 −1
static/data/2018.json+1 −1
static/data/2019.json+1 −1
static/data/2020.json+1 −1
static/data/2021.json+1 −1
static/data/2022.json+1 −1
static/data/2023.json+1 −1
static/data/2024.json+1 −1
static/data/2025.json+1 −1