I've had a Tiiny on my bench and I wanted to see what it does with a real job rather than one prompt at a time. So I built Daybreak.
It pulls world news from 14 free feeds every five minutes and hands every single article to the Tiiny. Not a selection, all of them. Roughly 300 a day.
For each one the Tiiny does five things:
Step | What comes back |
|---|---|
Summary | Two sentences, written from the article body |
Category | Conflict, cyber, disaster, politics, economy |
Location | Geotagged to a real point on the map |
Severity | 1 to 5, so the board can shout about the important ones |
Embedding | A vector, used to cluster the same story across outlets |
Nothing goes to a cloud model. No OpenAI key, no Anthropic key, no subscription. No article text leaves my network at all. The only thing touching the internet is the public RSS, and that was already public.
When the news goes quiet it doesn't idle. It writes a daily brief, follows up on developing stories, and paints images for the serious ones.
There is nothing to install. Python 3.11 standard library only. No pip, no venv, no build step, no Node.
git clone https://github.com/webdevtodayjason/daybreak.git
cd daybreak
export TIINY_HOST=192.168.1.50
export TIINY_KEY='<Settings -> API key>'
python3 pipeline.py &
python3 server.py
Open http://localhost:8811 and watch it fill up. The database gets created on first run. Delete it and start over whenever you like.
The Tiiny runs one inference at a time. If anything else talks to the device while Daybreak is running, both start failing with this:
{"code": 150004, "message": "The operation failed to complete."}
Inside one program that's easy, you queue your own calls. It stops being easy the moment a second program touches the device, because your queue and its queue have never heard of each other.
I hit this running the news board and a bedtime storyteller against the same Tiiny. Both worked fine alone and stepped on each other all night together.
So I pulled the fix out into its own thing: OneLane. Drop onelane.py next to your code and apps take turns properly instead of erroring. One file, stdlib only, and if a process dies holding the lock the kernel releases it so there's nothing to clean up.
Daybreak uses it automatically if it's importable, and runs fine without it.
https://github.com/webdevtodayjason/daybreak
MIT, take it and use it. It's run unattended for a week at a time on an Orange Pi. If you build something on it I'd like to see it.
-Jason
Wait this is actually very cool
Looks very professional