A birth chart platform built solo and not yet released. You give it a date, a time, and a place; it computes the full chart from the same ephemeris observatories rely on, then keeps drawing it against today's sky. Roughly 34k lines, 201 tests, thirty commits across eight working days. The designation field is still blank.
Year2026StackProduct · Computation · 3D · Content system · Privacy
WireframeShipped
Drag the seam · wireframe ↔ shippeddesigned and built by one person
FIG.Measured Render
The UI, measured. The shipped screen, drawn to its own griddesigned and built by one person
A measured render: the same screen you ship, drawn as a technical drawing. Every number is a constraint someone has to hold. That is why a simple screen is so hard to build.
A sheet from the drafting table
You give it a birth date, a birth time, and a place. It computes the whole chart from that one moment, draws it, and then keeps working, because the sky keeps moving and the chart is read against it every day. Your design, drawn from the sky.It does not have a name yet. The chart is the event.So this is a project sheet rather than a launch page. What it does today, on the table, with the designation field left blank: 33,919 lines across 194 files, 201 tests, and thirty commits spread over eight working days in six weeks. No name, no domain, no billing, and open or closed source still an open question. Everything below is built and running on my machine. Nothing below is for sale.FIG. 01 · The landing page. The hero is a real chart, drawn by the same file that draws yours.
1, Two passes, and one of them has to be solved
A chart has two halves, and only one of them sits at the birth moment. The conscious half, Personality, is read at the minute of birth. The unconscious half, Design, is read at the instant the Sun sat exactly 88 degrees earlier along its path. That instant is in no table. It has to be found.I solve for it with Newton's method, to 1e-7 of a degree, behind a guard that fails loud rather than handing back a chart that is nearly right. Both passes then read the same 13 celestial bodies from the ephemeris observatories rely on, which gives 26 activations. Those resolve into gates and lines, then channels, then centers, then Type, Strategy, Authority, Profile, Definition, which is a connectivity problem solved with union-find, and one of 192 named incarnation crosses.All of it is held by five golden charts: public figures whose charts are documented in public, including the founder of the system itself. If a refactor moves one line of one gate, those tests say so before I do. The landing page states the position plainly, and the tests are what make the statement honest: computed, not approximated.
2, A wheel that draws itself before anything else can
The mandala is one deterministic drawing, 582 lines long. Line ticks, zodiac arcs, gate tiles, hexagrams, planet glyphs placed at their exact longitudes. Because nothing about it is measured or animated, it arrives complete in the first render pass: no animation frame, no measuring step, nothing to wait for.It does two jobs with one file. It is the wheel on the landing page and the wheel inside the chart, and determinism is a contract rather than a happy accident, because the same birth moment has to produce the same drawing every time or the tests are worthless.Where 3D cannot run, a second drawing takes over: the BodyGraph, also SVG, also deterministic. A fallback that is a lesser drawing is not a fallback, it is a penalty. Neither of these is.
3, Two modes, one canvas, and a scene I deleted
The chart reads in two modes, and the live one owns a canvas that is never torn down. Mandala is the drawn wheel from section 2. BodyGraph is the scene: nine centers, the channels between them, the defined ones carrying the current. The canvas under it is one object for the whole session, so a camera rig moves and nothing remounts, and the chart, the position, and the state all survive the trip.There were three. A galaxy view, the chart as a star system, went out with the design migration: 845 lines deleted in the same commit that finished the interface. It was the prettiest thing in the app and it was the least legible, and a mode that reads worse than the mode beside it is a mode that costs maintenance to keep being second best.Two more scenes sit fully built in the code with nothing routed to them. So: one live, two built and waiting, one deliberately gone. That is what a workshop looks like, and this page is a workshop document.FIG. 03Three readings, one chart01 / 03
The wheel
Deterministic, drawn complete in the first pass, every glyph at a computed longitude.one canvas · no remount
Three tabs, three captures. The wheel is a finished drawing, the BodyGraph is the live scene on a canvas that never remounts, and the Cross view filters the same wheel without discarding a single activation.
4, The probe that is allowed to say it does not know
Device capability is measured in the state initializer, before the first paint, and the probe may return null. Null means cannot tell yet, and null is never collapsed into a verdict. The 2D chart is what renders while the question is open, because that is the safe answer to an open question, but the app will not say "3D unavailable" until the probe has actually resolved. A capable desktop never reads that sentence about itself.That distinction is the entire feature. When the probe ran late, every desktop painted the 2D chart and then ripped it out from under the reader, which is a worse experience than either outcome on its own.Recovery follows the same rule. A graphics context lost to sleep, wake, or a switch between graphics cards is a transient failure, not a verdict, so it is recovered in place inside a 5 second grace window instead of latching to 2D for the rest of the session. Phones get the 2D chart by design. The wheel is the content, and a phone should not have to pay for a camera rig to read it.
5, Today, borrowed
The Sun sits in one gate for about 5.7 days, and that span is the unit the guidance is written in. Each one is a chapter with a start and an end, both solved rather than estimated: the exact moment the Sun crosses a gate boundary, the same for the Moon, the lunar phase around it, and which channels today's sky temporarily completes in your chart and not in anyone else's.Temporarily is the load-bearing word, and it is enforced in tests, not in a style guide. Transit copy has to speak in borrowed terms. The disclaimer is written as product voice rather than as small print, and it is the sentence the whole feature is built to deserve.
Everything on this page describes temporary weather, not who you are. Your own experience is always the final authority.
FIG. 04 · Today. The sky completes channels you do not own, for as long as it is standing there.
6, The copy has a compiler
The interpretive corpus runs to about 4.7k lines and it fails the build like any other code. Plain-language summaries cap at 220 characters. Every cross-reference slug has to resolve. Transit copy has to carry the temporary or borrowed framing. A decision prompt may not open with an imperative, because a prompt that issues an order is not a prompt. A banned-phrase list covers directives, trademarks, medical claims and predictive claims. Em dashes are banned too, which is the smallest rule in the file and the one that keeps the voice honest.One rule sits above the rest: nothing is copied or paraphrased from the tradition's source texts. Every line is written from scratch, in my own words, or it does not ship. The schema also carries a field for an editor of record, and that field is empty, which is why the corpus is not finished no matter how many checks it passes.
7, Birth data is not ordinary data
A birth time and a birth place are special-category personal data under EU law, Article 9. So the parts nobody screenshots came first. A person can export everything the system holds on them, without asking me, and a password-confirmed erasure cascades through every record the account ever touched.The consent flow and the lawyer-reviewed policies are written into the codebase as release gates rather than as to-do items, in the words that they can never be retrofitted. The app is independent of the tradition's rights-holders, and it says so in the footer, as product copy, in the same voice as everything else. A disclosure that hides in a legal page is a disclosure that was not meant to be read.
8, Two charts, four verdicts
Put two charts on one drawing and every composite channel gets classified. Spark, where one person completes what the other only half holds. Shared ground, where both bring the same channel. One transmits, where the current runs in a single direction. Friction, where the same wire is held from two ends.It is a reading of two people that never grades them. There is no score, no percentage, no verdict on the pair, because the honest output here is a description of the wiring and nothing more.FIG. 05 · Connection. Four kinds of channel, and not one of them is a rating.
9, 142 pages a crawler may read, and the ones it may not
Eight Basics, five Types, seven Authorities, twelve Profiles, nine Centers, thirty-six Channels, sixty-four Gates, and the hub that indexes them. 142 statically generated reference pages, all of them in the sitemap. A reference page belongs to everyone, so it is built to be found. A chart belongs to one person, so it stays out of the sitemap and the personalized reads carry noindex.That rule is one line of configuration per route, which is exactly the kind of thing that rots quietly, so I audited it against the code instead of trusting the comment above it. The comment had drifted: two routes were not yet honouring the rule they were documented as following. A rule nobody checks is a preference. This is why the items in section 11 are gates and not tasks.The guided tour follows the same principle from the other end. Its highlight targets are resolved from the visitor's own chart, their authority center, their channels, rather than from a list of selectors written by me in advance. The tour is about your chart or it is about nothing.FIG. 06 · One reference page of 142. The wheel lights every gate this center owns, and the page stands on its own before anyone enters a birth time.
10, The instrument, finished
The design migration that was in flight when I first wrote this page has landed, and it is pinned to four rules.
Void creates concentration.
Linework replaces cards.
The chart is the event.
Data color remains truthful.
Near-black ground, bone type, one solar accent, and hairlines where there used to be glass. Seventy-seven glass cards became hairline rows in a single pass. The corner radius scale is redefined in one place and re-corners 131 call sites from there; the motion scale is wired into the framework's own defaults, so about a hundred bare transition utilities adopt it without a single call site being touched. Four motion verbs are permitted, orbit, trace, eclipse, reveal, and anything that is not one of those four does not move.The fourth rule is the one with teeth. The Personality phase was drawn in violet, and violet was the old shell accent, which meant chart data was wearing the interface's colour. It moved to bone so that its pairing with Design's canonical red stays truthful and never depends on gold alone. Every other data colour, the zodiac band, the center definitions, the gate categories, is canonical and did not move an inch. The shell may be redesigned. The data may not.The eclipse cue is the rule made visible: select a gate and solar linework converges on it over 420 milliseconds, clear it and the convergence resolves in 80. Arrival earns emphasis. Departure does not get to perform.One boundary detail I like. The scene palette feeds themed values into the 3D layer and refuses anything that is not a plain hex, because the renderer cannot parse the colour functions the stylesheet is written in. A design system that crosses into another runtime has to know exactly where its own vocabulary stops.
11, What is not decided
Everything above runs. The name does not exist. No public name, no domain, no billing, and open or closed source still undecided. The editor of record is unfilled, the consent flow is unbuilt, the policies are unreviewed. Those are gates rather than tasks, and the difference is that a gate does not move when the schedule does.
What it demonstrates
Layer
What I did
Product
A chart engine turned into a daily read, a connection view that refuses to score people, chart-aware onboarding, and release gates written into the codebase instead of a backlog
Computation
Two passes, one of them solved to 1e-7 of a degree by Newton's method behind a fail-loud guard, 13 bodies, 26 activations, 36 channels, 192 named crosses, 201 tests and five golden charts
Interface
A live scene on a canvas that never remounts, two deterministic drawings that carry the chart without it, a capability probe that is allowed to answer "not yet", and a design system that re-corners 131 call sites from one line
Content
4.7k lines of original interpretive copy under machine-enforced editorial rules: length caps, resolvable cross-references, borrowed framing for transits, a banned-phrase list, and no source text ever copied
Privacy
Special-category data treated as such: self-serve full export, password-confirmed cascading erasure, and consent plus policies held as gates that can never be retrofitted
The seam
The 88 degree solve, the sentence that describes it, and the drawing that shows it are one decision, held in three places by one person
Role: Product, design, and engineering, end to end. Timeline: 2026 · Unreleased. Thirty commits across eight working days, one blank nameplate.A chart is not a name. It is a moment, computed to the minute, and the moment already happened.