Consultation prep for tattoo artists: an interview that finds out what the client wants, and is forbidden from designing it.
Own product, in progress. An artist shares a link; a prospective client opens it on their phone and has a short conversation; the artist receives a brief before the consultation rather than starting cold.
Every consultation starts with the artist extracting the same information — what, where, how big, colour or black and grey, budget, first tattoo or not. The interesting part, what the piece means to the person, surfaces last and sometimes not at all.
The obvious AI product here is the wrong one. A tool that generates designs does the work the artist is paid for, badly, and puts an image in the client's head the artist then has to argue them out of.
Next.js · Supabase (Postgres and storage, private buckets with signed URLs) · Anthropic with structured output and Zod schemas · sharp for server-side image downscaling.
These are product promises, written into the system prompt and tested against:
It never proposes a design, layout, composition or placement of its own, and never says what would look good.
Asked to design, it declines warmly — that is the artist's call and part of what they are paid for — and records the question under decisions left to the artist.
It never describes what the finished tattoo will look like.
It never says anything about the artist that is not in the confirmed profile.
It never generates images, previews or mock-ups.
A prompt is not a guarantee. The rules above are enforced by a persona test harness that runs scripted clients through the full interview and puts the transcript to a separate model acting as judge, which returns a pass or fail on design-proposal violations with the offending quote. A regex sweep runs alongside it and is treated in the code as the weak signal it is — the judge is the real check.
MVP built and running end to end. No performance claims yet.
If something here is close to what you need, bring the problem and I will say how close. If it is not, I will say that instead.