---
title: "A car dealer with its own workshop: a Hypamoon recipe · Hypamoon"
description: "The cars in stock, a page per car, test drives and workshop bookings, and the live status of your car, readable by people, agents, AI search and classifieds sites from one source. Type one sentence in your chat with Hypamoon connected and it is built and live in one go."
url: https://hypamoon.com/r/car-dealer
---

[Say this](https://hypamoon.com/say-this)Recipe

# A car dealer with its own workshop

The cars in stock, a page per car, test drives and workshop bookings, and the live status of your car, readable by people, agents, AI search and classifieds sites from one source.

Type this in your chat

> Build the Hypamoon recipe car-dealer

In Claude or ChatGPT with Hypamoon connected. Your chat fetches the full recipe below and builds it in one go, without questions, and gives you the live link. Or paste the full prompt below yourself: same result.

## What you get

-   The stock as data: one collection feeds the car pages, the search page, the chat, a live JSON for agents and a feed for classifieds sites
-   A page per car with price, specifications and schema.org Car data, and a search page with filters
-   Test drive and workshop booking forms with a bot check, each booking emailed to the dealer
-   A status page where customers follow their car with booking reference and plate, so the workshop gets fewer calls
-   A chat that knows the stock and sends people to the right page
-   /llms.txt and /api/inventory, so AI assistants and agents can read the stock and the booking options

See it live

Built from this recipe and running for real. The checkout is a test payment: no money moves.

[Open the demo car-dealer.hypamoon.app (opens in a new tab)](https://car-dealer.hypamoon.app)

## Examples

Mark a car sold

update\_document on inventory with merge {"status": "sold"}: the car leaves the search page, the JSON and the feed, and its page says Sold.

Tell a customer the car is ready

update\_document on service\_bookings with merge {"status": "ready", "status\_note": "Ready from 15:00."}: the status page shows it straight away.

Ask an agent

"Which electric cars under 35,000 euros does this dealer have?" An agent reads /llms.txt, then /api/inventory?fuel=electric&max\_price=35000.

## Cost

0 euros a month on Hypamoon Free, without the extras

-   The site, the data, the forms and the app fit in Free; on Free the site shows a small Hypamoon badge.
-   The chat uses AI credit; Free includes a little each month, more is paid from your balance.
-   Confirmation emails to customers need the Mail module and your own verified sending domain.
-   A phone number with the assistant is a paid plan; classifieds sites and your own systems may charge their own fees.

[All plans and limits](https://hypamoon.com/pricing)

## The full recipe

Show the full prompt

Build a website for a car dealer with its own workshop with Hypamoon and put it live. The customer comes first: the cars in stock, a test drive, a service or inspection booking, and where their car is right now, without calling. Use a fictional dealer and 8 fictional cars unless I gave you real ones; say once, calmly, in the footer that they are fictional. Don't ask me anything; make sensible choices.

1. Stock as data. create\_collection inventory with a schema (id as a slug, make, model, variant, year, price\_eur, mileage\_km, fuel, transmission, body, colour, doors, seats, power\_kw, range\_km, status available, reserved or sold, features, description, image) and access {"assistant\_read": true}, so the chat knows the stock. insert\_document one document per car, including one reserved and one sold.

2. Bookings. create\_collection test\_drives (car\_id, name, email, phone, preferred\_date, preferred\_time, trade\_in, message) and service\_bookings (reference, name, email, plate, car, mileage\_km, service as maintenance, inspection, tyres, repair or air\_conditioning, preferred\_date, drop\_off, message, plus status and status\_note that the workshop sets), both with {"public\_write": true}, triggers {"email\_on\_insert": true} and a JSON schema. get\_form\_snippet shows the form html; keep the bot check.

3. The site, with deploy\_site. Home with search and four clear actions; /cars, a search page with filters for fuel, body and price and a sort; one page per car at /cars/<id> with price, specifications, features and a Book a test drive button to /test-drive?car=<id>; /test-drive with the car filled in from the link; /service, which makes a booking reference like FM-7K2Q9D in the page before sending (a hidden field) and shows it after; /status, where reference plus plate show the steps booked, confirmed, checked in, in the workshop (or waiting for parts), ready to collect; /privacy, linked under both forms. Structured data: AutoDealer with an AutoRepair department and opening hours on the home page, Car with an Offer (price, EUR, availability) on every car page, an ItemList on /cars. Machine readable: /llms.txt that says what agents can read and which links a person uses to book, /sitemap.xml and /robots.txt. Light and dark, perfect on a phone.

4. Live data for people, agents and classifieds sites, with deploy\_app on the same site\_id: one module that reads the collections through env.HYPAMOON\_API, then update\_collection with app\_access read on inventory and service\_bookings for that app. Routes: /api/inventory as JSON with url, image and test\_drive\_url per car; /api/inventory/<id>; /api/feed.xml and /api/feed.csv, a feed of the cars that are available now, for classifieds sites that fetch a feed URL; /api/service-status that answers only when reference and plate both match, and never returns a name, email or phone. Pages update their status badges from /api/inventory, so a sold car never looks available. Start from:

const plate = (s) => String(s || "").toUpperCase().replace(/\[^A-Z0-9\]/g, "");
async function documents(env, collection, filter) {
  const u = new URL(env.HYPAMOON\_API + "/collections/" + collection + "/documents");
  u.searchParams.set("limit", "100");
  if (filter) u.searchParams.set("filter", JSON.stringify(filter));
  const r = await fetch(u.toString());
  if (!r.ok) throw new Error(collection + " answered " + r.status);
  return (await r.json()).data || \[\];
}
// GET /api/inventory (q, fuel, body, max\_price, status), /api/inventory/<id>,
// /api/feed.xml and /api/feed.csv (only status available, same ids every time),
// /api/service-status?reference=&plate= (only when both match; never name, email or phone).

5. The chat. set\_assistant in the visitor's language with instructions: answer only from the stock, never invent a price, discount or trade-in value, send people to the car page, /test-drive or /service, and for the status to /status, never asking for a plate in the chat. Then create\_chat\_widget with allowed\_origins set to the site's origin, and put its embed\_code on every page.

6. Confirmation by email. list\_email\_domains: with a verified sending domain, create\_email\_template for a test drive and for a workshop booking (the form fields are its variables, so the reference goes in the email) and create\_email\_automation on form.submitted, filter.collection test\_drives and service\_bookings, to contact. Without one, skip this step and tell me: the dealer still gets every booking by email, and the customer sees the confirmation and reference on screen.

7. Check: fetch\_site\_page on /, /cars, a car page, /llms.txt, /api/inventory and /api/feed.xml. insert\_document one service booking with a fictional plate and status waiting\_for\_parts, and check /api/service-status with the right and a wrong plate. Give me the link and the reference and plate to try.

Optional, only when I ask:
- Classifieds sites: in the dealer account of a classifieds site, paste /api/feed.xml (or /api/feed.csv) as the feed URL and map the fields there; the feed follows the stock by itself. A site with an API instead of a feed URL gets its own adapter: the recipe build-an-adapter.
- Their own dealer management system: the recipe build-an-adapter connects it, then query\_adapter reads the stock and update\_document keeps inventory in step.
- Phone: search\_numbers, order\_number and set\_call\_plan, so the same assistant answers the phone when the team does not pick up. Never use a demo number that answers.
- A reservation deposit: a products collection (create\_collection with role products) and get\_checkout\_snippet on the car page, a test payment while payments are in test mode.

Updating the status is one call for the workshop or its chat: update\_document on service\_bookings with merge {"status": "ready", "status\_note": "..."}.

### Done when

-   The site is live, opens without an account, and has no horizontal scroll at 375 px, in light and in dark.
-   Every car in inventory has its own page with schema.org Car data and an Offer; the home page has AutoDealer data.
-   /cars filters by fuel, body and price; a sold car is not listed and its page says Sold.
-   /api/inventory and /api/feed.xml answer from the collection; the feed has only the cars that are available.
-   The test drive and workshop forms send to their collections; /service shows the booking reference after sending.
-   /api/service-status shows the status for the right reference and plate, and 404 for a wrong plate, without personal details.
-   /llms.txt names the live stock, the feed, the booking links and the status endpoint.
-   The chat widget is on every page; customer confirmation emails are on, or the user was told they need a verified sending domain.

## What you need

-   **Your stock, or let the chat make up a few cars first.** Every car is one document; change a price or mark a car sold and the site, the chat and the feed follow.
-   **Claude, or another chat with the full Hypamoon connection.** Sharing a collection with the app and the email automations are not offered in ChatGPT. If your chat has no create\_email\_automation tool, reconnect it.

[Connect your chat](https://hypamoon.com/connect?via=recipe~car-dealer) [How recipes work in the docs](https://hypamoon.com/docs/mcp)

## More recipes

-   [**Find your perfect coffee** A Typeform-style product quiz: one question at a time, pictures to tap, a personal coffee at the end and a working Order button.](https://hypamoon.com/r/coffee-quiz)
-   [**Build an adapter for your system** Your chat writes the link to any system with a REST API, and Hypamoon runs it: the key in a vault, only the hosts you allow, rights per action that you click, every call logged.](https://hypamoon.com/r/build-an-adapter)
-   [**A marketplace with several sellers** Sellers with their own products, one checkout over several sellers, your commission, and payouts per seller through your own Stripe account, tested end to end.](https://hypamoon.com/r/marketplace)
