Machinevertaling. De Engelse tekst is leidend. English

de andere helft

Dingen die ik heb gebouwd omdat ik wilde dat ze bestonden.

PANTHEON is het werk. Dit is wat dezelfde instincten opleveren als niemand voor de uitkomst betaalt: een echte sterrenhemel op een desktop, een efemeride zonder dependencies en een terminal die kan tekenen. De discipline is identiek; alleen wat er op het spel staat verandert.

GNOME Shell · GPL-2.0 · ★3

TerraFirma: een echte hemel over je achtergrond.

Geen animatie van een hemel. De echte, berekend uit een efemeride voor jouw breedtegraad, lengtegraad en klok.

Een GNOME-desktop met als achtergrond de berekende nachtelijke hemel: sterrenbeeldfiguren voor Pegasus, Waterman, Ram en Stier met hun namen, de Melkweg als band erdoorheen, Saturnus gelabeld en gloeiend, en de horizonboog gemarkeerd met SE en SW. Het dock en de pictogrammen Home en Prullenbak zijn in beeld.
Het bureaublad, onbewerkt. Het dock en de iconen staan er bewust op: dit is de achtergrond, geen venster dat doet alsof. Elke figuur, de Melkweg en de horizon worden berekend voor die locatie en die minuut.
Saturnus weergegeven als een kleine oranje schijf met de ringellips eromheen getekend, met het label Saturn, tegen sterrenbeeldlijnen.
Saturnus op negentien boogseconden, de ringen geopend en gekanteld volgens de echte ringgeometrie. Elke vijftien jaar sluiten ze zich tot een lijn; dit toont ze deels open, want zo staan ze nu.

De hot loop is bewust meetbaar

De projectie en de atmosfeer staan in skymath.js, dat niets uit GNOME Shell importeert. Naar een bestand dat alleen binnen een sessie kan draaien, kun je alleen gissen; een bestand dat zelfstandig draait, kun je timen. Die grens volgt dezelfde redenering als de purity-lint die de kern van PANTHEON buiten de app-laag houdt.

Sterrencatalogus en efemeriden komen van derden en worden vermeld in NOTICE.md. Richt het op een datum en kijk dan omhoog: voor dit soort software is dat de enige test die telt.

Een brede, smalle strook van de horizon met de kompaskoers SE gemarkeerd op de horizonboog, met het sterrenbeeld Piscis Austrinus en de ster Fomalhaut net erboven gelabeld.
De horizon, met kompasrichtingen, zodat je je kunt omdraaien en het kunt controleren.

Waarom de hot loop eruit moest → · TerraFirma op GitHub ↗

geëxtraheerd en gepubliceerd

Drie packages die eruit zijn voortgekomen.

Hetzelfde patroon als bij de zes van PANTHEON: bouw het ding, vind het deel dat echt herbruikbaar is, haal het eruit en publiceer het op eigen voorwaarden. Alle drie zijn MIT en nu direct te installeren.

De Mona Lisa in een terminal weergegeven als gekleurde Unicode-brailletekens. Elke tekencel bevat een raster van 2x4 punten; het gezicht, de handen en het wazige landschap achter haar zijn allemaal herkenbaar, en de textuur van de braillepunten is in elke cel zichtbaar.
De Mona Lisa, getekend met Unicode-braille in een terminal, 93 kolommen breed. Elke cel is een raster van 2×4 punten met een eigen voorgrond- en achtergrondkleur.

braillecanvas v0.4.0 · MIT

Braille adresseert 2×4 punten per tekencel, dus een terminal van 80×24 is eigenlijk een canvas van 160×96. Dat is het verschil tussen een rendering en ASCII-art.

Het interessante deel is kleur. Elke cel draagt twee kleuren, één voor de verlichte punten, één voor de tussenruimtes, zodat een cel die over een rand valt, huid tegen lucht, de rand behoudt in plaats van die uit te middelen tot modder. De gemiddelde kleurfout per punt op deze afbeelding daalt van 45.7 naar 21.3.

Per cel kiezen welke puntjes oplichten, in plaats van het patroon uit een vast dither-raster te halen, verlaagt het aandeel cellen zonder textuur van 35.1% naar 1.6%.

Twee beperkingen die in de eigen README staan: onder ongeveer 90 kolommen werken foto's niet meer, en monochroom kan deze afbeelding helemaal niet weergeven, haar gezicht meet 159 luminantie tegenover 192 voor de lucht achter haar, dus een 1-bit render is per constructie een silhouet.

npm i braillecanvas · npm ↗ · broncode ↗

skymaths v0.1.2 · MIT

Positionele astronomie zonder dependencies: zon, maan, planeten, schemering, op- en ondergang. Geëxtraheerd uit de efemeride van TerraFirma en daarna gecorrigeerd: de Espenak–Meeus-polynoom die het gebruikte is alleen gepubliceerd voor 1900–1920 en werd toegepast op 1986, wat voor 1950 −534 seconden gaf tegenover een gemeten +29. Gevonden door het te toetsen aan een gepubliceerde almanak in plaats van aan zichzelf.

Het draait op deze site: in de donkere modus is de achtergrond de hemel boven Cardiff in de nacht van de Perseïden, 13 augustus 2026, berekend in je browser: 5,044 sterren in hun echte kleuren, de fase van de maan en de planeten waar ze stonden. Scroll om rond te draaien.

npm i skymaths · npm ↗ · broncode ↗

Cardiff, 12–13 augustus 2026, 22:45 tot 02:15 BST, elk frame berekend door skymaths. Meteoren vertrekken vanuit de echte radiant van de Perseïden, met de echte frequentie; waar elke meteoor valt is willekeurig. Het kasteel en de heuvels zijn gegenereerd door Runway.

starwheel v0.2.3 · MIT · ★4

Een live planisfeer in je terminal, echte sterposities voor jouw locatie en minuut, getekend op braillecanvas. Mijn repository met de meeste sterren, en degene die me leerde dat een fix die gepubliceerde pixels verschuift niet twee keer dezelfde fix is: deze begrenst iteraties waar zijn zusterproject clipt, bewust.

npx starwheel · npm ↗ · broncode ↗

Een servermonitor voor de terminal, getekend in braille: lijngrafieken voor CPU, geheugen en load average over een voortschrijdend venster, met een balkstrook per core.
Hetzelfde canvas plot echte /proc-data, CPU, geheugen en load average over een rollend venster. Grafieken werken ver onder de ondergrens van 90 kolommen die foto's nodig hebben, omdat ze al een hoog contrast hebben.

op deze pagina, nu

De kunst wordt gegenereerd, en de seed kan niet ontsnappen.

Alle kunst op deze site: de hero hierboven, de favicon, de social cards, de avatars, komt uit PANTHEONs eigen generator. Deterministisch en geseed: dezelfde seed geeft elke keer hetzelfde beeld.

Hetzelfde contract aan beide kanten

Een server-side engine rendert de social cards en tenant-sites; een browser-engine tekent de geanimeerde versie waar je nu naar kijkt. Zelfde regel: seed erin, reproduceerbare kunst eruit.

Injectieveilig door constructie

De seed voedt de PRNG en verder niets. hij wordt nooit in markup of een style geïnterpoleerd. Een tenantnaam die eigenlijk een payload is, tekent een ander plaatje; hij tekent geen script-tag. Hetzelfde instinct als in de rest van het systeem, toegepast op decoratie.

installeerbaar, niet alleen leesbaar

Zes garanties, losgemaakt en gepubliceerd.

Elk ervan kwam uit PANTHEON voort als één verifieerbare belofte en ging daarna naar PyPI, zodat het op zichzelf staat. Adversariële AI-agents, zelf gedraaid, niet onafhankelijk, liepen ze regel voor regel door en vonden echte defecten; de versies hieronder zijn die na die fixes, elk geverifieerd door vanuit het register in een schone omgeving te installeren en de eigen reproductie van de reviewer opnieuw te draaien, niet door op het buildlog te vertrouwen.

pantheon-guardrails v0.3.2 · Apache-2.0

Een constitutie-scorer die alleen bij antwoorden met veel op het spel een LLM-judge inzet, en eist dat die judge een ander model is dan de generator, zodat de twee geen blinde vlekken delen. Vroeger klemde hij een score buiten het bereik omhoog: een judge die {"clarity": 99} teruggaf, scoorde een perfecte 1.0 en haalde elke drempel: een guardrail die open faalde. Nu is een judge die een fout gooit, blijft hangen of onzin teruggeeft een expliciet mislukte evaluatie die standaard blokkeert.

pip install pantheon-guardrails · PyPI ↗ · broncode ↗

pantheon-ssrf-guard v0.2.1 · Apache-2.0

Een SSRF-egress-guard in twee lagen die DNS-rebinding overleeft: hij controleert opnieuw het IP dat de socket bij het verbinden daadwerkelijk bereikte, zodat een host die publiek resolvet en daarna rebindt naar loopback of cloud-metadata wordt geweigerd. De review ontdekte dat de opener nog steeds file://-URL's las, omdat Python standaard handlers voor andere schemes installeert; er is nu een expliciete http/https-allowlist op de grens, redirects inbegrepen, en proxies uit de omgeving staan uit tenzij je erom vraagt.

pip install pantheon-ssrf-guard · PyPI ↗ · broncode ↗

pantheon-tool-sanitizer v0.3.0 · Apache-2.0

Verwijdert tool-protocolmarkup en Unicode-smokkel uit onbetrouwbare MCP-tooltekst voordat die de prompt van een agent bereikt. Eerlijk afgebakend: het claimt niet dat het injectie in gewoon proza tegenhoudt, want dat is een architectuurprobleem en geen stringprobleem. Twee fixes uit de review: een adversariële input van 256 kB kostte 26 seconden CPU en wordt nu direct geweigerd, en "Read\nthe\tfile" wordt niet langer "Readthefile", omdat een regeleinde een woordgrens is.

pip install pantheon-tool-sanitizer · PyPI ↗ · broncode ↗

credit-ledger v0.3.0 · Apache-2.0

Metering die niet rood kan staan, bovenop Postgres in ongeveer 150 regels: 100 parallelle afschrijvingen tegen een saldo van 50 en er slagen er precies 50, exactly-once facturering bij herhaalde webhooks, isolatie afgedwongen door row-level security. De gepubliceerde build accepteerde vroeger een negatieve afschrijving, die de klant uitbetaalde, en bedragen onder de precisie van de kolom, die 0.0000 factureerden terwijl succes werd gemeld. Eén bedragregel dekt nu elk pad, en er is een geteste migratie voor databases die al bestaan.

pip install credit-ledger · PyPI ↗ · broncode ↗

pantheon-ical v0.3.1 · Apache-2.0

Round-trip iCal (RFC 5545) voor boekingsagenda's in minder dan 200 regels. Een weggevallen bezette periode leest als vrij, dus stilte is de gevaarlijke faalwijze: een te grote agenda wordt geweigerd in plaats van afgekapt, en een herhalingsregel die overloopt meldt dat in plaats van een te korte lijst terug te geven. De laatste fix begrensde zowel het werk als het resultaat: een vijandige herhalingsregel van één regel bouwde vroeger 34 miljoen voorkomens op in 76 seconden voordat hij werd afgewezen; nu stopt hij bij 401.

pip install pantheon-ical · PyPI ↗ · broncode ↗

pantheon-rls v0.1.1 · Apache-2.0

Tenantisolatie als Postgres-garantie in plaats van een applicatiegewoonte: force-RLS plus least-privilege-grants, zodat de database zelf lees- en schrijfacties tussen tenants weigert. Fail-closed door constructie: zonder tenantcontext krijg je nul rijen, nooit alle rijen, en dat is de faalwijze die telt wanneer een bug om 3 uur 's nachts productie bereikt.

pip install pantheon-rls · PyPI ↗ · bron ↗

Elke fix hierboven kwam op dezelfde manier tot stand: eerst het defect reproduceren, de grens repareren in plaats van het symptoom, en dan bewijzen dat de nieuwe test faalt als de bug wordt teruggezet. Een test die niet kan falen, is geen bewijs.

waar het op draait

De stack is saai. De grens niet.

Python 3.12, FastAPI, Postgres, Redis, React met Vite, één Dockerfile achter nginx. Geen van die keuzes verdient bewondering, het zijn de onderdelen die je kiest zodat je aandacht naar iets kan gaan wat ertoe doet.

146 bestanden · 14,002 regels

pantheon-core: het substraat. Per contract domeinonafhankelijk: het mag niet importeren uit residents of bundles, en twee onafhankelijke checks laten CI falen als het dat wel doet.

210 bestanden · 24,216 regels

Tests, tegenover 38,816 regels Python. Ik schrijf de implementatie niet met de hand, dus de suite is geen vangnet. Het is de specificatie, en het is het artefact dat ik daadwerkelijk schrijf.

Vijf lagen, één weg

architect · runtime · guardrails · substrate · primitives, met providers bewust buiten de stack, omdat die onder twee lagen tegelijk zit en het contract dat hardop zegt in plaats van te buigen.

Door die grens konden zes componenten eruit worden gelicht en als losse libraries worden gepubliceerd; extractie was vooral het verplaatsen van bestanden die nooit naar beneden hadden mogen reiken. De lange versie, inclusief het deel dat ik fout had →

Dezelfde persoon, dezelfde regels, minder op het spel.

Niemand auditeert behang. Deze zijn zo gebouwd omdat het de enige manier is waarop ik weet hoe ik moet bouwen: meten, het herbruikbare deel extraheren, de grenzen erbij publiceren en de getallen toetsen aan iets buiten het programma.

Wat ik zoek → Lees wat ik schrijf →