Atlas Webform
Central form & email service. Pick any fields. Design stays in each website.
Field catalogue
Every website picks a subset. Suffix ! marks a field required.
fullNameFull NamephonePhone · telemailEmail · emailpickupLocationSuburb / AddressvehicleRegoVehicle RegovehicleMakeVehicle MakevehicleModelVehicle ModelvehicleYearVehicle YearsuburbSuburbmessageMessage · textareaEmail config (shared for every site, set in .env)
MAILGUN_API_KEYMailgun API key
MAILGUN_DOMAINSending domain
MAILGUN_FROM_EMAILFrom address
CONTACT_TO_EMAILDestination inbox
Subject is auto-generated: "New [site-name] enquiry"
Embed options
Web ComponentInline · auto-height · theme via CSS vars
<script src="https://YOUR_DOMAIN/atlas-form.js"></script>
<atlas-form
fields="fullName!,phone!,pickupLocation!,vehicleRego,email"
site-name="Cash For Cars Rotorua"
></atlas-form>
<!-- Optional: theme the button + focus colour -->
<style>
atlas-form {
--af-brand: #AAFF2E;
--af-brand-text: #050802;
}
</style>Preview this example →iframeZero setup · fixed height · full isolation
<iframe src="https://YOUR_DOMAIN/form?fields=fullName!,phone!,pickupLocation!,vehicleRego,email&site=Cash%20For%20Cars%20Rotorua" width="100%" height="500" style="border:none;" loading="lazy" ></iframe>
Direct APIBuild your own form · full design control
POST https://YOUR_DOMAIN/api/contact Content-Type: multipart/form-data siteName = "Cash For Cars Rotorua" fullName = "Jane Smith" phone = "021 123 456" email = "jane@example.com" source = "google" (optional, auto-tracked) website = "" (honeypot, leave empty)
Chat widget
Floating chat bubble with a scripted Q&A flow. Collects visitor details and emails them. Flows are defined in app/_lib/chat-flows.ts.
Embed
<script src="https://YOUR_DOMAIN/atlas-chat.js" data-flow="cashforcarsrotorua" data-brand="#AAFF2E" data-brand-text="#050802" ></script>
Flow steps
welcomeoptionsHi! How can I help you today?
Get a quote for my car →
quote_suburbHow does it work? → how_it_worksTalk to someone → collect_namehow_it_worksoptionsWe come to your location, inspect your vehicle, and pay cash on the spot. The whole process usually takes less than 30 minutes.
Get a quote →
quote_suburbContact us → collect_namequote_suburbinputWhat suburb or area are you in?collects →
pickupLocation → quote_regoquote_regoinputWhat is your vehicle rego? (skip if you don't have it handy)collects →
vehicleRego (optional) → collect_namecollect_nameinputWhat is your name?collects →
fullName → collect_phonecollect_phoneinputAnd your best phone number?collects →
phone → donedoneendThanks! We will give you a call shortly.