A gamified family task management app that motivates children through rewards, avatars, and friendly competition.
ExSize helps families turn chores into fun. Parents assign tasks with ExBucks rewards, children complete them to earn currency, unlock avatar items, and climb the family leaderboard.
- FastAPI — Modern async Python web framework
- SQLAlchemy — ORM for database models
- PostgreSQL (Neon) — Production database
- SQLite — Local development database
- JWT + bcrypt — Authentication
- React 19 + Vite — Modern build tooling
- TypeScript — Type safety
- TailwindCSS + shadcn/ui — Styling
- React Router — Navigation
- PWA — Offline support
exsize-prod/
├── src/exsize/ # Backend FastAPI app
│ ├── routers/ # API endpoints
│ ├── models.py # SQLAlchemy models
│ ├── database.py # DB connection
│ ├── security.py # Auth utilities
│ └── app.py # FastAPI app entry
├── frontend/ # React frontend
│ ├── src/
│ │ ├── components/ # React components
│ │ ├── pages/ # Page components
│ │ ├── layouts/ # Layout wrappers
│ │ └── api.ts # API client
├── tests/ # Backend tests
└── plans/ # Implementation plans
- Python 3.12+
- Node.js 18+
- uv (Python package manager)
# Install dependencies
uv sync
# Run development server
uv run uvicorn --app-dir src exsize.app:app --reload
# Run tests
uv run pytest tests/ -xcd frontend
# Install dependencies
pnpm install
# Run dev server
pnpm dev
# Build for production
pnpm buildLocal development uses SQLite. The database file is exsize.db.
After schema changes, delete exsize.db and restart the server to recreate tables.
Browse the database:
uvx datasette exsize.db- Backend: Render (auto-deploys from
mainbranch) - Database: Neon PostgreSQL
- Cold starts: ~30s on free tier
Environment variables on Render:
DATABASE_URL— Neon connection stringCORS_ORIGINS— Allowed frontend originsPORT— Server port
Proprietary — Crystal Games Studio