- New InstallSheet mounted in the root layout: appears ~1s after load on
iOS/Android phones and tablets, over any screen including the key gate,
with a dimmed backdrop. Never on desktop, never in standalone mode, and
at most once per 7 days after a dismissal (localStorage).
- Platform/browser detection (lib/install.ts): iPhone/iPad incl. iPadOS
reporting as Mac with touch, Android, Safari vs Chrome vs other vs
in-app browsers, with step 1 adapted accordingly.
- iOS: numbered steps with chips (Safari, Share, ... , More, Add to Home
Screen) and the accent Add pill. Android: captured beforeinstallprompt
turns into a native Install button; fallback steps use Install app /
Add to Home screen chips and an accent Install pill.
- Close via X, backdrop, Escape or swipe-down on the handle; the site is
untouched afterwards. Anchored to 100dvh so browser toolbars never hide
the last step; pb-safe respects the home indicator.
- Dark sheet by default; light only when the app theme was explicitly set
to light. Settings gains a mobile-only Install app row that reopens it.
- The inline head script captures beforeinstallprompt before hydration and
records appinstalled. Old InstallHint banner removed.
- Tests: new install-sheet suite (45 checks across iPhone Safari/Chrome/
in-app, Android Chrome/Samsung, desktop, prompt path, dismissal, 7-day
expiry, standalone, Settings row, both themes); pwa suite updated.
Next.js 15 app that turns photos, PDFs, DOCX/PPTX and text into a swipeable
feed of AI-generated activities (flashcards, multiple choice, true/false,
fill-in-the-blank, matching, ordering, short answer) using the user's own
Ollama models.
Highlights:
- All AI calls run in server route handlers; the browser never talks to Ollama.
- Bring-your-own-key mode (default): the key lives only in the browser and is
sent per-request; server, local-daemon and shared-key modes also supported.
- Client-side document extraction (pdf.js, mammoth, jszip) with scanned-PDF
page rendering for the vision model; notes stay in their original language.
- ChatGPT-style shell: collapsible sidebar / mobile drawer, neutral token-based
light + dark themes, folder organisation, PWA (manifest, SW, offline page).
- Strict JSON validation with zod + auto-repair, rate limiting, and request
guards (cross-origin, body-size, API-key sanitising).
- setup.sh bootstraps deps, .env.local and a production build.
Gitignore excludes .env*, the generated pdf.js worker and local scratch files.