Public
Remixed
AI Dance Practice Dashboard with privacy-first pose tracking
Val Town is a collaborative website to build and scale JavaScript apps.
Deploy APIs, crons, & store data – all from the browser, and deployed in milliseconds.

πŸ•Ί PoseFlow β€” AI Dance Practice & Choreography Dashboard

A full-stack, privacy-first AI dance practice platform with real-time pose tracking, community choreography discovery, and remote teacher analytics.

Live App: Open PoseFlow

✨ Features

View A β€” Choreography Discovery & Creator Hub

  • Grid of community dance loops with YouTube thumbnails, timestamps, and creator info
  • Creator Studio form to submit new loops (YouTube URL/ID, title, timestamps, choreographer)
  • Generate Challenge Link β€” B2B feature for dance instructors to create shareable challenge slugs with target sync scores

View B β€” Live Practice Arena (Privacy-First)

  • Split-screen workspace with YouTube player + live webcam pose tracking
  • Interactive overlay controls: Video Mirror, 8-Count Beat Marker, Pitch-Normalized Slow-Mo, Neon Skeleton Layer with angle detection
  • Webcam activation via navigator.mediaDevices.getUserMedia β€” all processing is 100% local
  • Animated canvas skeleton with color-coded joints (green = good form, orange/red = misalignment)
  • Neon Skeleton Mode & Ghost Mode Overlap (skeleton overlaid on YouTube video)
  • Live Sync Score ticker with real-time updates
  • Finish & Log Session β€” generates random score (75-95%), analytical breakdown (Timing, Posture, Stance), saves to database
  • Export Flex Clip mockup with watermarked video preview for TikTok/Reels

View C β€” Remote Teacher Dashboard & Analytics

  • Personal progress stats: Total Minutes, Average Sync Score, Daily Habit Streak
  • Session history table with score breakdowns
  • Teacher Assignments Tracker with anonymous student opens, pass rates, and leaderboard

πŸ—οΈ Architecture

Rendering mermaid diagram...

πŸ“ File Structure

index.ts                          ← Hono backend (API + static serving)
frontend/
  index.html                      ← HTML shell (Twind, dark theme, animations)
  index.tsx                       ← React entrypoint
  favicon.svg                     ← PoseFlow stick-figure logo
  lib/
    types.ts                      ← Shared TypeScript interfaces
    api.ts                        ← API helpers + utilities (formatTime, etc.)
  components/
    App.tsx                       ← Root: navigation, state, data fetching
    DiscoveryHub.tsx              ← View A: loop grid + challenge modal
    CreatorStudio.tsx             ← Loop submission form
    PracticeArena.tsx             ← View B: split-screen practice workspace
    SkeletonCanvas.tsx            ← Animated canvas skeleton overlay
    TeacherDashboard.tsx          ← View C: stats, sessions, challenges

πŸ—„οΈ Database Schema (SQLite)

TableColumns
loopsid, youtube_video_id, title, start_time, end_time, description, creator_name, created_at
challengesid, loop_id, target_score, teacher_name, challenge_link_slug (unique), created_at
practice_sessionsid, loop_id, date, duration_minutes, sync_score, breakdown_json

πŸ”’ Privacy First

All webcam video feeds are processed entirely on the client side using navigator.mediaDevices.getUserMedia and canvas-based rendering. Zero video data is uploaded to the server. Only numerical practice results (sync scores, breakdowns, durations) are persisted to the database.

πŸ› οΈ Tech Stack

  • Backend: Hono on Val Town (Deno runtime)
  • Database: Val Town built-in SQLite (Turso/libSQL)
  • Frontend: React 18 + Twind (Tailwind CSS at runtime)
  • Icons: Lucide React
  • Video: YouTube IFrame API