← Projects

You2Idea

AI-powered startup idea extraction from YouTube. Search 700+ indexed videos from 46 curated channels (Y Combinator, Greg Isenberg, My First Million, Alex Hormozi).

Live: you2idea.com

Features

Terminal UI

Hacker aesthetic: green-on-black CRT terminal, JetBrains Mono, scanline effects, command-line metaphors (/search, @channel, $ prompts). No rounded corners, no gradients – pure terminal.

Tech Stack

Frontend: Astro 5 (SSG + SSR), Tailwind CSS 4, Fuse.js (client-side fuzzy search), Graphology (graph visualization), HuggingFace Transformers (browser-side embeddings).

Backend: Python 3.13 + Temporal (daily pipeline), FalkorDB (graph DB), yt-dlp (transcript extraction).

Infra: Cloudflare Pages + Workers + R2 (subtitles, data files).

Data Pipeline

Video data is pre-exported from FalkorDB (indexed by solograph) as JSON files:

make export   # Export fresh data from FalkorDB
make update   # Export -> build -> deploy (one command)

Automated Daily Refresh (Temporal)

Daily pipeline runs via Temporal on VPS:

Temporal server (:7233)
  -> you2idea-worker container
     -> YoutubeRefreshWorkflow (daily 02:00 UTC)
        -> load_channels (channels.yaml, 45 handles)
        -> index_channel x 45 (parallel, max 5 concurrent)
        -> export_data/vectors
        -> fetch_transcripts
        -> upload_r2
        -> deploy_cloudflare

VPS Management

# SSH tunnels for Temporal UI + gRPC
ssh -f -N -L 8082:localhost:8082 -L 7233:localhost:7233 google

# Manual trigger
ssh google 'docker exec you2idea-worker python3 -c "..."'

# Deploy file changes
scp deploy/docker-compose.yml google:~/you2idea-cron/
ssh google 'cd ~/you2idea-cron && docker compose up -d --build'

Persistent Volumes

Host path Purpose
./data/youtube/ FalkorDB graph.db (325MB)
./data/wrangler/ Wrangler OAuth tokens
./data/vtt/ ~750 VTT subtitle files

Development

pnpm install
pnpm dev        # http://localhost:4321
pnpm build      # Production build
make deploy     # Deploy to Cloudflare Pages

Testing

cd deploy/
pytest test_workflow.py -v --asyncio-mode=auto    # Unit (mock, no VPS)
python test_workflow.py smoke localhost:7233       # Smoke (needs SSH tunnel)

Links

Sources

Related