How to Build a Website with AI: From Prompt to Production A developer outlines a workflow for turning vague AI website prompts into testable build briefs, using a fictional beauty salon as an example. The approach centers on acceptance criteria that describe observable behavior rather than appearance, plus an explicit integration boundary that prevents a prototype from faking a working backend or success confirmation. The author argues a prompt is a specification, not evidence the generated implementation satisfies it. AI disclosure: The first draft of this article and its code example were generated with AI. The salon below is a fictional example, not a completed client project. “Build a modern website for a beauty salon with a booking form.” That sounds like a reasonable prompt. But it leaves an important question unanswered: what should the form actually do? Scroll to a contact section? Send an appointment request? Reserve an available time slot? Those are different implementations. A screenshot cannot tell you which one you have. For an AI-assisted website project, I would start with acceptance criteria : observable conditions that tell you whether the result does what you asked. Here is a workflow for turning a vague website request into a buildable brief and a test plan. For this example, the business is a fictional salon called Glow Studio. The first version needs one journey: Read about a service → request an appointment → receive a submission confirmation. An appointment request is not a confirmed booking. The salon still needs to agree on a time with the customer. That distinction determines the copy, the interface, and the backend work. The button should say “Request an appointment,” not promise an instantly confirmed reservation. Keep accounts, payments, live availability, and loyalty programs outside this first version. Instead of “make it responsive and functional,” write conditions you can check: | Requirement | How to check it | |---|---| | The primary CTA leads to the request form. | Activate it from the hero and navigation. | | Missing required information prevents submission. | Submit an empty form and inspect the feedback. | | A successful request reaches the configured destination. | Submit test data and locate the corresponding record. | | A failed request does not display a success message. | Simulate a network failure and check the interface. | | The layout works at the chosen test widths. | Inspect at 360, 390, 768, and 1280 CSS pixels. | These widths are example checkpoints, not proof that every device is covered. Notice that most of the criteria describe behavior, not appearance. “Premium design” is open to interpretation. “An empty required field prevents submission” is much easier to evaluate. Here is an example prompt: Build a responsive, single-page website for Glow Studio, a fictional beauty salon. Audience: Local customers researching services and requesting appointments. Primary journey: Read about a service, request an appointment, and receive a confirmation that the request was submitted. Do not present an appointment request as a confirmed reservation. Sections: Hero, services, about, FAQ, and appointment request form. Primary CTA: "Request an appointment". Every primary CTA should lead to the form section with the ID "appointment". Form fields: Name, email, and preferred service. Require all three. Use visible labels associated with the controls. Form behavior: Validate input, indicate submission progress, and display separate success and error states. Preserve entered values when submission fails. Integration boundary: Do not invent a working backend. If a submission destination has not been configured, label the form "Demo only: requests are not sent". Do not show a fake success confirmation. Content: Do not invent reviews, awards, addresses, or customer numbers. Clearly label missing business information as placeholder content. Layout: Use a restrained visual style and readable typography. Avoid horizontal page scrolling at the selected test widths. Provide visible keyboard focus styles. Out of scope: Payments, accounts, live appointment availability, and a dashboard. The integration boundary matters as much as the visual instructions. It separates a useful prototype from a misleading demonstration. A prompt is still a specification, not evidence that the generated implementation satisfies it. Start with the markup. A basic email field can use native HTML features: