Just Track It Website Owner's Manual
This is the complete operating guide for managing your website content through the CMS. It explains how the site is designed, how visitors move through it, and exactly how each CMS area maps to what customers see.
I. Quick Start Guide
Purpose: Get unblocked immediately for urgent content changes.
Access the CMS
Navigate to /keystatic route and sign in with your GitHub account.
Emergency Contact
For technical issues that block CMS access or publishing, escalate immediately to the development team with a screenshot and description.
5 Most Common Tasks
- Create/Edit an Event: Go to Events collection → Create or select existing → Fill required fields (slug, title, track, dates, pricing, run groups) → Save
- Update Homepage Hero Text: Go to Home Page singleton → Scroll to Hero section → Edit title/subtitle/button text → Save
- Add/Edit FAQ Question: Go to FAQ collection → Select category or create new → Add question/answer pairs → Save
- Update Contact Form Fields: Go to Contact Page singleton → Edit formFields section → Update labels/placeholders/subject options → Save
- Manage Track Information: Go to Tracks collection → Select track → Update name/location/stats/features → Save
Preview & Publish Workflow
- Make your edits in Keystatic CMS
- CMS creates a feature branch (naming:
cms/*,content/*, orkeystatic/*) - Create a Pull Request from your branch
- Add CMS Preview Evidence section to PR body:
- Preview URL:
https://...(deployed preview link) - Checkbox:
- [x] I reviewed/verified...
- Preview URL:
- Wait for all CI checks to pass (verify, E2E, security, validation)
- Get code owner approval (if required)
- Merge to publish changes live
II. Understanding the Website
Business Logic
The site is built around a guided customer conversation:
- Introduce: Homepage explains value quickly and routes visitors to high-intent pages
- Clarify: Events, tracks, FAQ, requirements remove uncertainty
- Build Trust: Partners, testimonials, media, stats provide social proof
- Invite Action: Clear CTAs make the next step easy
Complete Page Inventory
The website has approximately 30 pages organized by category:
Core Marketing
/- Home page/about.html- About page/contact.html- Contact page/partners.html- Partners page
Events
/events.html- Events list/events/[slug].html- Individual event detail pages
Tracks
/tracks.html- Track overview/tracks/[trackId]/guide.html- Individual track guides (5 tracks)
Education
/getting-started.html- Getting started guide/run-groups.html- Run groups page/faq.html- FAQ page
Programs
/ladies-intro.html- Ladies intro program/gift-cards.html- Gift cards/track-pass.html- Track pass/referral-program.html- Referral program/instructors.html- Instructor requirements
Requirements & Documentation
/requirements.html- Driver and vehicle requirements/media.html- Media and press
Legal
/privacy.html- Privacy policy/terms.html- Terms and cancellation policy
Recent Major Changes (February 2026)
Removed Features:
- HPD event type - Simplified to standard events only
- Newsletter feature - Removed completely
- NCM Motorsports track - No longer available
Added Features:
- Home Page singleton - Fully CMS-configurable homepage
- Contact Page singleton - Complete contact form customization
- Ladies Intro Page singleton - Dedicated program landing page
- About Page singleton - Full about page configuration
- Getting Started Page singleton - Complete getting started content
- Asset Library collection - Social media asset management
- Per-event images - Events can now have custom hero images
Updated Features:
- Event schema simplified to
eventProfilefield with standard type only - Homepage section reordering and improved layout
- Track guide hero backgrounds use track images
- Image display fixes to prevent squishing
III. CMS Fundamentals
What is Keystatic?
Keystatic is a GitHub-backed CMS that stores all content as structured files in the repository.
- Local mode: Edit content locally during development
- Production mode: Edit content through GitHub authentication
- Branch-based workflow: All edits create feature branches → PRs → merge to publish
Collections vs Singletons
Collections: Repeatable content with multiple entries
- Events - Multiple event records
- Tracks - Multiple track records
- Track Guides - Long-form track content
- Partners - Multiple partner records
- FAQ - Multiple FAQ categories
- Run Groups - Multiple run group definitions
- Asset Library - Social media assets
Singletons: Single source of truth for site-wide or page-specific content
- Home Page - Homepage configuration
- Contact Page - Contact page configuration
- About Page - About page configuration
- Getting Started Page - Getting started content
- Ladies Intro Page - Ladies program landing page
- Navigation - Header/footer menus
- Company Info - Business details and Formspree endpoint
- Requirements - Driver/vehicle requirements
- Instructor Requirements - Instructor qualifications
- Track Pass - Track pass offer
- Referral Program - Referral structure
- Gift Cards - Gift card messaging
- Media - Press and media features
- Cancellation Policy - Refund policy
- Stats - Homepage stats
- Testimonials - Customer testimonials
- Ladies Program - Ladies program teaser (homepage)
- Community Section - Community messaging (homepage)
- Event Detail Defaults - Shared event page content (schedule, requirements, insurance)
Total CMS Areas: 26 (7 collections + 19 singletons)
CMS Governance
All CMS changes must follow these rules:
Branch Naming Policy
Use one of these prefixes:
cms/*- CMS content changescontent/*- Content updateskeystatic/*- Keystatic-related changes
Preview Evidence Requirements
Every PR must include:
- Section heading:
## CMS Preview Evidence - Preview URL:
Preview URL: https://... - Verification checkbox:
- [x] I reviewed/verified the changes in the preview
Code Owner Approval
Some changes require approval from designated code owners (defined in CODEOWNERS file).
CI Checks That Must Pass
- Verify check: Linting, formatting, type checking, unit tests
- E2E tests: End-to-end browser tests
- Security scan: Secret detection via Gitleaks
- CMS validation: Schema validation and governance checks
Field Types & Validation
Common Field Types
- Text: Single-line text input
- Number: Numeric values (prices, counts)
- Date: ISO format dates (YYYY-MM-DD) with date picker
- Select: Single choice from dropdown
- Multiselect: Multiple choices (e.g., run groups available)
- Relationship: Link to another collection (e.g., event → track)
- Image: Image upload with path configuration
- Checkbox: Boolean true/false
- Markdoc: Markdown editor with Markdoc extensions
- Object: Nested group of fields
- Array: Repeatable field groups
Custom Features
- Color Palette Picker: Run Groups use a custom color picker with approved brand colors
- Locked ID Fields: Track ID and Partner ID are read-only after creation (rename entry to change)
- Conditional Fields: Event profile shows different fields based on event type
Validation Rules
| Field Type | Validation Rule | Example |
|---|---|---|
| Slug/ID | Lowercase letters, numbers, hyphens only | mid-ohio-june-2026 |
| Date | YYYY-MM-DD format, valid calendar date | 2026-06-15 |
| External URL | Must use https:// scheme | https://example.com |
| Navigation href | Relative path, https://, mailto:, or tel: | /events, mailto:info@example.com |
| Run Groups (standard) | Must include "instructor", cannot include "open" | ["instructor", "advanced", "intermediate"] |
| Event dates | End date must be on or after start date | Start: 2026-06-15, End: 2026-06-16 |
IV. Collections Deep-Dive
Collections are repeatable content types where you can create multiple entries.
Events (13 entries)
1. Events Collection
Purpose: Manage individual track day events with dates, pricing, registration, and track details.
Where it displays: /events.html (list), /events/[slug].html (detail), homepage event highlights
Key Fields
| Field | Type | Required | Description |
|---|---|---|---|
slug | text | ✓ | URL-safe identifier (5-80 chars, kebab-case). Automation can generate this. |
title | text | ✓ | Event display name (e.g., "Mid-Ohio June 2026") |
subtitle | text | Optional tagline or subheading | |
trackId | relationship | ✓ | Link to track record. Select from dropdown. |
location | text | ✓ | Location string (e.g., "Lexington, OH") |
dates.start | date | ✓ | Event start date (YYYY-MM-DD) |
dates.end | date | ✓ | Event end date (must be on or after start) |
duration | text | ✓ | Human-readable duration (e.g., "2 Days") |
eventProfile | conditional | Event type configuration (only "standard" available) | |
eventProfile.standard.pricing.base | number | ✓ | Base event price |
eventProfile.standard.pricing.instructorFee | number | ✓ | Additional fee for instructor participants |
eventProfile.standard.pricing.coDriverFee | number | ✓ | Additional fee for co-driver registration |
eventProfile.standard.runGroupsAvailable | multiselect | Run groups available at this event. Must include "instructor", cannot include "open". | |
eventProfile.standard.runGroupsSoldOut | multiselect | Run groups that are sold out (must be subset of available) | |
specialPrograms | array | Additional programs (e.g., Ladies program). Each has name, price, day, description, discount. | |
hotel | object | Hotel information (name, rate, booking deadline) | |
camping | text | Camping availability info | |
soundLimit | text | Track sound limit (e.g., "103 dB") | |
schedule | array | Custom event schedule (time, activity). Overrides the default sample schedule if present. | |
status | select | ✓ | open | selling-fast | sold-out |
image | image | Optional per-event hero photo. Falls back to track image if empty. | |
featured | checkbox | ✓ | Display on homepage highlights |
charitable | checkbox | ✓ | Charitable event flag |
registrationUrl | text (https) | ✓ | External registration link (must be https://) |
Event Workflow
- Open Events collection
- Click Create (or select existing event to edit)
- Apply template if offered (sets defaults)
- Fill required fields:
- Slug (automation can generate)
- Title and location
- Select track from dropdown
- Set start/end dates using date picker
- Set duration
- Configure event profile:
- Event Type: "Standard" (only option)
- Pricing: base, instructor fee, co-driver fee
- Run Groups Available: select from multiselect (must include "instructor", cannot include "open")
- Run Groups Sold Out: select subset of available (optional)
- Add special programs (optional): Ladies program, co-driver sessions, etc.
- Add hotel/camping info (optional)
- Add custom schedule (optional) - overrides default sample schedule if present
- Upload event image (optional) - falls back to track image if empty
- Set status: open | selling-fast | sold-out
- Set featured checkbox (for homepage display)
- Add registration URL (must be https://)
- Save
Verification Checklist
- Check event list page:
/events.html - Check event detail page:
/events/[slug].html - Verify pricing displays correctly
- Verify dates format correctly
- Verify run groups available/sold out display
- Test registration link opens correct external site
- If featured, check homepage event highlights section
Create Event
2. Tracks Collection
Purpose: Define track records with location, stats, features, and accommodations.
Where it displays: /tracks.html, referenced on event detail pages, track guides
Key Fields
| Field | Type | Required | Description |
|---|---|---|---|
id | text (locked) | ✓ | System identifier. Read-only after creation. Rename entry to change. |
name | text | ✓ | Track display name |
displayName | text | Optional alternate display name | |
location | text | ✓ | Location string |
description | text | ✓ | Short track description |
overview | array | Array of overview paragraphs | |
length | text | ✓ | Track length (e.g., "2.4 miles") |
turns | number | ✓ | Number of turns |
soundLimit | text | Sound limit if applicable | |
camping | text | ✓ | Camping availability |
notes | text | Additional notes | |
image | image | ✓ | Track photo (used as background for track guide hero) |
stats | array | Track stats (value, label pairs) | |
features | array | Track features list | |
website | text (https) | Track website URL (optional) | |
directions | text | Directions text | |
map | image | Track map image (upload via CMS) | |
accommodations | array | ✓ | Nearby accommodations (name, rate, distance, notes) |
Special Behaviors
- Locked ID field: The
idfield is read-only after creation. To change it, rename the entire entry. - Track-event relationship: Events reference tracks via
trackIdrelationship field. - Track guide hero backgrounds: The track
imageis used as the background for track guide hero sections.
/tracks.html page and any events that reference this track.
3. Track Guides Collection
Purpose: Long-form instructional content for each track.
Where it displays: /tracks/[trackId]/guide.html
Key Fields
| Field | Type | Required | Description |
|---|---|---|---|
slug | text | ✓ | Must match track ID for routing |
heroImage | image | Background image for track guide hero section (optional, falls back to track image) | |
content | markdoc | ✓ | Markdown content with Markdoc extensions |
Markdown Editing
Track guides use Markdoc, an extended markdown format. You can use:
- Headings:
# Heading 1,## Heading 2, etc. - Lists: Bulleted and numbered
- Links:
[Link text](URL) - Bold/italic:
**bold**,*italic* - Code blocks: Triple backticks
- Blockquotes:
> Quote text
4. Partners Collection
Purpose: Partner logos and offers for sponsors/affiliates.
Where it displays: /partners.html, homepage partner strip
Key Fields
| Field | Type | Required | Description |
|---|---|---|---|
id | text (locked) | ✓ | System identifier. Read-only after creation. |
name | text | ✓ | Partner name |
category | text | ✓ | Partner category (e.g., "Automotive", "Insurance") |
description | text | ✓ | Partner description |
url | text (https) | ✓ | Partner website URL |
logo | image | ✓ | Partner logo (uploaded to /assets/images/partners) |
offer | text | Special offer text for members |
Partner Ordering
Partners are ordered on the homepage by prominence. The order is defined in the homepage implementation based on partner IDs.
5. FAQ Collection
Purpose: Frequently asked questions organized by category.
Where it displays: /faq.html
Key Fields
| Field | Type | Required | Description |
|---|---|---|---|
slug | text | ✓ | URL-safe identifier for the FAQ category |
category | text | ✓ | Category name (e.g., "Getting Started", "Registration", "On-Track", "Safety") |
questions | array | ✓ | Array of Q&A pairs (question, answer) |
FAQ Best Practices
- Write questions in the customer's voice (how they would actually ask)
- Keep answers concise and direct
- Use 1-3 sentences for simple questions, 1-2 short paragraphs for complex ones
- Group related questions in the same category
- Test on mobile - accordion UI collapses by default
6. Run Groups Collection
Purpose: Define run group classifications with experience levels, passing rules, and features.
Where it displays: /run-groups.html, event detail pages, getting started page
Key Fields
| Field | Type | Required | Description |
|---|---|---|---|
id | text (locked) | ✓ | System identifier (e.g., "instructor", "advanced"). Read-only. |
name | text | ✓ | Full run group name |
shortName | text | ✓ | Abbreviated name for compact displays |
color | palette picker | ✓ | Brand color from approved palette (custom UI) |
experienceRequired | text | ✓ | Experience level description |
description | text | ✓ | Run group description |
passingRules | text | ✓ | Passing rules for this group |
features | array | ✓ | Feature list |
additionalFee | text (nullable) | Additional fee if applicable (empty string transforms to null) | |
details | array | ✓ | Detail cards (label, value, icon) |
comparison | object | ✓ | Comparison table data (experience, passingRules, instructor, fee) |
Color Palette Picker
The color field uses a custom palette picker UI that displays approved brand colors with visual swatches. This ensures run group colors stay consistent with the site design.
Select a brand color for this run group. The selected color appears on badges, cards, and comparison tables.
Currently selected: Navy (used by Advanced group)
7. Asset Library Collection
Purpose: Manage social media assets (images and videos) imported from Instagram.
Where it displays: Not currently displayed on public pages; used for asset management.
Key Fields
This collection is auto-generated by the asset sync script and is not typically edited manually. It contains:
source- Platform, account, and generation metadatatotals- Aggregate stats (posts, images, videos, bytes)posts- Array of posts with media items, captions, hashtags
V. Singletons Deep-Dive
Singletons are single-source-of-truth content areas for site-wide or page-specific configuration.
Singletons Overview
Singletons have exactly one entry each. Click any singleton to edit its content. Changes affect the corresponding page or site-wide element.
12 Standard — Requirements, Instructors, Track Pass, Referral, Gift Cards, Media, Cancellation, Stats, Testimonials, Ladies Program, Community, Event Detail Defaults
High-Priority Singletons (Full Documentation)
1. Home Page Singleton
Purpose: Complete homepage configuration including SEO, hero, sections, and CTAs.
Where it displays: / (homepage)
Sections Overview
- SEO: Page title, meta description, Open Graph tags, Twitter cards, canonical URL, schema.org structured data
- Organization: Schema.org Organization data (name, logo, founding date, geo location, aggregate rating)
- Hero: Badge text, title (line one + accent line), subtitle, primary/secondary button text and links
- Upcoming Events: Section labels, view all link, event card labels
- Why Section: 4 cards with Lucide icons, titles, and text
- Getting Started CTA: Title, text, button
- Run Groups Section: Labels, link to run groups page
- Testimonials Section: Labels, featured media link text
- Ladies Section: Badge, title, text, button, image alt text, placeholder
- Community Section: Badge, title, image alt text, placeholder
- Partners Section: Label, link to partners page
Hero Section
Hero Section Accent Styling
The hero titleAccent field displays in a highlighted color to draw attention. Use it for the key differentiator (e.g., "Professional HPDE").
Verification Steps
- Check all sections on live homepage
- Verify hero title/subtitle/buttons
- Verify upcoming events section pulls from events collection
- Verify why cards display with correct icons (Lucide icon names)
- Verify testimonials section pulls from testimonials singleton
- Verify ladies section (note: currently uses placeholder logic if no image)
- Verify community section (note: section hidden if no highlights)
- Verify partners strip pulls from partners collection
- Test SEO tags in browser inspector (View Source → <head>)
2. Contact Page Singleton
Purpose: Configure contact form fields, validation messages, success/error states, and info cards.
Where it displays: /contact.html
Sections Overview
- SEO: Page metadata (same structure as home page)
- Hero: Page title and subtitle
- Form Section: Form title, intro text, success/error titles and messages, retry button text
- Form Fields: Field labels (first name, last name, email, subject, message), placeholders, submit button text, subject dropdown options
- Info Cards: Email card, events card (title, text, link), FAQ card (title, text, link)
- Social: Social card title/text, Facebook URL, Instagram URL
- Validation Messages: Required field, email validation, submit errors, timeout/network errors
Form Submission Flow
The contact form submits to the Formspree endpoint defined in Company Info singleton (formspreeEndpoint field). If form submission fails, check that endpoint is correct.
Subject Dropdown Options
The formFields.subjectOptions array is repeatable. Each option has value (internal) and label (displayed to user).
Verification Steps
- Check contact page layout and hero
- Verify all form field labels display correctly
- Test form submission with valid data (should show success message)
- Test form validation errors (leave fields empty, enter invalid email)
- Verify info cards display correct text and links
- Verify social links go to correct Facebook/Instagram profiles
Form Fields
Form submits to Formspree endpoint defined in Company Info singleton
3. Ladies Intro Page Singleton
Purpose: Complete ladies program landing page configuration.
Where it displays: /ladies-intro.html
Sections Overview
- Hero: Badge, title, subtitle
- Feature Image: Image upload and alt text
- Pricing: Program name, price, features array (title + description), CTA text and link
- Perfect For: Heading, subtitle, cards with icons
- Schedule: Title, subtitle, timeline items (time + activity)
- Requirements: Heading, subtitle, cards with icons, requirements page link
- Bonus: Title and text
- CTA: Title, text, button text/link, optional note
Feature Image Upload
Upload feature image to /assets/images. Provide descriptive alt text for accessibility.
Pricing Card Features
The pricing.features array is repeatable. Each feature has title and description. These display as checkmark list items in the pricing card.
Verification Steps
- Check full page layout and all sections
- Verify feature image displays correctly (not squished or stretched)
- Verify pricing card shows correct price and features
- Verify schedule timeline displays in order
- Verify requirements cards and link to requirements page
- Test pricing CTA button and final CTA button
Pricing Section
Price and features from the Pricing section; CTA links to registration URL
4. About Page Singleton
Purpose: Configure about page hero, story, stats, values, track cards, and CTA.
Where it displays: /about.html
Sections Overview
- Hero: Title and subtitle
- Story: Heading and paragraphs array
- Stats: Stats array (value + label pairs)
- Values: Heading, subtitle, items array (icon, title, text)
- Tracks: Heading, subtitle, items array (trackId relationships)
- CTA: Title, text, button text/link
Track Cards Ordering
The tracks.items array defines the order of track cards on the about page. Each item has a trackId relationship to a track record.
5. Getting Started Page Singleton
Purpose: Configure getting started guide with sections for what you need, before event, event day, register, and CTA.
Where it displays: /getting-started.html
Sections Overview
- Hero: Title and subtitle
- What You Need: Heading, intro, cards array (icon, title, text), convertible alert (title, text)
- Before Event: Heading, intro, checklist array (title, text)
- Event Day: Heading, intro, timeline array (title, text)
- Register: Heading, paragraphs array
- CTA: Title, text, button text/link
6. Navigation Singleton
Purpose: Configure all navigation menus (header, mobile, footer).
Where it displays: All pages (site-wide)
Navigation Sections
- Main: Desktop header navigation
- Mobile: Mobile menu navigation
- Secondary: Secondary navigation area
- Programs: Programs dropdown or section
- Dropdown Labels: Display names for dropdown menus (Getting Started, Programs, About)
- Mobile CTA: Mobile menu call-to-action button (text, link)
- Footer: Brand text, copyright name, column headings, quick links, programs, company, our tracks, legal, social (with icons)
Href Validation
Navigation hrefs accept:
- Relative paths:
/events,/about - HTTPS URLs:
https://example.com - Mailto links:
mailto:info@example.com - Tel links:
tel:+1234567890
Verification Steps
- Check header navigation on desktop
- Check mobile menu on small screen
- Check footer on multiple pages
- Test all links open correct destinations
- Verify social icons display correctly
7. Company Info Singleton
Purpose: Business details, mission statement, Formspree endpoint, highlights, safety credentials.
Where it displays: /about.html, /contact.html, footer
Key Fields
| Field | Type | Required | Description |
|---|---|---|---|
name | text | ✓ | Company name |
tagline | text | ✓ | Company tagline |
founded | text | ✓ | Founding year |
region | text | ✓ | Operating region |
eventCount | text | ✓ | Annual event count |
email | text | ✓ | Public contact email |
formspreeEndpoint | text (https) | ✓ | Formspree form submission endpoint (required for contact form) |
registrationPlatform | text | ✓ | Registration platform name |
mission | text | ✓ | Mission statement (displayed on about page) |
highlights | array | ✓ | Company highlights list |
safetyCredentials | array | ✓ | Safety credentials list |
Formspree Endpoint
The contact form submits to this endpoint. Only change it when migrating to a new Formspree form. Test thoroughly after changing.
Standard Singletons (Brief Documentation)
8. Requirements Singleton
Purpose: Driver and vehicle requirements.
Where it displays: /requirements.html
driver- Age, license, helmet, passengersvehicle- General requirements, convertibles, open cockpit arraysdocumentation- Required documentation array
9. Instructor Requirements Singleton
Purpose: Instructor qualification criteria, benefits, and page content.
Where it displays: /instructors.html
hero- Hero title and subtitlecertifications- Required certifications arrayexperience- Experience requirements arrayexpectations- Expectations arraybenefits- Benefits of being an instructor arraybenefitCards- Benefit card grid (icon, title, text)trainingDescription- MSF training program descriptiontrainingFeatures- Training features arraycta- Call to action title and text
10. Track Pass Singleton
Purpose: Track pass value, pricing, and offer content.
Where it displays: /track-pass.html
name,price,period,descriptionheroSubtitle- Hero subtitle textbenefits- Array of benefits (title, description)valueCards- Why Track Pass cards (icon, title, text)savingsExamples- Savings calculator grid (events count, savings text)savingsNote- Savings calculator footnotenoMembershipNote- No-membership-required note (title, text)partnerDiscounts- Checkbox for partner discount inclusionregistrationUrl- External registration link
11. Referral Program Singleton
Purpose: Referral structure and terms.
Where it displays: /referral-program.html
name,tagline,descriptionhowItWorks- Steps array (step, title, description)benefits- Referrer and new driver benefitsterms- Terms array
12. Gift Cards Singleton
Purpose: Gift card messaging and purchase info.
Where it displays: /gift-cards.html
name,tagline,description,howToPurchaseoptions- Gift card options array (name, value, description)terms- Terms array
13. Media Singleton
Purpose: Featured media, photography partner, and press contact.
Where it displays: /media.html
title,description,heroSubtitle,pressContactfeaturedSectionTitle,featuredSectionSubtitle- Featured section headingsfeatured- Featured media array (title, type, url, description, year)socialSectionTitle,socialSectionText- Social media section headingssocialMedia- Instagram, Facebook, YouTube URLsphotographyPartner- Partner card (name, description, url, ctaText, section headings)pressSectionTitle,pressSectionText- Press inquiries section headings
14. Cancellation Policy Singleton
Purpose: Refund and credit policy.
Where it displays: /terms.html, event detail pages
moreThan14Days- Policy for 14+ days noticewithin8to14Days- Policy for 8-14 days noticewithin7Days- Policy for <7 days notice
15. Stats Singleton
Purpose: Homepage credibility stats.
Where it displays: Homepage stats section
items- Stats array (value, label, optional icon)
16. Testimonials Singleton
Purpose: Customer testimonials and featured media.
Where it displays: Homepage testimonials section
items- Testimonials array (quote, authorName, authorDetail)featuredMedia- Optional featured media link (label, title, url)
17. Ladies Program Singleton
Purpose: Ladies program homepage teaser content.
Where it displays: Homepage ladies section
description- Program descriptionfeatures- Features arrayimage- Optional image upload
18. Community Section Singleton
Purpose: Community messaging for homepage.
Where it displays: Homepage community section
description- Community descriptionhighlights- Highlights array (title, text)image- Optional image upload
19. Event Detail Defaults Singleton
Purpose: Shared content for all event detail pages (schedule, requirements, insurance, questions).
Where it displays: All event detail pages (/events/[slug].html)
sampleSchedule- Default schedule items (time, activity). Used when an event has no custom schedule.requirements- Requirements checklist arrayrequirementsLinkText- Link text for full requirements pageinsurance- Insurance card (title, text, url, ctaText)pastEventMessage- Message shown on concluded eventspastEventCtaText- Button text below past event messagequestionsTitle,questionsText- Questions sidebar card
schedule field. If an event has a custom schedule, the section title changes from "Sample Schedule" to "Event Schedule."
VI. Common Workflows
Step-by-step guides for the 10 most frequent content tasks.
1. Create a Standard Event
- Open Events collection in Keystatic CMS
- Click Create button
- Apply template if offered (sets default values)
- Fill required fields:
- Slug: Enter URL-safe identifier (automation can generate)
- Title: Event name (e.g., "Mid-Ohio June 2026")
- Track ID: Select track from dropdown relationship
- Location: Location string
- Dates: Start and end dates (use date picker, YYYY-MM-DD)
- Duration: Duration text (e.g., "2 Days")
- Configure event profile:
- Event Type: Select "Standard" (only option)
- Pricing: Base price, instructor fee, co-driver fee
- Run Groups Available: Select from multiselect (must include "instructor", cannot include "open")
- Run Groups Sold Out: Select subset if applicable
- Add special programs (optional): Ladies program, co-driver sessions, etc.
- Add hotel/camping info (optional)
- Upload event image (optional) - if empty, falls back to track image
- Set status: open | selling-fast | sold-out
- Set featured checkbox (for homepage display)
- Add registration URL (must be https://)
- Click Save
- Create PR with preview evidence
- Verify in preview:
- Event list page:
/events.html - Event detail page:
/events/[slug].html - Pricing displays correctly
- Dates format correctly
- Run groups available/sold out display correctly
- Registration link works
- If featured, check homepage event highlights
- Event list page:
- Merge PR to publish
2. Edit Homepage Hero
- Open Home Page singleton
- Scroll to Hero section
- Edit fields:
badgeText- Small badge above titletitleLineOne- First line of titletitleAccent- Highlighted accent linesubtitle- Subtitle textprimaryButtonTextandprimaryButtonHrefsecondaryButtonTextandsecondaryButtonHref
- Click Save
- Create PR with preview evidence
- Preview homepage hero section - take screenshot for before/after comparison
- Risk assessment: High-visibility change, requires stakeholder review
- Get approval before merging
- Merge PR to publish
3. Add/Edit FAQ
- Open FAQ collection
- Select existing FAQ category or create new
- Edit fields:
slug- URL-safe category identifiercategory- Category display namequestionsarray - Add Q&A pairs
- For each question:
- Write question in customer's voice
- Write concise, direct answer (1-3 sentences for simple, 1-2 paragraphs for complex)
- Click Save
- Create PR with preview evidence
- Verify FAQ page readability on desktop and mobile (accordion UI)
- Merge PR to publish
4. Update Contact Form
- Open Contact Page singleton
- Edit formFields section:
- Update field labels (first name, last name, email, subject, message)
- Update placeholders
- Add/remove/edit subject dropdown options
- Update submit button text
- Edit validationMessages section (optional):
- Update error messages for required fields, invalid email, etc.
- Click Save
- Create PR with preview evidence
- Test form in preview:
- Verify all labels display correctly
- Test validation errors (empty fields, invalid email)
- Test successful submission (optional - may send test email)
- Merge PR to publish
5. Manage Track Information
- Open Tracks collection
- Select track to edit
- Update fields:
name,location,descriptionlength,turnsstatsarray - Track stats (value, label pairs)featuresarray - Track features listaccommodationsarray - Nearby hotels (name, rate, distance, notes)image- Track photo (also used as track guide hero background)
- Click Save
- Create PR with preview evidence
- Verify in preview:
- Tracks page:
/tracks.html - Track guide page:
/tracks/[trackId]/guide.html - Any events that reference this track
- Tracks page:
- Merge PR to publish
6. Configure Navigation Menus
- Open Navigation singleton
- Edit navigation sections:
main- Desktop header navigationmobile- Mobile menu navigationfooter- Footer links (quickLinks, programs, company, ourTracks, legal, social)
- For each nav link:
label- Link texthref- Link destination (relative path, https://, mailto:, tel:)icon(for social links) - Icon name
- Click Save
- Create PR with preview evidence
- Risk assessment: Site-wide impact
- Verify on multiple pages:
- Desktop header navigation
- Mobile menu (test on small screen)
- Footer (check all sections)
- Test all links open correct destinations
- Get approval before merging
- Merge PR to publish
7. Add a Partner
- Open Partners collection
- Click Create
- Fill fields:
id- System identifier (locked after creation)name- Partner namecategory- Partner categorydescription- Partner descriptionurl- Partner website (must be https://)logo- Upload partner logooffer- Special offer text (optional)
- Click Save
- Create PR with preview evidence
- Verify in preview:
- Partners page:
/partners.html - Homepage partner strip
- Logo displays correctly
- Link opens correct partner website
- Partners page:
- Merge PR to publish
8. Update Run Group Details
- Open Run Groups collection
- Select run group to edit
- Edit fields:
name,shortNamecolor- Use color palette picker UIexperienceRequired,description,passingRulesfeaturesarrayadditionalFee(optional)detailsarray - Detail cardscomparisonobject - Comparison table data
- Click Save
- Create PR with preview evidence
- Verify in preview:
- Run groups page:
/run-groups.html - Comparison table displays correctly
- Color displays correctly
- Any events that reference this run group
- Run groups page:
- Merge PR to publish
9. Create a Ladies Intro Event
- Open Events collection
- Create standard event (follow workflow #1)
- In specialPrograms array, add entry:
name- "Ladies" or "Ladies Intro"price- Ladies program priceday- Day offered (e.g., "Friday")description- Program descriptiondiscount- Discount amount if applicable
- Save event
- Create PR with preview evidence
- Verify event detail page shows ladies program in special programs section
- Optionally update Ladies Intro Page singleton to link to this event
- Merge PR to publish
10. Edit Track Guide Content
- Open Track Guides collection
- Select track guide to edit (slug must match track ID)
- Edit fields:
heroImage- Optional hero background image (falls back to track image)content- Markdoc editor for long-form content
- In Markdoc editor, use:
- Headings for sections (# Heading 1, ## Heading 2)
- Lists for turn-by-turn guidance
- Bold/italic for emphasis
- Links for references
- Click Save
- Create PR with preview evidence
- Verify track guide page:
/tracks/[trackId]/guide.html - Check hero background image (should use track image if heroImage empty)
- Merge PR to publish
Events collection → Create → Fill fields → Save → PR → Verify list + detail pages
Home Page singleton → Edit section → Save → PR → Get stakeholder approval
FAQ collection → Select category → Add/edit Q&A → Save → PR → Test accordion
Tracks collection → Edit fields → Save → PR → Verify tracks page + events + guide
Navigation singleton → Edit menus → Save → PR → Verify on multiple pages (high risk)
VII. Quality Assurance & Verification
Ensure changes are correct before publishing.
Before You Save Checklist
- ✓ All required fields filled
- ✓ Dates in YYYY-MM-DD format (use date picker)
- ✓ URLs are https:// (where required)
- ✓ Images uploaded and displaying
- ✓ No placeholder text (avoid [PLACEHOLDER:...])
- ✓ Spell check complete
- ✓ Content matches related pages (no conflicting language)
After You Save - Preview Verification
- Create feature branch with correct naming (
cms/*,content/*,keystatic/*) - Deploy preview environment (automatic via CI)
- Check changed pages in preview
- Test interactive elements (forms, links, accordions)
- Mobile responsive check (test on small screen or resize browser)
- Screenshot before/after for PR (especially for high-visibility changes)
High-Risk Changes (Extra Review Required)
| Change Type | Why High-Risk | Extra Steps |
|---|---|---|
| Homepage hero | Highest visibility, affects all visitors | Get stakeholder approval, take before/after screenshots |
| Navigation menus | Site-wide impact, affects every page | Test on multiple pages, verify all links |
| Company info email | Affects contact form, footer display | Test contact form submission after change |
| Event pricing | Financial accuracy critical | Double-check against approved pricing sheet |
| Registration URLs | Must be functional, customers can't register if broken | Click through to external registration platform |
| Formspree endpoint | Breaks contact form if incorrect | Test form submission, verify email delivery |
Multi-Page Verification Matrix
| Change Type | Pages to Check | Specific Elements |
|---|---|---|
| Edit Event | Event detail, events list, homepage (if featured) | Pricing, dates, run groups, registration link, featured badge |
| Edit Track | Tracks page, track guide, events linking to track | Stats, features, accommodations, track image, hero background |
| Edit Home Page | Homepage only (but high visibility) | All sections, partner strip, hero, stats, testimonials, CTAs |
| Edit Navigation | All pages | Header nav, mobile menu, footer (all sections) |
| Edit Company Info | About, contact, footer | Email, mission, highlights, Formspree endpoint |
| Edit Run Groups | Run groups page, events, getting started | Colors, descriptions, comparison table, features |
| Edit Cancellation Policy | Terms page, all event detail pages | Policy text, refund timelines |
PR Checklist (Before Merge)
- ✓ Branch name follows
cms/*,content/*, orkeystatic/*pattern - ✓ PR includes
## CMS Preview Evidencesection - ✓ PR includes
Preview URL: https://...(deployed preview link) - ✓ PR includes
- [x] I reviewed/verified...checkbox - ✓ All CI checks pass (verify, E2E, security, validation)
- ✓ Code owner approval received (if required)
- ✓ Screenshots attached showing before/after (for visual changes)
- ✓ No merge conflicts
VIII. Troubleshooting
Common CMS Errors
| Error Message | Cause | Solution |
|---|---|---|
| "Slug already exists" | Another entry uses this slug | Rename to unique slug (e.g., add date or track name) |
| "Invalid date format" | Date not in YYYY-MM-DD format | Use date picker field or manually format as YYYY-MM-DD |
| "Track not found" | Track relationship broken or deleted | Re-select track from dropdown |
| "Validation failed: must include Instructor" | Standard events require "instructor" run group | Add "instructor" to runGroupsAvailable multiselect |
| "URL must be HTTPS" | External URL uses http:// instead of https:// | Change http:// to https:// |
| "Preview evidence missing" | PR body doesn't have required sections | Add "## CMS Preview Evidence", "Preview URL: https://...", and checkbox |
| "dates.end must be on or after dates.start" | End date is before start date | Correct dates so end >= start |
| "Standard events cannot include 'open' in runGroupsAvailable" | Standard events exclude "open" run group | Remove "open" from runGroupsAvailable |
Build/Deploy Failures
| CI Check Failed | What to Check | How to Fix |
|---|---|---|
| Verify check failed | Build logs for Zod validation errors | Review validation error message, fix field values, push update |
| E2E tests failed | Playwright logs for UI regressions | Check if content change broke expected UI behavior, revert or fix |
| Security scan failed | Secret detected in content (API keys, passwords) | Remove secret immediately, replace with placeholder or env var reference |
| CMS validation failed | Schema mismatch or governance violation | Check field types match schema, verify branch naming, add preview evidence |
When to Escalate to Development
Escalate immediately for these scenarios:
- Breaking schema changes (need new fields, remove fields, change field types)
- Layout/design changes (CSS/styling modifications)
- New page creation (requires Astro page file and routing)
- Custom validation logic (business rules not in CMS)
- Performance issues (slow load times, broken images, large file sizes)
- CMS bugs or crashes (Keystatic errors, data loss)
- CI failures you can't resolve (persistent build errors)
Support Packet Format
When escalating, provide:
- What changed: Specific field/collection edited
- Expected behavior: What you expected to happen
- Actual behavior: What actually happened
- Steps to reproduce: Exact steps to trigger the issue
- Screenshots: CMS interface showing the problem
- Preview URL: Link to preview deployment (if available)
- Browser/device info: Browser version, OS, screen size
- Error messages: Full text of any error messages
IX. Appendices
A. Complete Field Reference
Alphabetical list of all CMS fields across collections and singletons:
Note: This is a condensed reference. See sections IV and V for full field documentation.
Events Collection Fields
slug, title, subtitle, trackId, location,
dates.start, dates.end, duration,
eventProfile.discriminant, eventProfile.standard.pricing.base,
eventProfile.standard.pricing.instructorFee, eventProfile.standard.pricing.coDriverFee,
eventProfile.standard.runGroupsAvailable, eventProfile.standard.runGroupsSoldOut,
specialPrograms, hotel, camping, soundLimit, schedule,
status, image, featured, charitable, registrationUrl
Tracks Collection Fields
id, name, displayName, location, description,
overview, length, turns, soundLimit, camping,
notes, image, stats, features, website,
directions, map, accommodations
Home Page Singleton Fields
seo, organization, hero, upcomingEvents,
whySection, gettingStartedCta, runGroupsSection,
testimonialsSection, ladiesSection, communitySection, partnersSection
Contact Page Singleton Fields
seo, hero, formSection, formFields,
infoCards, social, validationMessages
See sections IV and V for complete field definitions for all collections and singletons.
B. URL Safety Practices
Rules for URL fields in CMS:
Relative Paths (Internal Links)
- Use for internal site links:
/events,/about,/tracks - Always start with
/ - Do not include domain name
HTTPS URLs (External Links)
- Always use
https://scheme, neverhttp:// - Include full URL:
https://example.com/path - Test link opens correct destination
Special URL Schemes
- Mailto:
mailto:info@example.com(navigation links) - Tel:
tel:+1234567890(navigation links)
Forbidden URL Schemes
- ❌ No JavaScript URLs:
javascript:void(0) - ❌ No data URLs:
data:text/html,... - ❌ No file URLs:
file:///path
C. Accessibility Guidelines
Content editors control these accessibility aspects:
Alt Text for Images
- Required for all informational images
- Describe what's in the image concisely (1-2 sentences)
- Avoid "image of" or "picture of" (screen readers announce it's an image)
- For decorative images, use empty alt text
alt=""
Link Text
- Use descriptive link text: "View 2026 Event Calendar" instead of "Click here"
- Link text should make sense out of context
- Avoid "Read more" without context (e.g., "Read more about track requirements")
Heading Hierarchy
- Don't skip heading levels (e.g., don't jump from h2 to h4)
- Use headings for structure, not just for visual styling
- One h1 per page (automatically set by page template)
Color Contrast
- Informational only (handled by CSS)
- Don't rely on color alone to communicate meaning
- Use text labels in addition to color coding
Readability
- Avoid all-caps paragraphs (short headings are okay)
- Keep paragraphs short (3-5 sentences)
- Use lists for steps or comparisons
- Test readability on mobile (single-column, scannable)
D. Markdown Formatting Guide (Track Guides)
Track guides use Markdoc, an extended markdown format. Common syntax:
Headings
# Heading 1
## Heading 2
### Heading 3 Lists
- Bulleted item
- Another item
1. Numbered item
2. Another item Links
[Link text](https://example.com) Bold/Italic
**bold text**
*italic text* Code Blocks
```
Code block content
``` Blockquotes
> Quote text Horizontal Rules
--- E. Glossary
CMS Terms
- Collection: Repeatable content type with multiple entries (e.g., Events, Tracks)
- Singleton: Single source of truth for site-wide or page content (e.g., Navigation, Home Page)
- Slug: URL-safe identifier (lowercase, hyphens, no spaces)
- Relationship: Link between collections (e.g., Event → Track)
- Validation: Rules that enforce correct data format and structure
- Locked field: Read-only field after creation (rename entry to change)
- Multiselect: Field that allows selecting multiple options
- Conditional field: Field that shows/hides based on another field's value
Site Terms
- Event type: Currently only "standard" (HPD removed Feb 2026)
- Run group: Driver classification level (Instructor, Advanced, Intermediate, Novice)
- Track guide: Long-form instructional content for each track
- Hero section: Large prominent section at top of page (title, subtitle, CTA buttons)
- CTA: Call-to-action (button or link prompting user action)
- Markdoc: Extended markdown format for rich content
Workflow Terms
- Branch: Isolated copy of code for making changes
- PR (Pull Request): Request to merge branch changes into main codebase
- Preview: Temporary deployment of branch for testing before publish
- Merge: Combining branch changes into main codebase (publishes changes)
- CI (Continuous Integration): Automated checks that run on every PR (verify, E2E, security)
- Preview evidence: Required PR section with preview URL and verification checkbox
- Code owner: Person/team who must approve changes to specific files
F. Maintenance Recommendations
Weekly Tasks
- Review upcoming events for accuracy and stale details
- Check links added or edited this week
- Scan homepage for outdated content
Monthly Tasks
- Audit homepage highlights, testimonials, stats, and promotional content
- Update FAQ entries based on real customer questions
- Review event list for past events (archive if needed)
- Check partner offers for expiration dates
Quarterly Tasks
- Review policy and requirement pages with current business rules
- Review track information for accuracy (stats, features, accommodations)
- Review template and automation opportunities with development team
- Audit this owner's manual for accuracy (report outdated sections)
Recommended Ownership Model
- One primary content owner (responsible for day-to-day edits)
- One backup reviewer (approves high-risk changes)
- Simple change log for major edits (optional but recommended)
- 30-minute monthly content review meeting
G. Visual Guides Index
Annotated CMS mockups and page layout diagrams are embedded throughout this manual at the relevant sections:
- Section IV — Collections list view, event editor form, event detail page layout, run group color palette picker
- Section V — Singletons list view, Home Page editor and section map, Contact Page editor and form mockup, Ladies Intro editor and pricing card
- Section VI — Content change workflow (4-stage), common task quick reference
Last updated: 2026-02-18 | Document version: 2.1 | Covers site state as of Feb 2026