![The Chip System](https://cdn.slatesource.com/c/8/3/c8331ee2-d77a-4cbf-9fa7-bfd47f8e6f45.webp)

# The Chip System

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

Chip types built, out of chip types declared

29/43

## A VocabularyVocabulary, Not a CanvasCanvas

EveryEvery pagepage on the platformplatform is a sequencesequence of typedtyped blocksblocks. Not richrich texttext with embeddedembedded widgetswidgets, not a freeformfreeform canvascanvas: a listlist of chipschips, eacheach of whichwhich is oneone knownknown kindkind of thingthing with its ownown fieldsfields, its ownown validationvalidation and its ownown renderingrendering. A QuoteQuote knowsknows it is a quotequote. A TimelineTimeline knowsknows its entriesentries have datesdates. NothingNothing on a pagepage is an opaqueopaque boxbox of markupmarkup that only a browserbrowser can interpretinterpret.

## Why a ClosedClosed SetSet

The obviousobvious alternativealternative was a blockblock editoreditor with arbitraryarbitrary richrich contentcontent, and it was not chosenchosen. A fixedfixed vocabularyvocabulary meansmeans a pagepage can be readread by somethingsomething otherother than a personperson: exportedexported to markdownmarkdown cleanlycleanly, summarisedsummarised, indexedindexed with realreal structurestructure, migratedmigrated when the renderingrendering changeschanges. It alsoalso meansmeans the platformplatform sayssays no a lotlot. If therethere is no chipchip for what you wantwant, you cannotcannot have it todaytoday, and the answeranswer is to buildbuild the chipchip ratherrather than to escapeescape into HTMLHTML. That is a slowerslower productproduct and a moremore durabledurable pagepage.

Types declared in the enum

43

Types with a working implementation

29

Types authorable from a text file

29

Frontend components in the registry

29

Database tables holding chip data

29

## Twenty-NineTwenty-Nine, All the WayWay DownDown

Those numbersnumbers matchingmatching is not a coincidencecoincidence, it is the propertyproperty the systemsystem is organisedorganised aroundaround. Twenty-nineTwenty-nine implementationsimplementations, twenty-ninetwenty-nine buildersbuilders, twenty-ninetwenty-nine entriesentries in the serialisationserialisation envelopeenvelope, twenty-ninetwenty-nine tablestables, twenty-ninetwenty-nine frontendfrontend componentscomponents, twenty-ninetwenty-nine registryregistry entriesentries. ThereThere is no chipchip that can be renderedrendered but not writtenwritten, and nonenone that can be writtenwritten but not renderedrendered. GettingGetting that spinespine to lineline up is mostmost of what the chipchip systemsystem is.

## What a BuilderBuilder Is

The entireentire contractcontract for turningturning parsedparsed texttext into a chipchip is twotwo methodsmethods. OneOne answersanswers whetherwhether this builderbuilder handleshandles a givengiven typetype namename, the otherother does the workwork.

java

1

2

3

4

5

6

7

8

```
public interface ChipBuilder<T> {
  boolean supports(@NonNull String type);

  @NonNull
  BuildResult<T> build(
      @NonNull ParsedBlock block, @NonNull ParseContext context, int rowIndex);
}
```

## DispatchDispatch Is a LoopLoop

ThereThere is no registryregistry mapmap and no switchswitch. SpringSpring injectsinjects everyevery builderbuilder on the classpathclasspath as a listlist, and the factoryfactory walkswalks that listlist askingasking eacheach oneone whetherwhether it supportssupports the block'sblock's typetype. Twenty-nineTwenty-nine stringstring comparisonscomparisons perper blockblock, worstworst casecase, whichwhich is freefree at this scalescale and wouldwould be the firstfirst thingthing to changechange if it everever were not. RegisteringRegistering a builderbuilder meansmeans puttingputting the componentcomponent annotationannotation on it. NothingNothing elseelse has to be toldtold it existsexists, whichwhich is the oneone partpart of addingadding a chipchip that is genuinelygenuinely pleasantpleasant.

## DegradeDegrade, NeverNever FailFail

A builderbuilder that cannotcannot makemake sensesense of its inputinput does not throwthrow. It returnsreturns a resultresult carryingcarrying a nullnull chipchip and a diagnosticdiagnostic, and the restrest of the pagepage rendersrenders withoutwithout it. That is why a malformedmalformed blockblock costscosts you oneone chipchip ratherrather than the wholewhole documentdocument, and it is the singlesingle mostmost importantimportant decisiondecision in the parsingparsing layerlayer, becausebecause the alternativealternative is a personperson losinglosing a pagepage to a typotypo. ThereThere are twotwo remainingremaining placesplaces where the guaranteeguarantee does not holdhold, bothboth documenteddocumented on their ownown pagespages, and bothboth are consideredconsidered bugsbugs ratherrather than designdesign.

## The StorageStorage Is Not a JSONJSON BlobBlob

The obviousobvious wayway to holdhold forty-threeforty-three kindskinds of thingthing is oneone tabletable with a JSONJSON columncolumn. That is not what happenshappens. ThereThere is a basebase tabletable for the propertiesproperties everyevery chipchip sharesshares, and eacheach typetype joinsjoins to its ownown tabletable with realreal columnscolumns and realreal constraintsconstraints: a LinkLink chipchip has a urlurl columncolumn, a CodeCode chipchip has codecode and languagelanguage columnscolumns. Twenty-nineTwenty-nine joinedjoined tablestables is moremore schemaschema to maintainmaintain and moremore migrationsmigrations to writewrite, and it meansmeans the databasedatabase can enforceenforce the shapeshape ratherrather than trustingtrusting whateverwhatever was serialisedserialised lastlast yearyear. The payloadpayload classesclasses that appearappear in the APIAPI are a validationvalidation and wirewire formatformat sittingsitting in frontfront of that, not the storagestorage itselfitself.

## What a Forty-FourthForty-Fourth ChipChip CostsCosts

About twelvetwelve filesfiles acrossacross twotwo languageslanguages plusplus a migrationmigration: an enumenum valuevalue, an entityentity, an APIAPI modelmodel, a validationvalidation payloadpayload, twotwo mappersmappers, a builderbuilder, an entryentry in the serialisationserialisation envelopeenvelope, twotwo casescases in a pairpair of exhaustiveexhaustive switchesswitches, a tabletable, a frontendfrontend componentcomponent with its definitiondefinition and stylesstyles, a registryregistry entryentry, and a secondsecond enumenum on the frontendfrontend that is maintainedmaintained by handhand. The builderbuilder is the only genuinelygenuinely pluggablepluggable partpart. EverythingEverything elseelse is manualmanual registrationregistration, and the twotwo switchesswitches are the reasonreason this is not a oneone directorydirectory jobjob: they switchswitch over the fullfull forty-threeforty-three valuevalue enumenum but only handlehandle twenty-ninetwenty-nine casescases, so addingadding a valuevalue compilescompiles cleanlycleanly and failsfails at runtimeruntime.

## The CommentComment That StoppedStopped Being TrueTrue

PartwayPartway downdown the enumenum therethere is a barebare commentcomment markingmarking everythingeverything belowbelow it as unreleasedunreleased. SixSix of the typestypes beneathbeneath that lineline have sincesince shippedshipped: CountdownCountdown, GoalGoal, ChecklistChecklist and CounterCounter are dateddated in the changelogchangelog, whilewhile TimelineTimeline and AudioAudio shippedshipped in MayMay 20262026, afterafter the changelogchangelog stoppedstopped being updatedupdated. The chipchip countingcounting the progressprogress at the toptop of this pagepage is oneone of them. NobodyNobody movedmoved the commentcomment. It is a smallsmall thingthing and a goodgood exampleexample of what happenshappens to any markermarker that has to be updatedupdated by handhand.

## ThereThere Are ThreeThree TiersTiers, Not TwoTwo

ReadingReading the enumenum suggestssuggests a binarybinary: builtbuilt or not builtbuilt. The catalogcatalog that drivesdrives the chipchip pickerpicker tellstells a differentdifferent storystory. It holdsholds moremore rowsrows than therethere are workingworking chipschips, so beyondbeyond the twenty-ninetwenty-nine therethere are severalseveral typestypes with a realreal descriptiondescription, an iconicon and a categorycategory alreadyalready writtenwritten, and no publishpublish datedate and no implementationimplementation behindbehind them. They are roadmaproadmap entriesentries with the marketingmarketing copycopy donedone firstfirst. The remainingremaining onesones existexist only as namesnames in a listlist.

Declared and Not Built

0%

VIDEO

TIMER

HABIT

RATING

INBOX

VOTE

CHAT

USER

TEAM

BUDGET

EVENT

BADGE

QR

STORAGE

Naming these in public is uncomfortable and worth doing. A reserved name in an enum is a promise nobody made, and fourteen of them sitting in a shipped list is a fair description of how a side project accumulates intentions.

When the Chips Arrived01.04.2024 – 01.05.2026

01.04.2024Everything migrated onto one data model, before most chips existed

01.04.2024

01.02.2025Counter, then Gallery two weeks later

01.02.2025

01.03.2025Path

01.03.2025

01.07.2025Checklist

01.07.2025

01.03.2026Portfolio, Map, then Goal and Code together

01.03.2026

01.04.2026Countdown, Journey, Poll

01.04.2026

01.05.2026Stats, Timeline, Thread, Audio

01.05.2026

## FoundationsFoundations BeforeBefore FeaturesFeatures

That timelinetimeline readsreads oddlyoddly untiluntil you noticenotice the firstfirst lineline. The unifiedunified datadata modelmodel landedlanded in AprilApril 20242024, roughlyroughly twotwo yearsyears beforebefore mostmost of the chipschips that dependdepend on it were writtenwritten. It was not a productiveproductive monthmonth by any visiblevisible measuremeasure. It is the reasonreason the twenty-ninetwenty-nine numbersnumbers lineline up nownow.

## ThreeThree SmallSmall ThingsThings StillStill WrongWrong

The basebase cloneclone methodmethod returnsreturns an emptyempty objectobject and reliesrelies on everyevery subclasssubclass rememberingremembering to overrideoverride it, whichwhich is a silentsilent datadata lossloss traptrap waitingwaiting for the firstfirst authorauthor who forgetsforgets. The categorycategory enumenum declaresdeclares ninenine valuesvalues and usesuses fivefive. And oneone chipchip typetype is calledcalled SLATESLATE in the enumenum, SlateRefChipSlateRefChip in the entityentity layerlayer, chipchip\_slatesslates in the databasedatabase and SlateSlate in the frontendfrontend directorydirectory: fourfour namesnames for oneone ideaidea, nonenone of them wrongwrong, all of them slightlyslightly differentdifferent.

> Forty-three names. Twenty-nine of them mean something.

[The catalog, with every built chip side by side](https://slatesource.com/chips?utm_source=slatesource)