# ፊደል — Amharic Fidel
A self-contained React app for learning the Amharic script (fidel): all 34
consonant families across 7 vowel orders, vocabulary, phrases, a spaced-repetition
review queue, a word builder, a speed round, a letter-tracing pad, and a reader.
Originally built as a Claude.ai artifact (a single component running in a
sandboxed environment with its own `window.storage` API). This is that same
component — logic, curriculum, and copy unchanged apart from one privacy
paragraph (see "The one copy change" below) — running as an installable
Vite + React PWA.
## Running it locally
```bash
npm install
npm run dev
```
Then open the printed `
localhost` URL.
```bash
npm run build # production build to dist/
npm run preview # serve that build locally
```
The app runs fully with zero setup below — nothing here requires an
account with anyone.
## Persistence
Everything — `xp`, `cards`, streaks, and any letter/word/phrase you record
yourself — lives in this device's own `localStorage` by default, via
`src/lib/windowStorage.js`, a polyfill for the artifact sandbox's
`window.storage.get/set/delete` API. Single-device, no account, nothing
sent anywhere else, unless you turn on sync (below).
Audio clips you record are capped at ~700KB client-side — fine for a
one-second pronunciation clip, but keep that in mind if you ever want
longer audio.
## Syncing progress across devices (optional)
Off by default. Turned on from the Chart tab ("Sync across devices," near
"start over"): tap **create a sync code** on one device, then enter that
same code on another to bring your progress and recordings over. From
then on, changes on a linked device push automatically — no further
action needed on that device.
**No account, no email — the code is the only credential.** It's a
random 10-character string generated on-device
(`generateSyncCode()` in `src/lib/progressSync.js`), and it's genuinely
the only way in: the actual security lives in Postgres, not the …