First-run gate offers free Ollama vs paid providers; add Google Gemini

The gate (user-key installs) now headlines Ollama with a "Free" badge and
adds an "or - Use a paid provider instead" option that opens the same
provider rows as Settings, framed as billed by the provider directly.
Saving a provider key there lists its models and switches study
generation to it automatically, so the gate steps aside with no Ollama
key at all.

Gemini joins the registry via its OpenAI-compatible endpoint
(generativelanguage.googleapis.com/v1beta/openai); the privacy policy
names it (en+cs).

Providers suite grows to 20 checks: the gate scenario runs against a
second user-key-mode app instance (free badge, paid option, provider
rows, pass-through, generation switch). All other gates green:
contrast 0 findings, mobile 126/126, chat 102/102, wizard 95/95,
bubbles 34/34, regression 44/44, i18n 13/13, native 33/33.
Version 0.4.9, SW -> freezmo-v73.
This commit is contained in:
Martin Dvořák 2026-10-14 07:09:05 +00:00
commit 8651674cf5
8 changed files with 132 additions and 8 deletions

View file

@ -1411,9 +1411,18 @@ Things I chose while building, with the reasoning:
pre-blurred wallpaper — the scene is clearly visible through the glass, and the
pixel-contrast scan still passes.
82. **First run offers the choice: free Ollama or a paid provider.** The gate (user-key installs)
now shows Ollama with a "Free" badge as the headline option, and below it an "or · Use a paid
provider instead" button that opens the same provider rows as Settings — with the framing that
those are billed by the provider directly (Freezmo never sees a card) and that keys stay in the
browser. Saving a provider key on that screen lists its models and switches study generation to
it automatically, so the gate steps aside without an Ollama key at all — pinned end to end in
the providers suite with a second, user-key-mode app instance.
81. **Bring-your-own keys for cloud providers.** Besides the server's Ollama, Settings → Providers takes
keys for OpenAI, Anthropic (their official OpenAI-compatibility layer), DeepSeek, Groq, OpenRouter
and any custom OpenAI-compatible endpoint. One adapter (`lib/openai-compat`) covers them all —
keys for OpenAI, Anthropic (their official OpenAI-compatibility layer), Google Gemini (its
OpenAI-compatible endpoint), DeepSeek, Groq, OpenRouter and any custom OpenAI-compatible
endpoint. One adapter (`lib/openai-compat`) covers them all —
model listing, streaming chat, JSON generation and vision — and every model flow can run on a
provider: the chat picker lists each enabled provider's models (labelled, remembered across
visits), and a "Study generation" choice moves decks, homework, grading and attachment