Tapsy — AI-Powered Microlearning

Create a full interactive course in minutes. Learn it like scrolling Reels.

🔗 Live Demo: tapsyy.vercel.app


Inspiration

Real talk — I've tried learning from online courses more times than I can count. I open a module, it's a 45-minute video, and 10 minutes in I'm already on Instagram. It's not that I don't want to learn — the format just doesn't work for how people actually consume content anymore.

On the creator side, the options aren't great either. You either spend days building a full Udemy course, or you post a thread on X and hope people read it. There's nothing in between that actually works.

That's when the idea clicked — what if making a course felt as easy as sending a voice note, and learning it felt like scrolling through Reels?


What it Does

Tapsy lets you create a complete interactive course by just chatting with an AI. No writing, no design, no suffering.

Answer 6 questions — what you want to teach, who it's for, what the goal is. Tapsy handles the rest:

  • Structures your course into modules automatically
  • Generates all cards — info, quizzes, polls, and embedded videos
  • Fetches relevant cover images from Unsplash for each card
  • Creates a full podcast episode with two AI voices (host + guest) discussing your topic

On the learner side, there's no sign-up — just a link. Learners swipe through cards in a mobile-first format, answer questions, and get a personalised experience: the course literally rewrites itself based on what they already know.

When they're done, they get a learning report and a certificate if they scored above 70%.


How I Built It

Frontend: React + TypeScript with Framer Motion for smooth card transitions.

Backend: Appwrite — handling auth, database, file storage, and deployment via Appwrite Sites. No separate server, no DevOps headache.

AI Layer: Four different Gemini models, each picked for the right task:

Task Model Why
Course blueprint & module structure gemini-2.5-pro-preview Needs deep reasoning
Card content generation gemini-2.5-flash Speed at scale
Adaptive rewriting per learner gemini-2.5-flash Latency sensitive
Podcast audio (2 voices) gemini-2.5-flash-preview-tts TTS pipeline

The podcast pipeline was the most fun (and chaotic) part. Gemini generates a script → TTS model runs twice (host voice: Puck, guest voice: Charon) → PCM16 converted to WAV → buffers merged → final file uploaded to Appwrite Storage. Learners just press play.


Challenges

The Module ID Nightmare

Gemini invents its own IDs (m1, m2, m3) when generating course structure. Appwrite generates completely different IDs when modules are saved. Every card was referencing module IDs that didn't exist.

Fix: Built a post-save ID remapping step — after saving modules to Appwrite, create a lookup map from Gemini's temp IDs to Appwrite's real IDs, then remap every card's moduleId before saving.

Adaptive Rewrite Losing Card Metadata

When Gemini rewrites cards for a specific learner, the output is plain objects — no id, no courseId, no moduleId. Using the AI output directly would wipe all Appwrite metadata and break analytics.

Fix: Merge AI output with original cards using a cardId-keyed map, always spreading original fields first so metadata is preserved.

Learner Sessions Duplicating on Every Visit

The first version created a new session document every time someone opened the course. Returning learners had 5 sessions, analytics were broken, and resume-from-where-you-left-off didn't work.

Fix: Switched to a composite key (email_courseId) with a proper upsert pattern — check if session exists, update if yes, create only if new.

Poll Votes Getting Overwritten

Appwrite stores poll options as a JSON string. Reading → updating in memory → writing back meant concurrent users were losing votes.

Fix: Strict parse → update single index → re-stringify → updateDocument flow with rollback on error.


What I Learned

Before this, I'd call APIs and move on. This project forced me to think about actual system design — which model for which task, how data flows between AI output and database storage, how to build features that hold up with real concurrent users.

The most satisfying bugs are the ones that only show up in production. Nothing like watching poll votes disappear live to make you write better code.

Building something end-to-end solo — database schema to AI pipeline to deployed product — hits different from following tutorials. 10/10 would stress myself out again.


What's Next

  • [ ] Course marketplace for public course discovery
  • [ ] Teams feature for collaborative course creation
  • [ ] LMS integrations (Moodle, Canvas) for institutional use

Built With

Share this project:

Updates