DEV Community

Cover image for Circular Sloth: The School WhatsApp Notices Your Brain Never Has to Read Twice Short, clear, and says exactly who it’s for.
BHAVYA GOTHI
BHAVYA GOTHI

Posted on

Circular Sloth: The School WhatsApp Notices Your Brain Never Has to Read Twice Short, clear, and says exactly who it’s for.

__

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:-


“Try a sample circular”
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 msg
Write or copy paste whatsapp message
Scan
Upload a circular
Tomorrow list
List of tomorrow's reminders
Review
Review the extracted suggestions and check the important details before saving.
Next 7 days suggestion
Share
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)