ohf@#k
A self-hosted news, markets, and OSINT dashboard
ohf@#k puts markets and news on one screen: indices, futures, crude, retail gas, safe havens and treasuries alongside RSS headlines, Reddit, breaking-news clustering, prediction markets, and a set of geopolitical risk panels.
It is built for hardware you already own — a NAS, a Raspberry Pi, a spare box in a closet — and it fetches everything on a background schedule rather than per request. The panels stay warm, and the upstreams stay unbothered no matter how often you reload.
The dashboard has a point of view, and says so. The composite “mood” score is explicitly left-leaning and anti-incumbent, and the polarity is baked into the arithmetic rather than hidden behind a setting: falling markets score as good, rising energy prices score as good, and the keyword lists are frankly partisan.
That is documented at the top of the README rather than buried, because someone deploying it deserves to know before the numbers look broken. Everything else — markets, threats, prediction markets, the security and refugee panels — is stance-neutral, and the four functions that carry the bias are named so they can be edited or neutralised.
It boots with an empty .env
Every API key is optional. Each one you add lights up one more panel; each one you leave out disables exactly that panel and nothing else. There are no NEXT_PUBLIC_* variables and no build arguments, so one image is valid for every deployment and no key is ever inlined into the browser bundle. Change a value, docker compose up -d, done — no rebuild.
Sources that admit what they are
Roughly eighteen sources are polled in the background by a named Source in a registry. Each retains its last good value and flags itself stale on failure, rather than showing a zero that looks like data. /api/health reports per-source freshness, so “why is the safe-haven panel showing dashes?” is one curl away.
- Official and keyed — Finnhub, Reddit's OAuth API, Congress.gov, the Federal Register, OFAC's SDN list, CISA KEV, UNHCR, Freddie Mac PMMS, GDELT via BigQuery.
- Publisher RSS — thirteen news feeds plus UN Security Council coverage.
- Unofficial, and labelled as such — Yahoo Finance's private cookie/crumb API, Polymarket's undocumented gamma endpoint, an AAA gas-price scrape, CNN's Fear & Greed internal endpoint, and a syndication-endpoint Twitter/X OSINT feed.
The unofficial ones are marked with a warning in the source table, along with the reasoning: that was a defensible trade-off for one person's private dashboard, and it is a different proposition once the code is public and every fork adds load. The advice in the README is to disable what you do not need and lengthen the cadences before adding instances.
Stack
| Framework | Next.js with TypeScript |
|---|---|
| Fetching | Named background sources on independent cadences, from 30 s to 24 h |
| AI | Claude for headline sentiment, breaking-news summaries, and the prediction briefing — with a keyword fallback when no key is set |
| Notifications | Web Push (VAPID) for breaking news |
| Auth | Optional password gate; documented as required for anything outside a LAN |
| Deploy | Docker Compose, runtime-only configuration |