ESP32-S3 Bench Guide
ESP32-S3 N16R8 bench guide: live pinout, lessons, simulators and the bench log.
翻译准备中
Master Japanese kanji with interactive stroke order diagrams. Search JLPT N5, N4, N3, N2, and N1 kanji by character, meaning, or reading. Learn proper stroke order through animated guides.
翻译准备中
教育TypeScript · PythonGitHub @aristidesnakos在线运营者未确认
试用过了吗? 点一下就好,无需登录。
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证a Japanese kanji stroke order dictionary
翻译准备中
取自仓库 README
正在加载完整 README。 以下为已保存的摘录。
Master Japanese kanji through interactive stroke order practice
MichiKanji (michikanji.com) is a web platform that helps Japanese
language learners master kanji from JLPT N5 through N1. It teaches proper stroke order through
interactive diagrams, drills recall with spaced repetition, and tracks progress — all without an
account, because everything is stored in the browser.
The repository is named imiwa for historical reasons; the product is MichiKanji.
config.ts is the single source of truth for the product name and domain.查看完整 README ↗Master Japanese kanji through interactive stroke order practice
MichiKanji (michikanji.com) is a web platform that helps Japanese language learners master kanji from JLPT N5 through N1. It teaches proper stroke order through interactive diagrams, drills recall with spaced repetition, and tracks progress — all without an account, because everything is stored in the browser.
The repository is named
imiwafor historical reasons; the product is MichiKanji.config.tsis the single source of truth for the product name and domain.
localStorage only — no database, no auth水, water, みず, スイ, mizu and sui all find 水, and a pasted word such as 日本 finds
each of its kanji. Exact matches rank first. lib/kanji-search.ts is the whole predicate;
pnpm validate:search holds it to that./kanji?search=… is wired to a schema.org SearchAction/kanji/review)lib/srs.ts) with a learning-step overlay/kanji/progress)noindex by design — it is a private dashboard, not a landing page/api/kanji-sheets?character=水 returns a print-ready A4 sheet: the character, its readings,
stroke count, the KanjiVG stroke diagram, and an 80-square practice grid with crosshair guides/free-resources/api/kana-sheets does the same for hiragana and katakanalib/announcements/config.ts is the only file edited per announcement.Esc, a CTA click, or three
impressions with no interaction all retire it permanently. Each entry also carries a precondition
so we never announce a feature to someone who already uses it.docs/3rdVersion/announcement-banner-roadmap.md.All user data lives in localStorage. There is no database and no server-side user state.
| Key | Written by | Holds |
|---|---|---|
kanji-progress | hooks/useKanjiProgress.ts | learned characters + timestamps |
kanji-srs | hooks/useKanjiSRS.ts | SM-2 card state per character |
mk-announcements | lib/announcements/state.ts | which announcements have been acknowledged |
cookie-consent | components/CookieConsent.tsx | consent choices, 365-day expiry |
interface KanjiData {
kanji: string; // The character
onyomi: string; // Chinese reading(s), kana
kunyomi: string; // Japanese reading(s), kana
meaning: string; // English definition
}
interface KanjiProgressData {
learnedKanji: string[]; // Learned characters
timestamps: Record<string, number>; // Learning timestamps, for the progress chart
}
Stored blobs are shape-validated on read rather than trusted, and are never deleted on a mismatch — an unrecognised shape may still be recoverable, and destroying someone's progress is worse than an empty chart.
Counts are the characters actually in this dataset, not the official JLPT lists:
| Level | Characters | Scope |
|---|---|---|
| N5 (Beginner) | 82 | everyday vocabulary, numbers, basic verbs |
| N4 (Elementary) | 171 | more complex daily situations |
| N3 (Intermediate) | 380 | workplace and academic contexts |
| N2 (Upper-intermediate) | 259 | news, literature, professional contexts |
| N1 (Advanced) | 1,004 | academic and specialised texts |
| Total | 1,896 |
Third-party content carries obligations that are load-bearing, not decorative:
See docs/prd/content-source-licence-investigation.md
before adding any new content source.
pnpm install # Install dependencies (pnpm 9.15.4+)
pnpm dev # Start the development server
pnpm build # Production build — no postbuild step; the sitemap is served
# dynamically by app/sitemap.xml/route.ts
pnpm lint # ESLint
pnpm analyze # Build with the bundle analyzer
The repository has no unit test runner. Correctness is enforced by targeted validators that run in CI and can be run locally:
pnpm validate:schema # structured data / JSON-LD across page types
pnpm validate:sentences # published example sentences against the content contract
pnpm validate:announcements # announcement queue contract + a replay of the acknowledgement model
pnpm announcements:status # human-readable state of the announcement queue
validate:announcements is worth calling out: beyond checking the config, it replays the
acknowledgement model against synthetic visitors and dates, asserting that first-time visitors are
never shown a bar, that dismissing one entry never suppresses another, and that the impression cap
retires an ignored bar on its own. Those are promises to users, and this is the only place they are
asserted.
| Workflow | Trigger | Purpose |
|---|---|---|
announcements-check | PR / push touching the banner | queue contract + acknowledgement model |
announcements-status | daily 07:00 UTC | reports the queue into one self-closing tracking issue |
sentences-check | PR / push touching sentence data | published sentences against the contract |
schema-check | PR / push | structured data validity |
lighthouse-ci | push | performance and Core Web Vitals budgets |
indexation-alarm | weekly | indexed-page trend via the Search Console API, with a dead-man's switch |
indexnow-submit | push | submits changed URLs to IndexNow |
components/uimounted flag (CookieConsent, AnnouncementBanner); hooks use an
SSR-safe default state hydrated in an effect (useKanjiProgress, useKanjiSRS).Shipped since the first version of this document: spaced repetition, the progress dashboard, per-character practice sheets, and the announcement system.
Still open:
public/assets/web-app-manifest-*.png with no manifest referencing them.MichiKanji is a modern approach to traditional Japanese language learning, combining technological innovation with respect for authentic Japanese writing practices.