UmaKuma

UmaKuma Updates

What shipped, newest first

Every release gets a version number and a Japanese codename that walks the gojūon in order. Select a release to see what changed.

September 202690 releases
  • v0.427.0No more L17: WaniKani reads WK17, ours reads UK17まえおきmaeoki2026-09-04

    John: 'WK levels should now read WK17... umakuma is UK17. No more L17 anywhere.' Site-wide sweep, not a local fix - SubjectPill draws a bare L{n}, and so do the explorer cards, list rows, subject columns, the identity block, the glyph metadata badges and the game tiles. Every one of them means WaniKani's level and none of them says so, which only became visible once a second ladder existed. This is Phase B2 of the levels plan brought forward.

    Area
    platform
    Name
    まえおき · 前置き maeoki · the words put in front
  • v0.426.0UmaKuma Explorerほはばhohaba2026-09-04

    Browse our own hundred levels the way the JLPT Explorer browses the JLPT lists.

    Area
    platform
    Name
    ほはば · 歩幅 hohaba · the length of a stride
  • v0.416.0All 253 radicals, and the last twelve get a levelととのいのそれぞれTotonoi no Sorezore2026-09-04

    RADKFILE has 253 classical radicals and only 241 are needed: , , , , , , , , , , and appear in no joyo character. They were dropped, which left the set incomplete for anybody who wanted all of it and left forty later levels teaching no radical while the first twenty carried a dozen each. They are now offered one per level from 89 to 100, marked optional because nothing a member learns is built from them. The front-loading of the other 241 cannot be fixed and should not be: a radical is taught before the kanji built from it, and each already sits as late as that allows.

    Area
    platform
    Name
    ととのいのそれぞれ · 整いのそれぞれ Totonoi no Sorezore · each one in its place, the set complete
  • v0.415.0Weight the words people actually meetてぢかなごいTejika na Goi2026-09-04

    The blend weighted a newspaper corpus at 1.0 against anime at 0.7, on the reasoning that print carries the widest written vocabulary. True, but it pays off only for somebody who gets far enough to read a newspaper, and most learners will not - they will watch. Media now leads: global and anime at 1.0, drama 0.8, movie and manga 0.7, newspaper down to 0.5. Levels 1-10 barely move, because the commonest words are common everywhere. Levels 11-30 gain uriKire, yomikata, oujo, giniro and lose kougyou, koukyou, shiten, shinrigaku to later levels - drama vocabulary up, business register down.

    Area
    platform
    Name
    てぢかなごい · 手近な語彙 Tejika na Goi · the vocabulary closest to hand
  • v0.414.0WaniKani's order joins the orderingつみあげのじゅんじょTsumiage no Junjo2026-09-04

    Within a JLPT band the ladder sorted by school grade then raw frequency, ignoring the one signal that encodes which characters build on which: WaniKani's own teaching sequence. It now sorts band, then grade, then WaniKani level, then frequency, then strokes. Grade inversions fall in every band - N4 from 18 to 8, N3 from 645 to 619, N2 from 424 to 400 - and the opening reads better: level 2 is now the numbers and simple shapes clustered together rather than scattered.

    Area
    platform
    Name
    つみあげのじゅんじょ · 積み上げの順序 Tsumiage no Junjo · the order things stack in
  • v0.413.0A kanji the JLPT skips is not therefore hardちつじょのがくねんChitsujo no Gakunen2026-09-04

    The JLPT lists 2,211 characters and we teach 2,235, so 227 have no N level - and all of them were swept into the final band, levels 51-100. Right for the 158 secondary-school and 33 name kanji among them; badly wrong for fourteen. The worst was the 24th commonest character in Japanese, taught in Japanese schools at grade 2 and by WaniKani at level 3, sitting at UK91 because an exam does not list it. A kanji with no JLPT level now falls back to the year Japan teaches it in. It moves to UK8, and no grade-school kanji is stranded past level 50. The ladder also now records which band decided each placement, since for these fourteen it is not the JLPT one.

    Area
    platform
    Name
    ちつじょのがくねん · 秩序の学年 Chitsujo no Gakunen · the school year sets the order
  • v0.410.0Level sixteen stops dippingせいちのならしSeichi no Narashi2026-09-04

    Levels 14-18 teach kanji that unlock few words, and the vocabulary ramp reached full share by level 20 - so the early supply was spent and level 16 came up eleven words short of its target while 17 and 18 overshot repaying it. The ramp now takes 26 levels instead of 20, which banks enough to ride through that stretch. The worst dip on the whole ladder falls from eleven subjects to six, and the number of levels lighter than the one before them falls from forty to twenty-nine. Levels 15-17 read 76/74/80 where they read 84/73/92.

    Area
    platform
    Name
    せいちのならし · 整地のならし Seichi no Narashi · levelling the ground flat
  • v0.408.0Radicals come first, and level one is theirsしたごしらえShitagoshirae2026-09-04

    The ladder promised a radical is taught before the kanji built from it, and that was quietly untrue for every kanji at level 1: placeRadicals puts a radical two levels early and clamps at 1, so all six level-1 kanji had their radicals in the same level as themselves - with four of them. There is nowhere below level 1, so kanji now start at level 2 and level 1 is 17 radicals and 18 kana words with no kanji at all: shapes and これ/それ/はい, nothing to cross-reference. 8,424 radical-to-kanji pairs now checked by test, zero violations. Level 1 falls from 46 subjects to 35, against WaniKani's 80.

    Area
    platform
    Name
    したごしらえ · 下ごしらえ Shitagoshirae · the prep work, done before the cooking
  • v0.404.0Eighty-nine names for the same nine stagesくみひものくだんKumihimo no Kudan2026-09-04

    WaniKani calls its stages Apprentice, Guru, Master, Enlightened and Burned, and that is the only vocabulary a learner ever gets. src/data/srsThemes.json is the committed source for 89 themes, each naming all ten stages from not-started to the top - Judo belts, sumo divisions, the corporate ladder, ghosts, a theme park. Every rung carries a term, a reading, a meaning and a chip-sized short form, plus an age rating so a ten-year-old is never offered the syndicate ladder. Themes are renamed off their trademarks: the rank vocabulary is ordinary Japanese and stays, but no feature ships called Naruto. The stored SRS value never changes, so switching is instant and retroactive.

    Area
    platform
    Name
    くみひものくだん · 組紐の九段 Kumihimo no Kudan · a braided cord of nine tiers
  • v0.394.0A few rows of every sourceれいのひとつまみRei no Hitotsumami2026-09-04

    The accreditation pages said what we hold from a source and never showed any of it. Each page gets a handful of chosen specimens - the component written into 1,337 characters, the pronoun ranked 67 in anime and band 12 of 48 in print - with an admin able to override the picks per source. Chosen, never the first row of the file.

    Area
    platform
    Name
    れいのひとつまみ · 例のひとつまみ Rei no Hitotsumami · a pinch of examples
  • v0.393.0A release that refuses changes nothingるすのつくえRusu no Tsukue2026-09-04

    Taking a release number wrote four files one after another with no rollback - the timeline entry, the codename, APP_VERSION and package.json - so a failure part way through left the first two applied and the last two not. The tree looked like a release had been taken when none had, and the re-run refused because the codename it had just written was already used. It happened twice on 2026-09-03, both times because another session shipped mid-flight. Every edit is worked out first now and written only once all of them are possible, the refusal names the file it could not change, and the board row is closed after the files land rather than before - a refusal used to leave the ticket shipped and the tree unreleased.

    Area
    platform
    Name
    るすのつくえ · 留守の机 Rusu no Tsukue · the desk left exactly as it was found
  • v0.391.0Toggle the known, practise and visited colouringらくないろどりRakuna Irodori2026-09-03

    The study map paints a member's own marks - known green, practise amber, visited outlined - over every region, always. There is no way to turn that layer off to see the plain map, or to see one kind of mark alone. Controls to toggle each layer, in or above the map or in the side panel. Requested 2026-09-03 by John.

    Area
    platform
    Name
    らくないろどり · 楽な彩り Rakuna Irodori · colouring that is easy to switch off
  • v0.390.0The map says what it is looking atよびなのいたYobina no Ita2026-09-03

    At /maps/japan/region/kansai the only signs that Kansai is what is framed are the URL and the side panel; the map itself has no title. Put an overlay title in the map's top-left corner - there is room, and the pan hint already sits bottom-left in that style - naming the region, and the region and the province when one is chosen (Kansai · Osaka). John also suggested a leader line from the region's centre to a label, the way the game's handles point. Requested 2026-09-03 by John.

    Area
    platform
    Name
    よびなのいた · 呼び名の板 Yobina no Ita · the board with its own name on it
  • v0.389.0Cache the accreditation pagesゆとりのいちじかんYutori no Ichijikan2026-09-03

    Both /sources pages ran three Prisma reads and rebuilt a border-pair Set per map on every view, including every crawler hit. Each report is now held in process for ten minutes, which removes the repeat database work, and the index settles its readers so one dead source no longer hides eleven healthy ones. The CDN half did not land: a Cache-Control header was added and Vercel overrides it, because every page carrying PublicPageHeader is dynamic - the header reads the session - and Next sends no-store on a dynamic route. Verified against a local next start, which applies the header, and not against production, which does not. Sparing the app the request needs partial prerendering; filed separately. Requested 2026-09-03 by John as part of the source accreditation epic.

    Area
    platform
    Name
    ゆとりのいちじかん · ゆとりの一時間 Yutori no Ichijikan · an hour's grace, so one answer serves everybody
  • v0.388.0A region view should be centred on the regionやっとまんなかYatto Mannaka2026-09-03

    /maps/japan/region/okinawa opens at 3x with Okinawa sitting low in the frame instead of in the middle. The zoom window is clamped to the map's edges so a drag never shows open sea, but a region opened from its address is a fit, not a drag, and the fit should centre what it framed even if that means the window overhangs the map. Okinawa's inset sits at the bottom-left of the canvas, so any clamp pushes it down. Either let a fit overhang, or move the inset. Reported 2026-09-03 by John with a screenshot.

    Area
    platform
    Name
    やっとまんなか · やっと真ん中 Yatto Mannaka · in the middle at last
  • v0.387.0Credit JMdict and JitenもとのほまれMoto no Homare2026-09-03

    The ladder ranks vocabulary against JMdict's newspaper frequency bands and Jiten's eleven per-medium lists. Both are CC BY-SA 4.0, so a visible credit is a licence condition and neither has a page. Register both in sourceCredits, give each a reader over wordFrequency.json and copy on /sources. Requested 2026-09-03 by John as the first slice of the source accreditation epic.

    Area
    platform
    Name
    もとのほまれ · 元の誉れ Moto no Homare · the credit belongs where it came from
  • v0.386.0Choosing a region heading makes the row jumpめもりのたかさMemori no Takasa2026-09-03

    When a region heading is clicked the Open control appears beside it and is taller than the heading row, so the row grows and everything under it shifts. Replace the text button with an icon the same height as the row - a magnifier or an expand glyph - so choosing changes colour and nothing else moves. Reported 2026-09-03 by John with screenshots of both states.

    Area
    platform
    Name
    めもりのたかさ · 目盛りの高さ Memori no Takasa · one notch high, held or not
  • v0.384.0The audit times out and takes the deploy with itみたびきくMitabi Kiku2026-09-03

    pnpm security:check runs pnpm audit against registry.npmjs.org, and that endpoint socket-timed out three times in a row twice on 2026-09-03/04 - once in a local preflight, once in the CI verify job, which failed the whole deploy while every quality check had passed. A timeout is not a finding; it is no answer. Wrap the step in the same three-attempt retry the upload has, still red after three, and keep the schema drift check single-shot.

    Area
    platform
    Name
    みたびきく · 三度聞く Mitabi Kiku · ask three times before calling silence a no
  • v0.380.0Regions in the map address, and a double-click that opens oneふくむちほうFukumu Chihou2026-09-03

    The map directory groups a country into regions - Tohoku, the Prairies, West Coast - and a click now lights one. A double-click should zoom the map to it, and the address should carry it: /maps/canada/region/west-coast focuses the region, and /maps/canada/region/west-coast/british-columbia is a province chosen within a lit region. /maps/canada/british-columbia stays as it is. The explicit region/ segment is needed because Japan has a region and a prefecture both called Hokkaido, so a bare slug cannot tell them apart. Requested 2026-09-03 by John, who asked for a recommendation on the URL shape.

    Area
    platform
    Name
    ふくむちほう · 含む地方 Fukumu Chihou · the region that holds the place, in its address
  • v0.372.0A flaky upload leaves production behindとどけるまでTodokeru Made2026-09-03

    The last deploy step, vercel deploy --prebuilt, is a single unretried command. On 2026-09-03 it threw 'fetch failed' at 59MB of a 79MB upload; the commit was on main, CI was green, and production simply stayed on older code with nothing retrying. It only got out because another agent pushed minutes later. Because cancel-in-progress means the newest run is the one that matters, a flake on the last push of a burst is exactly the case with no second chance. Retry is safe here specifically because cancel-in-progress kills a superseded run before its retry could re-alias production to an older commit.

    Area
    platform
    Name
    とどけるまで · 届けるまで Todokeru Made · it keeps trying until the code arrives
  • v0.367.0A single stroke's repeat looks staticそくていのそくざSokutei no Sokuza2026-09-03

    The repeat runs for one stroke but rests a fixed second after a 420ms draw, so the stroke sits finished for 70 percent of every cycle - running, and indistinguishable from broken. The rest is a share of the drawing now, capped at the old second so the whole character is unchanged. Reported 2026-09-03 by John.

    Area
    platform
    Name
    そくていのそくざ · 測定の即座 Sokutei no Sokuza · measured, not guessed at
  • v0.366.0Select a whole region and highlight itせっするけんごとSessuru Kengoto2026-09-03

    The map directory groups regions under headings - Prairies, Northern Canada, Tohoku, Kansai. Those headings should be selectable, lighting up every member on the map at once, so a learner can see a region as a shape rather than picking its members off one at a time. Requested 2026-09-03 by John.

    Area
    platform
    Name
    せっするけんごと · 接する県ごと Sessuru Kengoto · a region lit as one shape, not six names in turn
  • v0.365.0Canada is listed in French on an English siteすなおなえいごSunaona Eigo2026-09-03

    The map directory shows Canadian provinces with the French name as the headline and the English underneath - Colombie-Britannique over British Columbia, Nouveau-Brunswick, Quebec. English is the site language and should lead; Japan's kanji-over-romaji is different because the Japanese IS the content being learned. Reported 2026-09-03 by John.

    Area
    platform
    Name
    すなおなえいご · 素直な英語 Sunaona Eigo · the English name, plainly, on an English page
  • v0.364.0All 13 province / territorysしるしたふくすうけいShirushita Fukusuukei2026-09-03

    The directory heading pluralises the division name by adding s to whatever the dataset holds, so Canada reads 'All 13 province / territorys'. Noticed 2026-09-03 in a screenshot John sent about other map panel issues; he did not raise it.

    Area
    platform
    Name
    しるしたふくすうけい · 記した複数形 Shirushita Fukusuukei · the plural written down instead of guessed at
  • v0.363.0Replay does nothing on a single strokeさらにさすSarani Sasu2026-09-03

    In one-stroke mode, pressing Replay should re-draw the stroke you are looking at. Reported 2026-09-03 by John from the stroke order card on /kanji/ at stroke 2.

    Area
    platform
    Name
    さらにさす · 更に指す Sarani Sasu · points again, and says what it points at
  • v0.362.0Region thumbnails do not match the mapこだいなふちKodaina Fuchi2026-09-03

    The little shape icons in the map directory panel carry a border that makes them look poor, and they do not render the region the way the big map does - Hokkaido is the clearest case. The thumbnail path and JapanMap should draw the same shape the same way. Reported 2026-09-03 by John with screenshots.

    Area
    platform
    Name
    こだいなふち · 誇大な縁 Kodaina Fuchi · the border that grew with the place
  • v0.360.0Take the Leaderboard out of the headerくうはくからはじめるKuuhaku kara Hajimeru2026-09-03

    The header's first link is Leaderboard, and for a signed-out visitor it is the only one - so the one thing an anonymous reader is offered is the scoreboard, on a page about a kanji. John: no more attention to the Leaderboard. Take the link out of the header. The anonymous nav is then empty on purpose; John will decide what a visitor should be offered. Requested 2026-09-03 by John.

    Area
    platform
    Name
    くうはくからはじめる · 空白から始める Kuuhaku kara Hajimeru · starting from a blank row
  • v0.359.0Tickets, not wishesきっぷのきほんKippu no Kihon2026-09-03

    The board holds every piece of work, so the model, library, API and admin panel say Ticket rather than FeatureWish. The physical table keeps its name, because prisma db push drops and recreates rather than renaming. The board offers every move a ticket's state allows and says who holds it. Requested 2026-09-03 by John.

    Area
    platform
    Name
    きっぷのきほん · 切符の基本 Kippu no Kihon · a ticket, and what a ticket is for
  • v0.358.0Credit the map dataかりたさかいめKarita Sakaime2026-09-03

    The three map datasets are shown with no attribution anywhere: Global Map Japan via GSI, US Census Bureau via us-atlas, and Natural Earth. GSI's terms require both a source citation and a statement that the data was edited, and ours are reprojected, simplified and move Okinawa into an inset. Requested 2026-09-03 by John.

    Area
    platform
    Name
    かりたさかいめ · 借りた境目 Karita Sakaime · the borders we borrowed
  • v0.357.0The empty panel becomes the directoryおしながきOshinagaki2026-09-03

    With nothing chosen the map's side panel is an empty box with one line in it, on a page whose other half is a map. It should carry the whole country instead: every region as a row with its name, its kanji and its shape, in columns, at a size somebody can read. A row does what the map does - hovering it lights the region, choosing it opens the panel - so the list is a second way through the same door rather than a table of contents. Requested 2026-09-03 by John.

    Area
    platform
    Name
    おしながき · お品書き Oshinagaki · everything on offer, written out
  • v0.354.0A shared ticket board, in the databaseいちばのいっせいにIchiba no Isseini2026-09-03

    Planned work moves out of featureTimeline.json into Postgres, with an atomic claim and a six-hour lease. The file keeps the shipped record, because a release entry has to land in the same commit as its code. Requested 2026-09-03 by John.

    Area
    platform
    Name
    いちばのいっせいに · 市場の一斉に Ichiba no Isseini · one market, everyone at once
  • v0.353.0Filter the releases by what they touchedあいいろのふだわけAiiro no Fudawake2026-09-03

    Every release is already tagged by area, and the tags are shown without being usable: there is no way to ask for the games work, or everything that touched search. The page lays out every area it holds with a count beside it, and choosing one filters the list. Areas only - a feature and a bug are not the same kind of tag. Requested 2026-09-03 by John.

    Area
    platform
    Name
    あいいろのふだわけ · 藍色の札分け Aiiro no Fudawake · sorted by the label it already wore
  • v0.352.0The region shape is drawn tinyわくにおさまるWakuni Osamaru2026-09-03

    The side panel draws the chosen region on its own so the shape can be seen, and the shape is a few millimetres in the middle of the whole country. The window is padded by nine tenths of the region's longest side and is nearly square, while the frame is two and a half times as wide as it is tall, so the map scales to the height and shows two or three times more country than the window asked for: Hokkaido's window comes out larger than Japan. The shape should fill the frame it is given, with only enough room around it to place the region among its neighbours. Reported 2026-09-03 by John.

    Area
    platform
    Name
    わくにおさまる · 枠に収まる Wakuni Osamaru · it sits in the frame it was given
  • v0.351.0Releases open at the month you are inろくがつのおりめRokugatsu no Orime2026-09-03

    The releases page prints every month at full length, so the page opens on a wall of entries and the month somebody came for is a long scroll away. Each month becomes a section that folds: the current month open, the rest closed, any of them toggled by hand, and the choice remembered per device so a refresh does not undo it. Requested 2026-09-03 by John.

    Area
    platform
    Name
    ろくがつのおりめ · 六月の折り目 Rokugatsu no Orime · every month folded but the one you are in
  • v0.350.0Escape puts the search awayれいぎのひきぎわReigi no Hikigiwa2026-09-03

    Escape on a focused search box empties it, and on an empty box it closed the dropdown and left the field open and focused - so the box a member wanted rid of stayed on screen, widened, with the cursor still in it. An empty box now goes away on Escape: the panel closes, the field gives up focus and shrinks back, and the phone sheet closes with it. Reported 2026-09-03 by John, who had asked before.

    Area
    platform
    Name
    れいぎのひきぎわ · 礼儀の引き際 Reigi no Hikigiwa · knowing when to leave the screen
  • v0.348.0Map kanji as pillsりったいよりひらたいRittai yori Hiratai2026-09-03

    The characters of a place name are the same small pills the kanji page uses, with the Text on toggle, not the large explorer cards.

    Area
    platform
    Name
    りったいよりひらたい · 立体より平たい Rittai yori Hiratai · the flat pill, not the raised card
  • v0.347.0The chosen region, drawn on its ownらしいりんかくRashii Rinkaku2026-09-03

    On the country map Kagawa is four millimetres of grey and Rhode Island is smaller than the word for it, so the shape - the one thing a map is for - is the thing you cannot see. The panel draws the chosen region filling its width, neighbours in outline so it reads as a place rather than a blob. Requested 2026-09-03 by John.

    Area
    platform
    Name
    らしいりんかく · らしい輪郭 Rashii Rinkaku · an outline that looks like itself
  • v0.345.0Mark what you know, and where you have beenゆきさきのゆびさすYukisaki no Yubisasu2026-09-03

    A member marks each prefecture, state or province 'I know it' or 'Needs practice', and separately flags the ones they have been to - the map paints all three in soft greens, ambers and a blue outline. Two facts rather than one. One new table, MapRegionMark, unique per member per region. Requested 2026-09-03 by John.

    Area
    platform
    Name
    ゆきさきのゆびさす · 行き先の指差す Yukisaki no Yubisasu · pointing at where you have been
  • v0.344.0Read large Japanese numbers in searchやじるしりょうむきYajirushi Ryoumuki2026-09-03

    A number written the Japanese way - 一億二千万 - answers with the English number, and the reverse. Requested 2026-09-02 by John.

    Area
    platform
    Name
    やじるしりょうむき · 矢印両向き Yajirushi Ryoumuki · an arrow that points both ways
  • v0.343.0Okinawa stays in its box, and Escape puts a region downもちばのもよりMochiba no Moyori2026-09-03

    Zooming dropped the inset, so Okinawa left its box off the south-west of the mainland and was redrawn where it really is, on top of the coast the reader was looking at. The inset held only while the whole country was in view, which stopped being true the moment the study map could zoom. Centring had the same fault from the other side. Escape now clears the chosen region at desktop width, where there is no modal to close. Found 2026-09-03 by John.

    Area
    platform
    Name
    もちばのもより · 持ち場の最寄り Mochiba no Moyori · back to its own post, and near what you asked for
  • v0.342.0The values open under the chip you clickedめぐるめじりMeguru Mejiri2026-09-03

    Choosing a source on the practice sheet opened its levels below Trace / Stroke order / Reference, because the source chips and the sheet chips shared one wrapping nav - the list somebody had just asked for appeared under an unrelated row, two lines from the chip they pressed. Three rows now, in the order they are read. Found 2026-09-03 by John.

    Area
    platform
    Name
    めぐるめじり · 巡る目尻 Meguru Mejiri · the eye comes round to where it asked
  • v0.341.0The name's kanji, drawn like every other kanjiむだなくむけるMuda naku Mukeru2026-09-03

    The map panel drew the characters of a place name as coloured boxes of its own making: no meaning, no reading, and no way to keep one, on a site where every other place a kanji appears carries all three. It uses the shared subject card now, which brings the reading, the meaning, the link to the character's page and the filing column with it. Double-clicking a region zooms one step in on it. Requested 2026-09-03 by John.

    Area
    platform
    Name
    むだなくむける · 無駄なく向ける Muda naku Mukeru · pointed the same way, with nothing built twice
  • v0.339.0Zoom in on the map, and get aboutまわるまどぐちMawaru Madoguchi2026-09-03

    Kanto is eight prefectures inside a thumbnail: on a whole-country map Saitama and Gunma are a few pixels of the same grey. Three zoom steps rather than a free zoom, with drag, arrow keys and +/-/0 to move around, and the window clamped so a drag that runs off the edge stops rather than framing open sea. Requested 2026-09-03 by John.

    Area
    platform
    Name
    まわるまどぐち · 回る窓口 Mawaru Madoguchi · a window you can move around
  • v0.338.0The header holds one line, whatever the widthほねぐみはうごかないHonegumi wa Ugokanai2026-09-03

    Between about 1000 and 1280 pixels the top row broke after LISTS and put PROGRESS and READ on a second line, and the section row stacked its pages into a column - so the header changed height as the window moved and the page below it jumped. Both rows now hold one line and scroll instead, the way the phone row already did, and the release codename waits for 1280 rather than taking the room STROKES needed. Reported 2026-09-03 by John, who had asked for this before.

    Area
    platform
    Name
    ほねぐみはうごかない · 骨組みは動かない Honegumi wa Ugokanai · the frame stays where it was
  • v0.334.0The radicals in one runはしるひとすじHashiru Hitosuji2026-09-03

    A block per stroke count wasted most of its width on the counts holding three radicals and made the grid four screens tall, so the kanji a pick produced were never on screen with the radicals that produced them. It flows left to right with the count as an inline marker, in a bounded area that scrolls within itself - how the paper dictionaries print it and how the picker in search has always drawn it. Corrected 2026-09-03 by John.

    Area
    platform
    Name
    はしるひとすじ · 走る一筋 Hashiru Hitosuji · a single line, run right through
  • v0.329.0Every radical, all the timeながめるならびNagameru Narabi2026-09-03

    The radicals page copied the stroke browser too literally: stroke counts along the top as a filter, so choosing '3 strokes' hid the other 208 radicals. That is the right control for 900 kanji at one count and the wrong one for 253 radicals, which are a set you scan - the filter hid the thing somebody opened the page to look through. No filter and no first step now; the count leads each row, the way the picker in search has always shown them. Corrected 2026-09-03 by John.

    Area
    platform
    Name
    ながめるならび · 眺める並び Nagameru Narabi · a row you can look over, leaving none out
  • v0.328.0The radicals, as a pageとりだすつくりToridasu Tsukuri2026-09-02

    The radical picker asks 'which kanji has these parts' from inside a search dropdown, which is the right shape for somebody mid-search and the wrong one for somebody who wants to see the radicals. This is the stroke browser's layout over the same index: counts along the top, the 253 radicals grouped by stroke below them, and the kanji containing whatever is picked. Picking is a link, so the state is in the address. The parts on a kanji page lead here instead of priming a search box. Requested 2026-09-02 by John.

    Area
    platform
    Name
    とりだすつくり · 取り出すつくり Toridasu Tsukuri · the parts, taken out and laid down
  • v0.324.0Print is the light theme, and nothing elseたちもどるたんじゅんTachimodoru Tanjun2026-09-02

    The previous fix read 'never print in colour' as an instruction to build a printing palette: every brand colour flattened to black, every word forced black, a blanket rule over every element. It turned filled pills into solid black lozenges and spent more ink than the page it was sparing. What was actually wrong is only that the dark theme followed the page onto paper, so print now restores the ten tokens the dark theme overrides to exactly the values :root gives them, and stops. Corrected 2026-09-02 by John.

    Area
    platform
    Name
    たちもどるたんじゅん · 立ち戻る単純 Tachimodoru Tanjun · back to the simple thing
  • v0.323.0Print is white paper and black inkそめないそぼくSomenai Soboku2026-09-02

    The palette override covered the site's own tokens, which is most of a page and not all of it: a panel painted with a literal Tailwind colour never asks the tokens anything, so the amber suggestion box printed a tinted block and coloured text regardless. The default inverts - every surface white, every word black - so a colour has to be opted into rather than chased down after somebody notices it on paper. The tracing sheet keeps its greys, since its faint characters are the thing being traced. Requested 2026-09-02 by John.

    Area
    platform
    Name
    そめないそぼく · 染めない素朴 Somenai Soboku · undyed and plain, which is what paper wants
  • v0.321.0Print is never themedすみぞめSumizome2026-09-02

    Dark mode followed the page onto paper: --foreground is near-white there, so a member reading in dark mode printed almost nothing onto white paper, having first spent the ink laying a navy wash across it. Two failures, and the second hid the first - the tokens are one override, the wash is four gradients on body that the dark theme replaces on its own selector, which a bare html,body cannot outrank. The print rules move to src/app/print.css and force a monochrome palette with !important, since an @import at the top of globals.css loses every tie on source order. Filled brand pills print as outlines rather than solid black rectangles. Found 2026-09-02 by John.

    Area
    platform
    Name
    すみぞめ · 墨染め Sumizome · in ink alone, whatever the screen was
  • v0.319.0Backfill missing catalogue subjectsさいごのあなSaigo no Ana2026-09-02

    64 subjects in the study queue are absent from the local catalogue and still fall through to the API.

    Area
    platform
    Name
    さいごのあな · 最後の穴 Saigo no Ana · the last hole in the shelf, filled
  • v0.316.0The look you chose follows you off the profile pageくらいままKurai Mama2026-09-02

    data-theme and data-jp-font were hardcoded to light and sans on the root element and changed only in the browser, by a control mounted on the profile page alone. So a member who chose Dark got dark on their profile and light on every other page: the choice did not survive a navigation. The stored value was never read back either - the comment in the control referred to a theme script that sets the attributes before paint, and no such script existed. Both preferences now live in the cookie the layout reads, so the server draws the chosen look in the first paint of every page, the same treatment the grade explorer got in 0.300.0. localStorage is gone from the control rather than kept beside the cookie: two stores that can disagree is how study mode ended up unable to turn itself off.

    Area
    platform
    Name
    くらいまま · 暗いまま Kurai Mama · dark stays dark, page after page
  • v0.301.0Lists gets a second row of its ownゆるがないひょうめんYuruganai Hyoumen2026-09-02

    Lists is a top-level section with a single child, so the header suppresses its second row and everything the page holds is stacked into the body instead. It has the same shape as Learn - several distinct collections a member moves between - so it should name them in the second row. The names should follow from what the collections actually are rather than being invented; work them out from the list kinds the code already distinguishes.

    Area
    platform
    Name
    ゆるがないひょうめん · 揺るがない表面 Yuruganai Hyoumen · a surface that does not shift
  • v0.298.0The JLPT counts ask WaniKani for characters it already holdsめくらないめかたMekuranai Mekata2026-09-02

    The JLPT counts on the leaderboard need one static fact about each learned kanji - the character - and they were asking WaniKani for it in 200-id chunks. A member with fifteen hundred learned kanji cost eight sequential round trips on every stats computation, for data the local catalogue holds: production carries 2,102 kanji, which is every one WaniKani teaches. The catalogue answers now, in one query, and the API is kept only for ids it has never seen, so a subject added since the last sync is still counted rather than dropped. Assignments stay live, being the member's own state. The same shape the study queue and the kanji index already follow. Found 2026-09-02 while sweeping for per-render subject fetches.

    Area
    platform
    Name
    めくらないめかた · めくらない目方 Mekuranai Mekata · weighed without turning a page
  • v0.296.0The second row survives a click into a pageみとりずのまちかどMitorizu no Machikado2026-09-02

    A group's second row is how a member knows where they are, and it disappeared one click in. Absolute nav entries matched the address by exact equality, so /maps and /strokes found the Learn group and /maps/japan/gifu found nothing at all - opening a prefecture, or any stroke count, took the whole row off the page. Member-scoped pages never had it, because they match on their first path segment, which is why /grades/1 keeps its row. An absolute entry matches by prefix now, on a path boundary rather than on letters, so /mapsomething is still not a page in Maps.

    Area
    platform
    Name
    みとりずのまちかど · 見取り図の街角 Mitorizu no Machikado · a street corner with a map on it
  • v0.292.0Two sections stand asideふたつひかえるFutatsu Hikaeru2026-09-02

    The header carried seven sections and wrapped to two lines on a laptop, which is what made every narrow page look broken. Two of them did not earn the room: the leaderboard is the site's own front page and undeveloped besides, and Progress is history and statistics - things a member looks up occasionally rather than navigates by. Both moved into the account menu, where History and Statistics now sit beside Profile and WaniKani, which is where the rest of "about my account" already lived. The row is Study, Game, Learn, Lists and Read, and it fits on one line. The menu learned a distinction while that was open: a page rooted at the site rather than at the member is listed with Updates rather than among your own pages, because the leaderboard is everybody's and listing it under Profile would be a link to somebody else's. Requested 2026-09-02 by John.

    Area
    platform
    Name
    ふたつひかえる · 二つ控える Futatsu Hikaeru · the two sections that stand aside
  • v0.269.0A member without WaniKani never meets itおしつけないあんないOshitsukenai Annai2026-09-02

    An account has not needed WaniKani since 0.95.0, but the site was built when it did, and the assumption survived in the places nobody thought of as WaniKani features. A member without a connection was offered the Library Explorer and Stats by their own header and met sixty empty levels and a wall of zeros that congratulated them on passing a level gate they had reached by never starting; Study answered This account has no WaniKani connection in red above a full filter panel over an empty list. One list in src/lib/memberCapabilities.ts now says what the site can do and which four things read WaniKani's own data - the queue, the Library Explorer, the progress figures and a leaderboard standing - and the navigation, the pages and the connection page all ask it rather than each deciding for themselves. The two WaniKani-only pages say what they would have been, why they cannot be it yet and where to connect, instead of rendering nothing convincingly. Study is the one that is not only WaniKani's: an uploaded library has its own items and its own schedule in this app's tables, so a member with one opens on that source rather than on a WaniKani queue that can only answer 409, and a member with neither is told what they need rather than what failed. Requested 2026-09-02 by John with screenshots.

    Area
    platform
    Name
    おしつけないあんない · 押し付けない案内 Oshitsukenai Annai · nothing offered that you cannot open
  • v0.268.0What money was worth years agoえんのにじゅうねんEn no Nijuunen2026-09-02

    A converted amount answers "how much is this", and the number on its own is flat. The interesting thing about 1500 is that it was CA$19.21 ten years ago and is CA$13.01 now - the yen has moved a long way inside one learner's study career, and the price was carrying that history the whole time without saying so. An amount now shows what it was worth 180 days, one, five, ten and twenty years back, in the same currencies the answer is given in, with the change from then to now beside each. Every point is an average of the thirty days of published rates before it rather than a single day's rate: a currency can move a percent on a Tuesday for reasons that have nothing to do with the decade, and quoting that Tuesday as "five years ago" would put a wobble into a line meant to show a trend. The table says as much under itself, because an average and a spot rate are different claims and a percentage with no direction stated is a coin toss for the reader. The six requests run together rather than in turn, and each past window is held for a day - a window that has already closed will never say anything different, and only its ends move. Any of the five may fail and take only its own row with it; four rows of history is still four rows of history, and none at all is no table rather than an empty one. A point that would reach past January 1999, where the European Central Bank's rates begin, is not asked for. Requested 2026-09-02 by John.

    Area
    platform
    Name
    えんのにじゅうねん · 円の二十年 En no Nijuunen · twenty years of the yen, on one line
  • v0.266.0Convert money in searchいまのそうばIma no Souba2026-09-02

    A learner reading a Japanese page meets prices constantly - a 1,500 lunch, an 8,800 textbook - and has no sense of whether that is cheap. Typing the amount answers it now. Any currency the European Central Bank publishes goes into yen, and a yen amount comes back in Canadian and American dollars together, because a yen amount names no second currency and the site is written for both countries rather than one of them. The amount may be written either way round, with the code or with a symbol that means one thing and only one - €23, £10.50, ¥1500, 1500, 14.40 CAD, EUR 23 - with a thousands comma or without, and in full-width digits, which is what a Japanese keyboard produces. There is deliberately no bare dollar sign: it names the Canadian dollar and the American one, and guessing would be wrong for half the people who typed it. The rates come from Frankfurter, which republishes the ECB's daily reference rates with no key, no account and no request budget to run down - the thing that rules out most free rate APIs for a search box, where one member typing slowly is several requests. They are fetched at most once every six hours, shared by every reader, and only when a query actually names an amount, so a search for a word waits on nothing and nothing about a query leaves the site. The answer prints the day it is quoting rather than implying the rate is live, because the ECB publishes on working days and a weekend answers with Friday's numbers. If the rates cannot be reached there is no line at all: a stale number shown as today's would be worse than none, and the three catalogues still have something to say. Requested 2026-09-02 by John.

    Area
    platform
    Name
    いまのそうば · 今の相場 Ima no Souba · today's rate, in the search box
  • v0.265.0Convert Japanese era years in searchあんざんいらずAnzan Irazu2026-09-02

    Typing Heisei 3 is a request to be told a number, and no catalogue holds one - the search read the digit instead and answered with thirty rows about three, so the only question on the page with a real answer got everything except it. An answer is a second kind of result now: worked out rather than looked up, and shown above the catalogues because it is what was typed. 1991 sits where a glyph would, with 平成3 beside it and the reading underneath. The five modern eras are covered, back to Meiji in 1868, written in kanji or in Latin letters, with or without the , in whichever romanization of a long vowel somebody learned - Showa, Shouwa and Shōwa are the same era - and 元年 read as the first year it means. A year an era never reached answers with nothing rather than with arithmetic: 昭和 stopped at 64 and 平成 at 31, so Showa 65 is not a late date, it is not a date. The answer sits outside the results deliberately, because Taisho 5 is a date the catalogues hold nothing for and an answer that vanished when the page said nothing matched would be missing exactly when it was wanted. The catalogue rows still run underneath, since 令和 is also a word somebody may want the reading of. Requested 2026-09-02 by John.

    Area
    platform
    Name
    あんざんいらず · 暗算いらず Anzan Irazu · the era year, without the arithmetic
  • v0.262.0The maps live at addresses that readれんらくみちしるべRenraku Michishirube2026-09-02

    A map was /map?region=21, which says nothing to a reader, a link in a chat or a search engine. A map is a place, so it is addressed as one: /maps, /maps/japan, /maps/japan/gifu, /maps/united-states/california, /maps/canada/ontario. Every part of it can be linked to on its own, choosing a region or a country writes the path, and the back button walks them. A path naming a country or a region that does not exist is a 404 rather than a quiet fall back to Japan. The old address is gone rather than redirected - a site with two addresses for one page has to explain which is the real one - which is the pattern the rest of the site's addresses will follow. Requested 2026-09-02 by John.

    Area
    platform
    Name
    れんらくみちしるべ · 連絡道標 Renraku Michishirube · an address you can hand to somebody
  • v0.261.0Map insets collide with the mainlandるーぷでかこむRuupu de Kakomu2026-09-02

    A projection puts Okinawa where it really is, which on a map framed to the mainland is on top of Kagoshima, so the two read as one place; and it puts Alaska and Hawaii in the Pacific off California, Alaska hard against the left edge and drawn wider than Texas. Each is now seated in a box of its own, the way every published map of those countries does it: Okinawa in open sea to the south-east, Alaska and Hawaii stacked clear of the left edge in the order a wall map has them. The boxes are chosen against the data rather than by eye, and a test holds them to it - no other region's bounds may reach into one - so a box cannot quietly come to rest on a prefecture again. Zoomed to a single region the map still draws it where it belongs. Reported 2026-09-02 by John with screenshots.

    Area
    platform
    Name
    るーぷでかこむ · ループで囲む Ruupu de Kakomu · the far islands, framed apart
  • v0.260.0The map's region panel cannot be scrolledりかいしやすいRikai shiyasui2026-09-02

    Choosing a region filled a panel taller than the card that held it, and the card clipped the overflow rather than scrolling it, so the emblem and everything under it could not be read at all. The panel is given a real height beside the map and scrolls within itself, and it stays put while the region list scrolls past. Its text was set at one weight throughout, which made a page of facts read as a page of shouting: the labels are quiet, the values are not, each fact's Japanese sits on its own line under the English rather than running on, and the blocks have room between them. The hint above the map is one line now, whatever it says - pointing at a long name used to wrap it and push the map down, moving the whole board under the pointer. Reported 2026-09-02 by John with screenshots.

    Area
    platform
    Name
    りかいしやすい · 理解しやすい Rikai shiyasui · a panel you can actually read
  • v0.258.0Three member pages drew their own headersよそおいをあわせるYosooi wo Awaseru2026-09-02

    Lists, History and Profile each drew a header of their own - History a hand-rolled copy of the shared one, Lists and Profile something else again - so a member moving between their own pages met three different tops. All three take the shared header now, with their pictures and their actions in the slots it provides, from the same place the six dashboard tabs take theirs. Reported 2026-09-02 by John as part of making every page consistent.

    Area
    platform
    Name
    よそおいをあわせる · 装いを合わせる Yosooi wo Awaseru · the same top on every page
  • v0.254.0Explore becomes Learn, Map becomes MapsめだつよびかたMedatsu Yobikata2026-09-02

    The header group called Explore is where a member goes to learn - the two explorers, the school grades, the practice sheets, the maps - so it is called Learn. The maps entry is called Maps, since there are three countries behind it and more to come, and the page names itself the same way. Requested 2026-09-02 by John.

    Area
    platform
    Name
    めだつよびかた · 目立つ呼び方 Medatsu Yobikata · called what it is for
  • v0.230.0Lists at the top level; Admin only in the menuここのこたえKoko no Kotae2026-09-01

    Lists lived under Explore, which is where you go to find things; a list is something you made and come back to, and it was two clicks from everywhere. It is a destination of its own in the header now. Admin went the other way: it is a workspace rather than a place a member studies, so it has left the header row - which is now the same for everyone - and appears once in the account menu, for admins. The menu used to repeat every admin page, eleven entries, which was a second copy of the admin workspace's own tab row; the workspace is one click away and its tab row is the registry.

    Area
    platform
    Name
    ここのこたえ · 個々の答え Koko no Kotae · each thing in its own place
  • v0.226.0A page for every source, and what we hold from itかぞえてかくにんKazoete Kakunin2026-09-01

    Every credit on the site linked straight out to its vendor, which answered who and nothing else. Each one now leads first to a page of ours about that source: what we hold from it in numbers, when it was last brought in and how long ago that is in words, which release of theirs it came from where they publish one, what we take and under what terms, and only then the way out. Six sources have a page - WaniKani, KANJIDIC2, KanjiVG, kanjiapi.dev, Tatoeba and the school curriculum tables - each a tab away from the others, with an overview reachable from the footer. The three that live in the database stamp their own imports; the three built into the site as files say which upstream version they were built from. A credit is addressed by a key now rather than by an object, so a new source is one registry entry, one description and one page that already exists.

    Area
    platform
    Name
    かぞえてかくにん · 数えて確認 Kazoete Kakunin · counted, and checked against its source
  • v0.225.0The timeline is the ticket boardおなじちょうめんOnaji Choumen2026-09-01

    Several agents work this repository at once, in sessions that cannot see each other, and requests were being tracked in the chat that received them - which is how a fix could ship for something nobody had written down, and how two sessions could build the same thing. The timeline JSON was already the one file they all read, so it is now the board. Every request, bug or idea goes in before the work starts, through pnpm backlog add, which takes a free ordering number, today's Vancouver date and the file's own escaping - the three things that went wrong when the file was edited by hand. An agent claims an entry before building it and puts it down if it stops; a claim cannot be taken over, only released. pnpm backlog prints what is open, what is in progress and who holds it, and how many are bugs, because a bug and a feature now say which they are. The admin release page shows the same claim and the same bug flag on each planned row. The rule is written into the agent instructions, so it holds for the next session as well as this one.

    Area
    platform
    Name
    おなじちょうめん · 同じ帳面 Onaji Choumen · one ledger, kept by everyone
  • v0.221.0A digit is a numberあらびあのすうじArabia no Suuji2026-09-01

    Searching for 1 found nothing at all. Not a near miss - nothing: the catalogues hold and the meaning One, and neither of them contains the character 1, so a search that matches substrings of characters, readings and meanings had nothing to match against. Typing a digit is a reasonable way to ask for a number and every dictionary a learner has used answers it. A digit now reaches the number it names: 1 finds and One, 10 finds , 24 finds 二十四, and a digit inside a phrase is read too, so 2 people reaches . The round ones are offered both ways, spelled out and bare - ten thousand is written 一万 but the character somebody typing 10000 wants is . A full-width digit reads the same, since that is what a Japanese keyboard produces. Above eight figures it offers nothing rather than a long spelling that would match nothing, and a query with no digits in it is left exactly as it was.

    Area
    platform
    Name
    あらびあのすうじ · アラビアの数字 Arabia no Suuji · the digits everyone types
  • v0.220.0Results in columns, with filtersわけてならべるWakete Naraberu2026-09-01

    Search answered with one ranked column and a pill on every row saying which catalogue it came from. That is right and it is not enough: four catalogues answer a common character at once and they answer different questions - WaniKani knows what you are learning it as, the school grades know when a child is taught it, the dictionary knows the characters nobody teaches - and interleaving them by score left the reader sorting that out row by row from a pill. They sit side by side now, one column each, so a catalogue's whole answer reads or is ignored in a glance, and a column that found more than it shows opens on its own. Above them is a filter row on both axes, because the results have two and neither answers the other's question: what kind of thing a row is decides whether it is worth reading, and which catalogue holds it decides which column it sits in. A chip that is off keeps its count, so a hidden kind reads as hidden rather than as absent, and turning the last one off turns everything back on rather than leaving a page with nothing on it. The filters ride in the address, so a narrowed search can be sent to somebody and the back button walks them. The arrows learned the shape: up and down walk a column, left and right cross between them, keeping the row where the next column is long enough and clamping to its last row where it is not - WaniKani answers with forty-five rows and the school grades with one, so every sideways move is between lists of different sizes and a move that landed on nothing would read as the keyboard being broken.

    Area
    platform
    Name
    わけてならべる · 分けて並べる Wakete Naraberu · sorted apart and set out side by side
  • v0.219.0Say whose work it isろごのなふだRogo no Nafuda2026-09-01

    Four sources are borrowed here and three of them were credited. Tatoeba's sentences named Tatoeba, the stroke drawings named KanjiVG, the dictionary facts named KANJIDIC2 - each drawing its own paragraph, in its own file, with its own idea of what an external link should do. The meanings, the readings and the mnemonics are WaniKani's, they are by far the largest borrowing of the four, and they named nobody. They do now, on the vocabulary and radical pages and in the explorer's detail panel, and the four paragraphs are one component - so the next surface that shows borrowed content credits it by using the thing that draws it rather than by somebody remembering to. A source under its own terms rather than a public licence names no licence, and is not made to look as though it granted one. The credit itself moved out of the sentence loader on the way, which is server-only: a client component that wanted the Tatoeba credit was dragging the database client into the browser bundle.

    Area
    platform
    Name
    ろごのなふだ · ロゴの名札 Rogo no Nafuda · the nameplate on the work
  • v0.217.0A way back out of the resultsるーとのもどりRuuto no Modori2026-09-01

    Arrowing down through the results was a one-way trip. The list loads the next stretch as you approach the end, so it grows under you: forty rows into the search box was far off the top of the screen, and the only route back was pressing up forty times - and overshooting downward on the way loaded more rows to climb. Nothing was looping, but nothing was leading out either, which reads the same from the keyboard. Escape now returns to the box from any row, and Home goes to the first row and then out to the box, both in a single press. Coming back also scrolls the box into view, which it did not before: the results scroll inside their own card on a page that scrolls too, so focus could land on a box still hidden above the results and typing went somewhere nobody could see.

    Area
    platform
    Name
    るーとのもどり · ルートの戻り Ruuto no Modori · the way back along the route
  • v0.216.0Recent items, not recent searchesりょうほうのこすRyouhou Nokosu2026-09-01

    The history remembered what you typed and forgot what you found. Search water, read down forty rows, open 水兵 - and what was kept was water. The question was recorded and the answer thrown away, which is backwards: the thing worth getting back to is the word, not the guess that led to it. Anything that opens a subject now adds to the list, from the results rows and from the suggestions under the box alike, so it grows as the browser is used rather than only when the search page is visited. A remembered subject reads like the row it came from - its glyph in its type's colour, its meaning beside it - and a remembered search keeps the clock icon, so the two kinds of row are told apart at a glance. Entries are kept by where they lead rather than by what they say, because the kanji and the word are one character and two pages, and keying on the character would have quietly dropped whichever was opened first. It is one store behind one key, so the header dropdown, the phone sheet and the results page are three views of the same history.

    Area
    platform
    Name
    りょうほうのこす · 両方残す Ryouhou Nokosu · it keeps both
  • v0.215.0A result opens the thing it foundらいちゃくのばしょRaichaku no Basho2026-09-01

    Searching for 水泡 found it - Foam, vocabulary, level 46 - and selecting it opened the library explorer, which answered No item matched 水泡 about the word it had just been shown. The explorer was not being stubborn: it is built from the member's own levels and stops at theirs, so a member on level 17 has no level 46 for the word to appear in, and no filter would have helped. Results led to a list, and a list is free to answer with nothing. Words and radicals now have pages of their own, next to the kanji page that already existed, and every result leads to one: one subject, named in the path, showing its meanings, readings, the WaniKani explanation, the kanji it is built from or the kanji built from it, and example sentences that use it. They are public, because they describe a subject and not a member - which also ends the other half of this, where a signed-out reader got no link at all for a word or a radical and the row was dead text that looked like a link. Radicals are addressed by name rather than by glyph, since WaniKani draws a good number of them and those have no character to be addressed by. The address takes no viewer at all now, so a link copied out of a search works for whoever it is sent to.

    Area
    platform
    Name
    らいちゃくのばしょ · 来着の場所 Raichaku no Basho · the place you arrive at
  • v0.212.0Every member page is a pageやねのあるやどYane no Aru Yado2026-09-01

    Six member addresses were not pages. Study, the WaniKani and JLPT explorers, Read, Stats and News were rewrites onto one component - the address bar said one thing and the server was handed the same file with a dashboard parameter, so the query string had never gone away, it had only stopped being visible. That is why those six drifted into six different layouts without anybody editing six files, and it had a standing cost: the shared file loaded every level snapshot on the account for all of them, so opening Read to read a table of yen fetched seventeen levels of WaniKani subjects it would never show. The three explorers were a second layer of the same thing, all three built at once with two hidden by stylesheet. Each of the six is a real route now and loads only what it shows. Read wants an account id. News wants the member's level. Only the JLPT explorer pulls the JLPT table and the member's kanji index, which used to be decided by a query parameter and is now decided by which page you asked for. The shared work is two loaders rather than one long file, the tab-switching component is gone because routing does that, and there are no rewrites left at all. A test holds the line, because a rewrite is the easy way to add an address and it is the wrong one: it buys a URL and skips the page.

    Area
    platform
    Name
    やねのあるやど · 屋根のある宿 Yane no Aru Yado · every lodging with a roof of its own
  • v0.211.0A search outranks the filters it lands inもとめるもくひょうMotomeru Mokuhyou2026-09-01

    Following a search result into an explorer landed in whatever that explorer was last left set to. Searching inu and clicking the dog arrived in a lesson-mode queue: of 157 matches it showed 2, and not one of the 34 kanji - the very character searched for among them. No filter on screen explained it, because the mode had been restored from the last visit rather than chosen, so it read as the search being broken. A search in the address now outranks the restored state: the queue mode, the tagged-list filter and the locked toggle are skipped rather than restored and then undone, which was a race the restore won about half the time. The searches you already ran also appear in the header dropdown, not only on the search page. It is the same component reading the same store on both, so an empty box offers the same thing wherever it is, and typing replaces them with suggestions as before.

    Area
    platform
    Name
    もとめるもくひょう · 求める目標 Motomeru Mokuhyou · the mark you are aiming for
  • v0.210.0Read and News are real pagesめくっためやすMekutta Meyasu2026-09-01

    Six member addresses were not pages. Study, both explorers, Stats, News and Read all pointed at one file through a rewrite - the address bar said /users/john/read and the server was handed /users/john?dashboard=read - so the query string had not gone away, it had only stopped being visible. That is why those six had drifted into six different layouts without anybody editing six files, and it had a running cost: every one of them loaded every level snapshot on the account, each carrying that level's subjects, so opening Read to look at yen totals fetched seventeen levels of WaniKani data it would never show. Read and News are real pages now, with their own routes and their own loading. Read needs an account id. News needs the member's level. Neither needs anything else, and neither asks for it. The shared work - who is asking, whose page it is, whether they may see it - is one function rather than six copies. Stats and the three explorers are still on the old page and are the next to move.

    Area
    platform
    Name
    めくっためやす · めくった目安 Mekutta Meyasu · the guide turned face up, no longer folded away
  • v0.209.0Lists you can actually manageむかえるむねMukaeru Mune2026-09-01

    The page is called Your lists and had no way to make one: every list had to begin as a selection on an explorer, saved under a name. That is one honest way to build a list and not the way somebody starts kanji I keep losing - they name the thing first and fill it as they meet them - so arriving here wanting to start one found nothing to click. There is a New list button on it now, and a list may be empty, which is what lets the naming come first; a list holding nothing says so rather than showing a blank strip. Emptying an existing list by editing is allowed for the same reason, since permitting an empty list to be created while refusing to empty one is a rule that holds in only one direction, and deleting is still its own button for being rid of the list rather than of its contents. The contents preview was set in the kanji accent at the card's heaviest weight, so a strip of thirty-five characters shouted over the name that identifies the list; the characters are what the card is about, but the name is what you scan for, so the preview is quieter and the name leads.

    Area
    platform
    Name
    むかえるむね · 迎える棟 Mukaeru Mune · the roof that takes you in
  • v0.207.0The selection shows what is in itまとめるまくらMatomeru Makura2026-09-01

    The selection bar said twelve chosen and showed none of them, which is where a count stops being useful: you cannot tell whether the one you meant went in, whether a shift-sweep took one too many, or which of the twelve is the mistake, and the only remedy was to clear everything and start again. The chosen characters now sit in the bar as tags, each one removable by clicking it, so a wrong pick costs a click rather than the whole selection. Collapsed it is a single line ending in what is left over, since eighty characters would otherwise push the buttons off the screen, and the full set is one click away. Saving gained the other half of its job at the same time: it only ever made a new list, so building one across three sittings left three lists named almost the same thing. The lists that exist are offered first, each showing how many of the chosen it does not already hold, with naming a new one underneath. Adding is a union rather than a replacement, which is the difference between extending a list and emptying it.

    Area
    platform
    Name
    まとめるまくら · まとめる枕 Matomeru Makura · the pillow that gathers it all up
  • v0.205.0One top for every member pageへいこうなへだてHeikou na Hedate2026-09-01

    Study, the two explorers, Stats, News and Read are one page under six addresses, and each had grown a different top. Study and the explorers opened with a decorative banner and then kept their real title inside a filter panel that can be collapsed. Stats and Read had each built a header card of their own, similar but not the same. Read went further and put its Challenge and Check-ins toggle on a row above that card, so its heading sat a row lower than on any sibling - which is what made the set look less like one product the more of it you visited. There is one header now: a picture, the page name, a line saying what the page is for, and room on the right for what the page lets you do. The picture is per page, deliberately, because a page should still read as itself at a glance; the arrangement is not. The banner is gone from these six, the two private header cards are gone, and the toggle that used to push a heading down now sits below it with the rest of the content. What is still uneven, and is the next piece rather than a thing anybody should have to notice twice, is that the three explorers name themselves a second time inside their own panels.

    Area
    platform
    Name
    へいこうなへだて · 平行な隔て Heikou na Hedate · walls set parallel, every room the same shape
  • v0.202.0A selection survives the page turnはずさないはさみHazusanai Hasami2026-09-01

    Choosing items on an explorer kept its state in the component, and turning to page two is a navigation: the page remounted and took the selection with it - both the characters picked and the fact that picking was happening at all. Building a list of twenty across three pages is the ordinary way to do it, and it could not be done. The selection is now held for the sitting rather than for the component, under a key per surface so the grade explorer and the JLPT explorer do not overwrite each other. A session is the right span: a half-built selection is a task somebody is in the middle of, so it should survive a page turn and a stray reload without being handed back next week. Three links built from a selection still pointed at the practice sheet's old query-string address and did nothing when clicked - the same shape of break as the chooser chips, in the places that were not on screen when that was fixed.

    Area
    platform
    Name
    はずさないはさみ · 外さない鋏 Hazusanai Hasami · the grip that does not slip
  • v0.201.0The practice chips work againのばすのこぎりNobasu Nokogiri2026-09-01

    Moving practice to /practice/jlpt/5 changed where the page reads its collection from and left every control on it still writing that collection into the query. Clicking G2, or WaniKani level 17, changed the address and nothing else: the page re-read a path that had not moved and rendered exactly what it was already showing. The link builder now produces the address the page actually reads - the collection in the path, and only how the sheet prints in the query - and a test asserts that what it writes parses back to what was asked for, which is the check that was missing rather than another eye on a screenshot. Building those links also dragged the server-only practice reader into the browser bundle, taking the page down with a 500, so the source names now live in a small module of their own with no database behind them. Verified by clicking the chips rather than by typing addresses, which is how the bug was found in the first place.

    Area
    platform
    Name
    のばすのこぎり · 伸ばす鋸 Nobasu Nokogiri · the saw that reaches further
  • v0.200.0The words the catalogue had missedねっこのねどこNekko no Nedoko2026-09-01

    Subject content is meant to come from the local catalogue rather than from WaniKani on every request - that is what makes the study queue quick. Ninety-eight subjects were not in it, so each one went out to the API instead, every time anybody's queue happened to include it. Almost all of them were the kana-only vocabulary a beginner meets first: これ, ホテル, おはよう, コーヒー, ありがとう. The reason was an interrupted sync months ago. A sync that stops keeps a cursor and a resumed run carries on from it rather than going back for what it skipped, so the gap stayed open and quietly widened as related words pointed at each other. There is a backfill for it now, and it is deliberately narrow: it works out what the app can ask for, subtracts what the catalogue holds, fetches only the difference, and inserts. It never updates and never deletes, because every row it writes was established as absent moments before - correcting content that is merely stale is the sync's job, and a tool that could overwrite is a tool that could lose something. It reports and writes nothing unless asked twice.

    Area
    platform
    Name
    ねっこのねどこ · 根っこの寝床 Nekko no Nedoko · a bed for the roots, the first words included
  • v0.196.0The card is not a buttonとなりのとびらTonari no Tobira2026-09-01

    Every subject on an explorer sat inside one big control. The card was a button, and it holds buttons of its own - trouble, favourite, and the tick that chooses it - which is a control inside a control on four hundred and twenty-eight of them, one for every card on every list. What that costs is not theoretical. A screen reader announces the whole card as a single button and never reaches the favourite inside it, so the only way to mark a character as trouble is to see it. A keyboard arrives at the card and finds no way in. The glyph is the button now and the card is a plain container around it, which is the shape the saved lists and the history rows already used, so this is the odd one out being brought into line rather than a new idea. The controls at the glyph's foot are its neighbours instead of its children - the same corners, the same placement, nothing moved on screen - and each is reached, announced and pressed on its own. A whole card still answers a mouse click where it did before, because that is worth keeping and costs nothing once it is no longer the only way in.

    Area
    platform
    Name
    となりのとびら · 隣の扉 Tonari no Tobira · the door beside it, and it opens too
  • v0.195.0Practice is not a page under gradesてのひらのてじゅんTenohira no Tejun2026-09-01

    Writing practice lived at /grades/practice, which read as though the grades explorer owned it. It never did: it builds sheets from school grades, WaniKani levels, JLPT levels, either tagged list, or a set picked by hand on any surface. It is the thing you do to a collection rather than a page belonging to one of them, and filing it under one made the other four look like guests. It is a surface of its own now, at /practice, with the collection in the path - /practice/jlpt/5, /practice/grade/2, /practice/trouble - and how the sheet prints staying in the query, because that is how you are practising rather than what. A bare /practice opens the chooser, which is the point of it being top level: it is where you decide what to practise. A level on a list, or a source that does not exist, returns a 404 rather than a default sheet. The Back to grades button went with the move, since practice is no longer somewhere you arrive from grades, and the navigation now lists Practice beside the explorers rather than beneath one.

    Area
    platform
    Name
    てのひらのてじゅん · 手のひらの手順 Tenohira no Tejun · the steps that fit in a palm
  • v0.194.0One address, no shimsつたえるつちTsutaeru Tsuchi2026-09-01

    The grades explorer shipped its path move with a redirect from the old query-string address, on the assumption that links already sent had to keep working. They do not: the site has no users yet, and a compatibility layer for links nobody sent is a second code path to understand, test and eventually remove in exchange for nothing. The redirect is gone, the collection root simply opens on the first grade because that is where the navigation points, and there is exactly one address for a grade. The rule is now in AGENTS.md so it is not relearned: change the thing and update every caller, with two exceptions where data outlives code - persisted database values like the revenge enum member and the batchSize sentinel, and anything already written to production, which needs migrating rather than shimming.

    Area
    platform
    Name
    つたえるつち · 伝える土 Tsutaeru Tsuchi · the ground that carries word
  • v0.193.0The grade lives in the pathちずのちかみちChizu no Chikamichi2026-09-01

    John asked for explorer addresses that make sense, and the search half of that shipped already: every explorer reads q. This is the other half, starting with the grades. The grade moved out of the query and into the path - /grades/3 rather than /grades?grade=3 - because it says which collection is being looked at, which is what a link means to whoever receives it, and it is what a cache can key on. Searching and paging stay in the query, since they describe how a collection is being read rather than which one it is. Links already sent still work: the old address redirects to the new one carrying the search and page with it, and results built before the change land where they should. A segment that names no grade now returns a 404 rather than quietly rendering grade one, so a wrong link stops looking like a working one, and the writing-practice route beneath the same folder is untouched. The other two explorers follow this shape next.

    Area
    platform
    Name
    ちずのちかみち · 地図の近道 Chizu no Chikamichi · the shortcut the map shows
  • v0.192.0Articles, kept where the work isたよりのたなTayori no Tana2026-09-01

    Written notes on what changed and why were being handed over as links to pages hosted elsewhere, which put them outside the repository, outside admin and outside version control - three places they belong. Admin now has an Articles tab: an index of pieces newest first with their length, and a reading page for each at a width prose is comfortable at. An article is a component in the same folder rather than a markdown file, because the site has no markdown renderer and adding a dependency to read four internal notes is a dependency for nothing, while a component inherits the site's own type, spacing and colour and cannot drift from them. The prose vocabulary is fixed - a lead, headings, points, figures, a release row and a note - so an article cannot quietly invent its own styling, and the list is a single registry, because an article that is not in it does not exist. The first piece is the write-up of the search rebuild and the two corpora that shipped alongside it.

    Area
    platform
    Name
    たよりのたな · 便りの棚 Tayori no Tana · the shelf where the letters are kept
  • v0.191.0The glyph is text tooそこぢからのそらSokojikara no Sora2026-09-01

    Splitting the subject colours into a brand weight and a darker text weight fixed the pills, where a colour carries ten-pixel uppercase, and left the other half untouched: the character itself, drawn in the brand colour at twenty-four pixels and up. WCAG asks 3:1 there rather than 4.5, and radical cyan reached 2.41:1 on white - so the pill reading RADICAL was legible while the beside it was not. Radical is the only hue that moved, darkened by the least that clears the floor, and the dark theme keeps the original because on that ground it is the readable one at 7.06:1. Kanji and vocabulary were already above the line and are untouched, so the site still looks like itself. The pill ink moved a shade with it, since the tint it sits on is mixed from the brand colour and had darkened underneath it.

    Area
    platform
    Name
    そこぢからのそら · 底力の空 Sokojikara no Sora · the sky that holds its strength
  • v0.190.0One name for a searchせいとんのせんろSeiton no Senro2026-09-01

    Every explorer takes the same parameter for a search now. There were four names for the one idea - the grade explorer used q, and the WaniKani, JLPT and study explorers each had their own - and the shared search bar coped by writing all three legacy names on every submit and reading whichever one matched the surface it happened to be on. Nothing was broken by it. What it cost was guessability: the address for finding a character depended on which explorer you were standing in, so no link to a search could be worked out without reading the code first, and the search results had to hardcode a different query for each destination. It is q everywhere, which is what a reader expects and what one explorer already used. Links and bookmarks already sent to people keep working - the old three are still read - but nothing writes them any more, so they drain out of circulation instead of being carried forever. A test holds the line: no file may spell one of those parameters for itself again.

    Area
    platform
    Name
    せいとんのせんろ · 整頓の線路 Seiton no Senro · tidied track, all one gauge
August 202649 releases
  • v0.187.0Text you can actually readさやかないろSayaka na Iro2026-08-31

    Muted grey text across the app sat at 3.07 to one against a 4.5 floor - readable if your eyes are good and the room is bright, and not otherwise. It was on 751 nodes, and nothing about it looked wrong to whoever chose it, which is how contrast problems survive: faint reads as tasteful to the person picking it and as missing to the person who cannot see it. Every muted step below the readable one is raised to the lowest that clears the floor against both the white surface and the page background. The three subject colours had the same problem as pill labels - the radical pill worst at 2.21, half what a small uppercase label needs - but those colours are the brand, so they are untouched. A second, darker token was added for text on a tinted ground, and only pill labels use it; every glyph, border, fill and accent still reads the original. Faintness is kept where it carries meaning: a disabled pagination button, the off state of a toggle, the greyed corner a round is not using, the ghost completion that must not look typed, and the glyph drawn behind stroke order to trace over. Those are listed one by one with the reason, and a test holds the floor everywhere else.

    Area
    platform
    Name
    さやかないろ · さやかな色 Sayaka na Iro · a colour you can make out clearly
  • v0.185.0Sentences that show the kanji at workけっしてけはいKesshite Kehai2026-08-31

    Readings and meanings say what a kanji is; a sentence says what it does, and the site's own examples come from WaniKani - shown to WaniKani members, absent everywhere else, including the public page a shared kanji link opens. Tatoeba publishes its corpus weekly as plain exports, which is the supported way to take it and the reason nothing here scrapes anything, and 232,731 Japanese sentences with an English translation are now ingested and indexed by the characters they contain. They arrive easiest first: each was scored at ingest by its length and the cost of its hardest character, so opens with 水をくれ! rather than with one of the other 1,644 sentences it appears in. Near-repeats that differ only in punctuation are folded together, since Tatoeba holds 水をくれ! and 水をくれ。 separately and both would otherwise spend a slot saying the same thing. Kana-only sentences are kept though nothing can reach them yet, because they are the ones a kana vocabulary word would need later. The corpus is CC BY 2.0 FR, so the credit sits under every set of examples.

    Area
    platform
    Name
    けっしてけはい · 決して気配 Kesshite Kehai · the sign that never fades
  • v0.184.0Results that stay on the screenくぎるくうかんKugiru Kukan2026-08-31

    A hundred results made the search page many screens tall, so scrolling through them carried the navigation, the search box and the source tabs off the top, left the remembered searches below a kilometre of rows, and ended a short answer in a blank field where the list used to be. The rows now scroll inside the card at a height the screen sets, so everything around them stays put: the box, the tabs and the counts hold their place while the results move under them. The recent searches sit outside that scroll rather than at the end of it - a way back you have to scroll a hundred results to reach is not a way back - and the paging observer watches the card instead of the window, so reaching the end of the rows still loads the next stretch.

    Area
    platform
    Name
    くぎるくうかん · 区切る空間 Kugiru Kukan · the space that is bounded
  • v0.183.0Search reads the dictionaryきづくきろくKizuku Kiroku2026-08-31

    Shipping KANJIDIC2 gave the kanji page 10,384 characters but left search reading the same three catalogues, so and - both inside the 1,500 most frequent characters in Japanese - still returned nothing at all. The dictionary is now a fourth source, and it fills gaps rather than adding a fourth copy of every common character: a query for already answers three times over, so the dictionary answers only where no catalogue does, and asking for the dictionary tab on its own is the exception that shows everything it holds. A tie between a catalogue and the dictionary goes to the catalogue, because alphabetical keys would otherwise push a reference row above the row carrying a member's own review state, and a dictionary hit links to the public kanji page since no explorer holds a character nobody teaches.

    Area
    platform
    Name
    きづくきろく · 気づく記録 Kizuku Kiroku · the record that notices
  • v0.181.0The kanji dictionaryおおきなおぼえがきOoki na Oboegaki2026-08-31

    The site knew kanji through three partial catalogues - what WaniKani teaches, the JLPT table, and the school grades - each assembled for its own purpose, so a character arrived with one meaning and a handful of readings, and some never arrived at all: the JLPT table holds neither nor . KANJIDIC2 is the reference those are footnotes to, and it now ships with the site: 10,384 characters with every English meaning, every on and kun reading, the readings only names use, stroke counts, grades, frequency ranks and the old JLPT levels. It is generated by pnpm kanji:build in the same spirit as the map and stroke data - regenerate, never hand-edit - and read the way the stroke data is read, one file of a few hundred kilobytes at a time rather than all 3.7MB. The public kanji page is the first surface to use it, so the 7,400 characters outside the school curriculum now open with meanings, readings and stroke counts instead of a drawing and nothing to read, and a shared link previews as the character and its meaning. KANJIDIC2 is CC BY-SA 4.0, so the credit sits on every page that shows the data and the generated files carry the licence, which is what share-alike asks for.

    Area
    platform
    Name
    おおきなおぼえがき · 大きな覚書 Ooki na Oboegaki · the large memorandum
  • v0.180.0The day a release actually shippedえらぶえのぐErabu Enogu2026-08-31

    An evening of releases claimed to have shipped on the 1st of September while it was still the 31st of August here. UTC rolls over seven hours before Vancouver does, and the release dates were written from UTC while every other date in this app - the Daily Challenge key, the study day - is the Vancouver day. The releases page grew a phantom September sitting above a still-running August, and thirty-two entries across two evenings were affected, some of them stamped hours into the future. All of them are corrected to the day they were really shipped on, respaced so each instant falls inside the day it claims. Two tests now hold the line: no release may claim to have shipped in the future, and each entry date must match the Vancouver day of its own timestamp. Nothing caught this before because a UTC date is a perfectly valid date - it was just the wrong one, and only a reader in the right timezone could see it. The admin releases list also collapses now, the way the public one already did: a hundred and seventy-seven entries each showing a full paragraph is a page nobody can scan, so the line identifies the release and the prose waits until it is asked for.

    Area
    platform
    Name
    えらぶえのぐ · 選ぶ絵の具 Erabu Enogu · choosing the right paint
  • v0.179.0A way in without an accountうけいれるうちUkeireru Uchi2026-08-31

    Every search result linked into one of the viewer's own explorer pages, which sit behind the sign-in wall, so a reader with no account got no link at all: rows of dead text on the page most likely to be reached by somebody who has never signed in. A single kanji already has a public page - it is the one a shared kanji link opens - so that is where an anonymous reader now goes, from both the results list and the suggestion dropdown. A word or a radical drawn as an image has no page of its own, so those still fall back to the results rather than to a link that would land nowhere, and a signed-in member is unaffected: their explorers carry their review state and remain the better destination.

    Area
    platform
    Name
    うけいれるうち · 受け入れる家 Ukeireru Uchi · the house that takes you in
  • v0.177.0Search reads every meaningあらわれるあかりArawareru Akari2026-08-31

    All three catalogues searched every meaning a subject carries and then ranked the hit on its first one alone, so anything matched on another meaning scored zero and was removed by the filter that drops non-matches: the search found the row and then threw it away. Searching magnate returned nothing at all, though it is one of 's meanings, and home returned twenty-one results while missing . Ranking now takes the best score across every meaning the subject holds - including the Heisig keyword, which was searched but never scored - and the row shows the meaning that earned the match behind the one the subject leads with, so a result for magnate no longer reads only King. Against the live catalogues magnate goes from zero hits to two and home from twenty-one to forty-five, while sun still puts first.

    Area
    platform
    Name
    あらわれるあかり · 現れる灯り Arawareru Akari · the light that appears
  • v0.175.0One read where there were twoろんりのろじRonri no Roji2026-08-31

    Every study route checked whether the request was allowed by reading the account, then read the same row again for the member WaniKani token. Counts and queue are what the study page asks for on a timer and review is asked once per answer, so that second read was the single most repeated query in the product - and on the busiest paths it doubled the database work for no information. The columns an access decision needs are three small ones, so they are now selected as part of the read the route was making anyway and the round trip disappears. Five routes moved across: counts, queue, review, upcoming and lesson start. The access check itself got cheaper too: it used to query once for the invite path and again for the Google path when the first did not match, and now resolves who is asking from the request before touching the database at all, so an admin is answered without a query and everybody else costs exactly one. Permission and existence stay separate answers, because a permitted request for an account that has since been deleted is a 404 rather than a 401.

    Area
    platform
    Name
    ろんりのろじ · 論理の路地 Ronri no Roji · a lane laid out by reason
  • v0.174.0Let the database sleepれいせいなれいぞうこReisei na Reizouko2026-08-31

    The study counts and the study queue each re-asked the server every thirty seconds, which is far more often than either can change: review counts move on WaniKani SRS schedule, measured in hours, and the queue is mutated locally as a member answers rather than discovered by polling. The poll was never the mechanism, only a safety net for a session left open while something changed elsewhere - and it was an expensive one. A single open tab was 120 serverless invocations an hour and roughly 240 database queries, since every request checks access and then reads the account again; an evening across the family ran to thousands of both while discovering nothing. The part that actually shows up on the bill is Neon: its compute suspends after five minutes idle and is charged for the time it is awake, so a thirty-second poll meant the database never slept for as long as anybody had the study page open. Both surfaces now poll on one shared interval of five minutes, set just past that suspend threshold on purpose, so a closed laptop lets the database go to sleep. Revalidate-on-focus stays on, so returning to the tab still refreshes at once and the slower poll is never something a member waits on. A test pins the interval against the suspend window and fails if either surface goes back to a hand-typed number.

    Area
    platform
    Name
    れいせいなれいぞうこ · 冷静な冷蔵庫 Reisei na Reizouko · a refrigerator, keeping its cool
  • v0.172.0Recent searches join the listりれきのりぼんRireki no Ribon2026-08-31

    The remembered searches shipped as a card of their own below the results, which read as a separate widget parked under the page rather than as part of what the reader was already scanning. They are now the last rows of the results list itself: the same card, the same row rhythm, the same lane the glyphs occupy - a history icon standing where a glyph would - introduced by a tinted band carrying the heading and the control that clears them, because a search you already ran is a way back rather than an answer and has to be told apart from the results above it at a glance. The end of the results moved inside the list too, so what closes the results sits with them instead of floating below the card. With no list to close out - no query yet, or a query that matched nothing - the rows carry the same card on their own.

    Area
    platform
    Name
    りれきのりぼん · 履歴のリボン Rireki no Ribon · a ribbon of history
  • v0.167.0Every section on a phoneもっともくじMotto Mokuji2026-08-31

    A phone header showed four sections - Leaderboard, Study, Game, Admin - chosen by a hardcoded list of labels. Explore, Progress and Read were not in the markup at all, so on a phone the explorers, the progress pages and the reading pages could only be reached by somebody who already knew the menu button held them. Seven labels will not fit 393 pixels, so the row scrolls sideways now, reusing the same treatment the admin tab row has had for a while: no visible scrollbar, and a fade at the right edge that says there is more, which lifts once you reach the end. Removing the allowlist also removes seven literal labels that would have quietly stopped matching the day a section was renamed.

    Area
    platform
    Name
    もっともくじ · もっと目次 Motto Mokuji · more of the table of contents
  • v0.166.0Study opens from anywhereめざすめあてMezasu Meate2026-08-31

    Tapping Study in the header sometimes did nothing - the address changed and whatever explorer was open stayed on screen. It was only sometimes because from the study page itself the link looked fine, and it was worst on a phone, where the header is the only navigation there is. The cause sat one level below the tab that was fixed in 0.164.0: /study rewrites to dashboard=learn and the bare user page carries no parameter at all, and both resolve to the same tab, so the page could not tell go to study from landed here. The bare page has to reopen whichever tab the member last had, and that restore was overwriting an explicit request to open Study. The two are now told apart at the point the address is read, so a named tab always wins and an unnamed one still restores. The /study rewrite also matched nothing in the resolver and only worked by falling through to the default; it is handled explicitly now.

    Area
    platform
    Name
    めざすめあて · 目指す目当て Mezasu Meate · the mark you are aiming for
  • v0.164.0The link goes where it saysみえるみちMieru Michi2026-08-31

    Clicking WaniKani in the header while on the JLPT explorer changed the address and nothing else - the JLPT explorer stayed on screen under a URL that said library-explorer. Each explorer has its own path but they all rewrite to the one user page with a dashboard parameter, so moving between them re-renders the tab component instead of remounting it, and the active tab was seeded from its prop by useState, which reads its argument once and ignores every later value. The tab now follows the address it is given, adjusted during render rather than in an effect so the old tab is never painted first and corrected a frame later. The bare user page is deliberately left out: that address names no tab, and following the prop there would overwrite the member s last open tab on every visit.

    Area
    platform
    Name
    みえるみち · 見える道 Mieru Michi · a path you can see
  • v0.162.0The searches you already ranほかんのほんだなHokan no Hondana2026-08-31

    Looking a kanji up is rarely a single act - you check , then 家事, then go back to - and retyping it each time was the whole friction. The search page now keeps the searches this browser has run and lists five of them under the results, each one a link back to those results and each with its own way to forget it. Twenty are remembered while five are shown, so forgetting one reveals the sixth rather than leaving a gap, and a single control clears the lot. The history lives on the device rather than the account, which means an anonymous visitor gets the same convenience as a member, and it is read through a store subscription rather than into state after mount, so the panel never flashes empty before it fills.

    Area
    platform
    Name
    ほかんのほんだな · 保管の本棚 Hokan no Hondana · the shelf that keeps things
  • v0.161.0The way out of the dropdownへいきなへさきHeiki na Hesaki2026-08-31

    The see all results row sat at the bottom left of the suggestion list in the same small type as a result, so the one control that leaves the dropdown read as an eleventh, oddly worded result. It is now centred across the full width, set in the same uppercase weight the rest of the site gives an action, and separated from the rows above by its own rule, with the highlighted state tinted rather than greyed so arrowing onto it looks like landing on a button rather than on another row.

    Area
    platform
    Name
    へいきなへさき · 平気な舳先 Heiki na Hesaki · the prow that holds steady
  • v0.160.0An empty search box opens searchふみだすふねFumidasu Fune2026-08-31

    Clicking the magnifier with nothing typed did nothing at all: the submit refused an empty query, so the only way to reach the search page from the header was to type something and then delete it once you arrived. Enter on an empty box was the same dead end. Empty now means take me to search, which is what pressing a search button with nothing to search plainly asks for, and the rule lives in one shared helper so the header, the phone sheet and the search page's own box all answer the same way.

    Area
    platform
    Name
    ふみだすふね · 踏み出す舟 Fumidasu Fune · the boat that sets out
  • v0.159.0Search pages its resultsひらくひきだしHiraku Hikidashi2026-08-31

    Search asked for every match at once and rendered all of it: the query "a" is 122 rows across the three catalogues, and the dropdown threw away all but ten of them after the request had already been paid for. Both surfaces now take a window. The API accepts a limit and an offset, sliced after ranking so the totals and the per-source counts still describe the whole answer; the dropdown starts at ten rows and grows a stretch at a time as the highlight or the scroll comes within reach of the end, up to forty, past which the answer is the results page; and the results page renders its first twenty, appending the next twenty as the reader nears the bottom or presses the button under the list. The dropdown widens its window from zero rather than stepping by offset, because it keeps one row per glyph and a duplicate can straddle any boundary, so a superset is the only window that cannot reorder rows under the highlight.

    Area
    platform
    Name
    ひらくひきだし · 開く引き出し Hiraku Hikidashi · the drawer that keeps opening
  • v0.157.0A door for crawlersのこったのきNokotta Noki2026-08-31

    There was no robots.txt at all, so every crawler that found the site walked all of it - including each member's pages, which are built per request from that member's own data and render a refusal to anybody who is not them. The writing practice sheets made it acute: source, level, sheet size, mode and page all ride in the URL, which is what makes a sheet shareable and also means one school grade is thousands of distinct addresses to a bot following links. That one route took 3,200 serverless invocations in twelve hours, on a site with eight accounts, and the project's daily CPU went from about two minutes to nine and a half the week practice shipped. Member pages, admin, the API and the search results page are now closed; the home page, the release notes, the news pages and the per-character kanji pages stay open, because a family site nobody can find is not more private for it. The rules are tested against the route tree rather than a second copy of the list, so a member page added later is either covered or fails the build.

    Area
    platform
    Name
    のこったのき · 残った軒 Nokotta Noki · the eaves left standing
  • v0.153.0One search box, everywhereなめらかなながれNameraka na Nagare2026-08-31

    The header box and the search page's box were two different controls, and the page you were sent to was the one without autocomplete. Both now run the same combobox: suggestions while you type, the rest of the best match drawn in faint grey after the caret with Enter locking it in as if typed, a clear button once there is something to clear, and the magnifier itself as the submit. Arrowing through the suggestions rewrites the box without spending a single extra search, because what was typed and what is displayed are kept apart - the request still keys on the typed text while the box shows the highlighted row. At rest the header field is half its working width and grows when it is wanted, the results page keeps the site navigation instead of dropping it, and the arrow keys carry on past the last suggestion into the results themselves and back up into the box.

    Area
    platform
    Name
    なめらかなながれ · 滑らかな流れ Nameraka na Nagare · a smooth flow
  • v0.152.0Search understands romajiとどくとうだいTodoku Toudai2026-08-31

    The search placeholder promised "or romaji" and the code never kept the promise: readings are stored in kana, so typing watashi found nothing while わたし found plenty. A query is now folded into every spelling it could mean - the raw text, its hiragana, and its katakana, since JLPT stores on'yomi in katakana - and all three catalogues match and rank against the full set, scoring each hit by its best variant so folding can never demote a result the raw text already earned. The fold is a plain syllable table that accepts Hepburn and common kunrei spellings, doubled consonants, and the n-before-consonant rule, and it refuses to convert anything that is not entirely romaji, so English words never gain a phantom kana reading that outranks their real meaning match.

    Area
    platform
    Name
    とどくとうだい · 届く灯台 Todoku Toudai · the lighthouse whose light reaches
  • v0.151.0A menu that lists everythingてがるなてびきTegaru na Tebiki2026-08-31

    The account menu offered two admin links, "Admin" and "Manage users", while admin had nine pages - so seven of them existed only for somebody who already knew the header was there. It reads the same registry the admin header reads now, so adding an admin page adds it to the menu. The menu also stops shouting: each cluster used to be a bordered card under an uppercase heading, ACCOUNT and GO TO and SETTINGS and ADMIN and ACTIONS, so a dozen links read as five boxed lists. It is one flat column with a hairline where the subject changes, and it hangs off the button it belongs to rather than being pinned to a corner of the window, which is what made it read as floating loose of the header. Game gets its second row as well: six games that were reachable only by scrolling to the hub cards now sit in the header beside every other section's pages.

    Area
    platform
    Name
    てがるなてびき · 手軽な手引き Tegaru na Tebiki · a handbook made simple
  • v0.150.0Search that answers while you typeつかんだつきTsukanda Tsuki2026-08-31

    The header search box waited for Enter and a full page load before showing anything, which is a long way round for a learner who just wants to know where a kanji lives. Now the ten best hits appear under the field as you type, one row per glyph with its meaning, reading and source, ranked by the same scoring the results page uses. The dropdown reuses the existing search endpoint, whose per-query CDN caching means most keystrokes are answered at the edge without touching the database - prefixes are shared by everyone typing them. Arrow keys walk the rows and Enter opens the highlighted hit straight in your own explorer, falls through to the see-all footer, or submits the full search as before; a signed-out visitor gets the results page instead of links that would bounce off the sign-in wall. Japanese suggests from the first character, since one kanji is a real question, while Latin waits for two, since one letter matches half the catalogue.

    Area
    platform
    Name
    つかんだつき · 掴んだ月 Tsukanda Tsuki · the moon, grasped
  • v0.145.0A header with room in itすえるすがたSueru Sugata2026-08-31

    Search was a 96px box that grew to 160px on focus, because three things were competing for the right-hand end of one row: the field, the release codename, and a menu button floating past both. The codename moves to the second row, which every section already drew, and search takes the space it left - 224px rising to 320px on a wide screen - sitting directly beside the menu rather than across the row from it. The second row is now always present, so the header is the same height on every page and the content below stops jumping as you navigate. On a phone search collapses to its icon and opens a full-width field under the header, the way WaniKani and most narrow headers do it; an always-present field there cost about 150px and silently pushed Admin off the end of a row that clips rather than wraps.

    Area
    platform
    Name
    すえるすがた · 据える姿 Sueru Sugata · the form set in place
  • v0.143.0Translation refused at the rootさえぎるさかいSaegiru Sakai2026-08-31

    The previous release bet that declaring every Japanese run lang="ja" would stop Chrome reading the page as Japanese and offering to translate it into English. It did not: "always translate Japanese" is a sticky preference, and once it is set the page's own declarations do not get a vote. So the page refuses translation at the root again. What Chrome was doing is running every string through a Japanese-to-English model, English included, which re-interprets rather than passes through - "Writing practice" came back "First practice". The lang="ja" tagging stays because it is correct and because a screen reader needs it to pronounce a reading instead of spelling the kanji out as English. The cost is that Google Translate can no longer render the interface in another language; the answer to that is a locale layer serving translations we wrote, which the copy modules are already shaped for.

    Area
    platform
    Name
    さえぎるさかい · 遮る境 Saegiru Sakai · the boundary that blocks
  • v0.142.0Japanese declared as JapaneseことわることばKotowaru Kotoba2026-08-31

    Two releases of marking Japanese element by element kept missing places, because the cause was never addressed: the kanji were not declared as Japanese, so a browser counted them, decided the whole page was Japanese, and offered to translate it into English - pushing the English through a Japanese-to-English model on the way, which is how "Writing practice" came back as "First practice" and "Shellfish" as "shellfish". Every Japanese run now carries lang="ja" beside its refusal, which is what the spec asks for: an English document with declared exceptions. That leaves the interface translatable for somebody who needs it in another language, where a blanket refusal at the root would have taken that away, and it tells a screen reader to read a reading with Japanese pronunciation rather than spelling the kanji out as English.

    Area
    platform
    Name
    ことわることば · 断る言葉 Kotowaru Kotoba · words that decline
  • v0.128.0Pagers where the page needs themりんどうりつどうRindou Ritsudou2026-08-30

    Paging is a shared component now, and where it sits is the surface's choice: top, bottom, both or none. The writing practice sheet takes both, because its only Next link used to be three thousand pixels below the fold, past three sheets of empty tracing squares.

    Area
    platform
    Name
    りんどうりつどう · 竜胆律動 Rindou Ritsudou · the gentian's rhythm
  • v0.124.0Counts where you choose, preferences where your account isやなぎのゆうべYanagi no Yuube2026-08-30

    The writing sheet's second row of chips now carries counts, so picking a grade or level is no longer a choice between bare numbers. Theme and Japanese font move from the account menu onto the profile, which already held the name and the visibility - one home for how you want UmaKuma to be rather than two.

    Area
    platform
    Name
    やなぎのゆうべ · 柳の夕べ Yanagi no Yuube · an evening among willows
  • v0.109.0Updates leads with the release nameなのはななぎさNanohana Nagisa2026-08-30

    Each release now shows its codename on the row rather than only inside it, since that is the part anyone remembers. Months collapse, and an admin reaches the release admin page from here instead of finding their own way.

    Area
    platform
    Name
    なのはななぎさ · 菜の花渚 Nanohana Nagisa · rape blossoms along the shore
  • v0.104.0One menu that knows what the header knowsたびたきびTabi Takibi2026-08-30

    The account menu kept its own copy of the navigation beside the header's, and the two had drifted apart. It now reads the same sections the header does, so nothing can go missing again. On a desktop it drops the navigation entirely, since the header already shows it, and keeps only your account, settings, admin and preferences. Settings moves out of the header into the menu, and Updates is reachable without hunting for the version number in the footer.

    Area
    platform
    Name
    たびたきび · 旅焚火 Tabi Takibi · a campfire on the road
  • v0.98.0Layout checks at phone, tablet and desktopこもれびこみちKomorebi Komichi2026-08-30

    Every page is now loaded at three widths and checked for anything hanging outside the screen, with the study menus opened and checked the same way. Its first run found the library upload card running off the side of a phone, which is now fixed.

    Area
    platform
    Name
    こもれびこみち · 木漏れ日小径 Komorebi Komichi · a lane of dappled sunlight
  • v0.94.0Practice reachable from the navかぜのかきごおりKaze no Kakigoori2026-08-30

    Writing practice joins the Explore group instead of hiding behind the grades page, and the sheet keeps the site header on screen while dropping it for print. A nested page no longer lights up its parent's tab as well as its own.

    Area
    platform
    Name
    かぜのかきごおり · 風のかき氷 Kaze no Kakigoori · shaved ice on the breeze
  • v0.91.0Stroke order from searchうきようぐいすUkiyo Uguisu2026-08-30

    A kanji in the search results opens its stroke order without leaving the page. Radicals and vocabulary do not offer it, since neither is a single character with a stroke sequence.

    Area
    platform
    Name
    うきようぐいす · 浮世鶯 Ukiyo Uguisu · floating-world nightingale
  • v0.88.0Refresh the catalogue exportわがしわらびもちWagashi Warabimochi2026-08-30

    The script that exports the WaniKani catalogue could not run at all - it imported a server-only module - so its committed snapshot had drifted to 3,930 of 9,324 subjects. Fixed and regenerated, and dropping the raw payload makes the complete export smaller than the stale one was.

    Area
    platform
    Name
    わがしわらびもち · 和菓子蕨餅 Wagashi Warabimochi · sweets and bracken mochi
  • v0.82.0Search keeps its place on a phoneよざくらよこちょうYozakura Yokochou2026-08-30

    The header search field cost about 150px on a phone and the mobile nav clips rather than wraps, so it had silently pushed the Admin link off the end of the row. On a phone it is now the icon alone, linking to the search page.

    Area
    platform
    Name
    よざくらよこちょう · 夜桜横丁 Yozakura Yokochou · night-blossom alley
  • v0.80.0Search results open where they liveやすらぎやきもちYasuragi Yakimochi2026-08-30

    A search result now opens the explorer that holds it with the search already applied. Signed-out visitors keep the results as a lookup rather than being offered links that would bounce off the sign-in wall.

    Area
    platform
    Name
    やすらぎやきもち · 安らぎ焼き餅 Yasuragi Yakimochi · restful grilled rice cake
  • v0.79.0Modals hold one heightももたろうもなかMomotarou Monaka2026-08-30

    Reported by John: modals grew and shrank with their contents. ModalShell now owns two heights, a content one for forms and a fixed one for lists, and a test fails if a modal hand-rolls its own again.

    Area
    platform
    Name
    ももたろうもなか · 桃太郎最中 Momotarou Monaka · Momotaro wafer cake
  • v0.77.0Search across every catalogueむかしむすびMukashi Musubi2026-08-30

    A search box in the header and a results page that asks WaniKani, JLPT and School Grades at once, ranked into one list with exact characters and meanings first. Filter to a single catalogue with the source pills.

    Area
    platform
    Name
    むかしむすび · 昔結び Mukashi Musubi · old-times knot
  • v0.76.0Public updates pageみちしおみやこMichishio Miyako2026-08-30

    Shipped releases are public at /releases, grouped by month and expandable for the detail. Four entries that described a fixed security weakness precisely carry a cleansed public wording; the admin timeline keeps the honest text and the planned work.

    Area
    platform
    Name
    みちしおみやこ · 満ち潮都 Michishio Miyako · high-tide capital
  • v0.75.0Grouped header navigationまねきまつりManeki Matsuri2026-08-30

    The header drops from eleven flat items wrapping onto two rows to eight groups on one. Explore holds the three explorers, Progress holds History and Stats, Read holds Read and News, and Settings holds Libraries.

    Area
    platform
    Name
    まねきまつり · 招き祭り Maneki Matsuri · beckoning festival
  • v0.66.0Release names show kana and kanjiにこにこにくじゃがNikoniko Nikujaga2026-08-30

    The release name prints its kana reading beside the kanji instead of hiding the kanji in a tooltip, so both scripts are readable at a glance.

    Area
    platform
    Name
    にこにこにくじゃが · にこにこ肉じゃが Nikoniko Nikujaga · smiling potato stew
  • v0.62.0Developer and Advanced modesつるつるつきみTsurutsuru Tsukimi2026-08-30

    Two global mode flags, toggled from the flags page; the footer wears DEV and ADV chips while they are on.

    Area
    platform
    Name
    つるつるつきみ · つるつる月見 Tsurutsuru Tsukimi · silky moon-viewing
  • v0.59.0Release codenamesそよかぜそうめんSoyokaze Soumen2026-08-30

    Every release walks the gojuon: a two-word Japanese name per version, worn in the header like a saying.

    Area
    platform
    Name
    そよかぜそうめん · そよ風素麺 Soyokaze Soumen · gentle-breeze noodles
  • v0.57.0Content-based catalogue syncすずしいすいかSuzushii Suika2026-08-30

    The sync now skips rows whose extracted content is identical, even when WaniKani bumped the timestamp for fields we never store.

    Area
    platform
    Name
    すずしいすいか · 涼しい西瓜 Suzushii Suika · cool watermelon
  • v0.56.0Site version in the footerしのびしんかんせんShinobi Shinkansen2026-08-30

    Every release bumps the version; the footer shows it and the timeline lists each release's number.

    Area
    platform
    Name
    しのびしんかんせん · 忍び新幹線 Shinobi Shinkansen · stealth bullet train
  • v0.55.0Typecheck in the quality gateさわやかさしみSawayaka Sashimi2026-08-30

    quality:check now runs tsc; it caught a fresh test bug on its first local run.

    Area
    platform
    Name
    さわやかさしみ · 爽やか刺身 Sawayaka Sashimi · refreshing sashimi
  • v0.47.0Shared UI primitivesうたううめぼしUtau Umeboshi2026-08-29

    ModalShell, SubjectRows and SubjectCards replace hand-rolled copies.

    Area
    platform
    Name
    うたううめぼし · 歌う梅干し Utau Umeboshi · singing pickled plum
  • v0.46.0Schema drift gateいなずまいなりInazuma Inari2026-08-29

    Deploys stop when the production database is behind the Prisma schema.

    Area
    platform
    Name
    いなずまいなり · 稲妻稲荷 Inazuma Inari · lightning inari
  • v0.41.0Local database and WaniKani mockるんるんるりびたきRunrun Ruribitaki2026-08-28

    Develop offline against a seeded database and a stand-in API.

    Area
    platform
    Name
    るんるんるりびたき · るんるんルリビタキ Runrun Ruribitaki · cheerful bluetail bird
July 20262 releases
  • v0.33.0Server boundary hardeningむげんむぎちゃMugen Mugicha2026-07-31

    Hardened the boundary between server and client code.

    Area
    platform
    Name
    むげんむぎちゃ · 無限麦茶 Mugen Mugicha · infinite barley tea
  • v0.31.0Modal framing passまんまるまっちゃManmaru Matcha2026-07-05

    Consistent panels, background scroll locking and mobile spacing.

    Area
    platform
    Name
    まんまるまっちゃ · 真ん丸抹茶 Manmaru Matcha · perfectly round matcha
May 20262 releases
  • v0.22.0Telemetry ingestにぎやかにんじゃNigiyaka Ninja2026-05-03

    Route and client timing events collected for diagnosis.

    Area
    platform
    Name
    にぎやかにんじゃ · 賑やか忍者 Nigiyaka Ninja · boisterous ninja
  • v0.21.0Global user menuなごみなべNagomi Nabe2026-05-02

    Signed-in identity card available from every page.

    Area
    platform
    Name
    なごみなべ · 和み鍋 Nagomi Nabe · soothing hotpot
April 20264 releases
  • v0.5.0Incremental WaniKani cachingおかしのおうこくOkashi no Oukoku2026-04-08

    Conditional requests and a 5-minute refresh window instead of full refetches.

    Area
    platform
    Name
    おかしのおうこく · お菓子の王国 Okashi no Oukoku · kingdom of sweets
  • v0.4.0Japanese font toggleえがおのえのしまEgao no Enoshima2026-04-04

    Global glyph font switch so kanji render the way the reader expects.

    Area
    platform
    Name
    えがおのえのしま · 笑顔の江ノ島 Egao no Enoshima · Enoshima of smiles
  • v0.3.0Leaderboard deltas and mobile cardsうれしいうまUreshii Uma2026-04-04

    24-hour movement per member and a card layout that survives a phone.

    Area
    platform
    Name
    うれしいうま · 嬉しい馬 Ureshii Uma · happy horse
  • v0.1.0Family leaderboardあまいあんこAmai Anko2026-04-03

    The original surface: ranked family standings behind an admin token.

    Area
    platform
    Name
    あまいあんこ · 甘いあんこ Amai Anko · sweet red-bean paste

Back to UmaKuma