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.