◀ Channel guide
CH 03CH ▶
NEW CHAPTER!!

Episode 1 · The Drop

MANHWA
UPDATES

A Discord bot that watches the reading sites and messages you the moment a series you follow posts a new chapter.

1

Follow a series. Wait for the drop.

Pick a list for each series. Reading and Favorites send you a message. Plan to Read stays quiet. A new chapter lands every few seconds, or hit the lightning button to force one.

Your shelf

    MUManhwa UpdatesAPP

    Illustrative. The series, chapters and timing are invented and run in your browser. The embed layout, the list rules, the ✓ Read button and the ✅ reaction match the real bot.

    2

    How a chapter reaches you

    1. 1

      The sites post

      The bot reads each site's own latest-chapters feed every 10 minutes. It never asks a third-party database.

    2. 2

      It matches your list

      A new chapter is matched to a series someone follows. Reading and Favorites send a message. Completed does too, in case a side story drops. The other lists stay quiet.

    3. 3

      PING

      You get a DM, or a post in the server's updates channel with the ping role tagged. Tap ✓ Read, or react ✅, to log that you caught up.

    3

    Pages from the real thing

    ART PENDING
    The DM alert: cover, new chapter, Read and ✓ Read buttons
    ART PENDING
    A server post with the ping role and the ✅ reaction
    ART PENDING
    /search result card with the list buttons
    4

    Why I built it

    The other bot kept missing chapters.

    I built this for a friend who reads a lot of manhwa. They had tried an existing Discord bot for tracking releases, and it missed the chapters they actually cared about.

    That bot follows a general release database. Their chapters appear on specific reading sites, so I pointed the new bot at those sites directly. It checks those feeds, matches new chapters to their lists and sends them a message.

    It has been a small, steady project since. It runs on its own server, retries when a site blips, and my friend chose the rules for which lists send alerts.

    How it's builtstack · architecture · hard problems
    TypeScriptNode 24discord.jsSQLitefast-xml-parsernode-html-parserDockerCaddyBiomeGitHub ActionsHetzner VPS

    Architecture

    • Each reading site sits behind one adapter interface: search, get a title, read the latest feed, run a health check. Adding a site touches nothing above its adapter.
    • Node 24 runs the TypeScript directly, so there is no build step.
    • SQLite in WAL mode holds users, lists, progress and an outbox of pending messages. Failed sends retry, and blocked DMs requeue once DMs work again.
    • A scheduler runs the feed poll every 10 minutes, a per-series sweep every 30 minutes, and a site health check every 6 hours.
    • Every push runs lint, typecheck, tests and a Docker build on GitHub Actions. If those pass, the push to main deploys to the server, with a database snapshot taken first.

    Problems worth mentioning

    • Sites that fight bots. Two candidate sites throw a human-check at datacenter IPs. The bot does not try to beat it. It reads the one site that publishes RSS and a second that serves plain HTML, with no headless browser.
    • One series, several sites. The same title can live on both sites with different spellings, and one chapter can have several uploads. The bot matches series by name and keys each chapter by language and number, so you get one alert.
    • Missing from the feed. One site's latest feed leaves out adult titles. A slower per-series sweep covers them, so they still alert.
    • Sites blip most days. The bot retries, and only three failed checks in a row message the admin. A site it cannot reach counts as an outage, not as "the site changed."

    4,641 lines of TypeScript · 43 source files · 85 tests · 53 commits · private repo

    Built for a friend's server

    Manhwa Updates runs in one private community, so there is no public invite and nothing to link out to. This page is the showcase.

    TO BE CONTINUED...

    Next channel ▶