
A website based on my kotlin app Splæsh which is an app that finds beaches with weather maps, forecasts, warnings, and smart recommendations.
Paste any text and let AI build flashcards, quizzes, summaries, or mind maps — then study them with clean, interactive interfaces.

A website based on my kotlin app Splæsh which is an app that finds beaches with weather maps, forecasts, warnings, and smart recommendations.
Monetization — a real freemium model backed by Stripe Checkout:
| Plan | Price | Unlocks |
|---|---|---|
| Free | 0 kr | 5 sets, flashcards / quizzes / summaries |
| Plus | 49 kr | Unlimited sets, mind maps, PDF upload, export, folders |
| Pro | 99 kr | Smart review (SM-2 spaced repetition), statistics & streaks, stronger AI model |
| Ultra | 149 kr | Shareable set links, API access, priority generation |
One-time payments with upgrade credit — existing customers only pay the difference (verified server-side). Quotas and feature gates are enforced in the backend, not just hidden in the UI.
Plus everything around it:
prefers-reduced-motion respected)
Dashboard
|
Dashboard — dark mode
|
Choose what to generate
|
Generate from your notes
|
Flashcard study mode
|
Quiz mode
|
AI summary
|
Mind map
|
Statistics
| |
Settings
|
┌─────────────┐ ┌──────────────┐ ┌─────────────┐ ┌──────────────┐
│ React + │ HTTP │ FastAPI │ SQL │ PostgreSQL │ │ Groq API │
│ Vite │─────▶│ backend │─────▶│ database │ │ (gpt-oss) │
│ (frontend) │◀─────│ │◀─────│ │ │ │
└─────────────┘ JSON └──────┬───────┘ rows └─────────────┘ └──────▲───────┘
│ │
└──────────── prompt + notes ──────────────┘
flashcards (JSON)
Authorization header.{ question, answer } objects.| Layer | Technology |
|---|---|
| Frontend | React 19, Vite, React Router, Axios, framer-motion, lucide-react, plain CSS (custom properties, theming, animations) |
| Backend | FastAPI, Uvicorn |
| Database | PostgreSQL (via psycopg2) |
| Auth | JWT (python-jose), password hashing with bcrypt, API keys for Ultra |
| Payments | Stripe Checkout (one-time payments, tier metadata, server-side verification) |
| AI | Groq API — openai/gpt-oss-20b (Free/Plus) and openai/gpt-oss-120b (Pro/Ultra) |
The app is live above — but you can also clone and run it yourself.
git clone https://github.com/arink1305/FlashGenius.git
cd FlashGenius
createdb flashgenius
cd backend
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
Create a backend/.env file:
GROQ_API_KEY=your_groq_api_key_here
DATABASE_URL=postgresql://localhost/flashgenius
SECRET_KEY=a_long_random_secret_string
STRIPE_SECRET_KEY=sk_test_your_stripe_test_key
Create the tables (run this again after any schema change — the API does not migrate on startup, since that would run on every serverless cold start):
python migrate.py
Start the API:
uvicorn main:app --reload
The backend runs on http://localhost:8000.
cd frontend
npm install
npm run dev
The app runs on http://localhost:5173.
Tests — backend logic (auth hashing, JWT, AI-response parsing & mind-map normalization) and frontend utilities/hooks are covered by unit tests:
cd backend && pytest # backend (pytest)
cd frontend && npm test # frontend (Vitest)
CI — every push and pull request runs the full test suite and a production build via GitHub Actions.
Docker — run the whole stack (frontend + backend + PostgreSQL) with one command:
GROQ_API_KEY=your_key docker compose up --build
FlashGenius/
├── backend/
│ ├── main.py # FastAPI app + CORS + routers
│ ├── database.py # DB connection & table setup
│ ├── requirements.txt
│ └── routers/
│ ├── auth.py # register, login, /me, API keys, account
│ ├── billing.py # Stripe checkout + payment confirmation
│ └── flashcards.py # generation, decks, folders, reviews, stats, sharing
│
└── frontend/
└── src/
├── api.js # Axios instance with JWT interceptor
├── useMe.js # cached account/tier hook + tier gating helpers
├── App.jsx # Routes + auth guards + page transitions
├── components/ # Topbar, Footer, Folder, ShareButton, skeletons
└── pages/
├── Landing.jsx # public marketing page
├── Pricing.jsx # plan comparison + Stripe checkout
├── Dashboard.jsx # sets, folders, stats strip
├── Generate.jsx # notes input + count/difficulty + file upload
├── Study.jsx # card-flip study mode
├── SmartStudy.jsx # SM-2 spaced repetition
├── Stats.jsx # streaks, weekly chart, mastery
├── Mindmap.jsx # interactive zoomable mind map
├── SharedDeck.jsx # public read-only shared sets
└── Settings.jsx # plan, theme, language, data, account
This is a full-stack project I built end to end:
Built by Arin Kehreman · GitHub
Logg inn for å kommentere og svare.
Logg innIngen kommentarer ennå. Bli den første som sier noe hyggelig eller stiller et spørsmål.