Skip to content

FinnClass

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.