-
-
CramClip app icon
-
Two-host audio lesson player with transcript, speed controls, and offline download
-
Today turns an exam date into a focused daily study plan
-
Spaced review brings missed concepts back at the right time
-
Ask AI answers questions using the learner's uploaded material
-
Four-question lesson quiz with immediate feedback and explanations
-
A structured 12-lesson course generated from one exam-prep document
Inspiration
Exam prep often collides with real life. A nursing student, project manager, or cloud practitioner may have hundreds of pages to review, but their usable study time is a commute, a walk, or a workout. Plain text-to-speech reads documents aloud; it does not teach, test, or help someone stay on track. We built CramClip to turn that fragmented time into a complete study loop.
What it does
CramClip turns a user's own PDF, pasted notes, or web article into a private, structured audio course taught by two AI hosts. The material is compressed and reorganized into coherent lessons instead of being read word for word. Each lesson includes a conversational explanation, practical examples, a transcript, and four quiz questions.
Missed concepts become review cards that return on a simple spaced schedule. Learners can add an exam date to get a daily lesson target and countdown, ask AI questions grounded in the source material, resume across devices, and download lessons for offline listening. The first complete lesson and quiz are free so a learner can experience the value before paying.
How we built it
The mobile app is built with Expo and React Native. A Next.js App Router backend orchestrates document ingestion, course generation, progress, quizzes, review, and payments. Gemini powers outline/script generation and the two-host speech synthesis. Inngest runs durable background generation jobs; source files and generated audio live privately in Cloudflare R2 behind presigned URLs. Neon Postgres with Drizzle stores course, learning, entitlement, and credit state. Better Auth provides Apple, Google, and magic-link sign-in.
The generation pipeline maps each document into 4–20 lessons, generates the first lesson first, and lets the rest continue in the background. The player supports background audio, lock-screen controls, multiple speeds, exact resume, automatic next-lesson playback, transcripts, and offline downloads.
RevenueCat at the core
RevenueCat is not a bolt-on paywall; it is part of the product's generation economics. CramClip offers Weekly, Monthly, and Annual Pro plans plus an optional credit top-up for active subscribers. One Generation Credit represents about one minute of successfully generated audio. Before paid generation begins, the learner sees the estimated lesson count, minutes, and credits.
The client uses RevenueCat for offerings, purchases, restores, and entitlement refresh. The backend treats RevenueCat webhooks as the authority, processes them idempotently, and keeps a credit ledger so retries after system failures are free while successful user-requested generation is settled against actual audio duration. Annual subscribers receive credits monthly rather than all at once, and expiring subscription credits are spent before non-expiring top-ups.
Challenges we ran into
The hardest problem was making a generative product feel predictable. Long documents create uncertain workloads, so we added outline-first estimates, reserved credits, first-lesson priority, visible progress, bounded retries, and partial success instead of a single endless spinner.
Audio also had to behave like a real mobile learning product, not a demo. We worked through background playback, lock-screen metadata, exact cold-start resume, offline course downloads, account isolation, and reconnect-safe progress synchronization on both iOS and Android.
Finally, subscription state and generated content have different lifecycles. Existing lessons should remain playable after a subscription expires, while new generation must lock immediately and correctly. RevenueCat webhooks, an idempotent entitlement model, and server-side credit accounting made that boundary reliable.
Accomplishments that we're proud of
- Shipped CramClip publicly on the iOS App Store during Shipaton.
- Built the full loop from upload to outline, two-host audio, quiz, spaced review, Ask AI, and a daily plan.
- Integrated three subscription cadences, restore purchases, entitlement webhooks, monthly annual-credit releases, and a Pro-only consumable without treating a client purchase callback as the source of truth.
- Created a ready reviewer course with 12 lessons and more than three hours of audio so judges can evaluate the experience immediately.
- Added production analytics for activation, listening, generation, checkout, and retention while keeping private study materials private.
What we learned
The first lesson is the activation moment, so time-to-first-listen matters more than total generation time. Showing a mapped course quickly and prioritizing lesson one makes a large document feel manageable.
We also learned that AI cost controls are product design. Transparent estimates, minute-based credits, idempotent settlement, and free system retries make the business model understandable to learners and sustainable for the app.
What's next for CramClip
Next we will shorten time-to-first-listen, use the new funnel instrumentation to improve activation and retention, complete the Android public-release path, and expand exam-specific onboarding beyond NCLEX, PMP/CAPM, and AWS certifications. Longer term, we want CramClip to become the study layer that turns any trusted source into a course a busy learner can actually finish.
Built With
- better-auth
- cloudflare-r2
- drizzle
- expo.io
- gemini
- inngest
- neon-postgres
- next.js
- posthog
- react-native
- revenuecat
- sentry
- typescript
- vercel
Log in or sign up for Devpost to join the conversation.