The client's message
Two weeks, and you don't get to decide them. The project arrives in a single message, dashed off one evening.
"Hey! So let me explain the idea. I have a border collie, Nina, and I take her out every day to the park down the street. The problem is I know maybe two people there, and she's bored out of her mind.
I'd like to make a kind of Tinder for dogs: you see the dogs nearby, if you like one you match and arrange a walk together. I looked at Pedigreender but it doesn't convince me, and anyway that's more for breeding — I really mean friendship between dogs.
Then I'd need chat, notifications when a match comes in, maybe a map of the parks, and reviews so you know who you're dealing with. Oh, and the dog's profile with photos, obviously.
For the style, something fun, modern, easy to use — I don't want anything complicated. I don't really know which screens are needed or what style to pick, I'll trust you on that.
One thing though: in two weeks I'm meeting someone who might put money into this, and I'd like to show them something they can touch, not slides. A friend told me that with AI these days you can do this stuff in a weekend, is that true?"
Reread the second-to-last line: in two weeks. That's the part that drives everything else. There's no time for a finished app — what's needed is a demo that opens on a phone and can be navigated. The problem is that in this message, there isn't a single decision yet.
Why you can't delegate this part
The obvious move is to copy the message, paste it into Claude Code, and ask for the app.
But Claude Code executes decisions, it doesn't make them. The app's main gesture is missing, which feature comes first is missing, the screens are missing. If you don't give it those, it won't stop to ask you for them — it fills them in on its own, quietly, and you find out by looking at the result.
The brief you need before the prompt
Forwarding the questions to the client and waiting for them to answer doesn't work: they don't have the answers, and they're not supposed to. That's exactly why they came to you. Ask them one thing only — what result the user wants to get, the job the app needs to get done for them. You decide the rest.
The questions to ask yourself are always the same, and they live in a template. Eighteen fields, not just the colors: it's everything you need to get to the structure and the prompt you'll give Claude Code.
The product
- Main goal of the app
- Who uses it: users and roles
- Problem to solve
- Main action the user performs
Features and screens
- Must-have features
- Secondary features
- Screens needed
- Path between screens · user flow
- Data and content of each screen
The aesthetic direction
- Visual style
- Color palette
- Tone of voice for the copy
- Aesthetic references
- Emotions to convey
- Elements to avoid
The constraints
- Platform and device
- Technical constraints
- What the demo needs to show
Can it really be done in a weekend? The demo, yes — but the weekend starts here, not with the message.
Sources Interaction Design Foundation Figma Miro
PawSoul's spec sheet
Eighteen fields filled in for PawSoul, and this is what comes out of it — at a glance: product, flow, ten screens, decisions made, criteria.
docs/ux-ui.md — at a glance
PawSoul
Matches compatible dogs and cats in the same neighborhood and gets their owners to set up a real meetup.
- User
- Someone with a dog or cat who takes the same walks every day and doesn't know anyone to take them with.
- Job to be done
- Find someone compatible nearby, so the walk becomes an encounter.
- Main action
- Review a card and say yes or no. Everything else comes after that gesture.
3 The user's journey
From opening the app to the first meetup set: it's the loop the app exists to make repeat.
- 1 Open
- 2 Sign up
- 3 Register the pet
- 4 Cards
- 5 Match
- 6 Set the meetup
5 The ten screens
before logging in inside the app
4 The MVP
In
- Pet registration
- Cards to swipe through
- Species and distance filters
- Adoption-only filter
- Match and conversation
- Public profile
- Personal area
Out, and written down so it doesn't get lost
- Meetup map
- Reviews
- Verified vaccinations
- Push notifications
- Groups
- Tools for shelters
- Payments
6 The six closed decisions
On the left, what the client asked for in two ways that don't fit together. On the right, the choice that resolves it.
- Playful but not childish Deferred: becomes the four tests below
- Lots of features but simple MVP Cut for breadth, not depth
- Like Tinder but not Tinder Keep the gesture, change everything else
- The pet or the owner? The pet's profile, conversation between people
- Cats now or later? Now: it's the data model, not a feature
- Adoption separate or inside the app? A toggle on the profile plus a filter
7 The four style tests
The style isn't chosen here. These are the questions that, whichever direction you take, will need a yes.
- Put next to Tinder, would someone with no stake in the project say it's a different product?
- Does it hold up the word "playful" without suggesting a kids' app?
- Are the animal photos the content, or have they become the background for something else?
- At 390px is it still itself, or has it folded into something generic?
8 The states, and what goes in them
None of these is a blank screen. It's the part that gets forgotten first, and the first thing the user runs into.
- Deck finished
- "You've seen everyone nearby," plus a way to widen the distance and reload.
- No matches
- What to do to get some, with a link to the cards.
- Empty conversation
- A suggestion on how to start, not a blank space.
- Loading
- Skeleton shapes matching the real content. Never a spinner in the middle.
- Network error
- Recoverable, with a retry button.
- First launch
- The deck is never empty: there are already profiles in the area chosen during registration.
9 Responsive
Design at 390px and scale up. Every tappable element at least 44px tall.
10 Done when
The flow runs start to finish on a phone, and no link leads to a screen that doesn't exist.
The real document: docs/ux-ui.md
The sheet above is the summary. This is the document: a Markdown file, to be saved in the project as docs/ux-ui.md. From here on, it's what you'll reference in every prompt.
docs/ux-ui.md Ten sections, ten screens, six decisions made
# PawSoul — UX/UI document
## 1. The product in three lines
PawSoul matches compatible dogs and cats in the same neighborhood and gets
their owners to set up a real meetup. You sign up, register your pet, and
swipe through other pets' cards: when a like is mutual, a conversation opens.
A profile can be marked as available for adoption, in which case it also
appears to people looking for a pet to give a home to.
## 2. Problem, user, job to be done
Problem: you take your pet out every day, to the same places, and you don't
know anyone to do it with. The pet gets bored, and so does the person.
User: someone with a dog or a cat who goes out (or would like their pet to
socialize) fairly regularly, and doesn't have a network of people around
them. Secondary: someone looking to place a pet — a shelter, a private
owner.
Job to be done: "when I go out with my pet alone, I want to find someone
compatible nearby, so the walk turns into a meetup."
Stated assumption: the number that matters is how many meetups get set up
in chat, not how many people sign up. The client didn't know how to measure
it; we measure it as "conversations where a date or place gets proposed."
## 3. The main action and the flow
Main action: judge a card and say yes or no. It's the one gesture the app
exists to make you repeat; everything else follows from it.
Flow: open → sign up → register your pet → see the cards → like → get a
match → message → propose a meetup.
The gesture works in two equivalent ways: dragging and two buttons under the
card. Anyone who doesn't get the drag gesture should still be able to use
the app.
## 4. MVP: in and out
In: pet registration, cards to swipe through, filters by species and
distance, adoption-only filter, matches, conversation, public pet profile,
personal area with multiple pets of your own.
Out, and written down so it doesn't get lost: map of meetups, reviews
between users, verified vaccination badges, push notifications, groups,
management tools for shelters, any kind of payment.
Cutting rule: cut in width, not depth. Fewer features, but no reachable
screen left half-built.
## 5. The screens (ten) and how you reach them
1. Public landing — explains the product and leads to sign-up. From there
you can also reach the profiles of pets up for adoption.
2. Sign-up — name, email, password, city. Leads to pet registration.
3. Log in — email and password. Leads to the dashboard.
4. Pet registration — step by step: owner, species, basic info, personality
(different questions for a dog and a cat), photo, what they're looking
for, and the finished profile shown as the result.
5. Dashboard — where you land once logged in: active pet, new matches,
recent activity, shortcut to the cards.
6. Cards — the main screen. Deck, filters, full-screen match reveal.
7. Matches — list of conversations. On large screens, list and conversation
side by side.
8. Conversation — on phone it's its own screen, reached from the list.
9. Public pet profile — from the cards, from a match, from the landing.
10. Personal area — my pets, add one, search preferences, settings, log
out.
Navigation: on phone, a four-item bottom bar (cards, matches, dashboard,
profile). On large screens, a top bar.
## 6. Decisions made
- Fun but not childish → deliberately deferred, turned into the criteria in
point 7. We give up being able to start designing right away.
- Lots of features but simple → cut in width, every screen stays fully
built. We give up features the client had in mind; they stay written down
in the "out" list.
- Like Tinder but not Tinder → keep the gesture, change everything else.
The model is friendship, not pairing up. We lose nothing except the
shortcut of copying the look too.
- The pet or the owner → the pet is the profile, the owner is the user, and
the conversation happens between people. We lose a bit of charm, we gain
a chat that makes sense.
- Cats now or later → now, because it's the data model, not a feature. We
lose time now, less than it would cost to redo it later.
- Adoption → a toggle on the profile plus a filter, not a role and not a
management panel. We give up shelter tools: if they're ever needed,
that's the next project.
## 7. Criteria for the aesthetic direction
The visual style is NOT chosen in this document. Whichever direction is
picked, it has to pass these four tests:
1. Not-Tinder at a glance: placed next to Tinder, someone outside the
project should say it's not the same product.
2. Fun without childish: it has to hold up the word "fun" without making
anyone think of a kids' app. The client is showing it to a possible
investor.
3. The pet photos are the content: no treatment that reduces them to
background, covers them, or shrinks their space. The face is the
product.
4. Recognizable at 390px: on a phone it has to stay itself, not fall back
to a generic look.
References given by the client: Tinder (for how it works, not how it
looks), Duolingo (for the tone). To avoid: banking apps, grays, small text.
## 8. States
Every screen has its three states — empty, loading, error — and none of
them is a blank screen.
- Cards, deck finished: "you've seen everyone nearby," plus a way to widen
the distance and reload.
- Matches, no matches: what to do to get some, with a link to the cards.
- Conversation with no messages: a suggestion on how to start, not an empty
space.
- Loading: shapes matching the form of the real content, never a spinner
in the middle of the screen.
- Network error: recoverable, with a retry button.
- First launch: the deck is never empty on first access — there's already
a set of profiles in the area chosen during registration.
## 9. Responsive
Designed at 390px and scaled up. On phone: bottom bar, full-width deck,
matches list and conversation on two separate screens. On large screens:
top bar, list and conversation side by side, centered deck with filters to
the side. Every tappable element is at least 44px tall. No screen is
allowed to turn generic as it scales up.
## 10. Completion criteria
- The main flow can be walked start to finish on a phone: sign-up, pet
registration, cards, match, conversation.
- No link in the demo leads to a screen that doesn't exist or is empty.
- All ten screens have real content, not placeholder text.
- Registration asks different questions for a dog and for a cat.
- The species filter and the adoption filter work and change the deck.
- All three states exist on every screen.
- The chosen look passes the four tests from point 7. It's shorter than the client's message and infinitely more executable.
Now you know what you're building. What's left is choosing what to build it with: the right tools for these ten screens, not for just any project. That's part 2.