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.xmlplusmeet-coach(the conversion sub-page). - In-page section —
id="…"anchor reachable via the global nav or footer. - Policy page —
policies/*.html, all rendered from the same template family. - Outbound handoff — leaves the marketing site for
app.objectuve.comormailto:. - 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

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
| URL | File | <title> | In sitemap.xml | Priority |
|---|---|---|---|---|
/ | index.html | Objectuve | Show up for 10 minutes. Then go live your life. | ✓ | 1.0 |
/about | about.html | About | Objectuve | ✓ | 0.8 |
/story | story.html | Our Story | Objectuve | ✓ | 0.7 |
/meet-coach | meet-coach.html | Meet Coach | Objectuve | — | — |
/contact | contact.html | Contact | Objectuve | ✓ | 0.6 |
/404 | 404.html | 404 | Achievement Not Found | Objectuve | — | — |
/meet-coachis intentionally absent fromsitemap.xmltoday — see Notes below.
Policies (/policies/*)
| URL | File | Priority |
|---|---|---|
/policies/privacy | policies/privacy.html | 0.3 |
/policies/terms | policies/terms.html | 0.3 |
/policies/cookie-policy | policies/cookie-policy.html | 0.3 |
/policies/acceptable-use | policies/acceptable-use.html | 0.3 |
/policies/community-guidelines | policies/community-guidelines.html | 0.3 |
/policies/user-content-guidelines | policies/user-content-guidelines.html | 0.3 |
Internal / dev
| URL | File | Purpose |
|---|---|---|
/logo-evolution/ | logo-evolution/index.html | Internal 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
| Anchor | Section | Notes |
|---|---|---|
| (top) | Hero | Headline + primary CTA. No id. |
#story | Story | Anti-social-app positioning. |
#features | Features | Nav target. Includes feat card linking out to /meet-coach. |
| (no id) | Manifesto | Dark band, no id — currently un-linkable; consider id="manifesto" if linkability is needed. |
#gamification | Rewards | Nav label is "Rewards" but anchor is gamification. |
#teams-showcase | Teams | Nav 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. |
#pricing | Pricing | Nav target. Consumer Free/Supporter tiers. |
#teams | Teams pricing panel | Not 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. |
#faq | FAQ | Linked from footer; not in primary nav. |
#connect | Waitlist CTA | Houses 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
| Anchor | Section |
|---|---|
#story | Origin 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. |
#values | Operating values. |
#the-mark | Logo / brand mark explainer. |
#company | LLC + public benefit info. |
#connect | Waitlist CTA. |
story.html
| Anchor | Section | Notes |
|---|---|---|
| (top) | Hero | Headline + "2016 — 2026" byline. No id. |
#eras | The eras | Five-era rail (2016, 2019, 2020, 2024, 2026) — the founder's first-person narrative from docs/product/origin-story.md. |
#process | Second beat | Dark band — why the social layer exists. |
#commitment | The commitment | The four PBC obligations (free forever, no ads, no data selling, transparent impact), drawn from docs/product/origin-story.md's closing section. |
#connect | Waitlist CTA | Same 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
#connectwaitlist. The nav "Sign up free" CTA already links straight toapp.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 theteams_enabledmaster 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#teamsprice 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 itsmailto:teams@objectuve.comerror 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 URL | Served file |
|---|---|
/ | index.html |
/about | about.html |
/story | story.html |
/meet-coach | meet-coach.html |
/contact | contact.html |
/policies/<slug> | policies/<slug>.html |
/logo-evolution/ | logo-evolution/index.html |
| Any unmatched path | 404.html |
robots.txt allows all crawlers and declares https://www.objectuve.com/sitemap.xml. Both files live at the marketing-landing root.
Notes
/meet-coachis missing fromsitemap.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, addid="manifesto"to the dark<section>between Features and Gamification. /logo-evolution/is internal-only. It ships in the deploy artifact (no.firebaseignorerule excludes it) but is unlinked and absent fromsitemap.xml. Acceptable as-is; flag if a future deploy lifecycle should exclude it.- All "join the waitlist" CTAs scroll to
#connecton the same page rather than navigating to a dedicated/waitlistroute. This is intentional — there is no/waitlistroute. Mapping any future waitlist-only page would mean adding a new top-level HTML file and updatingsitemap.xmlin 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 theteams_enabledmaster flag entirely. The pre-GA Formspree early-access capture (OBJ-1388) has been removed frommarketing_landing/index.htmlandjs/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