freezmo/app
Martin Dvorak e3b7bbbd6c Bigger decks: pick up to 30 activities, built in batches
The create wizard stopped at 15 activities because the API, the prompt and
the salvage path all capped at 18: one reply must be one valid JSON object,
and past ~18 activities models truncate or drop cards. Raising the cap alone
would have shipped decks that came back short.

- The count picker offers 8 / 10 / 12 / 15 / 20 / 30; a deck's "add more" row
  gained +15. The help line says bigger decks take longer.
- /api/generate accepts up to 30 (FREEZMO_DEFAULT_ACTIVITY_COUNT now clamps
  to 30 as well) and sizes its overall deadline from the number of model
  calls instead of a fixed two.
- generateActivities splits anything above 18 evenly across calls (30 → 15 +
  15, 25 → 13 + 12) and merges them into one deck. The first call keeps the
  "add to this deck" contract; later calls are told the title, the types
  already used and the topics already covered. A normalised content signature
  drops a card that repeats an earlier one, so the same idea never ships
  twice. requested/generated still travel in the stream meta.
- phase1-test: a stub Ollama answers two 15-card batches (the second repeats
  one card on purpose) → two calls, the even split, the "already covered"
  prompt, 29 merged cards, the duplicate shipped once, title from the first
  reply, and count 31 answered 400 (59 checks).
- wizard-test: the picker offers 30, the wizard sends count: 30, and the
  30-card deck is stored and opened (99 checks).

Version 0.8.4, SW v106.
2026-10-28 19:11:39 +00:00
..
api Bigger decks: pick up to 30 activities, built in batches 2026-10-28 19:11:39 +00:00
chat Chat mode, phase 1: grounded streaming chat over your notes 2026-10-11 18:32:11 +00:00
cookies Privacy policy, terms of service, cookie policy + a cookie notice 2026-10-12 21:26:55 +00:00
create App versioning + the create page's missing top padding 2026-10-12 20:04:26 +00:00
deck/[id] Accessibility pass, report control for homework exercises, clearer rail actions 2026-10-12 21:15:56 +00:00
exam Smart Review: instant loading feedback, no more dead-feeling tap 2026-10-11 14:35:16 +00:00
homework Navigation restructure: five-tab bottom bar, no phone drawer 2026-10-10 16:53:55 +00:00
offline Add an English/Czech interface language switch 2026-10-08 13:56:32 +00:00
podcast Podcast mode: notes read aloud with a lyric-style word highlight 2026-10-16 11:42:15 +00:00
privacy Privacy policy, terms of service, cookie policy + a cookie notice 2026-10-12 21:26:55 +00:00
review Smart Review: instant loading feedback, no more dead-feeling tap 2026-10-11 14:35:16 +00:00
share Navigation restructure: five-tab bottom bar, no phone drawer 2026-10-10 16:53:55 +00:00
share-target Native-feel pass: PWA integration, system back, offline, haptics, undo 2026-10-10 12:16:03 +00:00
stats Smart Review: instant loading feedback, no more dead-feeling tap 2026-10-11 14:35:16 +00:00
teach Teach it back: the AI becomes the curious student 2026-10-16 23:05:24 +00:00
terms Privacy policy, terms of service, cookie policy + a cookie notice 2026-10-12 21:26:55 +00:00
favicon.ico Use the new app icon everywhere 2026-10-08 00:38:54 +00:00
globals.css Aero music: the button works on the podcast player 2026-10-16 21:04:39 +00:00
layout.tsx Push reminders: personal to the notes, generic without them 2026-10-18 14:34:15 +00:00
manifest.ts Accessibility pass, report control for homework exercises, clearer rail actions 2026-10-12 21:15:56 +00:00
not-found.tsx Custom Frutiger Aero 404 2026-10-14 15:27:47 +00:00
page.tsx Podcast mode: notes read aloud with a lyric-style word highlight 2026-10-16 11:42:15 +00:00