Appearance
4 · Forms, Input & Writing Data
13. 10. 2026 · Slides
Materials for this seminar accumulate here: the task, the homework, links.
Demo story
Copy the whole block and paste it to your agent. We run in parallel. The Czech version below is the same story for anyone prompting in Czech.
text
Implement this user story.
As a user, I want to change my username, so people can find me under a name I actually like.
Acceptance criteria
Username
- I can change my username on a new Settings page, reachable from the user menu in the header.
- The field starts with my current username.
- A username is 3–30 characters: letters, numbers, dots and underscores.
- If someone already has it, I'm told next to the username field, and what I typed stays there.
- After saving I see a confirmation, and my new @username shows everywhere straight away.
- I can discard my changes and get back to what is saved.
Also on the page
- My display name (required) and a short bio (optional, at most 160 characters), same rules for saving and discarding.
- A default mood for my new posts: none, happy, sad, angry or silly. The post form starts with it selected.text
Implementuj tento user story.
Jako uživatel si chci změnit uživatelské jméno, aby mě lidi našli pod jménem, které se mi opravdu líbí.
Akceptační kritéria
Uživatelské jméno
- Uživatelské jméno si můžu změnit na nové stránce Nastavení, dostupné z uživatelského menu v hlavičce.
- Pole začíná s mým aktuálním uživatelským jménem.
- Uživatelské jméno má 3–30 znaků: písmena, číslice, tečky a podtržítka.
- Když ho už někdo má, dozvím se to přímo u pole s uživatelským jménem a to, co jsem napsal, v poli zůstane.
- Po uložení uvidím potvrzení a moje nové @jméno se hned ukáže všude.
- Změny můžu zahodit a vrátit se k tomu, co je uložené.
Také na stránce
- Zobrazované jméno (povinné) a krátké bio (nepovinné, nejvýš 160 znaků), se stejnými pravidly pro ukládání a zahazování.
- Výchozí nálada pro moje nové příspěvky: žádná, happy, sad, angry nebo silly. Formulář pro nový příspěvek ji má rovnou vybranou.Review checklist
Run these in the app before you open the code:
- Tab through the whole form: right order? Does Enter save?
- Clear a required field and save: where does the cursor go? Is every error written out in words?
- Take a username that exists (
deepduckthoughts): does the error land on the field? Is what you typed still there? - Change your username and name, then save: does the user menu in the header change? Does every post show the new @username?
- Pick a default mood and save: does the post form start with it?
- Discard: are the saved values back?
Your task: polls
"People ask questions in posts, like where do we go for lunch, and then count the replies by hand. Someone always gets the numbers wrong, and the post is buried under replies. I'd like people to ask a question with a few answers to choose from, let everyone else pick one, and show how many people picked each answer. One person, one vote, and the numbers have to be right for everyone. People change their minds, so let them change their vote. Voting should feel instant, and if a vote doesn't go through, people need to see that. Nothing fancy beyond that. We first want to see if people use it."
Too big for one paste. Work in this order:
- Story. Tell your agent: "Ask me questions until the story has no open decisions." Save it as
story.md. - Plan. "Propose a plan: data model, endpoints, and the order to build it in." Save it as
plan.md. - Check the plan, the data model hardest, before any code exists.
- One slice at a time: generate → review with the checklist above → commit.
Done means
Your plan is ready when…
- the story behind it has no open decisions
- it names the tables and how they link
- one vote per person is enforced by the database
- it says what to build first, and what after
- your agent has no open questions left
Polls are done when…
- two accounts in production: one asks, the other votes, the first sees that vote after a reload
- changing a vote changes the counts for everyone
- the forms pass today's checks, no red flags left
- you can explain every change
- a new rule in
CLAUDE.md, or a reason there's nothing to learn - Settings and polls merged into
main, live, posted in Seminars
Homework
Settings and polls merged and live by Sunday midnight. Post in the Seminars channel on Teams:
text
Live app: <URL>
Settings PR: <link>
Polls PR: <link>
plan.md: <link to the file in your repo>
My rule: <the rule, or why there was nothing to learn>