duolingo but for your own tests
AI runs online
not yet reviewed by publik. It is live now; the founder has not reviewed this version yet.
Microstudy
open source · on publik
Prices are for one typical use: one request of about 1,500 words sent and 375 words back. A higher quality score is better.
Microstudy has no option to run its AI on your computer.
| Model | Quality | Per 1,000 uses |
|---|---|---|
| On your computer (Ollama, 4-bit download size) | ||
| Granite 4.2 3B2.2 GB | 9 | $0 |
| Phi-4 Mini2.5 GB | 6 | $0 |
| Llama 3.1 8B4.9 GB | 7 | $0 |
| gpt-oss 20B14 GB | 9 | $0 |
| Gemma 4 31B20 GB | 19* | $0 |
| Qwen3.5 35B-A3B24 GB | 19* | $0 |
| publik API | ||
| publik-fastGLM-5.3 Flash | 42 | $1.00 |
| publik-balancedMiMo-V2.6-Pro · Microstudy | 46 | $10.00 |
| publik-smartGPT-6 Sol | 48 | $18.00 |
Quality: Artificial Analysis Intelligence Index v4.3.2, read 2026-09-22 (publik API models 2026-09-25); * = estimated by Artificial Analysis. Sizes: the Ollama library, read 2026-09-22.
Every step written out. No terminal experience needed. Pick your setup.
MicroStudy turns study material into a daily learning path: you upload your notes, tell it how many days you have until your exam, and the app automatically splits the material into sequential steps with fresh AI-generated questions per session. Duolingo-style structure (streaks, XP, daily steps), with the visual polish and interaction feel of Apple (fluid spring animations instead of rigid CSS transitions).
🔗 Live: microstudy.lovable.app 🛠️ Editor: Lovable project
Built with Lovable. Every change made in the Lovable editor is committed straight to this repository, and pushes to
mainon GitHub sync back into Lovable.
.docx, or a photo) and specifies how many days until the exam.unlock_date).join_group_by_code RPC function./api/public/push-check) decides per user, per day, whether and which push notification to send — via the same AI gateway (decidePush), based on context: open steps, upcoming exam date, streak, leaderboard position, inactivity.notify_study, notify_streak, notify_leaderboard, notify_inactivity (configurable via NotifyPrefsPanel).push_stopped)./wachtwoord-herstellen).Pressable component).motion/Framer Motion) instead of fixed CSS transitions: critically damped by default, with light bounce only on drag/swipe interactions with momentum.prefers-reduced-motion (cross-fade instead of spring/slide) and prefers-contrast.vite-plugin-pwa), with its own icon set (public/icons/) and Apple-specific meta tags (apple-mobile-web-app-capable, etc.).| Layer | Choice |
|---|---|
| Framework | TanStack Start (React 19) + TanStack Router (file-based routing) |
| Data fetching / state | TanStack Query |
| Server functions | createServerFn from @tanstack/react-start (type-safe RPC to the server) |
| Database & auth | Supabase (Postgres + Auth + RLS) |
| AI | Lovable AI Gateway → google/gemini-3.5-flash (JSON mode) |
| Push notifications | Firebase Cloud Messaging (web push) |
| Styling | Tailwind CSS v4 + shadcn/ui (Radix UI primitives) |
| Animation | motion (Framer Motion) |
| Forms & validation | react-hook-form + zod |
| Build | Vite 8, Bun (lockfile: bun.lock) |
| Language | TypeScript |
| Linting/formatting | ESLint 9 (flat config) + Prettier |
| PWA | vite-plugin-pwa |