Inspiration

Two-thirds of adults worldwide are financially illiterate. The habits and mental models that shape lifetime wealth are formed before age 14, yet most schools teach nothing about money. We built Stackly because kids learn best by doing, not by reading textbooks. We wanted a safe space where a 9-year-old could experience sending money, a 13-year-old could build a practice portfolio, and a 17-year-old could run a real PayPal checkout flow, all without touching real money or making real mistakes.

What it does

Stackly is a money school for kids aged 7-24, split into three age bands:

  • Sprouts (7-10) - simple lessons on saving, spending, and earning with animated explanations
  • Builders (11-14) - PayPal Lab missions, paper trading with $1,000 practice cash, and a quiz-based AI coach
  • Investors (15-24) - full PayPal Orders v2 lifecycle, portfolio analysis, compound growth calculator, and an agentic AI that can propose real purchases for parent approval

Every learner gets a PIN-protected account under a parent's family. Parents approve every PayPal action before it executes. No child ever touches a payment form with real money.

Key features:

  • 14 lessons across 3 reading levels with XP and streak tracking
  • Paper trading portfolio with synthetic CC0 price data, buy/sell, donut chart, and Time Replay mode
  • 4 PayPal Lab missions: send money, request money, full checkout flow, and spot the scam
  • Penny the AI coach: age-adapted chat, quizzes, concept explainer, portfolio review, and an agentic commerce loop powered by GPT-4o-mini
  • Family dashboard with weekly learner summaries, approvals queue, spending caps, and GDPR-style data export

How we built it

  • Frontend: React + Vite + TypeScript + Tailwind CSS
  • Backend: Bun + Hono, a single service that serves both the API and the built frontend
  • Database: SQLite via Drizzle ORM, hosted on Turso for persistent storage across deployments
  • AI: OpenAI GPT-4o-mini with function calling for the agentic commerce loop. Band-specific system prompts with hard financial-advice prohibition baked in. Input and output moderation on every message.
  • Payments: PayPal Orders v2 sandbox with parent-gated approval flow and server-sent events so the learner's screen advances automatically when a parent approves
  • Email: Resend for welcome emails and password reset, sent from [REDACTED_EMAIL]
  • Deployment: Render (single web service), custom domain stackly.com.ng

Challenges we ran into

  • PayPal sandbox regional errors - the hosted PayPal checkout page fails silently for specific-region sandbox accounts. We worked around this by designing a simulated checkout that teaches the full PayPal Orders v2 lifecycle without requiring a real payment, which turned out to be the right model for a kids' financial literacy app anyway.
  • Session race conditions - after learner PIN login, concurrent React effects fired before the new session token was committed, causing 403 errors on the first API calls. Fixed with a grace window in the session context.
  • Ephemeral database - Render's free tier wipes the filesystem on every redeploy. Migrated to Turso (hosted SQLite) so user accounts, lesson progress, and trades persist permanently.
  • Cross-origin API routing - the frontend is served from a static CDN while the API runs on a separate Hono service. Every hardcoded /api/ path had to be replaced with a runtime-resolved base URL from a config.json file.

Accomplishments that we're proud of

  • A complete parent-gated PayPal approval flow with real-time SSE so both the parent's and learner's screens update simultaneously
  • An agentic AI that can propose a real purchase, queue it for parent approval, and show a step-by-step plan timeline with a full audit log
  • Age-adapted content across three bands: the same lesson reads completely differently for a 9-year-old versus a 17-year-old
  • Zero real money ever moves, even on the live production site at stackly.com.ng

What we learned

  • PayPal's Orders v2 API is powerful, but the sandbox has significant regional limitations that only appear at checkout time, not during order creation
  • Server-sent events are a simple and reliable way to sync state between a parent's device and a learner's device without WebSocket
  • Kids' apps need layers of safety design that adult apps do not: every AI response is moderated, every payment requires parent approval, and minimal data is collected from learners

What's next for Stackly

  • Push notifications so parents get an alert when a learner requests approval
  • Live (delayed) price data for the investing screen with explicit CC0 licensing
  • Curriculum expansion: budgeting, taxes, credit scores, and compound interest modules
  • Multi-language support starting with Yoruba, Igbo, and Pidgin for Nigerian users
  • School edition with class codes, teacher dashboard, and progress reports
  • Mobile app for the parent approval flow

Built With

Share this project:

Updates

Submission history