User Manual

Complete guide for managing website content

GAC Caribbean — User Manual

For: Content managers and administrators System: Admin Panel (at /admin) Skill level required: No technical experience needed


Setting Up a New Instance

If you are setting up a new dealer website (a separate instance for a different country or territory), an onboarding guide is available to help you collect all the information the development team will need.

👉 Open the New Instance Onboarding Guide (opens in a new tab)

The guide walks through everything required: dealership identity, contact details, branding, vehicle catalog, page content, and the go-live checklist. It also includes a Download (.pdf) button to export a fillable version you can complete offline and send to the team.


Table of Contents

  1. Getting Started
  2. Admin Panel Overview
  3. Site Configuration
  4. Navigation
  5. Home Page Banners
  6. Vehicle Catalog
  7. Vehicles
  8. Articles (News & Publications)
  9. Exterior Colors
  10. Interior Colors
  11. About Us
  12. Warranty Page
  13. Tips & Common Tasks
  14. Sync
  15. Troubleshooting
  16. Transactional Emails
  17. GDPR & Cookie Consent
  18. Analytics
  19. Application Architecture (Developer Reference)

1. Getting Started

Accessing the Admin Panel

The Admin Panel is the control centre for all website content. To access it:

  1. Open your web browser
  2. Navigate to your website address followed by /admin Example: https://gac.sx/admin
  3. You will be redirected to the login page automatically

Logging In

Login page

GAC
  1. Enter your Email address
  2. Enter your Password
  3. Click Sign In

If you do not have login credentials, contact your system administrator to have an account created for you in Auth0.

Resetting Your Password

If you have forgotten your password:

  1. Click "Forgot password?" on the login page
  2. Enter your email address and click "Send Reset Link"
  3. Check your inbox for a password reset email
  4. Follow the link in the email to set a new password

Signing Out

Click Sign out in the top-right corner of the admin panel (in the top bar, next to your name). It is visible on every admin page.


2. Admin Panel Overview

Once logged in, you will see the Admin Panel. It has two main areas:

Admin panel layout

GAC
Dashboard
Settings
Site Config
Navigation
Catalog
Banners
Warranty
About Us
Content
Articles
Vehicles
Colors
Exterior
Interior
Tools
Analytics
Sync
Manual
A
Edit
Edit
Edit

Key concepts

TermWhat it means
Save ChangesThe button that makes your edits go live on the website
Unsaved changesA small indicator that appears when you have edited something but not yet saved
Table viewA list of items (articles, vehicles, colors) with action buttons
Form viewA page of fields you fill in to create or edit an item

The Save Changes button

Every editable page has a Save Changes button. Changes only go live after you click it.

Save Changes button

Unsaved changes
Save Changes

The Save Changes button appears at the bottom of every editable section. Changes only go live after clicking it.

There is no "Draft" step. Clicking Save Changes publishes your edits immediately.


3. Site Configuration

What it controls: Contact details, currency, SEO settings, site name, and maintenance mode.

How to open it

  1. Click "Site Config" in the left sidebar under Settings

Fields explained

Localisation

FieldWhat to enterExample
CurrencyThe currency used for all vehicle prices across the site$ — USD

Changing this setting affects every place a price is displayed — the vehicle model hero banner and any price labels on the site. The available currencies are:

SymbolCodeRegion
$USDUnited States Dollar
EUREuro
£GBPBritish Pound
NAf.ANGNetherlands Antillean Guilder (Sint Maarten)
Afl.AWGAruban Florin
TT$TTDTrinidad and Tobago Dollar
Bds$BBDBarbadian Dollar
J$JMDJamaican Dollar
CA$CADCanadian Dollar
A$AUDAustralian Dollar
G$GYDGuyanese Dollar

If you need a currency not in this list, ask your developer to add it to src/lib/currencies.ts — all other parts of the site pick it up automatically.

Contact Information

FieldWhat to enterExample
Contact TelephoneYour dealership phone number+1 721 555 0100
Contact EmailYour main contact email address[email protected]
Contact AddressFull street address for the map and footer123 Airport Rd, Simpson Bay, Sint Maarten
Contact LatitudeGPS latitude coordinate18.0335
Contact LongitudeGPS longitude coordinate-63.1198
Contact Marker ColorHex color code for the map pin#BE8751

What is a hex color code? It is a # followed by 6 characters (letters A–F and numbers 0–9). You can find hex codes at htmlcolorcodes.com.

Site Identity

FieldWhat to enterExample
Site NameShort website name, used in browser tabGAC Caribbean
Company NameFull company display nameGAC Caribbean Dealers
Site URLThe full website address (must start with https://)https://gac.sx
FaviconBrowser tab icon — upload a PNG, ICO, or SVG. Max 512 KB.(upload)
Site Description1–2 sentence description for GoogleOfficial GAC dealer in Sint Maarten.
Site KeywordsComma-separated search termsGAC, SUV, Sint Maarten, car dealer

Maintenance Mode

Maintenance Mode toggle

Maintenance ModeVisitors see the normal website
OFF
Maintenance Mode⚠ Visitors see a “coming soon” page
ON

Global WhatsApp Button

Controls the floating WhatsApp button shown across all public pages. See Section 3b for full instructions.

How to update Site Configuration

  1. Click into any field and type the new value
  2. Click Save Changes

3a. Cache Refresh

The Refresh Content Cache panel sits at the top of the Site Config page. Use it whenever uploaded images, logos, or other media are not appearing on the live website.

Cache Refresh panel

Refresh Content CacheForces all pages and media to reload from source.Use after uploading images that aren't appearing yet.
Refresh Cache
Refresh Content CacheForces all pages and media to reload from source.
Cache cleared and 12/12 pages pre-warmed — visitors get fresh content immediately
Refresh Cache
After clicking

When to use it

SituationAction needed
You uploaded a new image but it is not showing on the websiteClick Refresh Cache
You saved changes but the old content is still appearing after 30 secondsClick Refresh Cache
You updated contact details and the footer still shows the old numberClick Refresh Cache

How to refresh the cache

  1. Click Site Config in the left sidebar
  2. Find the Refresh Content Cache panel at the top of the page
  3. Click the Refresh Cache button
  4. Wait for the spinner to finish — this usually takes 5–15 seconds
  5. A green confirmation message shows how many pages were refreshed (e.g. Cache cleared and 12/12 pages pre-warmed)
  6. Reload the live website — the updated content should now appear

Note: The cache refreshes automatically when you click Save Changes on most pages. You only need to manually refresh if changes are not appearing after saving, or after uploading assets directly through Sanity Studio.


3b. Global WhatsApp Button

What it controls: A floating green WhatsApp button that appears in the bottom-right corner of every public page (except vehicle model pages). Visitors can tap it to open a WhatsApp conversation with a pre-filled message.

Global WhatsApp Button config

Global WhatsApp Button
Enable Button
Show WhatsApp FAB on all public pages
Disabled
Enabled
WhatsApp Number
International format. Leave blank to use contact telephone (+1 721 555 0100)
+1 721 555 0100
Pre-filled Message
Text pre-filled in WhatsApp when visitor taps the button
Hi. I was browsing your GAC website and had a question.
Visible on site as:
Bottom-right corner of every public page

Fields explained

FieldWhat to enterExample
Enable ButtonToggle ON to show the button sitewide. OFF hides it completely.(toggle)
WhatsApp NumberThe phone number visitors will message. International format with country code. Leave blank to use the number in Contact Telephone.+17215550100
Pre-filled MessageThe text that is automatically typed in the visitor's WhatsApp chat when they tap the button.Hi, I was browsing your GAC website and had a question.

Number format tip: Do not use spaces, dashes, or brackets in the number — use digits only with a + country code prefix, e.g. +17215550100 not +1 (721) 555-0100.

Enabling the button

  1. Open Site Config from the left sidebar
  2. Scroll down to the Global WhatsApp Button section
  3. Click the Disabled button — it turns green and reads Enabled
  4. Optionally enter a custom WhatsApp number (leave blank to use the Contact Telephone number)
  5. Optionally enter a custom pre-filled message (leave blank for the default message)
  6. Click Save Changes

Disabling the button

  1. Open Site Config
  2. Scroll to Global WhatsApp Button
  3. Click the Enabled button — it turns grey and reads Disabled
  4. Click Save Changes

Where the button appears

PageButton shown?
Home page✅ Yes
News / articles✅ Yes
Contact page✅ Yes
About Us, Warranty, Spec Sheets✅ Yes
Vehicle model pages (e.g. /models/tiggo-9)❌ No — these pages have their own vehicle-specific WhatsApp button
Admin panel (/admin/…)❌ No

The vehicle-specific WhatsApp button on each model page is separate and is not affected by this setting. It uses the vehicle model name in its message and is always active regardless of the global toggle.


3c. Favicon

What it controls: The small icon shown in the browser tab, browser bookmarks, and on mobile home screens when a visitor saves the site.

How to upload a favicon

  1. Open Site Config from the left sidebar
  2. Scroll to the Site Identity section
  3. Click Upload next to the Favicon field
  4. Select a PNG, ICO, or SVG file from your computer
  5. The image must be 512 KB or smaller — if it is larger, the upload will be blocked with an error message
  6. A 32 × 32 px preview appears immediately
  7. Click Save Changes — the new favicon becomes active within a few seconds

Replacing or removing a favicon

  • Replace: Click Replace next to the current favicon preview and select a new file
  • Remove: Click Remove to clear it — the site falls back to its built-in default icon

Best practice

RecommendationDetails
Preferred size32 × 32 px or 48 × 48 px
Preferred formatPNG or ICO for broad browser support; SVG for modern browsers
Max file size512 KB (enforced — larger files are rejected before upload)
BackgroundUse a transparent background (PNG) so the icon looks clean on any browser toolbar colour

Tip: If you have a square logo, export it at 32 × 32 px as a PNG with a transparent background.


3d. Custom Price Display Format

What it controls: How vehicle prices appear in the price label on vehicle model pages and the home page slider. By default the site shows Starting from $45,000 using the selected currency symbol. When Custom Price Format is enabled you can replace the currency portion with your own prefix and suffix text.

How to enable it

  1. Open Site Config from the left sidebar
  2. Scroll to the Localisation section
  3. Click the Disabled button next to Custom Price Format — it turns green and reads Enabled
  4. Two new fields appear: Prefix and Suffix
  5. Fill in your desired text (see examples below)
  6. Check the Preview row to see exactly how a price of 45,000 will look
  7. Click Save Changes

Fields explained

FieldWhat to enterExample
Custom Price FormatToggle — enables or disables the custom format(toggle)
PrefixText placed immediately before the numberFrom $ or Starting at NAf.
SuffixText placed immediately after the number USD or ANG

How the label is built

The price label always starts with Starting from or Only (controlled per vehicle in the Catalog), followed by the formatted price:

Starting from  {Prefix}{number}{Suffix}

Example with Prefix = $ and Suffix = USD:

Starting from $45,000 USD

Example with Prefix = NAf. and Suffix = `` (empty):

Starting from NAf. 45,000

Example with Prefix = `` (empty) and Suffix = ANG:

Starting from 45,000 ANG

Tip: When this setting is off, prices use the standard currency symbol and placement set by the Currency field above (e.g. Starting from $45,000 for USD). Turn it on only when you need a format the currency registry does not produce by default.

Disabling the custom format

  1. Click the Enabled button next to Custom Price Format — it turns grey and reads Disabled
  2. Click Save Changes — prices revert to the standard currency symbol formatting

4. Navigation

What it controls: The top navigation menu links visible on every page of the website.

How to open it

  1. Click "Navigation" in the left sidebar under Settings

The navigation editor

You will see a list of your current nav items. Each row shows the link label and its URL.

Desktop

GACModelsAbout GACServiceTechnologyContact

Mobile

GAC
Home
Models
About GAC
Service
Technology
Contact

Adding a new nav item

  1. Click "Add Nav Item" at the bottom of the list
  2. Fill in the fields (see table below)
  3. Click Save

Editing a nav item

  1. Click "Edit" on the row you want to change
  2. Update the fields in the dialog that opens
  3. Click Save

Removing a nav item

  1. Click the button on the right of the item
  2. Click Save Changes to confirm

Reordering nav items

Click the or arrows on the left of each row to move it up or down. Click Save Changes when done.

FieldWhat to enterExample
LabelThe text shown in the navigation barAbout GAC
URL / PathInternal path or full external URL/about-us or https://cheryinternational.com
Scroll Target IDOptional — scroll to a section ID on the pagemodels
Link TargetSame tab for internal links; New tab for externalNew tab
Show children on mobileToggle to show sub-links in the mobile menu(toggle)
Show children on desktopToggle to show sub-links on desktop hover(toggle)

Each nav item can have sub-links that appear in mobile dropdowns and the desktop hover bar:

  1. Click Edit on the parent nav item
  2. In the dialog, scroll to the Children section
  3. Click "Add Child" and fill in the same fields
  4. Click Save

5. Home Page Banners

What it controls: The large hero images and videos that rotate on the home page, plus the main CTA (Call-to-Action) image.

How to open it

  1. Click "Home Page Banners" in the left sidebar under Settings

The banner list

You will see a list of existing banners and an Add Banner button:

Desktop — 1920 × 1080 px / resolution 150 dpi

GAC

Mobile — 1000 x 1667 px / resolution 72 dpi

GAC

Adding a new banner

  1. Click "Add Banner"
  2. A dialog opens — fill in the fields (see table below)
  3. Click Save
  4. Click Save Changes on the main page to publish

Editing an existing banner

  1. Click "Edit" on the banner row
  2. Update the fields in the dialog
  3. Click Save, then Save Changes

Removing a banner

  1. Click the button on the banner row
  2. Click Save Changes to confirm

Reordering banners

Banners display in the order shown in the list. Click the or arrows to move a banner, then click Save Changes.

Required fields

FieldWhat to enter
TypeChoose image for a photo or video for a video clip
TitleThe large heading shown on the banner (e.g. Tiggo 9)

Image banner fields

FieldWhat to enter
ImageUpload the main banner photo (desktop version)
Mobile ImageUpload a cropped version for phone screens (recommended)
Alt TextShort image description for accessibility (e.g. GAC Tiggo 9 in white)
ModelInternal model name used for logo display (e.g. tiggo-9)

Video banner fields

FieldWhat to enter
Video URLThe URL of the hosted video file
Poster ImageThe thumbnail shown before the video loads
AutoplayToggle ON for the video to start automatically
LoopToggle ON to loop continuously
MutedKeep ON — browsers block autoplay with sound
Duration (ms)How long to show this slide (e.g. 6000 = 6 seconds)

Optional styling fields

FieldWhat to enter
DescriptionSubtitle text shown below the title
Title Location (Desktop)Where the title appears on desktop: bottom-left, center, etc.
Mobile Title LocationWhere the title appears on mobile
Hide Title on DesktopToggle ON to hide the title text on large screens
Link URLWhere the button takes the visitor (e.g. /models/tiggo-9)
Link LabelText on the button (e.g. Discover More)

CTA Image

At the bottom of the Banners page there is a CTA Image section. This is the decorative photo shown in the Call-to-Action section on the home page. Click Replace image to upload a new one, then click Save Changes.


6. Vehicle Catalog

What it controls: Which vehicles appear on the website, in what order, and at what price.

Important: A vehicle must first be created in the Vehicles section before it can be added to the catalog.

How to open it

  1. Click "Catalog" in the left sidebar under Settings

The catalog list

You will see a list of vehicles currently in the catalog, each showing the vehicle name and its price.

Catalog list

🖼
Tiggo 9$ 25,900
Edit
🖼
Tiggo 8 Pro$ 22,500
Edit
🖼
Tiggo 7 Pro
Edit
+ Add Vehicle

Adding a vehicle to the catalog

  1. Click "Add Vehicle"
  2. In the dialog, select the vehicle from the dropdown
  3. Enter the Price (optional — leave empty to hide the price on the website)
  4. Click Save, then Save Changes

Setting or updating a price

  1. Click "Edit" on the vehicle row
  2. Update the price field (numbers only — no currency symbol or commas)
  3. Click Save, then Save Changes

The currency symbol shown next to the price (e.g. $, NAf., ) is controlled by the Currency setting in Site Config, not here.

Removing a vehicle from the catalog

  1. Click the button on the vehicle row
  2. Click Save Changes

Removing a vehicle from the catalog does not delete the vehicle. It only removes it from the website listing. You can re-add it at any time.

Reordering the catalog

The vehicles display on the website in the same order as this list. Click the or arrows to reorder, then click Save Changes.

Series grouping follows catalog order. The series tabs in the home page vehicle slider and the series sections in the mobile navigation menu are ordered by the first vehicle of each series that appears in this catalog list. For example, if the first Tiggo model appears before the first Himla model, the Tiggo series tab will appear first. To change the series order, move vehicles in the catalog so the desired series appears first.


7. Vehicles

What it controls: Full detail pages for each vehicle model — images, specs, performance data, interior, exterior gallery, banners, colors, and spec sheet downloads.

How to open it

  1. Click "Vehicles" in the left sidebar under Content
  2. You will see a table of all existing vehicles

The vehicles table

Vehicles table

NameTypeSeriesLast UpdatedActions
🖼
Tiggo 9SUVTiggo2 days ago
🗑
🖼
Tiggo 8 ProSUVTiggo1 week ago
🗑
🖼
Arrizo 6SedanArrizo3 weeks ago
🗑
+ New Vehicle

Creating a new vehicle

  1. Click "New Vehicle" in the top-right of the page
  2. A tabbed form opens — fill in the fields across all tabs
  3. Click Save Vehicle when finished
  4. Then go to the Catalog section to add the vehicle to the website listing

Editing an existing vehicle

  1. Click the ✏ (edit) button on the vehicle row
  2. The tabbed form opens with the existing data loaded
  3. Edit the desired fields
  4. Click Save Vehicle

Deleting a vehicle

⚠️ Warning: Deleting a vehicle is permanent and cannot be undone. First remove it from the Catalog, then delete it here.

  1. Click the 🗑 (delete) button on the vehicle row
  2. Confirm the deletion in the dialog that appears

Duplicating a vehicle

Use this when you need to create a new vehicle that is similar to an existing one — for example, adding a new trim level or annual refresh that shares most of the same content.

Duplicate vehicle — row button and confirm dialog

Copy button on vehicle row

🖼
Tiggo 9SUVTiggo
🗑
Copy

Confirmation dialog (opens after clicking Copy)

Create a copy of “Tiggo 9”?A new vehicle will be created with all the same content. You can rename and update it after.
Cancel
Create Copy

How to duplicate a vehicle:

  1. In the Vehicles table, find the vehicle you want to copy
  2. Click the ⧉ (copy) button on the right side of the row
  3. A confirmation dialog appears — read the message and click Create Copy
  4. The new vehicle appears at the top of the table with a modified slug (e.g. tiggo-9-copy-07)
  5. Click ✏ Edit on the new vehicle to rename it and update any fields that differ
  6. Once ready, go to the Catalog section to add it to the website listing

After duplicating: The copied vehicle is not visible on the website until you add it to the Catalog (Section 6). The slug is automatically set to avoid conflicts — update it in the Basics tab if needed (do this before adding to catalog, since the slug becomes the URL).


Vehicle form tabs

The vehicle form is split into tabs. Click each tab name to switch between sections.

Vehicle form tabs

Basics
Banners
Performance
Design
Interior
Colors
Basics

Tab 1 — Basics

Identity and core images.

FieldRequiredWhat to enterExample
NameOfficial model nameTiggo 9
SlugAuto-generated. Becomes the URL (/models/tiggo-9). Do not edit.tiggo-9
TypeVehicle body style — select from listSUV
SeriesNoMarketing family name (used to group models)Tiggo
Cover ImageMain listing photo shown in the home page slider(upload)
Slider ImageNoAlternative home page image. Falls back to Cover Image if empty.(upload)
Spec SheetNoUpload a PDF spec sheet. Appears as a downloadable link.(PDF upload)
BrochureNoUpload a PDF brochure.(PDF upload)

PDF tip: Only .pdf files are accepted. If your file is larger than 5 MB, compress it first at ilovepdf.com.


Tab 2 — Banners

Hero images and videos shown at the top of this vehicle's detail page. Works the same as Home Page Banners.

  1. Click "Add Banner" to add a new hero slide
  2. Fill in the fields (same as Home Page Banners — see Section 5)
  3. Use the ↑↓ buttons to reorder banners
  4. Click to remove a banner

Tab 3 — Performance

Data displayed in the Performance section of the vehicle page.

Appearance text

FieldWhat to enterExample
EyebrowSmall label above the titlePERFORMANCE
TitleSection headingPower Meets Precision
ImagePerformance section background photo(upload)

Performance figures

FieldWhat to enterExample
Max Power (kW)Peak engine power180
Max Output Torque (N·m)Peak torque output390
Max Input Torque (N·m)Input torque figure310
0–100 km/h (seconds)Acceleration time7.5
TransmissionGearbox description8AT TRANSMISSION
EngineEngine description2.0T GDI EFFICIENT ENGINE

Drive Modes

Select which driving modes are available for this vehicle. Each mode appears as a labelled button — click to toggle it on (highlighted) or off. Only the selected modes are shown in the Drive Modes panel on the live vehicle page.

Drive Modes — toggle selector

ECO
NORMAL
SPORT
SNOW
MUD
OFF-ROAD

Click a mode to toggle it on (gold border) or off. Only enabled modes show on the vehicle page.

ModeIconWhen to enable
ECO🌿 LeafAll standard models
NORMAL🚗 CarAll models
SPORT⚡ GaugeAll standard models
SNOW❄ SnowflakeAWD / winter-ready models
MUD💧 WaterOff-road capable models
OFF-ROAD⛰ MountainOff-road capable models

Tip: For most models enable ECO, NORMAL, and SPORT. Add SNOW, MUD, and OFF-ROAD only for AWD or off-road variants (e.g. Tiggo 8, Tiggo 9).


Tab 4 — Design

Side-profile image with interactive hotspot callouts and dimension information.

Appearance text

FieldWhat to enterExample
EyebrowSmall labelEXTERIOR DESIGN
TitleSection headingCrafted to Impress
SubtitleSupporting headlineBold lines. Refined character.
BodyParagraph textThe Tiggo 9 combines…

Main Design Image

Upload the side-profile image of the vehicle. Once uploaded, you can place hotspots directly on it by clicking the image — a numbered pin is placed at the exact point you click.

Adding a design hotspot

  1. Upload the design image first
  2. Click anywhere on the image to place a new hotspot at that position
  3. An edit dialog opens automatically — fill in:
    • Title — e.g. Panoramic Sunroof
    • Description — text shown when the hotspot is clicked
    • Image — optional close-up photo of the feature
  4. Click Save
  5. Existing hotspots appear as numbered blue pins on the image — click Edit or to change or remove them

What you see is what visitors see. The editor image uses the same crop and zoom as the live vehicle page, so the pin positions you place here match exactly where they appear on the website.

Removing all hotspots at once

If you need to clear all hotspots and start fresh, click the Clear all button (shown in red next to "Add Hotspot" when at least one hotspot exists). A confirmation dialog will ask you to confirm before removing them all. Click Save Vehicle afterward to apply the change.

Dimensions (all measurements in millimetres)

FieldDescription
LengthTotal vehicle length
WidthTotal width (excluding mirrors)
HeightTotal height
WheelbaseDistance between front and rear axles
Front TrackWidth between front wheels
Rear TrackWidth between rear wheels
Ground ClearanceHeight from ground to chassis
Boot CapacityLuggage space in litres

Tab 5 — Interior & Safety

Appearance / Description Block

This controls the large text overlay that appears on the interior section of the vehicle page — the eyebrow label, the main heading, and an optional subtitle.

Interior & Safety — Appearance / Description Block

Appearance / Description Block
Eyebrow Text
Small label above title
LUXURIOUS DESIGN
Title
Main section heading
INTELLIGENT CABIN
Subtitle
Supporting headline
Comfort meets innovation
Eyebrow CSS Class
Advanced — leave blank
uppercase text-white font-semibold!
Title CSS Class
Advanced — leave blank
font-extrabold! uppercase text-white
LUXURIOUS DESIGNINTELLIGENT CABINComfort meets innovation↑ Live preview on vehicle page
FieldRequiredWhat to enterExample
Eyebrow TextNoShort label shown above the main titleLUXURIOUS DESIGN
TitleNoMain heading in the interior sectionINTELLIGENT CABIN
SubtitleNoSupporting line below the titleComfort meets innovation
Eyebrow CSS ClassNoAdvanced — leave blank unless instructed by your developer(leave empty)
Title CSS ClassNoAdvanced — leave blank unless instructed by your developer(leave empty)

If you leave these fields empty, the vehicle page will use built-in fallback text.


Interior Image & Features
FieldWhat to enter
ImageMain interior photo
FeaturesList of interior highlights — each has a Label (e.g. Seats) and a Value (e.g. Nappa Leather, Ventilated)
Interior SliderA gallery of interior images that visitors can swipe through on the vehicle page

Adding an interior feature:

  1. Click "Add Feature"
  2. Enter the Label and Value
  3. Repeat for each feature

Adding interior slider images:

  1. Click "Add Slide"
  2. Upload an image for that slide
  3. Optionally fill in Alt Text (image description for accessibility) and Title (caption displayed on the slide)
  4. Repeat for each slide
  5. Use the ↑↓ arrows to reorder slides
  6. Click to remove a slide

Safety

Safety Image: Upload the image for the Safety section of the vehicle page.

Safety Features: A text area for listing safety features.


Tab 6 — Colors

Assign which paint and interior trim options are available for this vehicle.

Exterior Colors

  1. Click "Add Exterior Color"
  2. Select from the dropdown (colors must already exist — see Section 9)
  3. Click next to a color to remove it

Interior Colors

Same process as exterior colors.

If a color you need does not appear in the dropdown, go to Exterior Colors or Interior Colors to create it first.


7a. International Dealers

The International Dealers section powers the public GAC International page (/dealers) — a directory of authorised GAC dealers across the region. Each dealer has its own card with contact details and a View catalog button that opens that dealer's vehicles and prices. Prices can be pulled automatically from the dealer's own website (their Sanity project) or entered by hand.

Note: This section only appears when the international dealer network is enabled for your site (NEXT_PUBLIC_GAC_INTERNATIONAL_ENABLED=true). If you do not see International Dealers in the sidebar, contact your system administrator.

How to open it

Click International Dealers under the Content section in the sidebar.

The International Dealers page: map style, directory settings and the dealer listThe International Dealers page: map style, directory settings and the dealer list

The page has four parts, top to bottom:

PartWhat it controls
Map Style on /dealersWhich kind of map the public page uses
Dealer Directory SettingsSearch, alphabet jump, grouping, card layout and how catalogs open — separately for desktop and mobile
Dealer listEvery dealer, with their catalog status and Edit / Delete actions
Add DealerOpens the dealer form to create a new dealer

What visitors see

The public page opens with a hero showing the total number of dealers and countries, followed by the Dealer Directory.

Public dealer page: hero with dealer and country counts, then the directoryPublic dealer page: hero with dealer and country counts, then the directory

Each dealer is a card:

A dealer card with country, name, address, contact links and the View catalog buttonA dealer card with country, name, address, contact links and the View catalog button

Card elementWhere it comes from
Country label and dealer nameCountry and Dealer Name fields
Red country outline (bottom-right)Drawn automatically from the Country field. Recognised: every Caribbean island nation and territory, Guyana, Suriname, French Guiana, Central America, Mexico, Colombia and Venezuela. Common spellings work (e.g. Trinidad & Tobago, St. Maarten, Curaçao); an unrecognised country simply shows no outline
LogoLogo upload
Address lineAddress and City
Phone and Visit website linksPhone and Website URL
Short textDescription
View catalog buttonThe dealer's catalog (synced or manual — see below). Hidden when the dealer has no vehicles to show

Clicking View catalog opens the dealer's vehicles. Each tile shows the vehicle image and name from this site, and the price in that dealer's currency and format. Clicking a tile opens the vehicle's model page on this site.

A dealer's catalog opened as an overlay, prices in the dealer's own currencyA dealer's catalog opened as an overlay, prices in the dealer's own currency

Map style

Map style optionsMap style options

OptionDescription
InteractiveFull Mapbox map — zoom, pan, and clickable markers. Needs a Mapbox token in Site Configuration
Flat (Branded)Stylised dark panel with projected markers. No Mapbox, no attribution
Static ImageFlat Mapbox snapshot with clickable markers. No zoom or pan

Click an option to select it — the choice saves immediately.

Note: The map block on the public page is currently switched off in the site code, so this setting has no visible effect until the development team re-enables it. Dealers without coordinates are still listed in the directory.

Dealer directory settings

Dealer directory settingsDealer directory settings

Use the Desktop / Mobile tabs at the top to set each device size separately. Every change saves immediately.

SettingWhat it does
Alphabet JumpShows an A–Z letter bar above the directory. Visitors click a letter to jump to countries starting with it
Search FieldFree-text search by dealer name, country, or city
Group by LetterAdds a letter heading between groups of countries. Off shows one flat list
Card Layout — GridCards in columns, up to three per row on desktop
Card Layout — RowsFull-width cards, one per row
Catalog Display — InlineThe catalog expands at the bottom of the dealer card
Catalog Display — SheetInline on desktop; on mobile a sheet slides up from the bottom
Catalog Display — OverlayA centered dialog over the page on all devices

The dealer list

The dealer listThe dealer list

ColumnMeaning
DealerLogo (or a globe placeholder) and name
Country / CityLocation fields
ContactPhone and website when set
CatalogSynced · 5 vehicles · 1h ago when the catalog was pulled from the dealer's site, Manual · 3 vehicles when entered by hand, or when the dealer has no catalog yet
ActionsPencil opens the dealer for editing; the red bin deletes the dealer after a confirmation

Deleting a dealer cannot be undone.

Adding or editing a dealer

Click Add Dealer, or the pencil on an existing row. The same form is used for both.

The Edit Dealer formThe Edit Dealer form

FieldRequiredNotes
Dealer NameYesShown on the card and in the catalog title
SlugYesURL segment for the dealer's model pages (see below). Fills in automatically from the name; edit if needed. Lowercase letters, digits and dashes, unique per dealer. Changing it changes the dealer's page URLs
Inquiry EmailNoReceives vehicle inquiries sent from this dealer's model pages. Blank = the site's sales address
CountryYesShown as the red label above the name. Used for the country filter and alphabet grouping — spell it the same way for every dealer in that country
City, AddressNoShown on the card
Latitude, LongitudeNoMap marker position. Fill both or neither. Type them in, or fill in the address fields and click Get from address to look them up
Phone, Website URLNoBecome clickable links on the card. Use the full URL including https://
WhatsAppNoNumber for the WhatsApp button on this dealer's model pages. Blank = use Phone
DescriptionNoShort text under the contact details
LogoNoPNG, JPG, WebP or SVG, max 512 KB. Click Upload logo, or Remove to clear it

Click Save Changes (or Add Dealer) to store the dealer. Cancel discards everything, including any unsaved catalog edits.

Tip: After Get from address finds a location, the result is shown under the buttons. If it picks the wrong spot, adjust the address and try again, or type the coordinates manually.

The dealer's catalog

The Catalog block at the bottom of the form decides which vehicles and prices appear behind the card's View catalog button. Use the Synced / Manual toggle in the top-right of the block to pick the source:

  • Synced — prices and price format are pulled from the dealer's own website (their Sanity project). Best when the dealer runs a GAC site built on this same platform.
  • Manual — you pick vehicles from this site and type the prices yourself.

Both sets of data are kept. Switching from Manual back to Synced (or the other way) does not delete what you entered in the other mode — it only changes which one the public page uses.

Vehicle names and images always come from this site's own Vehicles, matched by the vehicle's slug (for example aion-es). The dealer only supplies prices.

Synced mode

Catalog block in Synced mode after a successful pullCatalog block in Synced mode after a successful pull

FieldWhat to enter
Project IDThe dealer's Sanity project ID — an 8-character code such as ae2a1npc. The dealer can find it at sanity.io/manage under their project
DatasetUsually production. Leave blank to use production
API TokenA Viewer (read-only) token from the dealer's project: sanity.io/manage → their project → APITokensAdd API token, permissions Viewer. Paste it once; after saving, the field shows Saved •••• and the token is never displayed again. Leave it blank on later edits to keep the saved token, or paste a new one to replace it

Pulling the catalog

  1. Enter Project ID, Dataset and API Token, then click Save Changes (a new dealer must be saved once before it can pull).
  2. Reopen the dealer and click Pull catalog. The button first saves any changes to the three fields above, then connects to the dealer's project.
  3. When it finishes, the status line shows when it synced, how many vehicles are shown, and the dealer's currency and format, e.g. Synced 1h ago · 5/5 vehicles shown · GYD · "$ # GYD" · + Duty Free.

What gets copied from the dealer's site:

  • Every vehicle in their Catalog, with its price, secondary price, "Starting from" flag and duty-label flag
  • Their Currency, Custom Price Format (prefix / suffix) and Secondary Price settings from their Site Configuration

Under the status line each pulled vehicle is listed with this site's image, its name, and the price exactly as it will appear on the card.

Row elementMeaning
Eye iconClick to hide this vehicle from the dealer's public catalog. Hidden rows are dimmed. Click again to show it. Hidden choices survive future pulls
not on this site badgeThe dealer sells a vehicle whose slug does not exist in this site's Vehicles. It is kept in the list but never shown publicly. Add the vehicle to this site (with the same slug) and it appears automatically
Second price after ·The dealer's secondary price, shown when they have secondary prices enabled

Click Save Changes after hiding or showing vehicles — the eye toggles are stored with the dealer.

Note: Pulling replaces the previous synced prices with whatever the dealer's site holds right now. It never changes anything on the dealer's site — the token is read-only.

Manual mode

Click Manual in the toggle. The block changes to a price-format editor and a vehicle table.

Catalog block in Manual mode: price format, Add Vehicle and the vehicle tableCatalog block in Manual mode: price format, Add Vehicle and the vehicle table

Price format works exactly like Site Configuration → Localisation (see 3d. Custom Price Display Format), but applies only to this dealer:

Manual price format fieldsManual price format fields

FieldWhat it does
CurrencyCurrency symbol and number formatting for this dealer's prices
Custom Price FormatWhen Enabled, prices are built as Prefix + amount + Suffix instead of the default symbol placement. A Preview row shows the result
Secondary PriceWhen Enabled, each vehicle gets a second price shown under the main one. Name is its label, Prefix / Suffix wrap the number, and Display Mode matches the price-pill option. A Preview appears once a prefix or suffix is set

Adding vehicles

Click Add Vehicle to open the picker. It lists every vehicle on this site; type in the search box to filter by name, type or series. Click Add on a vehicle to append it to the table. Vehicles already in the table show an In catalog badge.

The Add Vehicle pickerThe Add Vehicle picker

The vehicle table

Manual vehicle table with prices enteredManual vehicle table with prices entered

ColumnHow to use it
#Display order on the card
Vehicle / Type / SeriesFrom this site's vehicle record
Price — click to editHover the row and click the pencil (or the Not set text) to type a price. Press Enter or the green tick to confirm, Esc or ✕ to cancel. The value shows formatted with the dealer's currency
Secondary price columnOnly shown when Secondary Price is enabled above. The checkbox shows or hides the secondary price for that vehicle; click the amount to edit it
Starting?From shows the price as From $25,990; Only shows the plain amount
Actions (on hover)Arrows move the vehicle up or down; the red bin removes it from this dealer's catalog (the vehicle itself is untouched)

Nothing in Manual mode is stored until you click Save Changes at the bottom of the form.

Dealer-specific model pages

Every vehicle page can be opened in a dealer's context by adding the dealer's slug after the model:

/models/aion-es              → the normal page, this site's price and contacts
/models/aion-es/gac-guyana   → the same page as GAC Guyana's visitors see it

Every tile in a dealer's catalog links to that dealer's page automatically, as long as the dealer has a Slug saved. This applies whether the catalog is synced, manual, or falling back to the site catalog. Dealers created before slugs existed link to the normal model page until you open them and click Save Changes once. On a dealer page:

ElementComes from
Price pillThe dealer's price for that vehicle, in the dealer's currency and format. If the dealer does not list the vehicle, no price is shown
WhatsApp buttonThe dealer's WhatsApp number, or Phone when WhatsApp is blank. Hidden when the dealer has neither
Request information formSends to the dealer's Inquiry Email (site CC addresses still receive a copy). Falls back to the site sales address when the dealer has no email. The subject line includes the dealer name
Everything elseUnchanged — banners, specs, gallery and text are this site's

An unknown dealer slug shows the standard page not found.

How prices appear on the card

  • Main price: From $25,990 when Starting from is on, otherwise $25,990
  • Secondary price: a lighter second line under the main price when secondary prices are enabled for the dealer and ticked for that vehicle
  • Formatting follows the dealer's own currency and prefix / suffix — not this site's

Troubleshooting

SymptomLikely causeWhat to do
Pull catalog is greyed outProject ID or token is empty, or the dealer has not been saved yetFill in both fields, Save Changes, reopen the dealer
Configure the dealer's Sanity project ID and API token firstThe saved dealer has no tokenPaste the token and save, then pull
Sanity rejected the token for project …Token is wrong, expired, or belongs to another projectAsk the dealer for a new Viewer token for that project
Project … / dataset … not foundTypo in Project ID or DatasetCheck the values at sanity.io/manage
No catalog document in …The dealer's site has never saved its CatalogAsk the dealer to open Admin → Catalog on their site and save once
A vehicle shows not on this siteSlug does not exist in this site's VehiclesCreate the vehicle here with the same slug
Card shows this site's own catalog instead of the dealer'sThe dealer has no synced or manual vehicles to showPull the catalog or add vehicles manually. Until then the card falls back to the main catalog
Card still shows old pricesPage cacheUse Cache Refresh (see 3a) or wait a minute
View catalog button missing on the cardThe dealer's active mode has no visible vehicles and the main catalog is emptyShow at least one vehicle

Tip: Keep one dealer on Synced and one on Manual in mind as examples: the list's Catalog column tells you at a glance which mode each dealer uses and how fresh its data is.


8. Articles (News & Publications)

What it controls: The news section of the website. Each article can be categorised as News or a Publication.

How to open it

  1. Click "Articles" in the left sidebar under Content

The articles table

Articles table

TitleTypeDate
🖼
GAC Wins Award 2025NewsJun 15 2025
🖼
New Model LaunchNewsMay 02 2025
🖼
Annual Report 2024Pub.Jan 10 2025
+ New Article

Creating a new article

  1. Click "New Article"
  2. Fill in all required fields (marked ✅ below)
  3. Write the content using the rich text editor
  4. Click Save Article

Editing an article

  1. Click the ✏ (edit) button on the article row
  2. Make your changes
  3. Click Save Article

Deleting an article

  1. Open the article by clicking
  2. Scroll to the bottom and click Delete Article
  3. Confirm the deletion

Article fields explained

FieldRequiredWhat to enterExample
TitleArticle headlineGAC Wins Regional SUV Award 2025
SlugAuto-generated from title. Becomes the URL. Do not edit after publishing.gac-wins-regional-suv-award-2025
TypeNews or PublicationNews
CategoryNoTopic tag for filteringAwards
SummaryNo1–2 sentence preview shown on article cardsGAC Caribbean has been recognized…
Published AtNoDate and time of publication2025-06-15
FeaturedNoToggle ON to highlight this article prominently(toggle)
ImageNoCover photo for the article card and header(upload)

Writing article content

The Content field uses a rich text editor with a toolbar:

Rich text editor

B
I
H2
H3
1.

Toolbar guide:

ButtonAction
BBold text
IItalic text
Normal paragraph
H2Heading 2
H3Heading 3
Bullet list
1.Numbered list
Undo
Redo

Click the star (☆/★) icon in the articles table to toggle featured status directly without opening the article.


8a. Lead Pages

Lead Pages are campaign landing pages at /lp/{slug} — for example /lp/test-drive-week. Each page has its own hero banners, text sections and a custom form. Every submission is stored as a lead and emailed to the addresses configured on that page. Create as many pages as you have campaigns.

How to open it

Click Lead Pages under the Content section in the sidebar.

The Lead Pages listThe Lead Pages list

ColumnMeaning
PageClick the title to edit
URLPublic address; opens in a new tab
StatusPublished (live) or Draft (visitors see page not found). Click to switch
LeadsRed N leads → button; opens the leads list for that page
Last leadWhen the most recent lead arrived
ActionsLeads · Share · Edit · Duplicate (copies everything as a new draft) · Delete

New Lead Page creates a draft with a starter form (name, email, phone, message) and opens the editor.

Sharing a page

Click the QR icon on a row to open the share dialog.

Share dialog with QR code and public linkShare dialog with QR code and public link

  • QR code in the house style (GAC badge in the centre). Download QR (PNG, 2400px) saves a print-ready 2400 px version — flyers, showroom stands, event banners.
  • Public link with a one‑click Copy button for ads, social posts and emails.
  • A yellow note warns when the page is still a draft; publish it before printing anything.

Quick start — launch a campaign in six steps

  1. Lead Pages → New Lead Page. A draft opens with a starter form (name, email, phone, message).
  2. Settings tab: give it a title and check the slug — this becomes the public address, e.g. /lp/test-drive-week. Add the consent wording.
  3. Content tab: add one or two hero banners and a text section that explains the offer.
  4. Form tab: adjust the fields. Add a Vehicle picker if the campaign is about a model, a Date for bookings, a Checkbox marked as consent. Watch the live preview.
  5. Delivery tab: add the recipient address(es). Turn on the confirmation email and write a short message if you want visitors to get an acknowledgement.
  6. Save Changes, switch Published on in Settings, save again, and open the URL from the header to check it. Share the link in your ads, posts and emails.

Duplicate a finished page for the next campaign instead of starting from scratch — everything is copied as a new draft with a -copy slug.

The editor

The editor has four tabs. The header shows the public address, the Published/Draft badge and a red Leads → button that opens this page's leads. Nothing is stored until you click Save Changes in the top-right; the header shows Unsaved changes while edits are pending, and the browser warns if you try to leave without saving. If the server rejects a save (for example a slug already in use), the message appears in the header and the editor jumps to the tab that needs fixing.

Content tab

Content tab: hero banners and text sectionsContent tab: hero banners and text sections

  • Hero banners work exactly like Home Page Banners: add, edit, reorder, remove, image or video, call‑to‑action. Up to 12. A page with no banners simply starts with the first text section.
  • Text sections appear between the banners and the form, in order. Each has an eyebrow (small red label), heading, a rich-text body (the same editor as About Us: paragraphs, headings, bold, italic, lists), an optional image on the left or right, and a light or dark background.

Form tab

Form tab with the live previewForm tab with the live preview

Top box: the form heading, intro line, submit button label, success heading and message, and an optional redirect URL (when set, the visitor is sent there after submitting instead of seeing the success message).

Fields table: pick a type from the dropdown and click Add field. Each row shows the label, its machine key (used as the column name in emails and CSV), type, a click‑to‑toggle Required / Optional pill and a Width dropdown (Full, 1/2, 1/3, 1/4 of the row on desktop; every field is full width on phones). Arrows reorder; the pencil opens the field editor; the bin removes it. Up to 30 fields.

Field typeUse it for
Short textNames, short answers
Long textComments, messages
EmailValidated address. The first Email field is also used as reply‑to and for the confirmation email
PhoneValidated phone number
NumberAmounts, quantities
Dropdown / Multiple choiceOne answer from a list of options you type (one per line)
CheckboxYes/no. Mark one checkbox as the consent checkbox: its wording comes from Settings → Consent text and the answer is stored on every lead
DateA calendar date, e.g. preferred test‑drive day
Vehicle pickerA dropdown of this site's catalog vehicles, always up to date
File uploadImages and/or PDF, 1–10 MB per file. Files are attached to the lead email when small enough, otherwise linked

The field editorThe field editor

The Live preview on the right renders the real form as visitors will see it. It validates when you press its button but never sends.

Delivery tab

Delivery tabDelivery tab

SettingWhat it does
RecipientsEvery lead is emailed here. Type an address and press Enter to add a chip. At least one is required
CCOptional copies
Subject prefixSubject line becomes Prefix · Page title · visitor name or email
Confirmation emailWhen enabled, the visitor receives your subject and message at the address they entered in the first Email field

Settings tab

Settings tabSettings tab

  • Slug — the public address /lp/{slug}. Lowercase letters, digits and dashes; must be unique. Changing it changes the URL, so avoid changing it once a campaign is running. Leads stay attached to the page.
  • Published — the on/off switch for visitors.
  • SEO title / description — what Google and link previews show.
  • Consent text — the sentence next to the consent checkbox.
  • Delete this page — takes the page offline. Leads already collected are kept.

What visitors see

The public formThe public form

Required fields are marked with a red asterisk; problems are shown under the field. After a successful submission the visitor sees the success message (or is redirected).

Success messageSuccess message

Behind the scenes:

  1. The answers are checked on the server against the field list — required fields, email/phone/number/date formats, dropdown options, file type and size. Nothing the visitor sends can change where the email goes.
  2. The lead is saved first, with any uploaded files.
  3. The lead email goes to the recipients (and CC). The confirmation email goes to the visitor when enabled.
  4. The email result is recorded on the lead (sent, or failed with the reason), so a delivery problem never loses a lead.
  5. Hidden spam traps and a per‑visitor rate limit run silently. Suspicious submissions are dropped without an error.

What the lead email contains

The lead emailThe lead email

  • Subject: {Subject prefix} · {Page title} · {visitor name or email}, e.g. New lead · Test Drive Week · Ana Example.
  • Body: page title, submission time, then every answer as a label/value row in form order. Uploaded files appear as links; when the files are small (under 5 MB together) they are also attached.
  • Reply‑to: the visitor's email address, so replying from your inbox goes straight to them.
  • CC addresses receive an identical copy.
  • The confirmation email to the visitor carries your subject and message exactly as typed in the Delivery tab.

Leads

Click the red N leads → button in the list (or the inbox icon under Actions), or Leads → in the editor header.

Leads listLeads list

  • Search matches any answer; the date pickers filter by submission day. 50 leads per page.
  • Email status pill: sent, failed (hover for the reason), pending, skipped.
  • Verified pill: Verified means the submission passed the invisible form protection check; Legacy marks leads stored before the check existed; Check off only appears on development sites.
  • Click a row (or the eye icon) to open the detail dialog: every answer, file links, consent, locale, referrer, verification, and both email statuses. Delete lead sits at the bottom of the dialog.

Lead detailLead detail

  • Export CSV downloads every lead for the page. Columns follow the form's field order (plus any field that existed on older leads), then Consent and Email status. Opens directly in Excel.
  • Delete removes a lead permanently.

Campaign recipes

CampaignSuggested fieldsDelivery
Test‑drive weekFull name*, Email*, Phone*, Vehicle picker*, Preferred date, Dropdown "Preferred showroom", Consent checkbox*Sales inbox; confirmation on: "We will call within one business day to confirm your slot."
Trade‑in valuationFull name*, Email*, Phone, Short text "Current vehicle (make, model, year)", Number "Mileage", File upload "Photos" (images, 10 MB), ConsentSales manager + CC showroom; confirmation on
Launch event RSVPFull name*, Email*, Number "Guests", Multiple choice "Session" (Morning / Afternoon), Consent*Marketing inbox; confirmation on with the event address; Redirect to an event page after submit
Brochure downloadEmail*, Vehicle picker, Consent*Marketing inbox; confirmation on with the brochure link in the message

* = required.

CSV export columns

Export gives one row per lead:

Submitted at · one column per form field, in the form's current order, headed by the field label · any field that existed on older leads but was later removed · Consent (Yes / No) · Email status (sent / failed / pending / skipped) · Verification (Verified / Legacy / Check disabled).

File fields contain the file link. Times are in UTC (ISO 8601). The file opens directly in Excel and Google Sheets.

Limits

LimitValue
Fields per form30
Banners per page12
Text sectionsno fixed limit
Options per dropdown / multiple choiceno fixed limit
Single file1–10 MB (set per field, default 5)
All files in one submission20 MB
Text answer length2,000 characters
Submissions per visitor10 per 10 minutes, then the visitor is asked to try later
Leads shown per page in the admin50

Privacy and data

  • Every lead stores the answers, files, the language the visitor used, the referring page, and the consent answer.
  • Consent wording is yours to set per page (Settings → Consent text). Make sure it matches your privacy policy and keep the consent checkbox required for marketing follow‑up.
  • Uploaded files are stored with the site's media and are reachable by anyone who has the exact link (the link is only in the lead and the email). Delete the lead to remove the reference; ask the development team to purge the file itself if required.
  • Deleting a page keeps its leads; deleting a lead is permanent.
  • Leads never leave this site's own database except by email and by CSV export.

Before you publish — checklist

  • Slug is short, lowercase and final
  • At least one recipient in Delivery, and it is monitored
  • Consent checkbox present and required; consent text approved
  • Form tested in the live preview: every required field makes sense
  • Banners have alt text; text sections read well on mobile
  • SEO title and description filled in
  • A test submission from your own phone arrived by email and shows in Leads
  • Redirect URL (if used) opens the right page

FAQ

Can visitors see other people's leads? No. Leads are only visible in the admin panel.

Can I edit a page that is already live? Yes. Changes apply the moment you save. Consider unpublishing first for large rework.

Can two pages share a form? Not directly — duplicate the page and adjust.

What happens if the recipient address bounces? The provider reports the failure and the lead shows failed with the reason. Fix the address and follow up manually.

Can I translate a page? UI labels (Send, error messages, "optional") follow the visitor's language automatically. Your own headings and texts are shown as typed. Create one page per language if needed, e.g. /lp/test-drive-week and /lp/semaine-essai.

Does a page appear in Google? Published pages are listed in the sitemap and can be indexed. Unpublish when the campaign ends.

Troubleshooting

SymptomLikely causeWhat to do
Save says Add at least one recipient emailDelivery tab has no recipientsAdd an address, save again
Save says Slug … is already usedAnother page has that slugChange the slug in Settings
Page shows not foundPage is a Draft, or the slug in the link is wrongCheck the Status column and the URL
Lead has status failedThe mail provider rejected the send (bad address, provider outage)Fix the recipient, then follow up manually — the lead and its answers are safe
Visitor says a file was rejectedWrong type or over the size limitCheck the field's accepted files and max MB in the field editor
Vehicle picker is emptyThe catalog has no vehiclesAdd vehicles in Catalog

Note: Leads are not included in Sync to other projects. Uploaded files are stored with the site's media and reachable by link.


9. Exterior Colors

What it controls: The available exterior paint color options that can be assigned to vehicle models.

How to open it

  1. Click "Exterior Colors" in the left sidebar under Colors

The colors table

Colors table

SwatchNameHex CodeActions
Pearl White#F5F5F0
Edit
Midnight Black#1A1A1A
Edit
Azure Blue#1E4D8C
Edit
+ Add Color

Adding a new color

  1. Click "Add Color"
  2. Fill in:
    • Name (required) — Color name shown on the website (e.g. Pearl White)
    • Hex Code (required) — 6-character color code starting with # (e.g. #FFFFFF)
  3. Click Save

Finding a hex code: Use htmlcolorcodes.com to pick a color and copy the code. Or search online for the color name + "hex code".

Editing a color

  1. Click "Edit" on the color row
  2. Update the Name or Hex Code in the dialog
  3. Click Save

Changes to a color name or swatch will update everywhere it appears across all vehicle pages.

Deleting a color

  1. Click on the color row
  2. Confirm the deletion

⚠️ First remove this color from all vehicles that use it, otherwise it will disappear from those vehicle pages.


10. Interior Colors

What it controls: The available interior color and trim options for vehicle models.

The process is identical to Section 9 — Exterior Colors:

  1. Click "Interior Colors" in the left sidebar
  2. Click "Add Color" to create a new option
  3. Enter the Name (e.g. Black Leather) and Hex Code (e.g. #1A1A1A)
  4. Click Save

Interior colors are assigned to vehicles in the Colors tab of the vehicle form.


11. About Us

What it controls: The content of the About GAC page on the website — main image and body text.

How to open it

  1. Click "About Us" in the left sidebar under Settings

Editing the content

The About Us page has two sections:

Content (Rich Text)

Edit the page text using the rich text editor. The toolbar works the same as the Article editor — see Section 8 for the toolbar guide.

Desktop layout

GAC

Mobile layout

GAC
  • Click the upload area (or "Replace image") to upload a new photo
  • Click on the image to remove it

Click Save Changes when finished.


12. Warranty Page

What it controls: All content on the warranty page — the hero banner, the warranty coverage cards, and the partner logos.

How to open it

  1. Click "Warranty Page" in the left sidebar under Settings

Hero Section

FieldTypeDescription
Hero HeadingTextMain heading in the banner, e.g. We've got you covered
Hero SubheadingTextSupporting text below the heading
Hero Background ImageImageUpload a background image for the banner

Leave the background image empty for a plain-color background.

Warranty Items

Each entry produces one coverage card on the page.

Adding a new warranty type:

  1. Click "Add Warranty Item"
  2. Fill in the fields:
FieldDescription
Duration / CoverageBold coverage line at the top of the card, e.g. 7-Year Unlimited KM
Card TitleWarranty type name, e.g. New Vehicle Warranty
ImageCard illustration image (upload)
DescriptionParagraph explaining what is covered
Fine Print / NoteSmall-print text below the description (optional)
T&C Link LabelText for the T&C link, e.g. View Terms & Conditions (leave blank to hide)
T&C Link URLURL to the T&C document
  1. Click Save, then Save Changes

Editing a warranty item:

  1. Click "Edit" on the item row
  2. Update the fields
  3. Click Save, then Save Changes

Removing a warranty item:

  1. Click on the item row
  2. Click Save Changes

Reordering warranty items:

Click the or buttons to move items up or down, then click Save Changes.

Our Partners

Each entry produces one partner logo tile in the grid.

Adding a partner logo:

  1. Click "Add Partner"
  2. Fill in:
FieldDescription
Partner NameAccessible label and alt text for the logo
Website URLURL the logo links to (opens in a new tab)
Logo ImageUpload the partner logo
  1. Click Save, then Save Changes

Removing a partner:

  1. Click on the partner row
  2. Click Save Changes

12a. Translations

The website can be shown in English, French, and Spanish. English is the master copy: it is what you type on every other page of the admin panel. French and Spanish are overlays — you fill in only the words you want changed, and anything you leave blank automatically shows the English text instead.

That fallback is the single most important rule on this page:

A blank field is not an error. It means "show the English words here." You can translate the site a little at a time and the public website never breaks or shows an empty space.

Step 1 — Turn the languages on

Nothing you translate appears to visitors until the language is enabled in Site Config.

  1. Click Site Config in the left sidebar
  2. Scroll to the Localisation group
  3. Click Français and/or Español so they turn green
  4. Choose a Default Language — this is what a first-time visitor sees before they pick anything
  5. Click Save Changes

Site Config — Localisation

Enabled Languages

Languages visitors can choose on the site. English is always on.

English (always on)
Français
Español

Español is off here → the language never appears on the public site, even if it has translations.

Default Language

Shown to first-time visitors before they pick a language.

English
SettingWhat it does
Enabled LanguagesWhich languages appear in the globe menu on the public site. English is always on and cannot be switched off.
Default LanguageThe language shown to a visitor who has never chosen one. Must be one of the enabled languages.

Note: If only English is enabled, the globe menu is hidden from the website completely.

Step 2 — Open the Translations page

Click Translations in the left sidebar, under Settings. The page is split into six sections, each covering a different part of the website.

Translations page — the six sections

Translations

Manage French and Spanish copy for the site. Blank fields fall back to the English content automatically.

Navigation

Open in Studio
Menu labels

Home Page

Open in Studio
Banners + Why GAC items

Warranty Page

Open in Studio
Hero + warranty cards

About Us

Open in Studio
Rich text body

Articles

Open in Studio
One row per article

Vehicles

Open in Studio
One row per vehicle
SectionWhat you translate
NavigationMenu labels in the header, including dropdown items
Home PageBanner titles, descriptions, alt text, and CTA labels — plus each Why GAC item's label, title, body, and bullet points
Warranty PageHero heading and subheading, warranty cards, partner names
About UsThe main body text
ArticlesHeadline, summary, and body of each news article
VehiclesBanner, design, exterior, performance, interior, safety feature, and contact text for each vehicle

Each section also has an Open in Studio ↗ link in its top-right corner. You only need it for the rare cases noted further down — the admin panel handles everyday translating.

Step 3 — How the side-by-side editor works

Navigation, Home Page, and Warranty all use the same side-by-side layout: an English column you cannot edit, next to a Français column and an Español column.

Side-by-side editor — English never changes

English

Français

Español

Models
Modèles
Modelos
Emkoo
Emkoo
Emkoo
About GAC
À propos
About GAC
Contact Us
Contact Us
Contact Us

Grey italic text is a preview, not a saved value. About GAC has no Spanish, and Contact Us has neither — visitors in those languages see the English words instead.

You have unsaved changes
Save Changes
ColumnMeaning
EnglishRead-only. This is your original text, shown so you know what you are translating. To change it, edit the original page (Navigation, Home Page, Warranty Page).
FrançaisType the French wording here
EspañolType the Spanish wording here

Things to know:

  • The grey placeholder text inside an empty box is a preview of the English fallback, not a saved value
  • The bar at the bottom shows "You have unsaved changes" until you click Save Changes
  • Rows are matched to the English item behind the scenes. If you rename or reorder items on the original page, the translations stay attached correctly
  • On the Navigation section, dropdown children are indented under their parent menu item

Warning: If you clear every field for one language and save, that language's translation is deleted and the site falls back to English everywhere for it. A confirmation box appears first — read it before clicking OK.

These three are edited directly on the Translations page — no dialog, no extra clicks.

SectionFields per row
NavigationMenu label (plus a label for each dropdown child)
Home PageBanners: Title, Description, Alt Text, CTA Label — one group per banner. Why GAC: Label, Title, Body, Bullets — one group per item.
Warranty PageHero Heading, Hero Subheading, then Duration / Coverage, Card Title, Description, Fine Print / Note, and T&C Link Label for each warranty card, plus Partner Name for each partner

Each section has its own Save Changes button. Saving one does not save the others.

Note: The Why GAC Body and Bullets fields are plain text boxes, not a formatting toolbar. Separate body paragraphs with a blank line, and put one bullet per line. Bold, italic, and list formatting from the English version is not carried over — use Open in Studio ↗ for a translation that needs formatting.

Articles and Vehicles

These have too many fields for a flat list, so each one gets a row in a table and opens in a dialog.

Articles & Vehicles — translation status

Title

Published

FR

ES

GAC opens new showroomMar 4, 2026FRTranslatedESTranslated
Edit translations
GS3 Emzoom arrivesFeb 19, 2026FRTranslatedESMissing
Edit translations
Service week promotionJan 30, 2026FRMissingESMissing
Edit translations
  1. Find the article or vehicle in the table (vehicles have a search box — search by name or series)
  2. Read the FR and ES pills: green Translated means a translation exists, grey Missing means it does not
  3. Click Edit translations
  4. Fill in the French and Spanish columns
  5. Click Save Changes

Note: "Translated" only means something has been filled in — not that every field is done. A vehicle with one translated banner still shows the green pill.

Inside the vehicle dialog, the fields are grouped into collapsible sections: Banners, Design, Exterior, Performance, Interior, Safety Features, Contact. Click a heading to open it. Sections the vehicle has no English content for are hidden, so a shorter dialog simply means a shorter vehicle. Each Safety Feature has its own English/French/Spanish description panels, since safety descriptions use rich text rather than plain fields.

The article dialog has a Title and Summary box per language, then the article body underneath in the same rich-text editor described below.

Translating rich text (About Us, article bodies, and Safety Features)

Long-form text uses a different editor with a formatting toolbar.

About Us, article bodies & Safety Features — rich text

English (reference) — read only
French
B
I
H2
Spanish
B
I
H2

Links and images are not carried over by this editor — text blocks only. Use Open in Studio for translations that contain them.

  1. Read the English (reference) panel — it is read-only, purely so you can see what you are working from
  2. Type the translation into the French and Spanish panels below it
  3. Use the toolbar for bold, italic, headings, and lists (Safety Feature descriptions omit headings — bold, italic, and lists only)
  4. Click Save Changes

Warning: This editor handles text only. Links and images in the English version are not copied across and cannot be added here. If the text you are translating contains a link or an inline image, use Open in Studio ↗ for that piece instead.

What visitors see

Once a language is enabled, a globe icon appears in the website header.

What the visitor sees

GAC
ModelsServiceContact Us
English
Français
Español
  • Clicking it opens the language list, with a tick beside the current language
  • The choice is remembered for one year, so returning visitors stay in their language
  • On mobile, the same list appears inside the hamburger menu
  • Any text you have not translated shows in English — the page never comes up blank

Worked example — translating one menu item

  1. Go to Site Config → Localisation and turn on Français, then Save Changes
  2. Go to Translations
  3. In the Navigation section, find the row where the English column reads Models
  4. Type Modèles in the Français box
  5. Click Save Changes — the bar turns green and reads Changes saved
  6. Open the public website, click the globe, choose Français
  7. The menu now reads Modèles. Every other menu item is still English, because you have not translated those yet — exactly as intended

Troubleshooting

ProblemCause and fix
The globe icon is missing from the websiteOnly English is enabled. Turn on French or Spanish in Site Config → Localisation → Enabled Languages.
I switched language but the text is still EnglishThat field has not been translated yet. A blank field always falls back to English. Check the box is filled in and saved.
I typed a translation but nothing changedYou did not click Save Changes for that section. Each section saves separately.
I saved but the website still shows the old wordingWait about 30 seconds and reload. If it persists, run a cache refresh — see 3a. Cache Refresh.
My French translations vanishedA save with every field emptied deletes that language's translation. Re-enter the text and save again.
A link or image disappeared from my translated articleThe rich text editor does not carry links or images over. Use Open in Studio ↗ for that article.
A vehicle section is missing from the dialogThe vehicle has no English content for that section. Add it on the Vehicles page first, then translate it.

13. Tips & Common Tasks

How to upload an image

Every image field works the same way:

  1. Click the upload area or "Click to upload image" button
  2. Either:
    • Click "Browse files" and select a file from your computer, or
    • Drag and drop the image file onto the upload area
  3. Wait for the upload to complete (a progress bar is shown)
  4. After uploading, the image preview is displayed

Image upload field

Before upload
🖼
Browse files
After upload
Replace image
  • Click to remove the image
  • Click "Replace image" to swap it with a different file
  • Accepted formats: JPG, PNG, WEBP, GIF

How to generate a slug

The Slug is the URL-friendly version of a title (e.g. the slug for "Tiggo 9" is tiggo-9).

  • Slugs are auto-generated when you enter a title — you do not need to type them
  • Click "Generate" next to the slug field if it does not auto-fill
  • Do not edit slugs after a page is live — changing a slug changes the URL, which breaks existing links and bookmarks

Title and Slug fields

Title
Tiggo 9
Slug
tiggo-9
Generate

How to find a hex color code

A hex color code is a # followed by 6 characters, e.g. #BE8751.

  • Go to htmlcolorcodes.com and use the color picker
  • Or search online: pearl white hex code

How to quickly check what is on the website

The Dashboard (click "Dashboard" in the sidebar) shows:

  • Total article count and featured article count
  • Total vehicle count
  • Color counts
  • Recent articles and vehicles
  • Login activity for the last 7 days

14. Sync

The Sync page lets you copy all published content from this project (the source) to one or more other Sanity projects (destinations). This is useful for keeping a staging site, a regional copy, or any connected project up to date without manual exports or developer involvement.

Where to find it

Click Sync under the Tools section in the sidebar.

What you see on the page

Sync page

2 destinations configured  ·  Syncing from abc123 / production
Sync All
Source — this projectabc123 / production142 published docs
Stagingxyz789 / staging138 / 142 synced
Partial
Sync Now
Regional Copy...142 / 142 synced
In sync
Sync Now

Source card — shows the project ID and dataset this admin panel is connected to, the total number of published documents, and a breakdown by content type.

Destination cards — one card per connected destination. Each card shows:

ElementWhat it means
Project name / IDThe destination project and dataset
In sync badgeAll documents exist in the destination and their content matches the source
Partial badgeSome documents are missing or one or more documents exist in both but have different content
Out of sync badgeNo documents have been synced yet
X / Y documents syncedHow many destination documents exist out of the total source documents
Whitelist tagsWhen shown, only those specific content types are synced to this destination
Schema Objects tablePer-type breakdown — Dest count / Source count, with a tick (identical), a red -N (missing), or an orange N ~ (content changed)

Syncing content

Sync a single destination

  1. Find the destination card you want to update
  2. Click Sync Now
  3. A progress indicator appears below the button showing the current phase (e.g. Checking assets…, Uploading assets 3/12, Writing documents 45/142)
  4. When complete, the button area shows how many documents were synced (e.g. 142 synced) or lists any errors

Sync all destinations at once

Click the Sync All button in the top-right of the page. This runs a sync to every configured destination in sequence and shows a summary when done.

What gets synced

  • All published documents (drafts are never synced)
  • Images and files — any image or file assets referenced by your documents are copied to the destination project first, before the documents are written
  • Content types in the Whitelist (if configured for a destination) — when a whitelist is set, only those types are synced; all others are skipped for that destination

The following internal types are always excluded:

  • Analytics events
  • System documents (system.group, system.retention)
  • Raw asset records (sanity.imageAsset, sanity.fileAsset) — assets are re-uploaded rather than copied as raw records

Reading the progress bar

While a sync is running, a small progress bar appears under the Sync Now button:

Sync progress bar

Uploading assets3 / 12
Writing documents45 / 142

The sync happens in two phases:

  1. Assets — images and files are uploaded to the destination (skipped if already present)
  2. Documents — all content documents are written to the destination

After syncing

  • The destination card badges and counts refresh automatically after each sync without needing a full page reload
  • If the sync shows errors, an error log expands below the button listing the affected document IDs and the reason each failed
  • Only documents that are new or have changed content are written — if everything is already identical, the sync completes instantly with nothing written

Errors

ErrorLikely causeWhat to do
Source credentials not configuredEnvironment variables for the source project are missingContact your system administrator
No SANITY_DEST_TARGETS configuredNo destinations have been set upContact your system administrator
A specific document ID errorThe document has an invalid field or references a type not in the destination schemaContact your system administrator with the error log

Note: The Sync page is a Tools feature intended for administrators. Content managers do not need to use it during normal day-to-day work.


14a. Form Protection

Every public form — contact, call‑back, service request, test drive, model inquiry, lead pages, dealer onboarding — and the chat assistant are protected by an invisible proof‑of‑work check. There is nothing for visitors to click or solve: while they type, their browser quietly performs a small computation and attaches the result to the submission. The server verifies it in a fraction of a millisecond.

Why it works: a human submits one form; a spam script tries to submit thousands. The check costs a second on a phone once, but the price doubles with every extra submission from the same connection within ten minutes, so automated floods grind to a halt while real visitors never notice.

What visitors may see:

MessageMeaningWhat to tell them
We couldn't verify your browser. Please enable JavaScript or contact us by phone.JavaScript is disabled, the browser is very old, or a privacy extension blocked the checkEnable JavaScript or try another browser; take the enquiry by phone
The send button shows a spinner a little longer than usualTheir connection submitted several forms recently, so the check is deliberately slowerWait a few seconds; it completes on its own

Nothing changes in the admin panel. Rejected attempts are recorded in the server logs, not in Sanity.

Developer note: POW_SECRET must be set in production (openssl rand -hex 32); without it protected endpoints refuse all submissions. POW_BASE_BITS tunes the base difficulty (default 16). POW_DISABLED=true switches the check off in development only.


15. Troubleshooting

The Save Changes button is greyed out

There are no unsaved changes — your content is already up to date.

An error message appears after clicking Save Changes

ErrorCauseFix
Required field missingA required field is emptyFill in all required fields (marked with *)
Image upload failedNetwork issue during uploadCheck your internet connection and try again
Save failedThe server could not be reachedRefresh the page and try again; contact your admin if the issue persists

My changes are not showing on the website

  1. Make sure you clicked Save Changes (not just edited the form)
  2. Vehicle and content pages are cached for fast loading. After saving, the cache is automatically cleared — changes typically appear within a few seconds.
  3. Hard-refresh your browser: Ctrl + Shift + R (Windows) or Cmd + Shift + R (Mac)
  4. If the change still does not appear after 30 seconds, contact your system administrator — the automatic cache update (webhook) may not be configured correctly.

I cannot log in

  • Check that Caps Lock is off
  • Click "Forgot password?" on the login page to reset your password
  • Contact your system administrator if the issue persists

A color I created is not appearing in the vehicle color dropdown

Colors must be created and saved before they appear in the vehicle form dropdowns. Go to Exterior Colors or Interior Colors, create the color, then return to the vehicle form.

I accidentally deleted something

Contact your system administrator as soon as possible. Sanity keeps a history of all content — deleted items can often be recovered within a short period.


16. Transactional Emails

The website sends automated emails in response to visitor actions — contact form submissions, service requests, vehicle inquiries, and dealer onboarding submissions. This section describes each email, who receives it, and what information it contains.

All emails share the same visual style: a blue header, gold-accented section titles, and a light footer. The active email provider (Resend, SMTP, or Mailgun) is configured in the server environment and is transparent to the templates — the emails look and behave the same regardless of provider.

Note: Email delivery requires the EMAIL_PROVIDER environment variable and the corresponding API key to be configured by your system administrator.


Contact Form Email

Sent when a visitor submits the Contact Us form found on the main contact page.

Received by: The contact email address configured in CONTACT_EMAIL, with copies sent to the admin email (ADMIN_EMAIL) and any sales CC addresses (NEXT_PUBLIC_SALES_EMAIL_CCS).

Reply-to: Automatically set to the visitor's email address — replying to the email opens a reply directly to the visitor.

FieldDescription
NameVisitor's full name
EmailVisitor's email address
TelephoneVisitor's phone number
MessageThe message submitted by the visitor

Contact form email — received by admin

GAC Website — Contact Form
New Contact Submission
Submitted via the website contact form
Contact Details
Name
Jane Doe
Telephone
+1 721 555 0100
Message
This email was generated by the website contact form.

Service Request Email

Sent when a visitor submits the Service Request form.

Received by: The service department email address configured in NEXT_PUBLIC_SERVICE_EMAIL, with a copy sent to the admin email (ADMIN_EMAIL).

Reply-to: Automatically set to the visitor's email address.

FieldDescription
NameCustomer's full name
EmailCustomer's email address
TelephoneCustomer's phone number
MakeVehicle make (e.g. GAC)
ModelVehicle model name
YearVehicle model year
VINVehicle identification number
License PlateVehicle registration plate
MileageCurrent odometer reading
Additional InformationAny extra notes from the customer (optional — section is hidden when empty)

Service request email — received by service department

GAC Website — Service Department
New Service Request
Submitted via the website service request form
Customer Information
Name
Jane Doe
Telephone
+1 721 555 0100
Vehicle Details
Make
GAC
Model
Tiggo 9
Year
2024
VIN
LVVDB21B8RD123456
License Plate
P-1234
Mileage
12,500 km
Additional Information
This email was generated by the website service request form.

Model Inquiry Email

Sent when a visitor submits the contact form on a vehicle model page (e.g. the Tiggo 9 page).

Received by: The contact email address (CONTACT_EMAIL), with copies to the admin email and any sales CC addresses.

Reply-to: Automatically set to the visitor's email address.

This email includes a Vehicle of Interest section at the bottom containing the vehicle's hero image, model name, price (if pricing is enabled), and direct links to the model page and spec sheet PDF.

FieldDescription
NameVisitor's full name
EmailVisitor's email address
TelephoneVisitor's phone number
MessageThe visitor's inquiry message
Vehicle imageHero image of the model (from Sanity)
Model nameName of the vehicle model
PriceStarting price (only shown if pricing is enabled)
Model page linkLink to the vehicle page on the website
Spec sheet linkLink to the spec sheet PDF (if uploaded in Sanity)

Model inquiry email — received by admin (includes vehicle card)

GAC Website — Vehicle Inquiry
Model Inquiry — TIGGO 9
Submitted via the vehicle model page
Contact Details
Name
Jane Doe
Telephone
+1 721 555 0100
Message
Vehicle of Interest
Vehicle image
TIGGO 9
From NAf. 68,000
View Model Page
Download Spec Sheet
This email was generated by the website vehicle model page.

Model Inquiry Confirmation Email

Sent automatically to the visitor immediately after they submit a model inquiry. This confirms their submission was received and gives them a reference of what they sent.

Received by: The visitor who submitted the form (their email address from the form).

This email is sent in addition to the admin notification — both emails are sent at the same time when the form is submitted.

FieldDescription
Personalised greetingAddresses the visitor by their first name
Submission recapA copy of the contact details and message they submitted
Vehicle cardSame vehicle card as the admin email (image, name, price, links)

Model inquiry confirmation — sent to the visitor who submitted the form

GAC — Vehicle Inquiry
We received your inquiry
TIGGO 9 — someone from our team will be in touch shortly
Hi Jane, thank you for reaching out. We have received your inquiry about the TIGGO 9 and a member of our team will get back to you shortly.
Your Submission
Name
Jane Doe
Telephone
+1 721 555 0100
Vehicle of Interest
Vehicle image
TIGGO 9
From NAf. 68,000
View Model Page
Download Spec Sheet
You are receiving this email because you submitted an inquiry on our website.

Manage cookie consent banner settings for the site. Changes stored in Sanity and take effect on the next page load for new visitors.

Admin location: Admin Panel → Settings → GDPR & Cookies (/admin/gdpr)


SettingDescription
Cookie Banner ActiveToggle to show or hide the consent banner for all new visitors. When off, no consent is requested and no consent record is stored.
Policy VersionVersion string (e.g. 1.0, 1.1). Bumping this re-prompts every visitor to accept or reject cookies — use when your policy materially changes.
Privacy Policy URLURL shown in the banner's policy link. Default: /privacy-policy.

Company name shown in the banner is pulled from Site Config → Company Name — update it there.

GDPR & Cookie Consent — admin page


Controls which optional categories appear in the Cookie Preferences modal.

CategoryConfigurableNotes
Strictly NecessaryNo (always on)Session, security, load balancing
Functional / PreferencesNo (always shown)Language, theme, form autofill
Analytics & PerformanceYesGoogle Analytics, page view tracking
Marketing & AdvertisingYesRemarketing, ad targeting

Toggle Analytics and Marketing on or off from the admin panel. The other two categories are always present in the modal.

Turning off a category in the admin hides it from the modal entirely — visitors can no longer opt in to that category.


  1. First visit — banner appears at the bottom of the screen with three equal-weight buttons: Reject All, Cookie Settings, Accept All.
  2. Cookie Settings — opens the preferences modal where visitors can toggle individual categories.
  3. Consent stored — choice is saved to localStorage (gac-consent) and a first-party session cookie (gac-consent-given).
  4. Version mismatch — if the stored consent version differs from the current policy version, the banner reappears and the visitor must consent again.
  5. Google Analytics — only loads after the visitor consents to the Analytics category.

Privacy Policy Page

A full privacy policy page lives at /privacy-policy. It includes:

  • Detailed explanation of all cookie categories and what they track
  • A cookie table listing specific cookies set by the site
  • An inline Cookie Settings button that opens the preferences modal directly from the page

The page content is hardcoded in src/app/privacy-policy/PrivacyPolicySections.tsx. Update that file to reflect any changes to your actual cookie or data processing practices.



Cookie consent banner — shown to visitors on first visit

Reject All
Cookie Settings
Accept All

18. Analytics

What it controls: Visitor traffic, page engagement, device and country breakdown, and model-specific interaction data collected from the live website.

How to open it

  1. Click "Analytics" in the left sidebar under Tools

18a. Dashboard

The dashboard header shows the total event count and date range for the current view. Use the date range selector (top-right) to switch between the last 7, 30, 60, or 90 days.

KPI cards

Four summary cards appear at the top of the page:

CardWhat it shows
Unique VisitorsNumber of distinct browser sessions in the selected period
Total PageviewsTotal number of page loads recorded
Bounce RatePercentage of sessions that viewed only one page before leaving
Events / VisitorAverage number of page loads per session (e.g. 2.5)

Charts

ChartWhat it shows
Time SeriesLine graph of event volume across each day in the selected range
Model EngagementGrouped bar chart comparing Visits, Spec Sheet Downloads, Form Submissions, and WhatsApp clicks across the top vehicle models

Data tables

The lower half of the dashboard shows breakdowns across multiple dimensions:

TableColumns
Top PagesPage path · Visitors · Pageviews
Top ReferrersSource domain · Visitors · Pageviews
CountriesCountry name · Visitor count · Percentage
DevicesDevice type · Visitor count · Percentage
BrowsersBrowser name · Visitor count · Percentage
Top Model VisitsModel name · Visit count
Spec Sheet DownloadsModel name · Download count
Form SubmissionsModel name · Submission count
WhatsApp Redirects by ModelModel name · Click count

Each row shows a horizontal bar for quick visual comparison.


18b. Data Source Toggle

The File / Sanity / Both toggle at the top of the analytics page controls where event data is read from.

OptionWhat it reads
FileLocal NDJSON archive files only (events stored on the server filesystem)
SanitySanity monthly archive documents only
Both (default)Merges data from both sources and removes any duplicates

When to change it: Leave it on Both for normal use — this gives the most complete picture. Switch to File or Sanity only when you want to verify one source in isolation (e.g. after a migration).


18c. Data Retention

The Data Retention panel appears at the bottom of the analytics page. It helps you manage storage by archiving old events to files and removing them from Sanity, keeping usage below Sanity's 10,000-document limit.

Usage indicator

A colour-coded bar shows how many analytics event documents are currently stored in Sanity:

Bar colourUsage level
GreenBelow 75 % — comfortable headroom
Amber75–89 % — consider archiving soon
Red90 % or above — archive and prune urgently

Cutoff setting

The Cutoff field sets how many days of recent events to keep. Events older than this threshold are the ones archived or pruned.

  • Accepted range: 1–365 days
  • The default is set by the ANALYTICS_RETAIN_DAYS server environment variable (ask your system administrator)
  • Automatic run: Archive + prune runs automatically every Sunday at 03:00 — you only need to trigger it manually if you want to run it outside that schedule

Action buttons

ButtonWhat it does
Archive to FilesWrites events older than the cutoff to monthly NDJSON files on the server. Events remain in Sanity — this is a backup step only.
Prune from SanityPermanently deletes events older than the cutoff from Sanity. Does not create a backup. Run Archive to Files first if you want to keep the data.

Recommended sequence: Click Archive to Files first, verify the result message, then click Prune from Sanity to free up document quota.

Archive files list

Below the action buttons, every existing archive file is listed:

ColumnDescription
FilenameMonthly file name in analytics-YYYY-MM.ndjson format
SizeFile size (shown in B, KB, or MB)
DownloadClick the download icon to save the raw NDJSON file to your computer

Legacy migration (one-time)

If a banner appears saying "Legacy per-event docs in Sanity", the account still has old-style individual event records that predate the current monthly archive structure. Two buttons are shown:

ButtonWhat it does
Consolidate to Monthly DocsGroups the legacy events into monthly Sanity documents (same structure as new events). Deletes the individual records after consolidation. Keeps data in Sanity in the new format.
Copy to Local FilesWrites all legacy Sanity events to NDJSON files and clears them from Sanity entirely. Best if you want to move off Sanity storage completely.

Run either migration once — the banner disappears when no legacy records remain.


19. Application Architecture (Developer Reference)

Audience: This section is for developers building or extending the site. Content managers do not need to read it.

The application follows a strict layered architecture. Each layer has one responsibility. All new features must follow the same pattern.


19a. Layer Overview

┌─────────────────────────────────────────────────────────┐
│  UI Layer  (src/components/, src/app/**/page.tsx)        │
│  React components — renders data, fires user events      │
├─────────────────────────────────────────────────────────┤
│  Page / Server Component Layer  (src/app/**/page.tsx)    │
│  Fetches data server-side, passes props to components    │
├─────────────────────────────────────────────────────────┤
│  API Routes  (src/app/api/**/route.ts)                   │
│  REST endpoints for mutations and client-initiated sends │
├─────────────────────────────────────────────────────────┤
│  Service Layer  (src/lib/)                               │
│  email/, sanity/, auth/, templates, currencies, …        │
├─────────────────────────────────────────────────────────┤
│  Data Layer  (Sanity CMS, Auth0, Email providers)        │
│  Sanity GROQ queries, IEmailProvider, IAuthProvider      │
└─────────────────────────────────────────────────────────┘
LayerLocationResponsibility
UIsrc/components/Renders HTML, handles local state and user input. No direct Sanity or email calls.
Page / Server Componentsrc/app/**/page.tsxRuns server-side. Calls sanityFetch / service functions. Passes data as props.
API Routesrc/app/api/**/route.tsHandles POST / PATCH / DELETE from the browser. Validates input, calls service layer, returns JSON.
Servicesrc/lib/Business logic: email sending, Sanity reads/writes, auth, template rendering. No HTTP concerns.
DataSanity / Auth0 / Email providerExternal systems. Accessed only through service abstractions (IEmailProvider, IAuthProvider).

19b. Example — Contact Form Submission

A user fills in the contact form and clicks Send Message.

Step 1 — UI Component (src/components/forms/contact-form.tsx)

The component fires a fetch to the mail API. It does not know or supply the recipient address — it passes audience: 'sales' so the server resolves who receives it.

const response = await fetch("/api/mail/send", {
  method: "POST",
  body: JSON.stringify({
    audience: 'sales',          // recipient resolved server-side
    subject: "Message from Alice",
    template: "contact",        // maps to src/email-templates/contact.hbs
    variables: { name, email, telephone, message },
  }),
});

Step 2 — API Route (src/app/api/mail/send/route.ts)

// 1. Validates the request body.
// 2. Detects audience === 'sales'.
const { salesEmail, salesEmailCCs } = await getCorrespondenceConfig();
// 3. Renders the Handlebars template.
const html = renderTemplate(template, variables);
// 4. Sends via the active email provider.
await sendMail({ to: [salesEmail, ...salesCCs], subject, html, replyTo: variables.email });

Step 3 — Service: Correspondence Config (src/lib/sanity/getCorrespondenceConfig.ts)

Reads correspondence.salesEmail from the Sanity siteConfiguration document. Validates it looks like a real email address (looksLikeEmail). Falls back to NEXT_PUBLIC_SALES_EMAIL env var if Sanity is empty or invalid.

Step 4 — Service: Email (src/lib/email/index.ts)

Reads the EMAIL_PROVIDER env var. Instantiates the correct provider (Resend, SMTP, or Mailgun). Calls provider.send(input) — the rest of the app never touches provider-specific APIs.

Step 5 — Data Layer

Sanity returns the configured email address. The email provider delivers the message.


19c. Example — Vehicle Model Page

A user navigates to /models/tiggo-7-pro.

Step 1 — Page (Server Component) (src/app/models/[slug]/page.tsx)

// Runs on the server — no client bundle cost.
const [vehicleRes, siteConfigRes] = await Promise.all([
  sanityFetch({ query: getVehicleBySlug, params: { slug } }),
  sanityFetch({ query: getSiteConfiguration }),
]);
const currency = enrichCurrency(
  getCurrency(siteConfigRes.data?.currency),
  siteConfigRes.data?.priceDisplay
);

Step 2 — Service: Sanity Queries (src/lib/sanity/queries.ts)

A GROQ query returns vehicle fields, image URLs, variants, and spec sheets. The result is cached by Next.js ISR and only re-fetched when Sanity fires the /api/revalidate webhook on publish.

Step 3 — Service: Currency (src/lib/currencies.ts)

enrichCurrency() merges the site config custom price format into the CurrencyConfig so PricePill renders "Starting from TTD 249,900" — or a custom prefix/suffix if configured in the Admin → Site Config.

Step 4 — UI Component (src/components/layout/price-pill.tsx)

// Receives the enriched CurrencyConfig as a prop — no Sanity knowledge.
<PricePill price={vehicle.price} currency={currency} />

Step 5 — Data Layer

Sanity CDN serves the cached GROQ result. The page is statically cached by Next.js ISR and only re-rendered when Sanity fires the /api/revalidate webhook.


19d. Adding a New Feature

Scenario: Add a "Finance Calculator" page that reads interest rates from Sanity and renders a client-side form.

StepFile to create or editWhat to do
1 — Sanity schemaschemas/finance-rates.tsAdd a new document type with rate, term, minDeposit fields
2 — GROQ querysrc/lib/sanity/queries.tsAdd getFinanceRates query
3 — TypeScript typesrc/types/finance-rates.tsAdd FinanceRates interface matching the schema
4 — Pagesrc/app/finance/page.tsxServer component: fetch rates via sanityFetch, pass to the calculator
5 — UI Componentsrc/components/finance/FinanceCalculator.tsxClient component ("use client"): receives rates as props, handles local state
6 — Admin API (if editable)src/app/api/admin/finance-rates/route.tsPATCH endpoint: validate body, write to Sanity via client.patch(), call revalidatePath
7 — Admin UI (if editable)src/app/admin/finance-rates/page.tsxAdmin form: fetch current rates server-side, POST changes to the API route

Rule: The server component owns data fetching. The client component owns interactivity. The API route owns mutation. The service layer owns the external call. Never skip a layer.


Last updated: July 2026 — added Application Architecture section (19), updated Table of Contents

GAC

GAC Caribbean — Admin User Manual