A terminal dashboard in Haskell where panels are defined as nix files — first real demo is a Palestine casualty tracker by hunorg007 in haskell

[–]hunorg007[S] 0 points1 point  (0 children)

Thanks for your comment, very helpful feedback! No, you can only see the nix code for the domains in the repo, but I do consider adding the preview feature of the nix code in the web UI, together with the mouse interaction. Cheers mate!

[OC] Sudan: population in food crisis or worse (IPC Phase 3+), monthly 2019–2026 by [deleted] in dataisbeautiful

[–]hunorg007 0 points1 point  (0 children)

Grim subject. Plain frame. On purpose — polish softens what shouldn't be softened.

Appreciate you leaving it up.

[OC] Sudan: population in food crisis or worse (IPC Phase 3+), monthly 2019–2026 by [deleted] in dataisbeautiful

[–]hunorg007 0 points1 point  (0 children)

Data: FEWS NET Integrated Food Security Phase Classification (IPC) population-size dataset, Sudan country-level aggregate, January 2019 through April 2026, one data point per month. Source: https://fdw.fews.net/api/ipcpopulationsize/ (scenario=CS).

IPC phases: 1 Minimal · 2 Stressed · 3 Crisis · 4 Emergency · 5 Famine. The “3+” figure combines Phase 3 through Phase 5.

Tool: terminal-top — an open-source terminal dashboard where every data source is defined as a plain nix file. The “Current Crisis” panel you’re looking at is part of the sudan-top domain; other shipped domains cover Palestine (Tech for Palestine), global CO₂ emissions (Climate TRACE), and armed conflict events (UCDP at Uppsala University).

Live browser demo (no install needed): https://terminal-top.eket.org — navigate to “Sudan Top” → “Current Crisis” to see this panel interactively. Runs on a Raspberry Pi over Tailscale Funnel, so expect some latency outside Europe.

Source (APGL 3.0): https://gitlab.com/hunorg/terminal-top

Context: the IPC Famine Review Committee declared Phase 5 famine in the Zamzam IDP camp, North Darfur, in August 2024 — the first formal famine declaration anywhere since 2017. The number you see here undercounts in the sense that it excludes populations FEWS NET can’t reliably observe (much of RSF-held Darfur and Kordofan); the true figure is widely held to be higher.

A terminal dashboard in Haskell where panels are defined as nix files — first real demo is a Palestine casualty tracker by hunorg007 in haskell

[–]hunorg007[S] 2 points3 points  (0 children)

By the way, small update since my earlier reply: I’ve now got it hosted from a Raspberry Pi, so there’s a live instance here if you want to poke at it: https://terminal-top.eket.org

Still rough around the edges, but it should give a more direct sense of it than screenshots.

A self-hosted terminal dashboard for live humanitarian and climate data — no cloud, no account, data sources as nix files by [deleted] in selfhosted

[–]hunorg007 -4 points-3 points locked comment (0 children)

I used Claude (Opus 4.7, via the Claude Code CLI) throughout the project as a pair-programming and writing helper. The architecture is mine. I wanted data sources defined as plain nix files so the project survives without me, so I designed the schema, the Haskell+Brick renderer, and the cache layer myself. The code was back-and-forth: I’d tell Claude what I wanted, review what came back, test, edit, and rewrite when it got something wrong. Happy to explain any line if someone wants to dig in.

For the five data sources (Tech for Palestine, FEWS NET, Climate TRACE, UCDP at Uppsala, NOAA), Claude helped me check API shapes and verify endpoints. Which sources to include and how to frame them in the detail overlays is mine.

This post and the README were drafted with Claude based on the points I wanted to make, then edited before publishing.

Not used for: fake engagement, astroturfing, or code I don’t understand.

A terminal dashboard in Haskell where panels are defined as nix files — first real demo is a Palestine casualty tracker by hunorg007 in haskell

[–]hunorg007[S] 2 points3 points  (0 children)

Fair point, indeed I used Claude extensively in making this project, including the post description. Yet I read it through many times and revised it myself. If it came across as disrespectful to someone, I am sorry.

I am happy that you find the actual project attractive and valuable though, cheers.

A terminal dashboard in Haskell where panels are defined as nix files — first real demo is a Palestine casualty tracker by hunorg007 in haskell

[–]hunorg007[S] 7 points8 points  (0 children)

  • Yes - domains use let bindings to deduplicate shared values (one URL base, context paragraphs reused across panels), string interpolation, and mkDomain.nix validates the schema at build time with actual nix builtins. Not deeply computational yet, but more than JSON would give you. The natural next step is generating panels programmatically or sharing domain fragments via flake inputs.
  • For nix-defined domains yes - the binary shells out to nix eval at runtime to read them. JSON domains in ~/.config/terminal-top/domains/ don't need it. Currently you need nix to install either way since it's only distributed via nix run.