Syllabus: Series Release Tracker
If you’re a reading enthusiast like me, you know the pain: finding out your favorite series dropped a new book three months ago because you forgot to check Audible. Never again.
Syllabus is my solution—a self-hosted Go web app that scrapes Audible and Amazon to track series release dates. Multi-threaded scraping, SQLite persistence, real-time updates via SSE, and iCal exports.
Architecture
The core is a multi-threaded web scraper with 4 concurrent workers that pull series metadata from Audible and Amazon. I’m using SQLite for persistence (stored at ./data/syllabus.db) with automatic schema migrations, so upgrading is painless.
The scraper is incremental—it only updates stale data based on configurable refresh intervals (2-10 hours). Rate limiting and error handling are built in to avoid hammering the source sites.

Technical Stack
Backend:
- Go with multi-threaded scraping (4 workers)
- SQLite with automatic migrations
- Background job queue for scheduled refreshes
- User authentication with admin/user roles
API:
GET /api/series- Returns series metadata as JSONPOST /refresh- Triggers manual data refreshGET /calendar.ics- Exports release dates to iCal formatPOST /api/auto-refresh- Update refresh intervals
Frontend:
- Server-Sent Events for real-time updates (no polling)
- Responsive UI with tabbed and unified view modes
- Live progress indicators during scraping
Configuration
Everything is YAML-based with environment variable overrides:
refresh_interval: 6h
worker_threads: 4
server_port: 8080
log_level: info
The app watches the config file and reloads on changes—no restart needed.
Database Schema
SQLite keeps it simple:
seriestable: metadata, URLs, last scraped timestampbookstable: titles, release dates, Audible/Amazon linksuserstable: authentication, rolesjobstable: refresh queue and history
All timestamps are UTC. Release dates are parsed from both Audible and Amazon, with fallback logic when one source is missing data.
Deployment
Clone the repo, edit your config.yaml, and spin it up:
docker-compose up -d
Default login is admin/admin (please change it immediately).
Check it out on GitHub if you want to run it yourself.
What’s Next
I’ve been thinking about adding:
- Push notifications for new releases
- Better series recommendation based on what you’re tracking
- Support for Kobo and other audiobook platforms
But for now, it does exactly what I need: tells me when the next book drops so I don’t miss it.