Horario ICS
Solo.ShippedUnmaintained
Photograph your school timetable, get a subscribable calendar. Gemini does the OCR and the structured extraction; the app turns the result into an .ics feed your phone can follow.
No longer maintained, and the source is private. It worked for the terms I needed it for. Leaving it here because the decisions are the interesting part, not the tool.
Every term the school hands out a timetable as a grid — days across the top, time blocks down the side, subject and teacher and room crammed into each cell. Useful on paper, useless on a phone.
This takes a photo of that grid and gives back a calendar you can subscribe to.
The decisions worth reading
Gemini does the extraction, not a hand-written parser. The grid layout changes between terms and between years, and a parser tuned to one shape breaks on the next one. The prompt describes the structure — columns are weekdays, rows are time blocks, each cell has subject, teacher and room — and asks for JSON. That survives a redesign; a coordinate-based parser would not.
There is a model fallback list, not a model. It tries gemini-1.5-flash
first and falls back through two others. A single hardcoded model is a
tool that stops working the day that model is retired, and this one has to
keep working every term without me touching it.
The calendar is served from a route, not downloaded as a file. A
downloaded .ics is a snapshot; a subscribed URL updates. It means the
timetable can be corrected after the fact and every phone that subscribed
gets the fix.
The part that took the longest
Not the AI — the timezone and the accents. miércoles and miercoles are
the same day to a person and two different keys to a lookup table, and an
.ics file with no timezone declared will happily shift every class by
three hours once it reaches a calendar app in Buenos Aires.