What actually happens when you use a tool here.
Not a marketing diagram — this is the real request path for each service, built from what's actually running: FastAPI, Socket.IO, yt-dlp, gallery-dl, FFmpeg, JWT auth, and SQLite. Scroll through, or jump to one below.
Browser to backend and back.
Whatever tool you're using, the request takes the same basic path before it branches into service-specific work.
Idempotency-Key header on write requests. If it's seen that key before, it replays the cached response and skips everything else.Signing in, and staying signed in.
Every account is stored with a bcrypt hash (cost factor 12) never the plain password. Sessions are JWT tokens (HS256), backed by a session row in the database.
Each protected route declares a dependency (Depends(get_auth_context)) rather than going through a global auth middleware it reads the bearer token, looks up the session row, and hands the route an AuthContext with the user's id, username, and role. That's also where ownership gets checked before a route lets you view or change anything of yours. When the JWT expires but the session row hasn't, POST /api/auth/refresh issues a new one without a full re-login. Guest sessions (30-minute TTL, no refresh) work the same way with a placeholder user.
What happens when you paste a link, or drop a file.
Two different tools, one shared pattern: the request returns a job id immediately, and a background thread does the actual work while your browser polls for progress.
Server creates a job record and returns a job id right away
TikTok falls back to a Playwright-based extractor if yt-dlp's fails
Normalizes to H.264/AAC with a faststart moov atom
queued → downloading → done, no realtime push for this one
Job directory is cleaned up after an hour either way
Video, audio, image, or document up to 200 MB
Same queued → converting → done pattern as the downloader
Video/audio/image via FFmpeg; documents via LibreOffice
No hard concurrency limit each job gets its own thread
Once the job status flips to done
How the status indicators stay current.
Your browser opens one persistent Socket.IO connection to the backend. On connect, the server broadcasts a services_status_update event with the full service list and sends it again whenever the page explicitly asks for a refresh, so the dots update without a page reload.
This is the same engineering I build for clients.
If you're evaluating whether I can build something like this for you, happy to walk through the actual architecture.