Plan: Transitioning to Forward Deployed Engineer / AI Engineer
一份分階段路線圖,供後端工程師轉向 FDE 與 AI Engineer 角色——解讀頭銜混亂、應用型 LLM 技術棧與面試循環。
AI 翻譯
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證Hindi literacy games
翻譯準備中
取自儲存庫 README
正在載入完整 README。
檢視完整 README ↗Simple, mobile-first Hindi games. No login, no backend.
Six bright letter games for young / low-literacy children, built for PadhaiPal:
/fish) — tap the fish carrying the target letter./blocks) — tap the two blocks that spell the pictured word./memory) — match each picture card with its letter card./wordtrain) — drag the letter coaches onto the track,
in order, to spell the pictured word./pondhop) — hop across the river on the stones showing
the target letter, before the timer runs out./lekhan) — trace / write the letters (then 2-letter words)
on a slate.All six share the 8 letters ब स प र त क च ल and their sounds
(public/audio/letters).
And one health game for adults, built for tb.care:
/tb, and in English at /tb/en) — a decision-path game about getting through TB
treatment alive, cured, and without infecting anybody at home. Line drawings,
a spoken line on every screen, and real choices a poor North Indian household
faces during six months of treatment. See docs/tb-game.md
for its content sources, the tb.care modules each scene comes from, and what
still needs doing. The voice recordings it needs are listed in
docs/tb-audio-script.md (npm run tb:audio
regenerates that list from the game), and the scene photographs it can use are
prompted in docs/tb-art-prompts.md.A simple, bright, mobile-first Hindi letter recognition game for young / low-literacy children, built for PadhaiPal.
A target Hindi letter shows at the top of a cheerful pond. Fish swim around, each carrying one letter. The child taps every fish carrying the target letter before the timer bar runs out.
The 8 practised letters are: ब स प र त क च ल
requestAnimationFrame
writing transforms directly to the DOM (no per-frame React re-renders).npm install
npm run dev # http://localhost:3000
# or
npm run build && npm run start
Everything you'll commonly want to tweak is small and commented:
| What | File |
|---|---|
| The Hindi letters + picture emoji + look/sound-alike hints | lib/letters.ts |
| Level difficulty (fish count, speed, time, distractors) | lib/fish/levels.ts |
| How a round's fish are chosen + fish colours | lib/fish/round.ts |
| Audio playback + safe fallback | lib/audio.ts |
| The game screen / fish / overlays | components/fish/PondGame.tsx, components/fish/Fish.tsx |
| Colours, sizes, animations | app/globals.css |
The picture beside the target letter is a big emoji (see emoji in
lib/letters.ts) — crisp on small screens and easy to change, no image files
needed. e.g. ब → 🦆 (बत्तख़), स → 🧼 (साबुन). The one exception is ल (लट्टू),
drawn as a small SVG LattuIcon since no emoji is a real Indian spinning top.
The finish screen shows public/images/shared/padhaipal.jpeg (with a branded-badge
fallback if it isn't present yet).
public/audio/letters-word/<id>.mp3 — the picture+letter recording (the
letter and its word, e.g. "ब … बत्तख़"). Played on the frozen round intro and
on "सुनो".public/audio/letters/<id>.mp3 — the letter-only sound (shared with the
blocks game). Played when a fish is tapped.public/audio/wrong-baap.mp3 — the soft "baaap" for a wrong tap.public/audio/clap.mp3 — clapping/cheer when a level is won.public/audio/wa-wa-wa.mp3 — sad "wa wa wa" when a level is lost.public/audio/endgame-message.mp3 — spoken message on the finish screen.If any file is missing, the game plays a gentle synthesized tone shaped to
match (so it never breaks). Drop in real recordings with the same filenames and
they're used automatically. See public/audio/letters/README.md.
Next.js (App Router) + React + TypeScript. No database, no auth, no tracking.
A second game (route /blocks) for blending letters into words.
A picture (+ spoken word) appears at the top of a grid of 14 letter-blocks. The child taps the two adjacent blocks that spell the word:
Boards are pre-generated offline and verified, not made up at runtime:
scripts/generate-boards.mjs builds boards by reverse-construction, then checks
that they clear completely with a unique adjacent pair at every step (so the
child's correct move is never ambiguous).lib/blocks/boards.ts; one is chosen at random per game.node scripts/generate-boards.mjs > /tmp/boards.json (then regenerate the data file).| What | File |
|---|---|
| Words (Devanagari, letters, picture emoji, audio) | lib/blocks/words.ts |
| Pre-generated winnable boards | lib/blocks/boards.ts (do not hand-edit) |
| Board generator | scripts/generate-boards.mjs |
| Grid gravity / adjacency rules | lib/blocks/engine.ts |
| Game screen / block tile | components/blocks/BlocksGame.tsx, components/blocks/Block.tsx |
public/audio/words/<id>.mp3 — the 12 spoken words (bus, cup, sar, ras, bal,
chal, sab, kab, sach, par, pak, tap).public/audio/letters/<id>.mp3 sounds.A third game (route /memory): a concentration game matching picture
cards with letter cards.
cols × rows moves (= 2× the pairs — generous). Clear
the board in time → reward video (see below) + next level. Run out →
"wa wa wa" and you retry the same level.When a level is won, instead of applause we play a short clip for the last
matched letter (e.g. a duck forming ब) — to make the picture↔letter link more
memorable. Clips live in public/videos/<letterId>.mp4 and the available ids are
listed in lib/letterVideos.ts (all 8 letters). A letter with no clip would
fall back to the applause sound, so nothing breaks. The child can tap the video
or आगे to continue.
| What | File |
|---|---|
| Level grids + background colours | lib/memory/levels.ts |
| Game screen / card | components/memory/MemoryGame.tsx, components/memory/Card.tsx |
| Which letters have a reward video | lib/letterVideos.ts |
public/audio/pictures/<id>.mp3 — the picture word for each letter,
auto-trimmed from the fish game's picture+letter recordings (the trailing
letter removed). Letter taps reuse public/audio/letters/<id>.mp3.playBingSound in lib/audio.ts); drop in public/audio/bing.mp3 to use a
real one.A fourth game (route /wordtrain) for blending letters into a whole word,
in the right order.
A picture (+ spoken word) appears at the top; the written word is not shown. A train track displays one shadow "coach" per letter (so the child sees how long the word is), and the eight letter coaches sit at the bottom (one per letter — an unlimited supply). The child drags a coach onto the track or just taps it — either way it lands in the next slot:
A session ramps by word length — two 2-letter, two 3-letter, then two
4-letter words (see buildSession in lib/wordtrain/words.ts) — and finishing
links back to PadhaiPal on WhatsApp. The first word gently pulses the correct
next coach as a demo.
| What | File |
|---|---|
| Word list (2-letter reuse Blocks; 3- & 4-letter) + session ramp | lib/wordtrain/words.ts |
| Game screen / drag-and-drop / train | components/wordtrain/WordTrainGame.tsx |
| Coach colours, track + rail, coach sizes | app/globals.css (Word Train section) |
public/audio/words/<id>.mp3 — the 2-letter words reuse
the Blocks recordings; the 3-letter (बरस, पलक, सबक, रबर) and 4-letter (कसरत,
सरकस) words have their own. Letter "clicks" reuse the shared
public/audio/letters/<id>.mp3 sounds. Missing files fall back to a
synthesized tone, as in the other games.public/audio/words and add an
entry to lib/wordtrain/words.ts — the game already handles any word length.A fifth game (route /pondhop) for recognising one target letter
repeatedly while following a path across a river.
The far bank (top) shows the target picture. Stones are scattered across the water; the reachable ones (the next hop) are highlighted with a yellow ring. A frog crosses by hopping only on the stones showing the target letter:
Five levels use more & smaller stones — 8 stones / 3 hops, then 12 / 4, 16 / 5, 20 / 6, 24 / 7 — each level a different water tint and a different target letter (random order per game). Applause plays at the end of each level; the final screen links back to PadhaiPal on WhatsApp.
| What | File |
|---|---|
| Stones / targets / time / size per level | lib/pondhop/levels.ts |
| Row layout + distractor letters | lib/pondhop/board.ts |
| Game screen / frog / stones | components/pondhop/PondHopGame.tsx |
public/audio/letters/<id>.mp3; the intro prompt reuses
the picture+letter recording (public/audio/letters-word/<id>.mp3), as in the
fish game.A sixth game (route /lekhan) for writing the letters, then 2-letter
words, by finger on a slate.
A picture (and, on some levels, the letter/word) shows at the top and its sound plays. The child draws on a chalkboard slate; each level finishes after 5 items, with applause, then the next level. The order is randomised.
lib/lekhan/strokes.ts) leaving a dotted line — showing the shape,
order and direction. The child then runs a finger over the dotted line and it
fills in solid white. White can only appear on the letter's path (a band
around the strokes), so stray marks don't show. When enough of the letter has
been made white, it's complete.No hand-authored letter paths are needed: the target text is rendered to an offscreen canvas (using the font) to get a reference ink mask on a coarse grid. When the child lifts their finger:
The same reference works for the dotted-trace level and the blank / from-memory
levels alike (the reference is simply hidden). Thresholds live at the top of
components/lekhan/Slate.tsx (OFF_MAX, COVER, GRID) and are easy to tune.
Word levels (L4/L5) go further: instead of only checking the trace, they
recognise which word was written and accept it only if it's the target.
Recognition is two-tier (lib/lekhan/recognize.ts):
inputtools.google.com), which returns Devanagari
candidates; we accept if the target is among the top matches. This handles
any handwriting, not just our 12 words.Either way, writing a different or garbled word genuinely fails, and the game never breaks — the worst case is the fully-offline fallback.
| What | File |
|---|---|
| Level modes / slate shape / item count / colours | lib/lekhan/levels.ts |
| Trace level (L1): chalk demo + dotted line + white reveal | components/lekhan/GuidedSlate.tsx |
| Per-letter stroke paths + order (tune the shapes here) | lib/lekhan/strokes.ts |
| Slate (L2–L5): drawing + validation | components/lekhan/Slate.tsx |
| Game screen / prompt / sequence | components/lekhan/LekhanGame.tsx |
public/audio/letters-word/<id>.mp3) for letters and the word recording
(public/audio/words/<id>.mp3) for words.Code: MIT. The LIFTeracy name and logo are not licensed; forks must not use them.