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.

Syllabus Dashboard

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 JSON
  • POST /refresh - Triggers manual data refresh
  • GET /calendar.ics - Exports release dates to iCal format
  • POST /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:

  • series table: metadata, URLs, last scraped timestamp
  • books table: titles, release dates, Audible/Amazon links
  • users table: authentication, roles
  • jobs table: 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.