__
What I Built
School circulars arrive in WhatsApp in English, Hindi, and Marathi, often mixed in with everything else. A deadline can get buried, and the consequence can be as small—and as stressful—as sending a child in the wrong shoes.
Circular Sloth turns a circular into a reviewable list for parents of school-going kids. It can:
- Accept text shared from WhatsApp, pasted messages, photos, and PDFs.
- Read the circular and suggest only the actions, dates, amounts, and things to bring or wear that matter.
- Let a parent review and edit those suggestions before saving them.
- Show a Tomorrow checklist and a printable/shareable Weekly Slip.
- Export calendar reminders and draft a reply to a teacher in WhatsApp. The honest lazy claim is: “One tap in WhatsApp, then zero effort.” That is the aspiration after sharing, not a claim of full automation: OCR and model suggestions can be wrong, and a parent must review them.
Demo
Live Now:-

Tap “Try a sample circular” on Tomorrow to send sample text to the real model; there is no canned response. The free-tier model can briefly be busy; the API retries temporary provider errors.

Write or copy paste whatsapp message

Upload a circular

List of tomorrow's reminders

Review the extracted suggestions and check the important details before saving.


The week’s dates and tasks, ready to print or share.
Code
Circular Sloth
Circular Sloth turns school circulars into a short, reviewable list of what a parent needs to do. Add a pasted message, photo, PDF, or shared item; extract text; review and edit suggestions; then save the items to the browser's local workspace. It also includes a weekly fridge slip, calendar export, summary, and reply drafting.
The project uses open-weight language models through OpenRouter or a compatible hosted endpoint, and can use Ollama locally. A model can make mistakes: parents must check every extracted item before saving or acting on it.
Privacy and ownership
- Family records are stored in IndexedDB in the browser profile. The server has no accounts, database, cookies, or family-record storage.
- Photos and PDFs are processed in the browser; the app sends extracted text to the API when model assistance is requested. In hosted mode that text is sent to the configured model provider. The provider's retention…
The repo contains the React app, FastAPI service, tests, evaluation notes, and Render configuration. DEV profile: [Bhavya4523].
How I Built It
The hosted app uses Gemma 4, an open-weight model served through OpenRouter’s OpenAI-compatible API. Environment variables switch the provider and model. Ollama with Gemma 3 (gemma3:4b) is the local option. The localhost smoke passed, but internet remained on, so this was not a fully isolated offline test.
Architecture: Browser (local records + OCR/PDF extraction) → stateless FastAPI → configured hosted provider or local Ollama → reviewed suggestions in the browser.
The backend keeps no family records. Hosted mode sends extracted text—not photos—from the browser through the API to the provider. Parents review suggestions before saving. The API retries temporary 429/5xx provider errors and reports when the reader is busy. Its smoke test adds a fresh random rupee amount and future date to a request and only passes if the response contains that injected pair exactly once. The README records a passing Render smoke with Rs 285 and 2027-05-01.
Render’s Docker build initially failed because the Dockerfile copied a missing web/build.mjs. I fixed the frontend build stage and the corrected deployment succeeded. A local Docker build remains unverified because Docker Desktop returned an internal Linux-engine API error.
Why Does Open Innovation Matter?
School and class details are sensitive. Circular Sloth keeps family records in the browser and avoids sending a child’s name in model requests. The model provider can be changed through configuration, and the same API code supports local Ollama, so the app is not tied to one hosted model service.
Honest trade-off
The live demo sends circular text, never photos, to OpenRouter and the company hosting the model. Their retention and privacy policies apply. For a stronger privacy boundary, use the local Ollama path; the README’s smoke passed against localhost, but internet access was still on during that check.
Where open beat closed
In this project, an open-weight Gemma model could be served through OpenRouter for the live app and swapped for Ollama locally using configuration. That gave me one model interface for hosted and local experiments without changing the app’s core request flow. In the README evaluation, the free provider returned 29 errors across 30 synthetic notices, so its low score is not a useful model-quality estimate.
The Lazy Payoff
Manual estimate, not a measurement: reading a circular, finding its deadline, and copying dates might take a few minutes, depending on its length. With Circular Sloth, a parent shares or adds it, checks the suggested details, and saves the ones that are right. Review still takes time; the goal is less hunting through chats and retyping dates.
Prize Categories
- Gemma: Gemma 4 is the open-weight model configured for hosted requests through OpenRouter; Gemma 3 (gemma3:4b) was used for the local Ollama smoke test.
- Render: The live Circular Sloth app is hosted at Render, with its deployment configuration in the repository.
_
Small steps, fewer missed circulars, and a little more breathing room for busy parents._
_

Top comments (0)