Personal project case study
English Learning
A personal vocabulary app evolved from English Word Cards into a full-stack learning project with SvelteKit, FastAPI, and PostgreSQL.
- SvelteKit
- TypeScript
- Python / FastAPI
- PostgreSQL
- SQLAlchemy / Alembic
- Google sign-in
Overview and my role
I build this personal project to practice backend ownership around a real daily review workflow. The app supports English reviews and shared English/Japanese deck and card management. This is personal project evidence alongside my professional frontend experience.
Problem and constraints
The original English Word Cards app used Google Sheets and Apps Script. As the app grew, identity, card ownership, review scheduling, and retry behavior needed an explicit backend boundary. Existing vocabulary data also needed a controlled migration.
Solution
A SvelteKit interface calls an authenticated FastAPI API backed by PostgreSQL. Users review due English cards with swipe or button controls and submit their decisions together. English and Japanese decks use the same management model.
Engineering decisions
The backend verifies Google identity and scopes database operations to the authenticated owner. Review decisions commit current state and review events atomically. An idempotency key lets a retry return the same result instead of applying the review twice.
A validated CSV import transfers legacy Sheets data into an owned deck. Current reviews use FastAPI and PostgreSQL exclusively, with no automatic Apps Script fallback or dual writes. Separate runtime and migration configuration supports the Cloud Run release workflow.
Validation evidence
PostgreSQL integration checks cover ownership, review transactions, idempotent replay, and controlled imports. Browser checks cover the API cutover and deck/card management flow.
Lessons and current limits
This project made retry semantics and transaction ownership concrete. A successful request, a timed-out request, and a safe retry need distinct behavior in both the UI and database.
The app targets personal study. Daily review focuses on English, while deck and card management supports both English and Japanese.