![The Playground](https://cdn.slatesource.com/8/7/0/87087c38-0bfc-4beb-afeb-9c7122409b74.webp)

# The Playground

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

**0** accounts required

## The PlaygroundPlayground

SlatesourceSlatesource has a pagepage where everyevery chipchip typetype is unlockedunlocked and nothingnothing is savedsaved. No signupsignup wallwall, no trialtrial, no emailemail capturecapture. You openopen it, you buildbuild somethingsomething, you closeclose the tabtab and it is gonegone. It existsexists becausebecause readingreading a featurefeature listlist is a poorpoor substitutesubstitute for draggingdragging a chipchip ontoonto a gridgrid and seeingseeing what it does.

[Open it in another tab and come back](https://slatesource.com/playground?utm_source=slatesource)

## What You GetGet

ThreeThree samplesample InfoInfo chipschips and an editedit buttonbutton. ClickClick the buttonbutton and the gridgrid switchesswitches into editedit modemode, with a plusplus placeholderplaceholder in everyevery emptyempty slotslot. EveryEvery publishedpublished chipchip typetype is in the pickerpicker, includingincluding the onesones that are normallynormally paidpaid itemsitems in the shopshop. The oneone exclusionexclusion is unreleasedunreleased chipschips, whichwhich staystay hiddenhidden eveneven herehere.

typescript

1

2

3

4

```
const getAccessibleChipTypes = (): Set<string> | undefined => {
    if (overrideRestrictions) return undefined;
    if (!chips || !activeUser) return new Set();
```

## That Is the WholeWhole UnlockUnlock

The chipchip pickerpicker normallynormally filtersfilters againstagainst the chipchip typestypes the logged-inlogged-in useruser ownsowns. ReturningReturning undefinedundefined insteadinstead of a setset meansmeans skipskip the filterfilter entirelyentirely. ReturningReturning an emptyempty setset, whichwhich is what a logged-outlogged-out visitorvisitor wouldwould otherwiseotherwise getget, meansmeans showshow nothingnothing at all. The PlaygroundPlayground is the only placeplace in the codebasecodebase that passespasses overrideRestrictionsoverrideRestrictions.

The link on this page goes to a route registered as a plain sibling of login and register. No auth guard, no loader, no data fetched on entry.

## ThereThere Is No BackendBackend

This is the partpart worthworth being straightstraight about. The PlaygroundPlayground is oneone ReactReact screenscreen holdingholding a singlesingle arrayarray in componentcomponent statestate. No localStoragelocalStorage, no sessionStoragesessionStorage, no IndexedDBIndexedDB, no APIAPI callcall anywhereanywhere in the screenscreen. A refreshrefresh is a fullfull resetreset, and the samplesample copycopy sayssays so in the firstfirst chipchip ratherrather than lettingletting anyoneanyone findfind out the hardhard wayway.

## The ModuleModule NamedNamed SandboxSandbox Is SomethingSomething ElseElse

The backendbackend has a packagepackage calledcalled sandboxsandbox. It is not this. It seedsseeds developmentdevelopment datadata on startupstartup: usersusers, chipschips, shopshop itemsitems, registrationregistration ticketstickets, with a seederseeder filefile perper developerdeveloper. It has no controllerscontrollers and no endpointsendpoints. AnyoneAnyone readingreading the reporepo lookinglooking for the Playground'sPlayground's serverserver sideside will findfind that packagepackage, and then findfind nothingnothing behindbehind it, becausebecause therethere is nothingnothing behindbehind it.

What the Playground has and does not

43%

Every published chip type in the picker

Edit mode, add, update, delete

Deep link with a query flag that opens straight into edit mode

Saving

Exporting to a real slate

A reset button

Sharing what you made

## The MissingMissing PathPath Out

The gapgap that mattersmatters mostmost is the fourthfourth untickedunticked boxbox. SomeoneSomeone buildsbuilds a pagepage they likelike in the PlaygroundPlayground and therethere is no buttonbutton that turnsturns it into a slateslate on their accountaccount. They have to startstart againagain insideinside the editoreditor. It is the obviousobvious nextnext stepstep and it has not been builtbuilt.

## ImageImage ChipsChips Will FailFail HereHere

ChipsChips that carrycarry an uploadeduploaded imageimage postpost to the filefile endpointendpoint, whichwhich permitspermits anonymousanonymous readsreads but not anonymousanonymous writeswrites. An anonymousanonymous PlaygroundPlayground visitorvisitor addingadding a chipchip with a backgroundbackground imageimage getsgets a genericgeneric uploadupload errorerror. NothingNothing in the PlaygroundPlayground warnswarns them firstfirst. It is a realreal roughrough edgeedge, not a subtlesubtle oneone.

Chip types in the picker

all published

Login required

no

Persistence

none

Backend endpoints

0

Lines in the screen component

207

## AlsoAlso Not IndexedIndexed

The routeroute sitssits in the no-indexno-index listlist for server-renderedserver-rendered metadatametadata. A scratchscratch surfacesurface with no stablestable contentcontent has nothingnothing to offeroffer a searchsearch engineengine, and everyevery crawlcrawl of it wouldwould be a crawlcrawl of the samesame threethree placeholderplaceholder chipschips.

## Why It RendersRenders CorrectlyCorrectly

The PlaygroundPlayground does not have its ownown rendererrenderer. It mountsmounts the samesame chipchip renderingrendering engineengine the realreal slateslate viewerviewer usesuses, wrappedwrapped in the samesame twotwo providersproviders as the editoreditor. What you seesee therethere is what a publishedpublished pagepage lookslooks likelike, whichwhich is alsoalso why this pagepage is a fairfair previewpreview of it: the chipschips belowbelow you and the chipschips in the PlaygroundPlayground comecome from the samesame componentscomponents.

> The fastest way to explain a chip is to let someone place one.