![The Poll Chip](https://cdn.slatesource.com/0/8/2/0823a527-1202-4ec5-9232-787ae680ae59.webp)

# The Poll Chip

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

# A Page That Asks You Something

Almost every chip is a one way street. The page tells you something and you read it. The Poll chip is the point where that reverses: the page asks, you answer, and the answer is stored against your account. That single change is why this chip needed a login gate, a database constraint and a plan for what happens when the file it came from is edited. Here is the poll, and then here is all of that.

No comments yet. Be the first.

Log in to comment

# Which of the unbuilt wishlist chips should land next?

Log in to vote

If every bar above is empty and the buttons do nothing, you are logged out. That is the intended behaviour, not a bug.

## VotingVoting RequiresRequires an AccountAccount

ThereThere is no cookiecookie ballotballot, no IP heuristicheuristic and no browserbrowser fingerprintfingerprint. The votevote endpointendpoint acceptsaccepts a nullablenullable principalprincipal, so an anonymousanonymous requestrequest reachesreaches the serverserver perfectlyperfectly happilyhappily, and then the serviceservice layerlayer asksasks whetherwhether the callercaller is a guestguest and refusesrefuses if they are. The gategate is deliberatelydeliberately in the serviceservice and not in a securitysecurity annotationannotation, so the samesame rulerule appliesapplies no mattermatter whichwhich routeroute reachesreaches it.

## The ArgumentArgument for the GateGate

AnonymousAnonymous pollspolls are easyeasy to buildbuild and worthlessworthless to readread. The momentmoment a resultresult can be movedmoved by a refreshrefresh, the numbernumber stopsstops being informationinformation. RequiringRequiring an accountaccount costscosts the chipchip a largelarge shareshare of its potentialpotential votesvotes and buysbuys the oneone propertyproperty that makesmakes the numbernumber worthworth puttingputting on a pagepage. It is a badbad tradetrade for engagementengagement and the rightright tradetrade for honestyhonesty.

## OneOne VoteVote. No ChangingChanging It.

A uniqueunique constraintconstraint on pollpoll and useruser in the votesvotes tabletable, plusplus a checkcheck in the serviceservice that throwsthrows if a rowrow alreadyalready existsexists. ThereThere is no updateupdate pathpath and no deletedelete pathpath: the serviceservice exposesexposes exactlyexactly twotwo operationsoperations, submitsubmit and transfertransfer. OnceOnce you have votedvoted the buttonsbuttons locklock and staystay lockedlocked. This is stricterstricter than mostmost pollspolls on the internetinternet and it was not a consideredconsidered positionposition so muchmuch as the simplestsimplest thingthing that couldcould not be gamedgamed. WhetherWhether peoplepeople shouldshould be allowedallowed to changechange their mindmind is stillstill openopen.

Question length

765 characters

Option length

255 characters

Maximum options

no limit

Votes per user per poll

1

Vote changes allowed

0

## The MissingMissing LimitLimit Is RealReal

GalleryGallery capscaps at twentytwenty imagesimages. TimelineTimeline and ChecklistChecklist capcap at fiftyfifty entriesentries. The pollpoll optionsoptions listlist has no sizesize annotationannotation on it at all, so a fivefive hundredhundred optionoption pollpoll validatesvalidates cleanlycleanly, and so does a pollpoll with zerozero optionsoptions. NobodyNobody decideddecided that. It is an omissionomission that has simplysimply nevernever been hithit, and it is listedlisted herehere becausebecause a referencereference pagepage that only describesdescribes the partsparts somebodysomebody thoughtthought about is not muchmuch of a referencereference.

## ResultsResults Are HiddenHidden. They Are Not SecretSecret.

BeforeBefore you votevote, everyevery barbar rendersrenders at zerozero widthwidth and no countcount is shownshown. That is a presentationpresentation decisiondecision mademade in the componentcomponent, a conditionalconditional widthwidth and a conditionalconditional renderrender: the votevote countscounts are in the payloadpayload the serverserver alreadyalready sentsent you, and anyoneanyone who opensopens the networknetwork tabtab can readread them. For a loggedlogged out visitorvisitor the countscounts are stillstill on the wirewire eveneven thoughthough nothingnothing in the interfaceinterface will everever showshow them. If the concealmentconcealment everever needsneeds to be realreal ratherrather than politepolite, it has to movemove to the serverserver.

## What HappensHappens When the FileFile ChangesChanges

This is the partpart that tooktook the longestlongest to getget rightright and is stillstill the leastleast comfortablecomfortable. PublishingPublishing a pagepage rebuildsrebuilds its chipschips from scratchscratch, so a pollpoll that alreadyalready has votesvotes is destroyeddestroyed and recreatedrecreated on everyevery syncsync. VotesVotes are carriedcarried acrossacross by matchingmatching the oldold pollpoll to the newnew oneone, then matchingmatching optionsoptions by their positionposition in the listlist. RenameRename an optionoption and its votesvotes followfollow, whichwhich is what you wantwant. ReorderReorder the optionsoptions and the votesvotes staystay where they were, attachedattached to whateverwhatever nownow sitssits at that indexindex, whichwhich is almostalmost certainlycertainly not what you wantwant. ThereThere is no warningwarning. AddAdd optionsoptions at the endend and you are safesafe.

What the Wishlist Asked For, and What Arrived

60%

Let visitors vote on a question

Multiple choice options

A results graph

Real time updates: results refresh when you vote, not when someone else does

An optional deadline: never built, a poll stays open forever

## It NeverNever MadeMade the ChangelogChangelog

The PollPoll chipchip landedlanded on 22 AprilApril 20262026. The changelog'schangelog's mostmost recentrecent entryentry is dateddated 3 AprilApril 20262026. So the chipchip you just votedvoted in has no releaserelease notenote, and neitherneither do JourneyJourney, StatsStats, TimelineTimeline, ThreadThread or AudioAudio, all of whichwhich shippedshipped afterafter the changelogchangelog stoppedstopped being keptkept up. DocumentingDocumenting a featurefeature is a separateseparate jobjob from buildingbuilding it, and the gapgap betweenbetween those twotwo datesdates is what happenshappens when only oneone of them is funfun.

A footnote for anyone reading the source: the chip type list contains a VOTE entry alongside POLL. It is a reserved name with nothing behind it and has no connection to the voting on this page.

[Every chip type, side by side](https://slatesource.com/chips?utm_source=slatesource)