![Time Chips](https://cdn.slatesource.com/8/5/8/858d4d54-f8a3-4e3a-b775-45b937801b86.webp)

# Time Chips

- [Made in Slatesource](https://slatesource.com/@steph/time-chips)
- By [Steph](https://slatesource.com/@steph)
- Created on Jul 19, 2026

11.05.2023 - 19.07.2026

## That OneOne Is RealReal

FirstFirst commitcommit to the dayday this pagepage was writtenwritten. ThreeThree yearsyears and twotwo monthsmonths, renderedrendered by the DurationDuration chipchip from twotwo lineslines of texttext. The chipchip pickedpicked that visualvisual on its ownown: it measuresmeasures the gapgap in daysdays and switchesswitches presentationpresentation at oneone dayday, thirtythirty oneone daysdays and threethree hundredhundred and sixtysixty fivefive. AnythingAnything longerlonger than a yearyear getsgets the yearyear viewview.

## ThreeThree ChipsChips, ThreeThree DifferentDifferent AnswersAnswers

DurationDuration, CountdownCountdown and MomentMoment are siblingssiblings in the chipchip cataloguecatalogue and they soundsound likelike a setset. They are not. They were builtbuilt at differentdifferent timestimes by the samesame personperson solvingsolving differentdifferent problemsproblems, and the seamsseams showshow. This pagepage documentsdocuments that honestlyhonestly, becausebecause the inconsistencyinconsistency is moremore instructiveinstructive than a tidytidy descriptiondescription wouldwould be.

## DurationDuration WantsWants ExactlyExactly TwoTwo LinesLines

StartStart on the firstfirst, endend on the secondsecond. FewerFewer than twotwo and the chipchip is droppeddropped with an errorerror. MoreMore than twotwo and the extrasextras are ignoredignored withoutwithout commentcomment. BothBoth valuesvalues go throughthrough the strictstrict parserparser, whichwhich meansmeans the fullfull instantinstant formform with a zonezone. A barebare datedate failsfails. A datetimedatetime withoutwithout a zonezone failsfails.

plaintext

1

2

3

4

```
 :DURATION
 2023-05-11T00:00:00Z
 2026-07-19T00:00:00Z
```

The snippets on this page are indented by one space on purpose. A line whose first character is a colon starts a new chip, including inside a Code chip, so an unindented example would parse itself.

## No SanitySanity CheckCheck on the RangeRange

An endend datedate beforebefore the startstart datedate is acceptedaccepted. NothingNothing in the payloadpayload validatesvalidates orderingordering, and nothingnothing capscaps the spanspan. You can publishpublish a DurationDuration runningrunning backwardsbackwards and the pagepage will renderrender it. WhetherWhether that is a bugbug or a missingmissing featurefeature is arguablearguable. It is certainlycertainly not a decisiondecision anyoneanyone mademade.

9 months and19 days and21:42:39

## That OneOne Is RealReal Too

It is countingcounting towardtoward 11 MayMay 20272027, fourfour yearsyears to the dayday from the firstfirst commitcommit. It ticksticks onceonce a secondsecond in your browserbrowser. ThereThere is a paragraphparagraph attachedattached to it that you cannotcannot readread yetyet.

## The RevealReveal Is EnforcedEnforced on the ServerServer

This is the designdesign decisiondecision worthworth defendingdefending. The CountdownCountdown chip'schip's texttext is not hiddenhidden by the frontendfrontend. The APIAPI mappermapper comparescompares the targettarget againstagainst the currentcurrent timetime in UTCUTC and only copiescopies the texttext ontoonto the responseresponse if the targettarget has passedpassed. BeforeBefore that, the fieldfield is absentabsent from the payloadpayload entirelyentirely. OpenOpen the networknetwork tabtab and it is not therethere. A revealreveal that a readerreader can defeatdefeat by viewingviewing sourcesource is not a revealreveal.

java

1

2

3

4

5

```
 if (item.getTargetTime() != null
     && LocalDateTime.now(ZoneOffset.UTC).isAfter(item.getTargetTime())) {
   target.setText(item.getText());
 }
```

## CountdownCountdown GotGot the LenientLenient ParserParser

CountdownCountdown does not useuse the strictstrict parserparser DurationDuration usesuses. It runsruns the valuevalue throughthrough a flexibleflexible readerreader that acceptsaccepts a trailingtrailing Z, an explicitexplicit offsetoffset likelike plusplus oneone hourhour, or no zonezone at all (assumedassumed UTCUTC), and it will acceptaccept a timetime withoutwithout secondsseconds. What it will not acceptaccept is a barebare datedate, becausebecause the underlyingunderlying formatterformatter requiresrequires a timetime componentcomponent. That surprisessurprises peoplepeople, and it is the singlesingle mostmost commoncommon wayway to loselose a CountdownCountdown chipchip.

plaintext

1

2

3

4

5

6

```
 2026-12-31T23:59:59Z    parses
 2026-12-31T23:59:59     parses, assumed UTC
 2026-06-19T18:00:00+01:00   parses, stored as 17:00 UTC
 2026-12-31T23:59        parses, seconds default to zero
 2026-12-31              does not parse, chip dropped
```

## The LeniencyLeniency Was a LaterLater FixFix

CountdownCountdown shippedshipped on 1 AprilApril 20262026 with the strictstrict parserparser, samesame as DurationDuration. On 15 JuneJune 20262026 a fixfix replacedreplaced it with the flexibleflexible oneone and mademade the wholewhole pathpath explicitlyexplicitly UTCUTC, becausebecause the revealreveal comparisoncomparison had been runningrunning on serverserver locallocal timetime. DurationDuration was not migratedmigrated in that commitcommit. That is how the twotwo endedended up with differentdifferent parsersparsers: not a designdesign, an omissionomission that was nevernever tidiedtidied.

## MomentMoment TakesTakes No DateDate

DespiteDespite the namename, the MomentMoment chipchip has no datedate fieldfield. LineLine oneone is an imageimage filenamefilename, lineline twotwo a titletitle, lineline threethree a locationlocation. That is the wholewhole chipchip. It is for behindbehind the scenesscenes photographyphotography: a picturepicture, what it is, where it was.

plaintext

1

2

3

4

5

```
 :MOMENT
 workshop-bench.jpg
 The bench at 2am
 St. Gallen
```

## It Did Have OneOne, for FourFour HoursHours

The firstfirst versionversion of the chipchip, committedcommitted on 27 JanuaryJanuary 20262026, had a happenedAthappenedAt columncolumn, a payloadpayload fieldfield, and a clockclock iconicon drawndrawn for it. A commitcommit fourfour hourshours laterlater removedremoved all of it, in the samesame changechange that replacedreplaced the chip'schip's flatflat backgroundbackground with a WebGLWebGL glassglass effecteffect. The visualvisual redesignredesign leftleft no roomroom for a datedate rowrow and the fieldfield wentwent ratherrather than the layoutlayout. No commitcommit messagemessage explainsexplains it. The leftoverleftover datadata transfertransfer objectobject survivedsurvived untiluntil MarchMarch beforebefore someonesomeone deleteddeleted it.

## Why ThereThere Is No MomentMoment ChipChip on This PagePage

BecauseBecause a MomentMoment needsneeds an imageimage filefile that existsexists in the slate'sslate's assetsassets folderfolder, and this slateslate has nonenone. The chipchip wouldwould be silentlysilently skippedskipped and the pagepage wouldwould looklook likelike it had simplysimply forgottenforgotten to includeinclude oneone. SayingSaying so is betterbetter than an unexplainedunexplained gapgap.

Chips that sound like time chips

3

Date parsers between them

2

Chips that accept a bare date

0

Duration lines required

exactly 2

Countdown tick interval

1 second

Shared time abstraction

none

The arc27.01.2026 – 15.06.2026

27.01.2026Moment ships, minus the date it was built with

27.01.2026

27.01.2026Moment redesigned around a WebGL effect the same day it landed

27.01.2026

01.04.2026Countdown ships with the strict parser

01.04.2026

15.06.2026Countdown gains offsets and zoneless input, Duration does not

15.06.2026

## The HonestHonest SummarySummary

ThreeThree chipschips, no sharedshared abstractionabstraction, twotwo parsersparsers, and oneone of them namednamed afterafter a conceptconcept it does not modelmodel. NothingNothing herehere is brokenbroken enoughenough to be urgenturgent, whichwhich is exactlyexactly why it has stayedstayed this wayway. SmallSmall inconsistenciesinconsistencies survivesurvive by being individuallyindividually reasonablereasonable. WritingWriting them downdown in publicpublic is the cheapestcheapest wayway to makemake them stopstop being reasonablereasonable.

> Every date parser in a codebase is a decision someone made once and nobody revisited.