DanceMore 🕺
Learn to dance more with DanceMore
DanceMore is a dance learning platform designed to make practicing choreography fun, engaging, and accessible from anywhere. Choose from a library of choreographies, watch the reference video, then practice in front of your webcam while an on-device AI pose model (MoveNet) analyzes your movements in real time. You can also upload your own dance videos, allowing DanceMore to automatically extract key poses so you can learn virtually any choreography. Every practice session is saved to your account, where a personalized dashboard tracks your progress with performance history, personal bests, daily streaks, and completed choreographies. To encourage healthy training habits, DanceMore also includes a daily warmup checklist and rest-day reminders to help you practice consistently and safely.
Tech stack
| Layer | Tech |
|---|---|
| Frontend | Next.js 16 (App Router), React 19, TypeScript, Recharts |
| Pose estimation | TensorFlow.js + MoveNet (SinglePose Lightning), fully in-browser — video never leaves the device. Model self-hosted under public/models/ (no tfhub dependency at runtime), with CPU-backend fallback when WebGL is unavailable |
| Scoring | Joint-angle comparison (8 joints), pure TypeScript (dancemore-spike/src/lib/pose.ts) |
| Backend | Django 6 + Django REST Framework, JWT auth (SimpleJWT) |
| Database | SQLite locally (zero config) · Postgres (Neon) in production |
| Deploy | Render (render.yaml blueprint) + any static-friendly Next host (e.g. Vercel) |
Repo layout
dancemore-spike/ # Next.js frontend (trainer, dashboard, /author move-capture tool)
dancemore-api/ # Django REST backend (auth, attempts, stats)
render.yaml # Render blueprint for the backend
Run locally (zero config — SQLite, no env vars needed)
Backend (Python 3.12+):
cd dancemore-api
python -m venv venv
venv\Scripts\activate # Windows (macOS/Linux: source venv/bin/activate)
pip install -r requirements.txt
python manage.py migrate
python manage.py seed_demo # optional: demo account with 3.5 weeks of history
python manage.py runserver 8000
Frontend (Node 18+):
cd dancemore-spike
npm install
echo NEXT_PUBLIC_API_URL=http://localhost:8000 > .env.local
npm run dev
Open http://localhost:3000, register (or log in as demo / demo1234), allow the camera, and practice. Capture your own moves at http://localhost:3000/author and paste the exported JSON into dancemore-spike/public/moves.json.
Deploy notes
Backend → Render (uses render.yaml at the repo root):
| Env var | Value |
|---|---|
SECRET_KEY |
generated by the blueprint |
DEBUG |
False |
DATABASE_URL |
your Neon Postgres connection string |
CORS_ALLOWED_ORIGINS |
the deployed frontend origin, e.g. https://dancemore.vercel.app |
ALLOWED_HOSTS |
not needed — RENDER_EXTERNAL_HOSTNAME is trusted automatically |
After the first deploy only, seed the demo account from the Render shell (it wipes and reseeds, so it's deliberately not in the build command):
python manage.py seed_demo
Frontend → Vercel (or similar): set one env var, NEXT_PUBLIC_API_URL, to the Render service URL. There are no other backend references.
Verification tooling
dancemore-api/verify_api.py— API smoke test (auth, attempts, stats, isolation) against a running serverdancemore-api/verify_streak.py— streak edge cases across day boundaries (python manage.py shell < verify_streak.py)dancemore-spike/e2e_verify.cjs— Playwright end-to-end run of the full product (register → warmup → practice → save → dashboard → rest nudge → logout)
Built With
- django
- djangorestframework
- github
- javascript
- jwt
- movenet
- neon
- next.js
- postgresql
- python
- react
- render
- restapis
- tensorflow.js
- typescript
- vercel

Log in or sign up for Devpost to join the conversation.