ScrollLater - Save Now, Hear Later

Read-it-later apps are where articles go to die. ScrollLater inverts pull into push with a 90-second daily audio briefing.

Role: Full Stack Developer. Team: Individual. Status: Live. Year: 2026.

Overview

Problem. Read-it-later apps are where articles go to die. Saves accumulate, none are read, the app becomes guilt.

Approach. Invert the pull into a push. Make the briefing the product. Every morning at 7am, ScrollLater hands you a 90-second audio summary of yesterday's saves, narrated by a tuned ElevenLabs agent. Listening is the daily ritual. The long-form read is optional.

Outcome. Daily-use product. Cross-device via iOS Shortcuts, a Chrome extension, and a PWA share sheet. Semantic search via pgvector embeddings. 39 commits, 139 files, 11 Edge Functions deployed.

Lessons. The briefing-as-product framing only works if the first-of-day delivery is rock-solid. Ninety percent of the engineering went into reliability of that one hourly cron: timezone correctness, idempotency, failure isolation per user. Nothing else matters if the briefing is late.

Architecture

  • Frontend: Next.js 15 PWA with offline service worker
  • Backend: Supabase with 11 Edge Functions, pgvector for semantic search
  • Audio: ElevenLabs Conversational AI agent `agent_2001kpfrb0zrektav0a1vrtpjhsj`
  • Save surfaces: Chrome extension, iOS Shortcut, PWA share target

Live → GitHub → Launch page →

Key features

  • Daily 7am audio briefing narrated by tuned ElevenLabs agent
  • Chrome extension for one-click saves
  • iOS Shortcut + PWA share sheet for cross-device capture
  • Offline-first service worker, syncs when online
  • pgvector semantic search across saved articles
  • 11 Supabase Edge Functions handling ingestion and scheduling
  • Failure isolation per user so one bad save cannot poison the cron

Technical details

  • Frontend: Next.js 15 App Router, PWA plugin, offline service worker
  • Backend: Supabase + 11 Edge Functions (Deno)
  • Vector search: pgvector over sentence embeddings
  • Audio: ElevenLabs Conversational AI, agent ID agent_2001kpfrb0zrektav0a1vrtpjhsj
  • Extensions: Chrome MV3 extension, iOS Shortcut, PWA share target
  • Deploy: Vercel (frontend), Supabase (backend)

Challenges

  • Timezone-correct scheduling across users in different regions
  • Idempotent cron design so double-triggers never double-deliver
  • Clean article extraction across publishers (readability + DOMPurify)
  • Reliable audio generation pipeline against ElevenLabs rate limits

Tags: Next.js, Supabase, pgvector, ElevenLabs, PWA, Edge Functions