feat: add Anime Anyway plugin (english) - #2421
Merged
rajarsheechatterjee merged 2 commits intoAug 16, 2026
Merged
Conversation
Reads the site's embedded Next.js page data (__NEXT_DATA__) instead of scraping rendered HTML: volume/chapter lists and chapter bodies (Sanity Portable Text) come straight from the JSON the site itself was built from. Volumes titled "Year N Vol. M" are grouped into one novel per year since no single page represents an entire year; everything else is its own standalone novel.
Each Classroom of the Elite volume is published as its own distinct book, so list them separately instead of merging same-year volumes into one novel. Drops the grouping/synthetic-path machinery entirely -- every novel path is now just the site's own real volkeyword.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds a plugin for Anime Anyway, a fan-translation site publishing continuation volumes of Classroom of the Elite: Year 3 plus an original collab web novel, High School Syndrome. Each volume is exposed as its own novel (matching how the light novels are actually published — each volume is a distinct book), currently 4:
Year 3 Vol. 2/3/4andHigh School Syndrome.__NEXT_DATA__) instead of scraping rendered HTML — chapter lists and chapter bodies (Sanity Portable Text) come straight from the JSON the site was built from, with no dependency on the Next.js build id so it keeps working across the site's redeploys.Year N Vol. Mvolume titles get aClassroom of the Elite:display prefix (display-only; paths stay the site's own real slugs) since the site's own titles don't name the franchise.Test plan
tsc --noEmit,eslint,prettier --checkall cleannpm run check:plugin -- plugins/english/animeAnyway.ts— all 4 live-check steps passpopularNovelsreturns all 4 volumes;searchNovels('classroom')returns all 3 COTE volumes,searchNovels('syndrome')returns just the collab;parseNovelreturns each volume's own chapters only, in order; chapter rendering produces correct<p>/<strong>/<em>/<hr>/<img>HTML with workingcdn.sanity.ioimage URLs; missing novel/chapter paths degrade gracefully instead of throwingnpm run dev) and on a real device via LNReader's mobile app (custom repository pointed at a local build, per the README's "From Localhost" testing method)