Changelog
All notable changes to japaneseness.com.[1.24.0] — 2026-10-01
Changed
- Travel visual refresh. A set of hand-drawn line icons for every
[1.23.0] — 2026-09-30
Added
- Yamanote guide: fourth pass, 404 restaurants (up from 261), aimed at
- Travel Media: "Around the Yamanote line in a day of eating" — six
restaurant:), checked by the build.
[1.22.0] — 2026-09-30
Added
- Yamanote guide: third verification pass, 261 restaurants (up from 196)
- The whole loop by cuisine at
/travel/yamanote/cuisine/: every
[1.21.0] — 2026-09-30
Added
- Yamanote line dining guide at
/travel/yamanote/(EN + JA): all
/travel/yamanote// ) with the same
price tabs, previous/next station, and a link to the guide's area.
- Masters in content/master/travel/yamanote/; build_travel.py checks
station and cuisine ids, bands, walking minutes, https links, the
verified date, bilingual completeness and that no text contains a price.
[1.20.0] — 2026-09-26
Added
- A map of central Tokyo, drawn as inline SVG at build time from the
/tokyo/: the whole centre; click an area to open it.
- Area pages: a locator in the sidebar and a zoomed map with the places
numbered to match the cards below.
- Itineraries: the route drawn as numbered stops joined by a dashed line;
the numbers repeat in the timeline.
- Place pages: a pin on a close-up map.
- Area cards on
/tokyo/share each area's map colour and show operator
[1.19.0] — 2026-09-26
Changed
- Travel home: new headline "Feel Japaneseness", with "Tokyo, one day at
- Filter and sort on every Travel list. Operators (by category,
[1.18.0] — 2026-09-26
Added
- Travel Media: six operator-led one-day itineraries (EN + JA), each
provider:), the build checks the id, and
operator pages list the itineraries they appear in. 19 itineraries total.
[1.17.1] — 2026-09-26
Added
- Travel operators: +24 verified operators (153 total) — a second pass on
[1.17.0] — 2026-09-25
Added
- Travel: operator database.
/travel/providers/(and/ja/travel/providers/)
- Every experience page now has a "Where to book it" section; area pages
- Experiences expanded from 24 to 69, covering craft classes, dining
- Masters in
content/master/travel/providers/*.yaml;build_travel.py
[1.16.0] — 2026-09-25
Added
- Japaneseness Travel at
/travel/(English) and/ja/travel/(Japanese,
- Deliberately no opening hours or prices anywhere: they go stale, so
- Masters in
content/master/travel/(YAML) built by
content/scripts/build_travel.py, which refuses duplicate ids, dangling
references, a bilingual field missing its twin, non-kana kana, non-https
links, coordinates outside Tokyo and romaji that does not match the kana
(same checker as the vocabulary). Output: site/src/data/travel.json.
- 330 pages,
sitemap-travel.xmlwith hreflang pairs, TouristAttraction /
BaseLayoutgainsalternates/canonicalPathso a non-English page
[1.15.0] — 2026-09-07
Added
- JLPT N2 vocabulary — 1,500 words in 75 themed sets at
/vocabulary-n2/,
/vocabulary-n2/list/ (codes Y1–Y75) and a
two-page printable per set. The vocabulary leaves daily life here, and the
sets follow: the abstract nouns an argument is built from (前提, 根拠, 相関),
economy and finance, politics and law, industry, environment, media and
data, three sheets of compound verbs (取り組む, 押し寄せる, やり抜く), the
four-character idioms an editorial reaches for, the formal connectors of
written Japanese, the courtesy phrases of a business email, and the body
idioms. Not one word is on the N5, N4 or N3 list — the build refuses any
that is — so the four levels together are 4,100 distinct words. Linked from
/kanji-n2/, /grammar-n2/ and /vocabulary-n3/; both sitemaps updated.
All 150 pages measure 297 mm; none is under 55 % filled.
[1.14.0] — 2026-09-07
Added
/jlpt-n3-study-plan/— "JLPT N3 in 24 weeks", the plan that puts the
Fixed
- The N3 reading pages called the N3 kanji "Level H"; the kanji ladder level
[1.13.0] — 2026-09-07
Added
- Fill-in exercises for all 136 N3 grammar patterns — three sentences per
Changed
- The exercise answer page tightens automatically for a set of seven or more
build_exercises.pybuilds and checks the N3 sets on the same rules as N5
/worksheets/grammar_n3/set/…/exercises/ is in the sitemap.
[1.12.0] — 2026-09-07
Added
- JLPT N3 reading — 20 passages at
/reading-n3/, two printed pages each
/kanji-n3/, /grammar-n3/, /vocabulary-n3/ and /reading-n4/; both
sitemaps updated. All 40 pages measure 297 mm, none under 55 % filled.
Changed
build_reading.pynow also checks the Japanese title's kanji against the
- Answer pages take a
packedkanji grid at 24+ kanji words and shrink the
[1.11.0] — 2026-09-07
Added
- JLPT N3 vocabulary — 1,200 words in 60 themed sets at
/vocabulary-n3/,
/vocabulary-n3/list/ (codes X1–X60) and a
two-page printable per set (study, then recall in both directions; page 1
is page 2's key). The level changes shape here, and the sets follow it:
three sheets of noun + する verbs, two of abstract nouns, conjunctions and
sentence adverbs, set phrases and idioms, prefixes and suffixes, the formal
words of notices, two sheets of katakana loanwords, sound and manner words,
and verbs grouped by what they do (thought and speech, social action,
motion, change, feeling, exchange, everyday handling). Hand-authored, CC
BY-SA 4.0. Not one word is on the N5 or N4 list — the build refuses any that
is, so the three levels together are 2,600 distinct words. Linked from
/kanji-n3/, /grammar-n3/ and /vocabulary-n4/; both sitemaps updated.
All 120 pages measure 297 mm; none is under 55 % filled.
Changed
build_vocab.pynow checks every romaji against its kana with a small
[1.10.2] — 2026-09-07
Added
/how-to-learn-kanji/— the guide the kanji levels were missing: what a
/kanji/.
[1.10.1] — 2026-09-07
Added
- Answer keys for every kana match, quiz and write sheet — 70 of the 100
[1.10.0] — 2026-09-07
Added (the grammar sheets finally ask something back)
- Fill-in exercises for every N5 and N4 grammar point — 70 patterns, 210
…/set/{slug}/exercises/: three sentences per pattern with a blank
and a grey note saying what goes in (a particle; a verb and the form it
takes), a line to write your own sentence for each pattern, a box for two
more, and an answer page that also carries a one-line reference — formation
and example — for every pattern in the set. Sets of more than five
patterns paginate at five to a page.
- The set sheet's toolbar links to its exercises;
/grammar/and
/grammar-n4/ say which sets have them; the sitemap lists the 13 URLs.
build_exercises.pyrefuses a missing item, a sentence without a blank, a
- Proofread by a second reviewer: nine items where a second answer was equally
Verified
- 32 exercise pages at 297 mm, none sparse (two passes: a 3-pattern answer
[1.9.1] — 2026-09-07
Added
/jlpt-n4-study-plan/— N4 in 16 weeks, in the N5 plan's format: kanji
[1.9.0] — 2026-09-07
Added
- JLPT N4 reading — 20 passages at
/reading-n4/, 200 to 480 characters:
build_reading.pynow builds per level, with the allowed kanji read from
- Proofread by a second reviewer: a wrong reading (三つ), a train that "left
Changed
- The reading sheet is a shared component (
ReadingSheet) with three text
Verified
- 40 N4 pages and the 40 N5 pages at 297 mm, none sparse (first pass: 17
[1.8.1] — 2026-09-07
Added
/jlpt-n5-study-plan/— N5 in 12 weeks. The one page that walks the
[1.8.0] — 2026-09-07
Added
- JLPT N4 vocabulary — 800 words in 40 sets at
/vocabulary-n4/, the
/vocabulary-n4/list/ for the whole 800 with romaji.
- The build refuses overlap.
build_vocab.pynow builds every level
- Proofread by a second reviewer: one wrong reading (書き方), two duplicates
Changed
- The vocabulary set sheet and full-list table are now shared components
VocabSetSheet, VocabList); the N5 pages render byte-for-byte the same.
/kanji-n4/and/grammar-n4/link to the N4 words;/vocabulary/links
Verified
- 80 N4 pages and the 60 N5 pages at 297 mm, none sparse; 770 links resolve;
[1.7.0] — 2026-09-06
Added (where the pieces meet)
- JLPT N5 reading — 20 passages. Everything else on the site teaches a
/reading/ is twenty passages written for the site, from a 65-character
self-introduction to a 205-character diary entry, in four bands. Each is
two printed pages: the text with furigana on every kanji, ruled space
between the lines, the words worth knowing, four questions (three
multiple-choice, one written) and a ruled box to copy the first two
sentences; then the answers, the English, the passage's kanji words with a
line to write each, and a box for two or three sentences of your own.
- The promise is checked, not asserted.
content/scripts/build_reading.py
- Proofread by a second reviewer: eleven changes, among them a wrong reading
Verified
- 40 pages: 0 overflow, 0 under 55 % (a first pass had 23 half-empty
[1.6.2] — 2026-09-06
Added
- The same companion sheets for katakana — eight of them, at
/worksheets/katakana/practice/…: forty loanwords on genkōyōshi (4 sheets;
the long-vowel mark ー and the small ッ each get a square, and the romaji is
derived from the kana so コーヒー prints *kōhī*), yōon (2), and the pairs
that trip people up years later, シ/ツ and ソ/ン first (2). They are the
groundwork for Volume 2. Blank genkōyōshi is script-neutral and stays under
hiragana; /katakana/ links to it.
scripts/shot.mjsscreenshots built pages in an isolated browser. Do not
--screenshot while Chrome is open:
it attaches to the running instance and captures whatever tab is in front.
Verified
- 8 katakana sheets at 297 mm, none sparse; sitemap now lists 18 practice
/katakana/, /hiragana/ and /genkouyoushi/
resolve.
[1.6.1] — 2026-09-06
Added (now the book's claim is true)
- The rest of the hiragana book, as sheets. The printed book says
/worksheets/hiragana/practice/…, beside the
ladder rather than in it (adding units would renumber A1–A50, which the
printed progress chart uses): the forty real words on genkōyōshi squares
(4 sheets, 10 words each, romaji derived from the kana at build time so
きって comes out *kitte*), yōon (2 sheets — trace the row, then write it
from memory on the line below; the small kana sits low in its own square),
the eight confusable pairs (2 sheets: what tells them apart, then each
written three times), and blank genkōyōshi at 15 mm (12 × 15) and
school size (18 × 22, 396 characters).
/genkouyoushi/— what the squared paper is and the six rules for
/workbook/hiragana/now maps chapter 12, the pairs and the words to
Fixed
- Every long-form guide was one unbroken block. Tailwind's preflight
article.container-readable — so the 7-day plan table in
*How to learn hiragana* ran into its paragraphs and the numbered lists had
no numbers. One block of CSS fixes the five guides, the charts and the book
page together.
Verified
- 10 practice sheets: 0 overflow, 0 sparse (first pass had 7 overflowing —
- 572 links across the new and changed pages resolve; sitemaps 29 + 5,992;
[1.6.0] — 2026-09-06
Added (the words, and the book's front door)
- JLPT N5 vocabulary — 600 words in 30 sets. The site taught the
/vocabulary/ is a new
category: family on one sheet, the clock on another, twenty verbs of the
daily routine on a third, grouped the way a lesson groups them rather than
alphabetically. Every word is in exactly one set, so printing all thirty is
the whole list once. Each set is two pages — the words with readings,
meanings and a line to write each, then the same twenty asked back from
memory in both directions, seeded so the sheet never reshuffles. Page 1 is
page 2's answer key, so nothing prints twice. /vocabulary/list/ is the
full 600 on one searchable page with Hepburn romaji.
The list is hand-authored (content/master/vocab_n5.yaml, CC BY-SA like
everything else — no dictionary data copied), proofread entry by entry, and
built by content/scripts/build_vocab.py. It is deliberately *not* a
manifest category: the generic routes would have made 600 one-word pages.
/workbook/hiragana/— the page the book points at. The Kindle and
site/src/data/books.json has an ASIN. /workbook/ indexes
the volumes. Linked from the homepage, /hiragana/, the More menu and the
footer.
Changed
- "Vocabulary" joins the main nav (English label with a fallback;
jahas
scripts/audit-sheets.mjsacceptsPW_CHANNEL=chrometo use the installed
Verified
- All 60 vocabulary pages measure exactly 297 mm, none under 55 % filled.
- Every link on the four new pages resolves in
dist/(437 checked). - Sitemaps: 28 pages + 5,982 worksheet URLs; the build is 8,962 files against
[1.5.0] — 2026-09-03
Fixed (what was capping the ceiling)
- Four flagship pages had no title of their own.
/hiragana/,
/katakana/, /kanji/ and /grammar/ passed no title to the layout, so all
four inherited the site tagline — four identical s, not one of them
containing "worksheet", "printable" or "N5". They now read the way people
search: *Hiragana Practice Sheets — Free Printable PDF*, *JLPT N5 Kanji
Worksheets — Free Printable PDF*. N4–N1 and the homepage were retitled to
match, with real descriptions.
- 94 % of the pages sitemap was thin duplicates. 624 of its 661 URLs were
noindex,follow,
carry no canonical, and are not submitted; hreflang is off until a locale's
content is genuinely translated. The pages sitemap went 661 → 24, and the
worksheets sitemap now covers the 100 N5 detail pages that had never been
submitted at all. Every one of the 5,976 submitted URLs exists and is
indexable — verified, not assumed.
Added
- A teacher section on the homepage. One teacher is twenty or thirty
[1.4.0] — 2026-09-03
Added (something finally asks you to remember)
Every kanji and grammar sheet on the site was "study this" — trace it, copy it, read the pattern. Nothing ever asked a learner to produce 学 from "study", so a level could be finished without recalling a single character. Kana had its quiz sheets; kanji and grammar had none.- 100 review sheets, inside the ladder. Every few units the course inserts a
C6 reviews C1–C5. They are
numbered like any other unit, because a review you can skip without noticing
is a review nobody does.
- Both directions, each item once. Half the items ask you to write the
- The answer key is page 2. Print page 1 on its own to work without it, or
Fixed
- Review units were also being rendered by the auto-unit page, producing grammar
- The worksheet sitemap only walked chunk-mode levels, so 30 of the 100 new
Changed
- The course is 507 units. Unit codes after the first review in each level have
[1.3.2] — 2026-09-02
Fixed (the same page-height audit, run over every set and unit)
The kana audit was worth repeating on the other 316 printable pages. It found 50 pages silently printing on two sheets and 22 pages under half full — none of it visible on screen, because.sheet has min-height: 297mm.
- Grammar was the worst. 39 of the 40 N2/N1 auto-units measured about
.gstack grows into the free space and each
card's writing line takes what is left, down to a 5.5 mm floor. A page of
long patterns shrinks its lines instead of spilling onto page two; a page of
short ones gets *more* room to write. That one change fixed the overflows
and the sparse pages together.
- Kanji cards got a fourth density. 11–12 kanji used to split 12 + 1,
xdense. Sets of
3–4 kanji get roomier two-row boxes instead of half a blank page. Pages are
balanced, so 13 kanji print as 7 + 6, never 12 + 1.
- No more orphan units. A trailing remainder under a third of a unit (the
site/scripts/audit-sheets.mjs covers
sets and units as well as single sheets now.
Changed
- Levels J and L have more, shorter units (19 → 25 and 21 → 28); the course is
[1.3.1] — 2026-09-02
Fixed (the beginner path, walked end to end)
- Levels A and B are now in study order. The ladder used to follow the
- Ten kana sheets were broken. The review sheets (and the mixed quiz) had
chars list, and those sheets have real titles
(五十音 まとめ, か行〜た行 …).
- 26 kana sheets printed on two pages. Every 5-character match sheet
site/scripts/audit-sheets.mjs.
Added
- Three sheet layouts that existed only in the YAML are now real: large
- Every unit sheet closes the loop. Course code and "unit n of 50" in the
/course/) next to "Next: A2 →".
[1.3.0] — 2026-09-01
Added (the course is now the front door)
- The homepage leads with the course. The primary button is the next unit —
- "This is what you print" renders unit
C1live, in a scaled iframe of the
- Progress you keep.
/course/gives every unit a tick box; ticks live in
localStorage, no account, nothing sent anywhere), with
per-level counters, a "Continue at …" link and a Clear button. With storage
blocked the page is still a plain list of units.
- 34 themed sets for N3 kanji (level G), replacing the arbitrary
Changed
- Category index pages no longer repeat a print button on every single kanji or
- Homepage kanji and grammar counts now include N2 and N1 (2,184 and 521), and
[1.2.0] — 2026-08-27
Added (a course, not a pile of sheets)
- Course ladder A–L, 403 units at
/course/. Twelve levels — hiragana, katakana,
G14, unit 14 of 36.
- Every printable set and unit sheet now carries its course code in the header
C3, G14) plus "unit 14 of 36", and its footer points to the next unit.
- Category pages show their level letter and each set's code, and link to the ladder.
- Levels without themed sets (N3/N2/N1 kanji, N2/N1 grammar) get automatic units —
/worksheets/{category}/unit/{n}/,
so all 2,805 sheets have a place in the ladder. 237 new unit sheets.
/course/carries Course structured data and sits in the nav, the mobile menu
[1.1.0] — 2026-08-27
Added (kanji sets that mean something together)
- 13 themed N5 sets, printable as a single sheet each: Numbers 1–10, Hundreds
/worksheets/kanji/set/{slug}/, listed on /kanji/ and in the sitemap.
- A learner meets 一二三四五 as one lesson, so 一–十 now print on one sheet
Added (measurement)
- Cloudflare Web Analytics enabled on both layouts — site pages and printable
/privacy/ now
describes exactly this.
[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