A calm localhost homepage for science and tech feeds Many readers tire of social feeds optimized for engagement rather than substance. okaeri offers an alternative: a localhost homepage that gathers the latest papers blogs forums and news in science and technology. The user picks sources and okaeri fetches them in the background gathering stories on one page in tabs the user sets up. Each tab shows stories newest first or recommended. For recommended stories a small embedding model runs on the user's machine in the background. The system registers clicks and hides and uses a simple algorithm for ranking the feed. Reading history never leaves the device and the recommendation algorithm belongs to the user who can tune it from the UI or delve into the code.

Installation and onboarding

Running okaeri starts with a simple terminal command. Users can paste curl -fsSL https://raw.githubusercontent.com/DBvdHeijden/okaeri/main/install.sh | sh into a terminal or on Windows in PowerShell run powershell -ExecutionPolicy ByPass -c "irm https://raw.githubusercontent.com/DBvdHeijden/okaeri/main/install.ps1 | iex". The command puts okaeri in ~/okaeri or %USERPROFILE%\okaeri on Windows installing uv first if needed and opens http://localhost:12362 in the browser where the user picks sources. Those who prefer git can clone the repository and run uv run main.py install. The first time okaeri downloads a language model ~330 MB and indexes articles in the background which can take a few minutes. Good to know: okaeri keeps running in the background and starts whenever the user logs in. New stories trigger the embedded AI model to rank them a separate process using up to two CPU cores and about 1.3 GB of memory for a short while then exits. That can cost some battery on a laptop. Stop it any time with uv run main.py uninstall. okaeri comes as is and the user runs it at their own risk.

The first time a user opens okaeri they walk through an onboarding sequence taking a few minutes. The user says what they like to read about picks sources marks stories they've read and arranges tabs. Answers give recommendations a head start and later in Settings the user can change sources tabs and ranking. Preferences get further tuned as okaeri is used.

Catalog and sources

The catalog has about 90 sources in English and Dutch: papers blogs news and forums on AI software security science space climate world news politics and sports. Think arXiv Nature Quanta Hacker News Simon Willison and Ars Technica. Users pick sources on the Settings page the gear. Adding own feeds is in progress; for now users add one to catalog/sources.json and send it as a pull request. Alternatively they can list source ids under sources.enabled in settings.json.

Everything lives in the repo folder and is never committed. The data/ directory holds the database with reading history the embedding model and the log. settings.json holds sources and tabs. It stays on the user's machine. okaeri only goes online to fetch feeds download the embedding model from Hugging Face once and get the latest version from GitHub when running update (installing also fetches uv and Python packages). No telemetry no accounts.

Local embedding and ranking

Stories are embedded locally with EmbeddingGemma 2 downloaded on first use into data/models/ ~330 MB licensed under the Apache License 2.0. Tabs set to "Recommended" rank by the embedding model: stories close to what the user opened or liked go up look-alikes of what the user hid go down and older stories fade. Each topic has its own taste: liking AI stories lifts AI without sinking politics. The ranking system lives in docs/ranking.md and explains the whole score.

Platforms and deployment notes

okaeri runs on macOS Linux or Windows. Windows is new and not properly tested yet feedback is welcome. Since recently it runs as a Task Scheduler task that starts when the user logs in. It seems to work but hasn't been tested properly yet if something breaks users should open an issue with the output of uv run main.py status. Docker or access from another device on the network is not yet supported okaeri listens on 127.0.0.1 so it can only be opened on the computer it runs on. Once some time finds the developer maybe they'll get to this. Sync across devices no each install keeps its own history on its own machine.

Commands for maintenance

From the okaeri folder users run various commands. uv run main.py update gets the latest version syncs dependencies and restarts. uv run main.py status shows one screen with what's going on and can be shared when asking for help. uv run main.py logs shows the last 50 lines of data/okaeri.log. uv run main.py restart restarts the service. uv run main.py uninstall removes the background service leaves data; delete the folder to remove everything.

License and community

okaeri is free software under the GNU Affero General Public License v3.0 (AGPL-3.0). Users can change it and share it. If they share a changed version or run one for others as a service they share its source under the same license. Contributions are very welcome and licensed under the same AGPL-3.0. Start with CONTRIBUTING.md.