Dev.to WebDev 🛠 Dev 👁 0 📖 3 min read

We built TwoInks: a free Human Design chart you can explore without an account

Looking up your Human Design type is easy once you have a chart. The next question is what all the shapes and connecting lines mean. We built TwoInks for people who want to generate their first chart or explore a chart

Looking up your Human Design type is easy once you have a chart. The next question is what all the shapes and connecting lines mean.

We built TwoInks for people who want to generate their first chart or explore a chart they already know. It takes a birth date, time, and place, then draws the result and explains the parts of the diagram. The calculator is free and opens without an account or email address. TwoInks

What you can do

  • Generate a chart. Pick a birth city and enter the local date and time. The result includes your type, authority, profile, and an interactive bodygraph.
  • Read the diagram. Select parts of the chart and see what the centers, channels, and other details represent within Human Design.
  • Compare two charts. Enter two sets of birth details to see how their charts connect under the system's rules.
  • Start with an estimate if you don't know the time. The form uses noon in that case and marks the result as uncertain.

Why the time zone matters

A form can collect a date, 02:30, and a city and still leave a question unanswered. In Berlin on 27 September 1992, the clock showed 02:30 twice. On 29 March of the same year it skipped 02:30 altogether. A timestamp converter needs a rule for both cases.

Intl.DateTimeFormat can tell you what a clock in a named zone shows at a given UTC instant. Run this in Node or a browser console to see the two autumn instants and the spring jump.

const berlin = new Intl.DateTimeFormat("en-GB", {
  timeZone: "Europe/Berlin",
  hourCycle: "h23",
  hour: "2-digit",
  minute: "2-digit",
});

for (const iso of [
  "1992-09-27T00:30:00Z",
  "1992-09-27T01:30:00Z",
  "1992-03-29T00:59:00Z",
  "1992-03-29T01:00:00Z",
]) {
  console.log(iso, berlin.format(new Date(iso)));
}
1992-09-27T00:30:00Z 02:30
1992-09-27T01:30:00Z 02:30
1992-03-29T00:59:00Z 01:59
1992-03-29T01:00:00Z 03:00

Going in the other direction takes an extra step. Given the local fields and an IANA zone, the resolver in TwoInks samples the offsets on either side of the requested time. It subtracts each candidate offset from the local clock reading to get a candidate UTC instant. It then checks whether the zone actually used that offset at that instant.

  • One match. The time occurred once. Return the instant with an exact status.
  • Two matches. The time was repeated. The resolver chooses the earlier instant and returns repeated.
  • Zero matches at a forward transition. The requested time fell in the gap. The resolver moves it forward by the size of the gap and returns skipped.

That makes Berlin's repeated 02:30 resolve to 00:30Z in September. The skipped 02:30 in March becomes 03:30 local time, or 01:30Z. Those choices follow Temporal's compatible disambiguation for these transitions. Temporal time zone guide

Show how the time was resolved

TwoInks needs one instant to produce a reproducible chart. Returning the status alongside the timestamp lets the interface explain what happened. The clock may have repeated the time, or the software may have advanced it into a time that existed. TwoInks calculation method

A booking form could ask the user which occurrence they mean when the time repeats, and request another time if the clock skipped their selection.

When you test a converter, assert the chosen UTC instant and the status for both transitions. Also test the minute before and the first valid minute after the jump. Those checks catch a converter that uses one fixed offset for the whole day.

📰 Read the original article on Dev.to WebDev

Originally published by Dev.to WebDev. Aggregated on AIWithGhost for educational purposes — full credit and traffic to the original publisher.