Lattice
A workspace for your research.
A family calendar for the wall, on the tablet, TV or monitor you already own. Paste one calendar link and it rebuilds itself every day. Free for 14 days, no card required.
ProductivityPython · HTMLGitHub @caspiiOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
The digital family calendar for screens you already own — a TV, an old tablet, or a Raspberry Pi. Claude writes it fresh every morning.
Loading the full README. The saved excerpt is shown below.
The digital family calendar for screens you already own — a TV, an old tablet, or a Raspberry Pi.
DinkyDash merges your calendars into one agenda, works out whose turn each chore is, counts down to the next birthday, and once a day asks Claude for a headline. Then it puts the lot on a screen at home — light or dark, sized to read from across the kitchen.
Self-hosted (this repo). Free, MIT-licensed, runs on your own hardware with your own Anthropic API key. Setup takes an afternoon and some comfort with a terminal.Read the full README ↗The digital family calendar for screens you already own — a TV, an old tablet, or a Raspberry Pi.
Website: dinkydash.co
DinkyDash merges your calendars into one agenda, works out whose turn each chore is, counts down to the next birthday, and once a day asks Claude for a headline. Then it puts the lot on a screen at home — light or dark, sized to read from across the kitchen.
Self-hosted (this repo). Free, MIT-licensed, runs on your own hardware with your own Anthropic API key. Setup takes an afternoon and some comfort with a terminal.
Self-hosting is community-supported. Issues and pull requests are welcome, but there's no support commitment — if you need it to just work, use the hosted version.
Hosted. Start a free 14-day trial. No card required. After that it's $39 a year or $6 a month, and nothing is charged unless you choose to subscribe. Built from this same repo, in cloud mode — see Two modes, always.
Configure all of it from your phone at /settings, or by editing config.yaml directly — they are
the same file, and the UI keeps your comments.
[cron every 5m] → generate.py --tick → every hour by default: re-fetches every iCal feed
→ once a day at a time you set, 06:00 by default
(and at once on the first run): calls Claude
→ saves dashboard_data.json
[browser] → web/routes/board.py → recomputes chores, countdowns and today's agenda
→ renders the dashboard
Only the headline comes from the model. Ages, countdowns, chore turns and the agenda are recomputed on every render, so if a day's run fails the times and turns on the wall are still today's — the headline is one worked out from the day, and the dashboard says so.
You can see the real dashboard in about two minutes, with no API key and nothing to pay for.
git clone https://github.com/caspii/dinkydash.git
cd dinkydash
python3 -m venv venv && source venv/bin/activate
pip install -r requirements.txt
cp config.example.yaml config.yaml # edit by hand, or from /settings once it runs
python sample_board.py # a dashboard for today; calls no API, costs nothing
python app.py
The chore turns, ages and countdowns are computed from the config.yaml you just made, so
editing it and reloading shows your own family. Only the headline is canned until
you add an Anthropic API key.
Then follow the getting started guide — it has the API key step, where to find your calendar's iCal link for Google, iCloud and Outlook, and the whole Raspberry Pi build with systemd, kiosk mode and the screen schedule.
There is no login. The dashboard and the settings UI are both served without authentication, so anyone who can reach the port can read your family's agenda and rewrite
config.yaml— names, birthdays, and every calendar link in it.That is deliberate rather than unfinished: DinkyDash is a config file with a web form on it, and the file has no login either. It assumes it is on your home network, the same as a printer.
So keep the port off the public internet. Do not forward port 5000 on your router. If you need it from outside the house, reach it over a VPN such as Tailscale or WireGuard, or put a reverse proxy with basic auth in front of it.
Hosted mode is a different matter — it authenticates every request and is scoped per family. See Hosted mode raises the stakes.
| What you want | Where it is |
|---|---|
| Install it, and put it on a Raspberry Pi | dinkydash.co/getting-started |
| Every config key, with comments | config.example.yaml |
| Living with it: the daily cycle, the two buttons, what to check when something looks wrong | doc/running-it.md |
| Coming from an older version | doc/upgrading.md |
| Working on the code, and how the hosted build shares it | CLAUDE.md |
| Product terms and UI wording | doc/terminology.md |
The install and Pi guides live on the website rather than here, so there is one copy of each to keep right.
Conductor's dev run action starts the hosted dashboard and marketing website
together. The same command outside Conductor is venv/bin/python dev.py.
See local development for the required development database
and session key, ports, sign-in, and how Conductor picks up the run configuration.
The self-hosted quickstart above is unchanged.
pip install -r requirements-dev.txt # adds pytest and the website build; not needed on the Pi
python -m pytest tests/ -q
The suite runs in seconds. It covers leap years, timezone conversion, event ordering, chore rotation, the stale-dashboard logic, the config round-trip, and the settings routes that write it.
GitHub Actions runs the same command on every push and pull request, on Python 3.11
(.github/workflows/test.yml), alongside a gitleaks scan of
the full history. Every requirements file is pinned with ==, so a clean pip install gets the
versions CI passed on. A pull request that fails either check shows a red X.
| Path | Purpose |
|---|---|
dinkydash/ | The engine. Pure functions plus the model call — no clock, no file reads |
dinkydash/context.py | Ages, birthdays, countdowns, chore rotation |
dinkydash/calendars.py | iCal fetch, parse, recurrence, merging feeds |
dinkydash/board.py | Turns config + payload into what the dashboard renders |
dinkydash/runner.py | The two halves of the cycle: refresh_calendars and write_brief |
dinkydash/schedule.py | due() — which of the two the clock and the config owe right now |
dinkydash/store.py | Where the config, the dashboard and the note history are kept |
migrations/ | The hosted schema, plain SQL. Self-hosting needs none of it |
web/ | Flask app — dashboard, settings UI, templates |
web/templates/board.html | The dashboard itself, light and dark, all screen sizes |
generate.py | Command-line skin over dinkydash.runner — this is what cron calls |
app.py | Flask entry point |
config.yaml | All configuration. The settings UI writes this same file |
config.example.yaml | Template config, documenting every key |
tests/ | The test suite. Run it before committing |
doc/ | Running it day to day, and upgrading from an older version |
design/ | Mockups for the dashboard and settings UI, with the reasoning |
.env | ANTHROPIC_API_KEY (not in git) |
.env.example | The template for it — copy to .env |
.github/workflows/test.yml | CI: pytest and gitleaks, on every push and pull request |
Pull requests are welcome. The codebase is one monorepo serving both the self-hosted and the hosted build, so a change has to work in both modes — read CLAUDE.md before starting anything structural, and open an issue first for larger changes.
Known rough edges are listed under "Known issues" in CLAUDE.md.
MIT — see LICENSE.
.gitleaks.toml| Secret-scanning rules, including one for iCal secret addresses |
dashboard_data.json | The generated payload (not in git) |
content_history.json | A rolling record of the last 30 days' runs (not in git) |