Inspiration
Greece has had dynamic electricity tariffs since 2024, and the day-ahead price swings between roughly zero at midday, when solar floods the grid, and 250-330 EUR/MWh in the evening. In Greek, kairos means both "weather" and "the right moment". I wanted a planner that understood both: not just when power is cheap, but that laundry has to dry, that the rooftop solar heater already makes hot water on a sunny day, and that pre-cooling only matters when the afternoon will be hot.
What it does
Kairos pulls the Greek day-ahead price curve (15-minute resolution) and the hourly weather for your town, keyless and free, and places each household task in the cheapest window that fits your constraints and the weather. The laundry goes out in the driest, sunniest daylight window and the washing machine is timed to finish just before; the water-heater boost is skipped when the sun will do the job; the flat is pre-cooled in cheap solar hours before a hot afternoon. Every task shows its cost and what it saved against your habitual time. A briefing explains the plan in English or Greek, written by a local model (llama.cpp on my homelab) or by a built-in narrator. "Ask Kairos" re-plans from a sentence such as "I'm out until 18:00" or "skip the dishwasher". Tomorrow can be planned once its prices are published in the afternoon. Everything runs locally, with a labelled sample day when offline.
Who it's for
A household in Greece on a dynamic ("yellow") tariff with a smart meter: anyone with a washing machine, a balcony and a solar water heater, which is most of the country. It also suits anyone who wants to use power when the grid is cleanest, because the cheap hours are the solar hours.
How I built it
Plan first, with the Devpost Learn Skill Pack: scope.md fixed the kernel (weather-aware, explained), prd.md fixed every behaviour and acceptance criterion, spec.md fixed the stack and the file structure, and checklist.md sequenced six thin end-to-end slices, each verified and committed. Python 3.12 and FastAPI serve one static page with an inline-SVG chart (no framework, no build step). Energy-Charts and Open-Meteo are the data sources, with ENTSO-E as an optional licensed source and a synthetic sample day. The narrator and the Ask parser have two backends each: deterministic rules, and any OpenAI-compatible model through an environment variable. 57 pytest tests cover the adapters, the scheduler, every weather rule on fixture days, both narrators and the API. AI-assisted (Claude Code), human-directed.
Challenges I ran into
The keyless Greek price feed is licensed for private, internal use only, so the source layer had to be pluggable and the repository ships a synthetic sample instead of recorded data. A tiny negative price (-0.01 EUR/MWh) broke the axis and produced "-0.0" everywhere until values were normalised. Greek output from a 30B local model is rough and long, so the Greek briefing has a higher token budget and the built-in Greek narrator is the dependable path. And "I'm out until 18:00" initially moved nothing because no appliance needed someone home; making the water appliances need-home by default made the tradeoff visible and honest.
Accomplishments that I'm proud of
The laundry chain: the app knows the clothes have to dry, and the whole plan bends around that. The product is complete without any model, and better with one. The chart passes a colour-vision check with a validated diverging ramp, direct labels only on the extremes, a tooltip and a table view.
What I learned
A plan-first workflow made a one-day build calm: the slices were obvious once the PRD had checkable criteria, and every deviation was recorded rather than improvised. Keeping the AI layer optional forced clean interfaces (facts in, sentences out), which is also what makes the model's output trustworthy: it never sees anything it could invent numbers from.
What's next for Kairos
Home Assistant integration (plan as sensors, smart plugs), supplier tariff formulas for exact euro amounts, real solar-heater and PV modelling, multi-day planning that moves a wash to a cheaper tomorrow, and a morning notification with the briefing.
Built With
- claude-code
- css
- entso-e
- fastapi
- ffmpeg
- httpx
- javascript
- llama.cpp
- open-meteo
- playwright
- pydantic
- pytest
- python
- svg
- uvicorn
Log in or sign up for Devpost to join the conversation.