Skip to content

Marketing Landing Site Map

Hierarchical map of every public page served from www.objectuve.com. Companion to the consumer site-map.md and admin admin-site-map.md.

Scope: the static marketing landing (marketing_landing/) only. The hosted consumer app at app.objectuve.com is mapped in site-map.md.

Source of truth: marketing_landing/ directory + marketing_landing/sitemap.xml. Regenerate this doc whenever a top-level page or a major in-page section is added, removed, or renamed. Render PNG export with cd docs_site && npm run docs:diagrams.


Legend

flowchart LR
  top(["Top-level page"]):::page
  section["In-page section (anchor)"]:::section
  policy(["Policy page"]):::policy
  outbound["Outbound handoff"]:::outbound
  dev(["Dev / internal page"]):::dev

  classDef page fill:#fef3c7,stroke:#d97706,color:#78350f
  classDef section fill:#fef9c3,stroke:#a16207,color:#713f12
  classDef policy fill:#e0f2fe,stroke:#0284c7,color:#0c4a6e
  classDef outbound fill:#fce7f3,stroke:#be185d,color:#831843
  classDef dev fill:#e5e7eb,stroke:#6b7280,color:#1f2937
  • Top-level page — one of the five pages in sitemap.xml plus meet-coach (the conversion sub-page).
  • In-page sectionid="…" anchor reachable via the global nav or footer.
  • Policy pagepolicies/*.html, all rendered from the same template family.
  • Outbound handoff — leaves the marketing site for app.objectuve.com or mailto:.
  • Dev / internal page — present in the deploy artifact but not listed in sitemap.xml (e.g., logo evolution showcase).

Site map

flowchart TD
  Root(["www.objectuve.com/"]):::page

  subgraph Index["/ — landing page (index.html)"]
    direction TB
    Hero["Hero (top of page)"]:::section
    Story["#story"]:::section
    Features["#features"]:::section
    Manifesto["Manifesto (dark band)"]:::section
    Gamification["#gamification (Rewards)"]:::section
    TeamsShowcase["#teams-showcase"]:::section
    Pricing["#pricing"]:::section
    TeamsPricing["#teams (Phase 7 Teams panel)"]:::section
    FAQ["#faq"]:::section
    Connect["#connect (waitlist CTA)"]:::section
  end

  MeetCoach(["/meet-coach"]):::page
  subgraph MC["meet-coach.html sections"]
    direction TB
    MCIntro["Intro (top)"]:::section
    MCAnatomy["Anatomy of a Coach"]:::section
    MCPersonas["Personas"]:::section
    MCRhythm["Rhythm / tone"]:::section
    MCConnect["#connect (waitlist CTA)"]:::section
  end

  About(["/about"]):::page
  subgraph AB["about.html sections"]
    direction TB
    ABStory["#story (teaser, links to /story)"]:::section
    ABValues["#values"]:::section
    ABMark["#the-mark"]:::section
    ABCompany["#company"]:::section
    ABConnect["#connect (waitlist CTA)"]:::section
  end

  StoryPage(["/story"]):::page
  subgraph SP["story.html sections"]
    direction TB
    SPHero["Hero (top)"]:::section
    SPEras["#eras (five-era rail, 2016–2026)"]:::section
    SPProcess["#process (dark band)"]:::section
    SPCommitment["#commitment"]:::section
    SPConnect["#connect (waitlist CTA)"]:::section
  end

  Contact(["/contact"]):::page
  subgraph CT["contact.html"]
    direction TB
    CTForm["Contact form (POST → support inbox)"]:::section
  end

  subgraph Policies["/policies/* (6 pages)"]
    direction TB
    Privacy(["/policies/privacy"]):::policy
    Terms(["/policies/terms"]):::policy
    Cookies(["/policies/cookie-policy"]):::policy
    Acceptable(["/policies/acceptable-use"]):::policy
    Community(["/policies/community-guidelines"]):::policy
    UserContent(["/policies/user-content-guidelines"]):::policy
  end

  NotFound(["/404 (404.html)"]):::page
  LogoEvo(["/logo-evolution/"]):::dev

  AppSignIn["app.objectuve.com/sign-in"]:::outbound
  AppSignUp["app.objectuve.com/sign-up"]:::outbound
  TeamsCheckout["app.objectuve.com/teams/new<br/>(Teams checkout)"]:::outbound
  Waitlist["Clerk waitlist (embedded)"]:::outbound
  SupportMail["mailto:support@objectuve.com"]:::outbound

  Root --> Index
  Root -. "global nav" .-> MeetCoach
  Root -. "global nav" .-> About
  Root -. "global nav" .-> Contact
  Root -. "footer" .-> StoryPage

  Index --> Features
  Index --> Gamification
  Index --> TeamsShowcase
  Index --> Pricing
  Index --> Connect

  Index -. "feat card / nav CTA" .-> MeetCoach
  Index -. "Sign in" .-> AppSignIn
  Index -. "Sign up free" .-> AppSignUp
  TeamsShowcase -. "See Teams pricing" .-> TeamsPricing
  TeamsShowcase -. "Start a team" .-> TeamsCheckout
  TeamsPricing -. "Start a 14-day free trial" .-> TeamsCheckout
  Connect --> Waitlist
  MCConnect --> Waitlist
  ABConnect --> Waitlist
  SPConnect --> Waitlist
  ABStory -. "Read the whole story" .-> StoryPage

  Index -. "footer" .-> About
  Index -. "footer" .-> Contact
  Index -. "footer" .-> Policies
  Index -. "footer · Support" .-> SupportMail

  About --> Policies
  MeetCoach --> Policies
  Contact --> Policies
  StoryPage --> Policies

  classDef page fill:#fef3c7,stroke:#d97706,color:#78350f
  classDef section fill:#fef9c3,stroke:#a16207,color:#713f12
  classDef policy fill:#e0f2fe,stroke:#0284c7,color:#0c4a6e
  classDef outbound fill:#fce7f3,stroke:#be185d,color:#831843
  classDef dev fill:#e5e7eb,stroke:#6b7280,color:#1f2937

Marketing site map


Page table

Authoritative list. Diff against find marketing_landing -maxdepth 2 -name '*.html' after any landing change. URLs use the deployed path (extension dropped) per sitemap.xml convention.

Top-level pages

URLFile<title>In sitemap.xmlPriority
/index.htmlObjectuve | Show up for 10 minutes. Then go live your life.1.0
/aboutabout.htmlAbout | Objectuve0.8
/storystory.htmlOur Story | Objectuve0.7
/meet-coachmeet-coach.htmlMeet Coach | Objectuve
/contactcontact.htmlContact | Objectuve0.6
/404404.html404 | Achievement Not Found | Objectuve

/meet-coach is intentionally absent from sitemap.xml today — see Notes below.

Policies (/policies/*)

URLFilePriority
/policies/privacypolicies/privacy.html0.3
/policies/termspolicies/terms.html0.3
/policies/cookie-policypolicies/cookie-policy.html0.3
/policies/acceptable-usepolicies/acceptable-use.html0.3
/policies/community-guidelinespolicies/community-guidelines.html0.3
/policies/user-content-guidelinespolicies/user-content-guidelines.html0.3

Internal / dev

URLFilePurpose
/logo-evolution/logo-evolution/index.htmlInternal logo iteration showcase — not in sitemap.xml, not linked from any production page.

Totals: 6 production top-level pages + 6 policies + 1 dev page = 13 HTML files. 10 entries in sitemap.xml.


In-page anchors

The global nav links into #features, #gamification (labeled "Rewards"), #teams-showcase (labeled "Teams"), #pricing, and the meet-coach sub-page. The footer adds links to every other page. CTAs throughout the landing scroll to #connect for waitlist signup, or route directly to app.objectuve.com (see Outbound handoffs).

index.html

AnchorSectionNotes
(top)HeroHeadline + primary CTA. No id.
#storyStoryAnti-social-app positioning.
#featuresFeaturesNav target. Includes feat card linking out to /meet-coach.
(no id)ManifestoDark band, no id — currently un-linkable; consider id="manifesto" if linkability is needed.
#gamificationRewardsNav label is "Rewards" but anchor is gamification.
#teams-showcaseTeamsNav target, labeled "Teams". Feature showcase (workspaces/sub-communities, leaderboards, collective goals) with real product screenshots; primary CTA ("See Teams pricing") scrolls to #teams, secondary CTA ("Start a team") routes straight out to app.objectuve.com/teams/new. Net-new, Phase 8 (v4.0 Teams V1). GA (OBJ-1400): both CTAs route to the live checkout — see Outbound handoffs.
#pricingPricingNav target. Consumer Free/Supporter tiers.
#teamsTeams pricing panelNot in primary nav — reached via the #teams-showcase CTA. Phase 7 GA deliverable (BILLING-14/M3): the Teams price card. Single source of truth for Teams pricing — the showcase section above does not duplicate the price. GA (OBJ-1400): the CTA ("Start a 14-day free trial") routes to app.objectuve.com/teams/new — see Outbound handoffs.
#faqFAQLinked from footer; not in primary nav.
#connectWaitlist CTAHouses the embedded <div id="clerk-waitlist">. All "join the waitlist" buttons scroll here.

meet-coach.html

Four <section class="site-section"> blocks plus #connect. Sections are linked from in-page CTAs, not via id anchors on the global nav.

about.html

AnchorSection
#storyOrigin story teaser — three sentences, links out to /story. The full narrative and its five-era timeline live on the dedicated page (see below), not here. The anchor is kept live deliberately so inbound /about#story links still land.
#valuesOperating values.
#the-markLogo / brand mark explainer.
#companyLLC + public benefit info.
#connectWaitlist CTA.

story.html

AnchorSectionNotes
(top)HeroHeadline + "2016 — 2026" byline. No id.
#erasThe erasFive-era rail (2016, 2019, 2020, 2024, 2026) — the founder's first-person narrative from docs/product/origin-story.md.
#processSecond beatDark band — why the social layer exists.
#commitmentThe commitmentThe four PBC obligations (free forever, no ads, no data selling, transparent impact), drawn from docs/product/origin-story.md's closing section.
#connectWaitlist CTASame pattern as every other page.

contact.html

Single form (#contact-form) — no in-page anchors of note.


Outbound handoffs

Known gap: this section predates the switch to open beta (PR #1170) and originally framed every CTA as scrolling to the in-page #connect waitlist. The nav "Sign up free" CTA already links straight to app.objectuve.com — a full audit of every remaining waitlist-framed CTA is out of scope for this update; flagged here rather than silently left wrong.

Boundaries that cross from marketing to non-marketing surfaces:

  • app.objectuve.com/sign-in — the consumer-app sign-in handoff. Triggered from the desktop nav "Sign in" link (mobile menu only).
  • app.objectuve.com/sign-up — the primary nav "Sign up free" CTA (both desktop and mobile menu).
  • app.objectuve.com/teams/new — the Teams checkout handoff. GA landed 2026-07-08 (PR #1498, OBJ-1096/OBJ-1223), retiring the teams_enabled master flag entirely — Teams surfaces are reachable by any authenticated user with no top-level flag gate. Both Teams CTAs route here: #teams-showcase's "Start a team" ghost button and the #teams price card's "Start a 14-day free trial" button (OBJ-1400, PR #1512). The pre-GA Formspree early-access capture form (formspree.io/f/xbjnvgpp, OBJ-1388) and its mailto:teams@objectuve.com error fallback have been removed entirely, not just suppressed.
  • Clerk waitlist widget — embedded via <div id="clerk-waitlist"> in #connect. Signups land in Clerk, not in Rails. See authentication.md for how those records get promoted to full Clerk users once the waitlist gate lifts.
  • mailto:support@objectuve.com — single contact email surfaced in the footer "Support" link.

Server-side URL mapping

Firebase Hosting strips .html on serve. The mapping is straightforward:

Browser URLServed file
/index.html
/aboutabout.html
/storystory.html
/meet-coachmeet-coach.html
/contactcontact.html
/policies/<slug>policies/<slug>.html
/logo-evolution/logo-evolution/index.html
Any unmatched path404.html

robots.txt allows all crawlers and declares https://www.objectuve.com/sitemap.xml. Both files live at the marketing-landing root.


Notes

  • /meet-coach is missing from sitemap.xml. It's a real, indexable page linked from the global nav and from multiple in-page CTAs — adding it (priority ~0.7) would improve discoverability for "AI coach" search intent. Track-as-a-followup if not already filed.
  • The Manifesto band has no id. It's currently un-linkable from external pages or the nav. If marketing wants to anchor-link "our manifesto" from a future blog post or social share, add id="manifesto" to the dark <section> between Features and Gamification.
  • /logo-evolution/ is internal-only. It ships in the deploy artifact (no .firebaseignore rule excludes it) but is unlinked and absent from sitemap.xml. Acceptable as-is; flag if a future deploy lifecycle should exclude it.
  • All "join the waitlist" CTAs scroll to #connect on the same page rather than navigating to a dedicated /waitlist route. This is intentional — there is no /waitlist route. Mapping any future waitlist-only page would mean adding a new top-level HTML file and updating sitemap.xml in the same PR.
  • The footer is the canonical link surface for policies. No top-level nav surfaces them; only the footer and contextual references (e.g., contact form privacy notice) do.
  • 404 is a real page, not a synthetic response. It uses the same chrome as the other pages — keep its nav links in sync when the global nav changes, or it will drift.
  • Teams CTAs route to the live checkout (app.objectuve.com/teams/new) as of OBJ-1400 (PR #1512). GA landed 2026-07-08 (PR #1498, OBJ-1096/OBJ-1223), retiring the teams_enabled master flag entirely. The pre-GA Formspree early-access capture (OBJ-1388) has been removed from marketing_landing/index.html and js/main.js — see Outbound handoffs.

For consumer-app routes (where waitlist signups land after promotion), see site-map.md. For admin operational routes, see admin-site-map.md.


Last updated: 2026-09-15

Loading…