Work / 2025 / web
FinnClass
Turns a Finnish course's weekly stream into something you can actually study from.
- Status
- live
- Stack
- React 18 · TypeScript · Vite · Tailwind CSS · Google Gemini API · PWA
- Organisation
- By week, not by post date
- AI surface
- Summaries and "learn more"
- Notes
- Local storage, never uploaded
- Host
- Cloudflare Pages
Classroom posts organised by week, with AI-generated summaries of each week's announcements and assignments, contextual explanations of any topic in the stream, an in-app viewer for PDFs, images, Docs and video, and local notes. Installable, offline-capable, built with Vite and the Gemini API.
The problem
A language course delivers its material as a reverse-chronological stream of posts. Learning is not reverse-chronological. Finding what week four actually required means scrolling past everything that happened since, opening attachments in four different viewers, and reconstructing the shape of the course by hand every time.
Constraints
- The source is a stream. The upstream ordering is fixed and wrong for the task; restructuring it is the whole job.
- Attachments are heterogeneous. PDFs, images, Google Docs, YouTube, Zoom links, MP3s — each with its own default behaviour of leaving the app.
- Studying happens offline, on a phone, on a bus.
Decisions
Reorganise by week before anything else. The AI features are the visible part, but the actual fix is structural: group by week, and the course becomes navigable without any model involved.
AI where it summarises, not where it teaches. Two surfaces only — a summary of a week’s announcements and assignments, and a contextual explanation of a selected topic. Both are triggered explicitly. Nothing is generated that the user did not ask for, because in a language course a confidently wrong explanation is worse than no explanation.
One in-app viewer for every attachment type. Each format gets its own icon and opens in a modal rather than a new tab. Leaving the app to read a PDF is how a study session ends.
Notes in local storage. Personal notes on coursework are private by default, and syncing them would have meant an account system the app otherwise does not need.
Tradeoffs
Depending on a hosted model means the study tools stop working if the key lapses or the API changes — the structural improvements survive that, the AI ones do not. Local-storage notes are one cleared cache away from gone, which is the honest cost of not building accounts.