Plan: Transitioning to Forward Deployed Engineer / AI Engineer
백엔드 엔지니어가 FDE·AI 엔지니어로 전환하기 위한 단계별 로드맵
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기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.