Problem: YouTube search for tango performances is inefficient. Results are buried due to YouTube's algorithmic sorting and inconsistent metadata.
Solution: Tango Video Search provides a streamlined interface to filter by dancer or orchestra with minimal friction.
How it works: It’s powered by an LLM-curated index built from YouTube metadata. That means faster, more accurate retrieval of the performances you're looking for.
- Filter videos by dancer combinations
- Filter videos by orchestras
- Responsive video grid layout
- Quick filtering through video cards
- Video metadata display
- Framework: React Router v7 (started as a Remix project)
- UI: Radix UI + Tailwind CSS
- Database: SQLite with Drizzle ORM
- Deployment: Fly.io
To run the development server:
npm run dev
Note
The database is not included in the repository.
The application uses SQLite via Drizzle ORM with a database file at data/sqlite.db
by default, or override the path using the DATABASE_URL
environment variable. The schema includes:
- Videos (YouTube metadata)
- Performances (tango-specific metadata)
- Dancers, Orchestras, Songs, Singers, and Curations
Deploying the application is handled by GitHub Actions, which will automatically deploy to Fly.io when you push to the main
branch.
After preparing a new database file:
-
Copy the
.db
file into/data
and update thesqlite.db
symlink:ln -s sqlite-2025-MM-DD.db sqlite.db
-
Connect to the Fly.io instance and remove the old database:
fly ssh console rm /data/sqlite.db*
-
Upload the new database file:
fly sftp shell put data/sqlite.db /data/sqlite.db
-
Restart the application:
fly apps restart