Changelog

All notable changes to japaneseness.com.

[1.0.0] — 2026-08-27

Added (JLPT N1 grammar — every JLPT level is now complete)

/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. corrected 10 items — 〜ずにはおかない's doubled ない, 〜にしたところで taking a noun (not V-た), 〜こそすれ with する-nouns, 〜に寄せて needing an offered message, 〜ずして replaced with the set phrase 期せずして, and a register clash in 〜ときては. /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)

write and recognize sheet now ends with a recall block: two rows of boxes prompted by romaji (write the kana for the sound, from memory) — the step that actually proves you know the character. Blank space: 33% → 11% (recognize sheets 1%). No extra sheets of paper.

[0.22.0] — 2026-08-27

Changed (worksheet density — less paper, more practice)

boxes. Each sheet now has 20 boxes (2 traced + 18 blank) plus a word-writing line for each example word — blank space down to 5%, and the sheet finally practises the vocabulary it teaches. puts 8 kanji per page (stroke order, readings, example words, 5 boxes each). Printing a whole level drops from one sheet per kanji to one eighth: N5 80 → 10 pages, N4 158 → 20, N3 354 → 45, N2 361 → 46, N1 1,231 → 154. many sheets of paper each option costs. Compact pages are in the sitemap.

[0.21.0] — 2026-08-27

Added (JLPT N1 kanji — every JLPT kanji is now covered)

/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). Four native-level review passes fixed 45 entries — invented or ad-hoc compounds (妊娠初期, 桐箪笥, 収穫量), disputed readings (較差, 豊稔), missing rendaku (鮎釣り → あゆづり), circular glosses, and a loaded wartime slogan replaced. One reviewer machine-checked every word against JMdict/JMnedict via jamdict. readings, a Japanese gloss and example words. and the homepage JLPT table updated.

[0.20.0] — 2026-08-27

Added (JLPT N2 grammar — N2 is now complete)

/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, …). N3 ↔ N2 grammar navigation, /jlpt/ (N2 ✅ 361 kanji + 150 grammar), /roadmap/, /embed/, and the homepage JLPT table updated. Build: 6,507 files (Cloudflare Pages limit 20,000).

[0.19.0] — 2026-08-26

Added (SEO content)

with the worksheet sections: /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. kanji/grammar hubs (N5–N2), and counts now derived from the manifest so they can never go stale again.

Fixed

that do not exist (~1,200 internal links to 404s). 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. "800 PDFs in the pipeline"): now 1,259 worksheets, JLPT N5–N2, with /stats/ and the homepage computing the numbers from the manifest.

[0.18.1] — 2026-08-26

Fixed / Changed (SEO)

(kanji*/{id}, grammar*/{id}) emitted 50 hreflang alternates to locale URLs that do not exist. New localized={false} prop suppresses them (canonical kept). 17 static pages + 49 locales × 10 localized index pages = 507 URLs, including /kanji-n2/. en category indexes moved into sitemap-worksheets.xml. (were all falling back to the site default). kanji and grammar detail pages.

[0.18.0] — 2026-08-24

Added (JLPT N2 kanji)

printable worksheets at /worksheets/kanji_n2/{id}/) generated with build_kanji_level.py --level 2 (kanji-data + KanjiVG), excluding kanji already in N5–N3. navigation, /jlpt/ (N2 kanji 361/361), /roadmap/, /embed/ updated.

Known gaps

[0.17.0] — 2026-08-24

Added (JLPT N3 kanji)

with KanjiVG stroke-order SVGs and printable worksheets at /worksheets/kanji_n3/{id}/. davidluzgouveia/kanji-data (KANJIDIC2) + KanjiVG. Skips kanji already published at a lower level, so N3 = 367 candidates − 13 already in N4 = 354.

Added (JLPT N3 grammar)

/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. examples when present in the manifest (N5/N4 unchanged until backfilled).

Changed (N5/N4 grammar)

3 full example sentences (kanji / kana / English) — previously N5 had untranslated kana snippets and N4 only word-level hints. Shown on detail pages, printable worksheets and /api/manifest.json. Masters updated (grammar_n5.yaml, n4/grammar_n4.yaml).

Added (kanji example words)

(word / reading / English), reviewed for readings and level. Kun readings trimmed to the 4 most useful, KANJIDIC dot notation → hyphen (こた-える). and shown on kanji detail pages and printable worksheets for all three levels.

[0.16.0] — 2026-07-12

Changed (PR1 / 案A: single-URL worksheets)

Instructions switch between all 50 languages client-side via a language selector, ?lang= parameter, localStorage, or navigator.language (RTL supported for ar/fa/he/ur). 13,558 → 1,089 pages (dist 13,917 → 1,449 files). Headroom for N3/N2/N1 and vocabulary within the Cloudflare Pages 20,000-file free limit.
  • Category pages, kanji/grammar detail pages, and the 50-language UI keep their
per-locale URLs (unchanged).
  • DRAFT_LOCALES page-generation split is obsolete (all 50 locales now share the
same worksheet pages via the client switcher).

[0.15.0] — 2026-07-03

Added

(downloaded via content/scripts/fetch_kanjivg_n4.py, CC BY-SA 3.0)

Fixed

  • Deployments were failing silently: Cloudflare Pages 20,000-file limit exceeded
(21,419 files after N4 grammar). Draft-UI locales (19) now share the root (en) printable sheets instead of per-locale pages → 13,916 files.

[0.14.0] — 2026-07-03

Added

printable sheets at /worksheets/grammar_n4/{id}/ + /worksheets/grammar_n4/all/

Build

  • 21,216 HTML pages

[0.13.0] — 2026-07-03

Added

printable sheets at /worksheets/kanji_n4/{id}/ + /worksheets/kanji_n4/all/ my, am, ha, ig, zu, su, qu, gn, haw) — status machine_draft, native review welcome. All 50 languages now have localized UI.

SEO

  • rel=canonical on every page (BaseLayout + PrintLayout)
  • hreflang × 50 + x-default and meta description on worksheet pages
  • Sitemap restructured: sitemap.xml is 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 +
manual-fallback Pages deploy (auto-deploy stays on Cloudflare Pages Git integration)

Build

  • 18,616 HTML pages

[0.12.0] — 2026-05-11 (later)

Added

- /api/manifest.json — full sheet catalog (all categories) - /api/kanji.json — 80 N5 kanji with readings + SVG paths - /api/languages.json — Tier 1 50 languages metadata - CORS open, cacheable, no auth needed - Hotlink stable URLs - Iframe detail pages - JSON API for dynamic use - Stable URL patterns documented (/kanji/{id}/, /grammar/{id}/, /kanji_svg/{code}.svg, /og/kanji/{id}.png) - Deterministic daily rotation (UTC day-of-year mod 80) - SVG stroke order, EN+JA meanings, on/kun readings, link to detail - No JS fetch — fully static, ships under 5KB extra

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

Each phase: status (in-progress/planned/future/vision), done list, remaining list Shows kanji + grammar coverage per level (N5 done, N4 prepped, N3-N1 future) long-form description, quotable stats, contact based on UTC day) with SVG stroke order, readings, link to detail (was 'BN', 'UR', etc. — now 'বাংলা', 'اردو', 'மிற்', 'மலையாளம்', 'Kiswahili', 'Igbo', 'Runa Simi', 'ʻŌlelo Hawaiʻi', etc.)

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

readings, English meanings, and 2 example words each (was 30/158 → 80/158 → now 156/158, near-complete) たら/ば/と/なら, modal expressions, comparison より/ほうが, time relationships とき/まえに/あとで, concession のに/けれども, etc.) - Each /grammar/grammar_n5_NNN/ now has unique social card - 9 specific actionable tasks across Translation/Outreach/Content/Code - Each with badge (⭐ count), time estimate, difficulty - Direct links to the relevant GitHub files/pages

Build

  • 362 HTML pages
  • 100 detail-page OG images (80 kanji + 20 grammar)

[0.9.0] — 2026-05-11 (later)

Added

- Each kanji detail page (/kanji/kanji_n5_NNN/) has a unique social card - Composited from KanjiVG stroke-order SVG + meaning text + JLPT badge - Sharing /kanji/kanji_n5_001/ on Slack now shows 一 with stroke order - 200 worksheet definitions, 800 PDFs in pipeline, 50 languages, 80 kanji SVGs, 362 HTML pages, etc. - Progress bars for language coverage (4/50 full, 27/50 UI translated) - Per-category sheet count table no fingerprinting; Cloudflare Web Analytics is the only beacon (anonymous, aggregated). Important for GDPR-conscious users in EU/UK regions. 以, 思, 家, 世, 多, 正, 安, 院, 心, 界, 教, 文, 元, 重, 近, 考, 画, 海, 売, 知, 道, 集, 別, 物, 使, 品, 計, 死, 特, 私, 始, 朝, 運, 終, 台, 広, 住, 真, 有, 口, 少) - N4 kanji with data: 80/158 (was 30/158)

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

with all nav links (Hiragana, Katakana, Kanji, Grammar, Teachers, Learners, Resources, Languages, About, Contribute, Search) Each social card now matches the page topic (Hiragana shows あいうえお, Kanji shows 日 一 人 大, etc.) /languages/, /teachers/ 地, 業, 方, 新, 場, 員, 立, 開, 手, 力, 問, 代, 明, 動, 京, 目, 通, 言, 理, 体, 田, 主, 題). Remaining 128 N4 kanji are Phase 2.

Changed

- manifest.json has 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"
with a transparent banner explaining the build pipeline is better than silent 404s.

[0.7.0] — 2026-05-11 (latest)

Added

- Twitter / Slack / LinkedIn social cards now render properly icon-192, icon-512 - Skip-link for keyboard users (Tab on any page → "Skip to content") - 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

- 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 - 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)
→ ui-ready languages: 27 (was 23) → ui-pending languages: 19 (was 23)
  • content/scripts/translate_ui.py — local script to Claude-translate
remaining 19 ui-pending UI files when run by the user with their key

Changed

(free, privacy-friendly, no cookies, no script bloat). User just needs to paste their CF Web Analytics token into BaseLayout (token placeholder in place).

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
(Mandarin, Hindi, Spanish, French, Arabic, Bengali, Russian, Portuguese, Urdu, German, Swahili, Marathi, Telugu, Turkish, Tamil, Vietnamese, Korean, Italian, Persian, Polish, Ukrainian, Punjabi, Malayalam, Hausa, Igbo, Burmese, Thai, Gujarati, Romanian, Dutch, Kannada, Sundanese, Tagalog, Malay, Hebrew, Greek, Czech, Hungarian, Swedish, Finnish, Norwegian, Amharic, Zulu, Quechua, Guarani, Hawaiian — plus existing en/id/yo/ja)

Three-tier status system replacing the lock icon

English/Indonesian/Yoruba/Japanese fallback

Added

on for these locales

Strategy

Better: ship the UI in all 50, be transparent about what's hand-translated vs machine-pending, let learners browse + invite review contributions. reviewers commit.

[0.4.0] — 2026-05-03 (later)

Added

- 4 live (en, id, yo, ja) + 46 on roadmap with 🔒 lock icon - Mix of high-population languages and linguistic diversity - Includes RTL languages (Arabic, Hebrew, Urdu, Persian) and minority langs (Quechua, Hawaiian, Guaraní) - Speakers, script, RTL flag per language - "Vote for your language" CTA → GitHub Discussions

Strategy

worksheets without native reviewer (trust > scale)

[0.3.0] — 2026-05-03 (later)

Added

[0.2.0] — 2026-05-03

Added

Changed

Known issues

[0.1.0] — 2026-04-26

Added

Live version: github.com/toriiyu/japaneseness/blob/main/CHANGELOG.md