Changelog
All notable changes to japaneseness.com.[1.0.0] — 2026-08-27
Added (JLPT N1 grammar — every JLPT level is now complete)
- N1 grammar published — 165 grammar points (
/grammar-n1/,/{lang}/grammar-n1/× 49,
/grammar-n1/{id}/ × 165, printable worksheets at /worksheets/grammar_n1/{id}/),
each with an English summary, Japanese summary, connection rule and 3 original example
sentences (kanji / kana / English), written in the literary register these patterns require.
- Two native-level review passes machine-diffed all 495 readings against a kana converter and
content/master/n1/grammar_n1.yaml;/api/grammar-n1.json; sitemaps, N2 → N1 navigation,
/jlpt/ (all five levels ✅), /roadmap/, /embed/, homepage JLPT table.
Milestone
All five JLPT levels are complete: 2,805 worksheets — 100 kana, 2,184 kanji (N5–N1) and 521 grammar points (N5–N1), every one of them free, printable and CC BY-SA 4.0. Build: 12,215 files (Cloudflare Pages limit 20,000).[0.23.0] — 2026-08-27
Changed (kana worksheets — recall practice)
- Kana sheets left 33% of the page blank and stopped at copying. Each trace,
[0.22.0] — 2026-08-27
Changed (worksheet density — less paper, more practice)
- Kanji worksheets wasted 52% of every A4 page and gave only 3 empty practice
- New compact set for bulk printing:
/worksheets/{kanji-category}/compact/
- Category pages now offer both (compact first for kanji), and say plainly how
[0.21.0] — 2026-08-27
Added (JLPT N1 kanji — every JLPT kanji is now covered)
- N1 kanji published — 1,231 kanji (
/kanji-n1/,/{lang}/kanji-n1/× 49,
/kanji-n1/{id}/ × 1,231, printable worksheets at /worksheets/kanji_n1/{id}/),
generated with build_kanji_level.py --level 1 (kanji-data + KanjiVG, 0 SVG failures).
- Every N1 kanji has a Japanese gloss and 2 example words (word / reading / English).
- Kanji coverage is now complete: 2,184 kanji across N5–N1, each with stroke order,
/api/kanji-n1.json; sitemaps, N2 → N1 navigation,/jlpt/,/roadmap/,/embed/
- Site total: 2,640 worksheets. Build: 11,594 files (Cloudflare Pages limit 20,000).
[0.20.0] — 2026-08-27
Added (JLPT N2 grammar — N2 is now complete)
- N2 grammar published — 150 grammar points (
/grammar-n2/,/{lang}/grammar-n2/× 49,
/grammar-n2/{id}/ × 150, printable worksheets at /worksheets/grammar_n2/{id}/),
each with an English summary, Japanese summary, connection rule and 3 original example
sentences (kanji / kana / English). Two native-level review passes fixed 10 items
(ものだから with a request clause, ではあるまいし and なくてはならない connection rules,
こそ formation, てたまらない register, dropped particle in a kana reading, …).
content/master/n2/grammar_n2.yamlmaster;/api/grammar-n2.jsonendpoint; sitemaps,
/jlpt/ (N2 ✅ 361 kanji + 150 grammar), /roadmap/, /embed/,
and the homepage JLPT table updated.
- Site total: 1,409 worksheets — 100 kana, 953 kanji (N5–N2), 356 grammar points (N5–N2).
[0.19.0] — 2026-08-26
Added (SEO content)
- Six new pages targeting the highest-volume beginner queries, all interlinked
/hiragana-chart/ and /katakana-chart/
(full gojūon + dakuten + yōon tables with romaji, generated from the kana data,
each row linked to its tracing sheet), /how-to-learn-hiragana/,
/how-to-learn-katakana/, /japanese-stroke-order/ and the pillar
/how-to-learn-japanese/ — ~6,400 words total, each with Article/LearningResource
+ BreadcrumbList JSON-LD.
- Homepage: "Start here" guide block, a JLPT level table linking to all seven
/faq/is data-driven and emits FAQPage JSON-LD for its 12 questions.- Guides linked from the header nav, mobile menu and footer.
Fixed
- Language picker linked to 404s: on en-only pages it offered 49 locale URLs
localized now defaults to
false and is set explicitly on the 20 pages that really exist in every locale;
elsewhere the picker points at the locale home. Site-wide internal link check
now reports 0 broken links.
- Header nav overflowed between 768–1024px — moved the desktop/mobile breakpoint to
lg. - Stale copy across the site ("200 worksheets", "Phase 1 covers N5 only",
[0.18.1] — 2026-08-26
Fixed / Changed (SEO)
- hreflang no longer points at 404s: the ~1,900 en-only detail pages
localized={false} prop suppresses them (canonical kept).
- sitemap-pages.xml is now generated (was a stale hand-rolled file):
- Unique titles/descriptions for the 49-locale category index pages
- Page-level JSON-LD (LearningResource + BreadcrumbList) on all 1,159
- RTL now applied for fa/he/ur (previously only ar).
- Removed dead Cloudflare Analytics beacon (unconfigured token, render cost).
- Google Fonts preconnect on printable worksheet pages.
[0.18.0] — 2026-08-24
Added (JLPT N2 kanji)
- N2 kanji published — 361 kanji (
/kanji-n2/,/{lang}/kanji-n2/× 49,/kanji-n2/{id}/× 361,
/worksheets/kanji_n2/{id}/) generated with
build_kanji_level.py --level 2 (kanji-data + KanjiVG), excluding kanji already in N5–N3.
- Every N2 kanji has a Japanese gloss and 2 reviewed example words (word / reading / English).
content/master/n2/kanji_n2.yamlmaster;/api/kanji-n2.jsonendpoint; sitemap, N3 → N2
/jlpt/ (N2 kanji 361/361), /roadmap/, /embed/ updated.
- Build: 5,890 files (Cloudflare Pages limit 20,000).
Known gaps
- N2 grammar not started.
[0.17.0] — 2026-08-24
Added (JLPT N3 kanji)
- N3 kanji published — 354 kanji (
/kanji-n3/,/{lang}/kanji-n3/× 49,/kanji-n3/{id}/× 354)
/worksheets/kanji_n3/{id}/.
content/scripts/build_kanji_level.py— generic N3/N2/N1 builder from
content/master/n3/kanji_n3.yamlmaster file (N4-compatible schema)./api/kanji-n3.jsonpublic endpoint; N3 detail pages added to sitemap.- N4 → N3 navigation on category pages;
/jlpt/,/roadmap/,/embed/updated.
Added (JLPT N3 grammar)
- N3 grammar published — 136 grammar points (
/grammar-n3/,/{lang}/grammar-n3/× 49,
/grammar-n3/{id}/ × 136, printable worksheets at /worksheets/grammar_n3/{id}/).
Each point has an English summary, Japanese summary, formation rule and
3 original example sentences (kanji / kana / English). Content reviewed for
grammar, readings and translations.
content/master/n3/grammar_n3.yamlmaster;/api/grammar-n3.jsonendpoint.- Grammar detail pages and printable worksheets now render
formationand
examples when present in the manifest (N5/N4 unchanged until backfilled).
Changed (N5/N4 grammar)
- All 20 N5 + 50 N4 grammar points now have a Japanese summary, formation rule and
/api/manifest.json. Masters updated (grammar_n5.yaml, n4/grammar_n4.yaml).
Added (kanji example words)
- All 354 N3 kanji now have a Japanese gloss (
meaning_ja) and 2 example words
- Example words from the N5/N4 masters (80 + 158 kanji) are now in the manifest
- Fixed N4 前 / 後 which had empty readings, meanings and words.
[0.16.0] — 2026-07-12
Changed (PR1 / 案A: single-URL worksheets)
- Worksheets now live at a single URL per sheet (
/worksheets/{cat}/{id}/, en canonical).
?lang= parameter, localStorage, or navigator.language (RTL supported for ar/fa/he/ur).
- New
/worksheet-i18n.jsonendpoint serves the 50-locale instruction dictionary. - Removed per-locale worksheet routes (
/{lang}/worksheets/) — build shrinks
- Category pages, kanji/grammar detail pages, and the 50-language UI keep their
DRAFT_LOCALESpage-generation split is obsolete (all 50 locales now share the
[0.15.0] — 2026-07-03
Added
/kanji-n4/{id}/ × 158 with KanjiVG stroke-order SVGs
(downloaded via content/scripts/fetch_kanjivg_n4.py, CC BY-SA 3.0)
/grammar-n4/{id}/ × 50
/api/kanji-n4.json — public JSON endpoint for the 158 N4 kanji
Fixed
- Deployments were failing silently: Cloudflare Pages 20,000-file limit exceeded
[0.14.0] — 2026-07-03
Added
/grammar-n4/ category pages (en + 49 langs),
printable sheets at /worksheets/grammar_n4/{id}/ + /worksheets/grammar_n4/all/
grammar_n4 added to manifest (from content/master/n4/grammar_n4.yaml) and worksheet sitemapBuild
- 21,216 HTML pages
[0.13.0] — 2026-07-03
Added
/kanji-n4/ category pages (en + 49 langs),
printable sheets at /worksheets/kanji_n4/{id}/ + /worksheets/kanji_n4/all/
machine_draft, native review welcome.
All 50 languages now have localized UI.
SEO
rel=canonicalon every page (BaseLayout + PrintLayout)- hreflang × 50 + x-default and meta description on worksheet pages
- Sitemap restructured:
sitemap.xmlis now an index →
sitemap-pages.xml (site pages) + sitemap-worksheets.xml (18,250 worksheet URLs)
- Pagefind indexing scoped to
(data-pagefind-body)
CI
- GitHub Actions workflows enabled (
.github/workflows/) — build-pdfs +
Build
- 18,616 HTML pages
[0.12.0] — 2026-05-11 (later)
Added
Docs
- BOOTSTRAP_LOG.md fully refreshed: page list, i18n breakdown, remaining tasks
- CLAUDE.md Phase 1 progress section overhauled
Build
- 366 HTML pages + 3 JSON endpoints
[0.11.0] — 2026-05-11 (later)
Added
Changed
- Mobile nav now includes Roadmap, JLPT, Languages
- Footer extended: Roadmap · JLPT · Press · Privacy · Stats links
- LOCALE_LABELS regenerated to use native names for all 50 langs
Build
- 365 HTML pages (was 362 — adds /roadmap/, /jlpt/, /press-kit/)
[0.10.0] — 2026-05-11 (later)
Added
Build
- 362 HTML pages
- 100 detail-page OG images (80 kanji + 20 grammar)
[0.9.0] — 2026-05-11 (later)
Added
Changed
- CategoryList li hover now adds background tint (visual feedback)
- Kanji detail pages use their unique OG image instead of the generic one
Build
- 362 HTML pages (was 360 — added /stats/ + /privacy/)
- 80 new kanji OG PNGs (~22KB each, ~1.8MB total)
[0.8.0] — 2026-05-11 (later)
Added
<800px viewport shows ☰ toggle, full drawer
with all nav links (Hiragana, Katakana, Kanji, Grammar, Teachers, Learners,
Resources, Languages, About, Contribute, Search)
Changed
pdfs_available: false while R2 isn't wired up
- Category pages show "📅 PDF coming soon" instead of broken 404 links
- Kanji and grammar detail pages show a disabled "Coming soon" pill
- "Download all (ZIP)" buttons are conditionally rendered
- When R2 is wired up and PDFs uploaded, flipping to true re-enables
all download UIs everywhere
Strategy
- Going honest: showing dead PDF links would erode trust. "Coming soon"
[0.7.0] — 2026-05-11 (latest)
Added
role="main", role="contentinfo", aria-label on nav and language picker
- :focus-visible ring (vermilion 3px outline) on all interactive elements
Changed
- og-image.svg → og-image.png (PNG works on all social platforms)
Build
- 360 HTML pages (was 359 — added /changelog/)
[0.6.0] — 2026-05-11 (later)
Added
/kanji/{kanji_id}/ (e.g. /kanji/kanji_n5_001/)
- Large stroke-order SVG, big kanji glyph, on/kun readings table
- Meaning in EN + JA, PDF download button, Prev/Next nav
- SEO-optimized title/description per kanji
/grammar/{grammar_id}/
- Topic + summary + JLPT level + PDF download
- Prev/Next nav between topics
- Kanji and grammar cards on category pages now link to detail pages
- 4 more hand-translated UI languages (Hindi, Hebrew, Persian, Finnish)
content/scripts/translate_ui.py— local script to Claude-translate
Changed
- Plausible Analytics replaced with
Build
- 359 HTML pages (was 259) — adds 80 kanji + 20 grammar detail pages
- Sitemap needs regeneration for new pages (next push)
[0.5.0] — 2026-05-11
Major: 50-language UI rollout
- All 50 Tier 1 languages now accessible at
/{code}/URLs
Three-tier status system replacing the lock icon
- ✅
- ⚙️
Added
- 50 i18n JSON files in
site/src/i18n/(gen_50lang_i18n.pygenerator) RTL_LOCALESset for Arabic, Hebrew, Urdu, Persian —dir="rtl"
for these locales
HREFLANG_MAPwith proper BCP47 codes per locale- 50-locale sitemap (~257 URLs)
- /languages/ rewritten with 3-tier badge system + region grouping
- Header language picker now scrollable (max-height + overflow)
Strategy
- We acknowledged that locking 46 languages behind 🔒 was overcautious.
- Worksheet content (PDFs) still strict 4-language scope until native
[0.4.0] — 2026-05-03 (later)
Added
- 50-language Tier 1 roadmap (site/src/data/languages.json)
- /languages/ page: full grid of 50 languages grouped by region
- Language picker (header dropdown) now shows '🔒 + 46 more languages →' link
- Homepage now teases 50-language roadmap
- Languages link added to top nav
- /languages/ added to sitemap.xml
Strategy
- Phase 1 stays focused on 3 'live' languages — won't ship machine-translated
- Roadmap signals ambition without overpromising
- Native reviewer commitment is the explicit prioritization signal
[0.3.0] — 2026-05-03 (later)
Added
- 80 KanjiVG SVG files for all N5 kanji (CC BY-SA 3.0, attributed)
- Kanji cards on the site now show stroke order SVG inline (lazy-loaded)
- /donate/ — honest 'we want time, not money' page with Phase 2 plans
- /sitemap.xml — hand-rolled (28 URLs, since @astrojs/sitemap incompatible)
- robots.txt now references sitemap
- Plausible Analytics script enabled (needs account at plausible.io)
- JSON-LD structured data (EducationalOrganization) in BaseLayout
- Japanese explanations (meaning_ja_default) for all 80 N5 kanji
- N4 master skeletons (kanji_n4.yaml + grammar_n4.yaml) for Phase 2
- /learners/ — 30-day starter path for self-learners
- /resources/ — curated free Japanese-learning resources
- /faq/ — common questions answered
- README.md, CONTRIBUTING.md as proper repo entry points
[0.2.0] — 2026-05-03
Added
- 🌐 Site live at https://japaneseness.com (Cloudflare Pages, custom domain, SSL)
- 4 languages: English, Bahasa Indonesia, Yorùbá, 日本語
- 200 worksheets per language defined: 50 hiragana + 50 katakana + 80 N5 kanji + 20 N5 grammar
- 80 N5 kanji with 163 example words + Japanese explanations
- 6 XeLaTeX templates (base, hiragana_trace/recognize/write, kanji_sheet, grammar_sheet)
- New site pages: /teachers/, /learners/, /resources/, /faq/, /search/, /contribute/, /about/
- Pagefind full-text search across 4 languages (~330 indexed words)
- Cloudflare Pages auto-deploy from GitHub main branch
- public/_headers (security + cache rules), _redirects (www → apex)
- og-image.svg (1200×630 social card)
Changed
- Site converted to monorepo (
site/+content/) undertoriiyu/japaneseness - Manifest now lists all 200 sheets per category with rich per-sheet metadata
- CategoryList component groups by trace/recognize/write for kana, shows readings for kanji
- Removed Astro i18n fallback (was generating 60+ erroneous URL paths)
Known issues
- PDF download links 404 (R2 bucket on wrong account, full pipeline run pending)
- Sitemap not generated (@astrojs/sitemap incompatible with current Astro 4.16 + i18n combo)
- GitHub Actions workflows live in
_pending_workflows/(PAT lackedworkflowscope)
[0.1.0] — 2026-04-26
Added
- Initial scaffold (CLAUDE.md project brief, site/, content/, R2 + Pages plan)
- 5 starter hiragana sheets (あ-row only)
- bootstrap.sh + cf_bootstrap.sh helper scripts
Live version: github.com/toriiyu/japaneseness/blob/main/CHANGELOG.md