How raffaelaldrichs/i-save works
iSAVE accepts a media URL, extracts platform metadata and available formats, then queues a selected download, reports progress, and serves the resulting file. Its documented product also includes inline preview, carousel ZIPs, audio bitrate choices, QR handoff, and bookmarklet access. The graph includes the main UI/API path and substantial runtime modules; some subsystem links rely on README statements or SOURCE INDEX references because their implementation excerpts were not provided.
Main entry points: route.ts Download endpoint · jobQueue.ts Job queue · page.tsx Home page · DownloaderWorkspace.tsx Downloader workspace
Components 25
User experience
- Home page
src/app/page.tsx - Downloader workspace
src/components/DownloaderWorkspace.tsx - Media preview
src/components/MediaPreview.tsx - QR handoff
src/components/QrCodeModal.tsx - Bookmarklet help
src/components/BookmarkletModal.tsx
API workflows
- Extract endpoint
src/app/api/extract/route.ts - Batch extract
src/app/api/extract-batch/route.ts - Download endpoint
src/app/api/download/route.ts - Progress endpoint
src/app/api/download/progress/route.ts - Download worker
src/app/api/worker/download/route.ts
Media processing
- Audio formats
src/lib/audioOptions.ts - Carousel ZIP
src/lib/carouselZip.ts - Media downloader
src/lib/mediaDownloader.ts
Jobs and storage
- Job queue
src/lib/jobQueue.ts - Job state
src/lib/jobStore.ts - Progress tracking
src/lib/progressTracker.ts - Media storage
src/lib/storage.ts - Temporary storage
src/lib/tempStorage.ts - URL security
src/lib/security.ts - Rate limiting
src/lib/rateLimit.ts - Redis job store
src/lib/redisStore.ts - QStash broker
src/lib/qstash.ts
Platform extraction
- Extractor manager
src/lib/extractors/index.ts - Platform extractors
src/lib/extractors
Other components
- Visitor
Connections 30
- Visitor → Home page: opens
src/app/page.tsx - Home page → Downloader workspace: renders
src/app/page.tsx - Downloader workspace → Media preview: previews media
README.md - Downloader workspace → QR handoff: offers handoff
src/components/DownloaderWorkspace.tsx - Downloader workspace → Bookmarklet help: offers guidance
src/components/DownloaderWorkspace.tsx - Home page → Extract endpoint: requests metadata
src/app/page.tsx - Home page → Download endpoint: requests download
src/app/page.tsx - Home page → Progress endpoint: polls progress
src/app/page.tsx - Extract endpoint → URL security: validates URL
src/app/api/extract/route.ts - Extract endpoint → Rate limiting: limits requests
src/app/api/extract/route.ts - Extract endpoint → Extractor manager: extracts metadata
src/app/api/extract/route.ts - Batch extract → Extractor manager: extracts batch
src/app/api/extract-batch/route.ts - Extractor manager → Platform extractors: dispatches providers
src/lib/extractors/index.ts - Platform extractors → Audio formats: generates audio choices
src/lib/extractors/instagram.ts - Platform extractors → Carousel ZIP: packages slide media
src/lib/extractors/reddit.ts - Download endpoint → URL security: validates URL
src/app/api/download/route.ts - Download endpoint → Job queue: enqueues job
src/app/api/download/route.ts - Download endpoint → QStash broker: publishes job
src/app/api/download/route.ts - Download endpoint → Job state: updates failure state
src/app/api/download/route.ts - Download worker → Job queue: processes job
src/app/api/worker/download/route.ts - Progress endpoint → Progress tracking: reads progress
src/app/api/download/progress/route.ts - Progress tracking → Job state: reads and updates
src/lib/progressTracker.ts - Job queue → Job state: stores job state
src/lib/jobQueue.ts - Job queue → Media downloader: runs download
src/lib/jobQueue.ts - Job queue → Temporary storage: registers output
src/lib/jobQueue.ts - Job queue → Redis job store: persists jobs
src/lib/jobQueue.ts - Media downloader → Carousel ZIP: bundles slides
src/lib/mediaDownloader.ts - Temporary storage → Media storage: delegates storage
src/lib/tempStorage.ts - Download endpoint → Media storage: serves stored file
src/app/api/download/route.ts - Visitor → Batch extract: submits batch