# Horario ICS

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.

- Date: 3 October 2025
- Role: Solo.
- Status: Shipped
- Unmaintained

> **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.

---

Page: https://eitanf.com/lab/horario-ics · Español: https://eitanf.com/es/lab/horario-ics.md · llms.txt: https://eitanf.com/llms.txt
