Status: PM audit, 2026-04-29 UTC. Pre-launch. Drafted against code on
mainas of this date. This document does not constitute legal advice. All compliance observations are product-PM assessments pending attorney review.
The marketing site for getraxx.com is implemented as the React route /marketing/getraxx
inside the Antlers SPA (frontend/trademaster_ui). It builds and deploys to the Cloudflare
Pages project raxx-app.pages.dev, with a custom domain expected to be raxx.app on
production pushes (tag-triggered). There is no dedicated getraxx.com CF Pages project
found in the repository — the marketing landing page and the product app share a single
Pages deployment. Whether getraxx.com is separately CNAME'd to that project or redirected
there is unverified from the codebase alone; DNS is managed outside the repo.
frontend/trademaster_ui/src/pages/getraxx/)| File | Purpose | Launch-critical issues |
|---|---|---|
GetRaxxLanding.js |
Page assembly / layout | Route is /marketing/getraxx — not /; if getraxx.com root is CNAME'd to raxx.app, the 404 needs a redirect rule |
LandingNav.js |
Top nav | #docs and #signin are hash-only stubs; no live pages behind them |
HeroSection.js |
Hero + CTAs | Hero tagline is "Stack raxx. Trust the tape." — messaging.md locked tagline is "Stack raxx. No guessing." — copy divergence |
PillarsSection.js |
Three feature pillars | Pillar 03 names Alpaca and Alpha Vantage directly — brand violation per project_no_backend_branding |
PricingTeaser.js |
Pricing strip | Shows hard prices ($29/mo Pro, $79/mo Pro+) — pricing unfinalized, no attorney review |
WaitlistSection.js |
Email capture | Form is a no-op (JS-only fake submit); no backend endpoint; no consent disclosure; no privacy link |
LandingFooter.js |
Footer | #privacy and #terms are hash stubs — no Privacy Policy or Terms of Service pages exist; contact is hello@getraxx.com (wrong domain — should be support@raxx.app) |
index.html issues<meta name="description"> still reads "TradeMaster API - A powerful platform for algorithmic trading and backtesting" — old product name, wrong copy<meta name="theme-color"> is #0d6efd (Bootstrap blue) — should be #0f172a (Raxx ink)og:title, og:description, og:image, og:url)<link rel="canonical">sitemap.xmlrobots.txt allows all crawling but _headers sets X-Robots-Tag: noindex site-wide (correct pre-launch behavior, but must be removed before launch)The deploy workflow (deploy.yml) deploys the Antlers SPA to raxx-app.pages.dev and maps
to raxx.app on production tag pushes. No CF Pages project or DNS record for getraxx.com
is wired in the repo. Whether getraxx.com is live, dead, or redirecting is unverifiable
from source alone. This is an infrastructure gap requiring human verification.
Severity: P0 = launch-blocking hard stop | P1 = launch-blocking, workaround possible | P2 = must ship before first paid customer | P3 = polish, can follow
| # | Issue | Owner | Effort |
|---|---|---|---|
| P0-A | Securities-attorney copy review — Issue #197 is open and blocked. Investment Advisers Act §202(a)(11) publisher-exception posture is not confirmed. No copy on the site can be publicly indexed until either (a) attorney signs off on the publisher-exception framing or (b) Kristerpher explicitly waives and documents the reasoning. | Matthew Crosby (IP) → referral to securities attorney still pending | Blocker on attorney; 1-2 days prep when attorney engaged |
| P0-B | Privacy attorney not yet engaged — The waitlist email capture, cookie-setting behavior, and any analytics are all data-collection that requires a privacy notice and (for EU/CA) consent. No privacy attorney is engaged. Docs/legal/research/demo-session-email-gating-2026-04-29.md has the research framework; an attorney must review before launch. | Kristerpher to engage privacy attorney | Blocker on engagement; ~1 sprint once engaged |
| P0-C | Privacy Policy and Terms of Service pages do not exist — Footer links #privacy and #terms are hash stubs. Clicking them scrolls nowhere. Shipping a site with broken legal links is a disqualifier. |
Privacy attorney + feature-developer |
1 sprint (draft) + attorney review |
| P0-D | Waitlist form is a no-op — WaitlistSection.js catches the submit event and calls setSubmitted(true) with no API call. Visitor emails are silently discarded. Every lead captured in beta is lost. |
feature-developer + backend |
1 sprint (wire endpoint + storage) |
| # | Issue | Owner | Effort |
|---|---|---|---|
| P1-A | Broker names in customer-facing copy — PillarsSection.js Pillar 03 body reads "Alpaca, Alpha Vantage, your own feeds…" Violates project_no_backend_branding constraint. Must be scrubbed before any public access. |
feature-developer / ux-polisher |
< 1 day |
| P1-B | Hero tagline copy divergence — Hero reads "Trust the tape." Locked tagline per messaging.md is "No guessing." These are not synonyms; "trust the tape" is ambiguous and not on-brand. | ux-polisher |
< 1 day |
| P1-C | index.html still reads "TradeMaster API" — The <meta name="description"> carries the old product name. Any crawler, Slack unfurl, or social share will show wrong copy. |
feature-developer |
< 1 day |
| P1-D | X-Robots-Tag: noindex must be removed before launch — public/_headers sets noindex globally. Comment in file acknowledges this. Leaving it on at launch means zero organic indexability. |
feature-developer |
< 1 day |
| P1-E | Cookie consent / analytics consent banner absent — If PostHog (#219) or any analytics is wired, EU/UK/CA visitors must receive a consent banner before non-essential cookies fire. CPRA in-scope once CCPA threshold is crossed. This gates analytics wiring. | Privacy attorney + feature-developer |
1 sprint |
| P1-F | getraxx.com DNS / CF Pages binding unverified — No terraform or workflow code confirms that getraxx.com resolves to the correct CF Pages project. Must be verified and documented. If the domain is cold-parked, the entire site is unreachable on launch. |
Kristerpher (CF dashboard) | Human verification + 1 hr if wiring needed |
| P1-G | LLC not formed; footer corporate attribution is missing/wrong — Footer reads "A MooseQuest product." PA LLC formation is in-flight. Cannot claim LLC status that doesn't yet exist, but also cannot use a random attribution on a commercial site. Footer wording must be intentional and attorney-approved. | Kristerpher + Crosby | Human decision |
| # | Issue | Owner | Effort |
|---|---|---|---|
| P2-A | OG / Twitter meta tags absent — No og:title, og:description, og:image, og:url, no Twitter card. Any social share or link preview will render blank or with wrong content. |
feature-developer |
1 day |
| P2-B | Pricing numbers on site without finalization — PricingTeaser.js hard-codes "$29/mo Pro. $79/mo Pro+." Pricing-v2.md documents this as unverified-anchor-only. Showing prices without a finalized model invites immediate objections from early visitors and may need to be pulled back. Needs explicit Kristerpher sign-off or replacement with tier-overview copy (no numbers). |
Kristerpher decision | Human decision |
| P2-C | Trademark + copyright footer notice absent — No © 2026 [Entity], no RAXX™ or RAXX® notice. Trademark application is in flight (Class 42 + 9). Standard practice is to use ™ (not ®) until registration confirms. |
feature-developer |
< 1 day |
| P2-D | status.raxx.app footer link absent — No link to the status page. Standard for SaaS pre-launch. If status.raxx.app is not yet live, the link should be deferred rather than wired to a dead URL. |
Kristerpher to confirm status page URL; feature-developer |
< 1 day |
| P2-E | Nav dead links — #docs and #signin are hash stubs that scroll nowhere. #docs should go to docs.raxx.app once that's live; #signin should go to app.raxx.app or the auth entry point. |
feature-developer |
< 1 day |
| P2-F | Contact email is hello@getraxx.com — Memory project_email_addresses.md specifies the sender domain is raxx.app; support queue is support@raxx.app. The footer contact link points at a different domain/inbox that may not be monitored. |
feature-developer |
< 1 day |
| P2-G | Demo CTA is "Join the waitlist" / "See pricing" — Epic #482 (demo.raxx.app) is in-flight; #488 (Antlers demo UI) is blocked. Until the demo is ready, the primary CTA is correctly the waitlist. Once demo ships, hero CTA should become "Try the demo." This card needs a decision on launch sequencing. |
Kristerpher decision | Human decision |
| # | Issue | Owner | Effort |
|---|---|---|---|
| P3-A | robots.txt is allow-all with no sitemap reference — Robots.txt should point to sitemap.xml once sitemap is built. |
feature-developer |
< 1 day |
| P3-B | Sitemap.xml absent — No sitemap.xml. Should enumerate landing, pricing (when built), about (when built). | feature-developer |
< 1 day |
| P3-C | Mobile QA pass not documented — GetRaxxLanding.js comment says "Responsive: mobile-first, tested at 375/768/1440 px" but no documented test run on iOS Safari 17 exists. | QA / Kristerpher | 1 day |
| P3-D | theme-color meta tag is Bootstrap blue — Should be #0f172a (ink) per Antlers design direction. |
feature-developer |
< 30 min |
| P3-E | Founders Promo scrub — No orphan $19/mo references found in the getraxx pages, but PricingTeaser.js shows $29/mo hard-coded without any Founders Promo context. The retirement (pricing-v2.md, 2026-04-23) is reflected in that there is no $19 reference. No action needed here unless a separate Founders Promo entry point on the marketing site is planned. |
||
| P3-F | Wordmark integration — GetRaxxLanding.js comment at line 9-15 references issue #165 (refined wordmark) as a pending swap. Once #165 ships, integrate the Wordmark component. |
feature-developer |
< 1 day after #165 |
The following items require Kristerpher's decision before any implementation card can be fully resolved. No agent should unilaterally decide these.
Question: Do we show the $29/$79 numbers on the marketing site at launch? Options: - A. Show the numbers (current state — hard-coded in PricingTeaser.js) - B. Show tier names + feature matrix only, no numbers ("Free / Pro / Pro+") - C. Replace pricing section with a "pricing coming soon" teaser Constraint: Pricing-v2.md documents anchors as "unverified from training cutoff" and competitor pricing has not been live-verified. The numbers are also not covered by attorney review yet. Recommendation: Option B until attorney review closes. Showing prices without any legal posture creates the implicit representation that these are final.
Question: PA LLC formation is in-flight. How do we attribute the product in the footer before LLC is formed? Options: - A. "A MooseQuest product." (current state — informal, no legal entity claim) - B. "© 2026 Raxx. All rights reserved." (uses brand name, no entity claim) - C. "© 2026 [LLC Name], LLC." (blocked until formation completes) - D. No copyright line until formation completes Recommendation: Option B is defensible pre-formation — it asserts the brand name without claiming a legal entity that doesn't yet exist. Attorney should confirm. Do not use Option C before formation is on paper.
Question: What type of cookie/analytics consent is required for getraxx.com visitors? Options: - A. Soft banner (informational only, no checkbox) — acceptable for US visitors only - B. Full consent-gated banner (opt-in before non-essential cookies fire) — required for EU/UK/CA - C. No analytics pre-launch (removes the consent problem entirely) Constraint: PostHog issue (#219) is "needs-grooming" — analytics are not yet wired. Privacy attorney must advise on GDPR/CCPA posture before any analytics go live. Until attorney is engaged, Option C is the lowest-risk default.
Question: The hero has two CTAs: "Join the waitlist" (primary, moss button) and "See pricing" (secondary). Once demo.raxx.app is live (#482/#488), the primary CTA should change to "Try the demo" or similar. Should launch proceed with the waitlist CTA as primary, or gate launch on demo being ready?
Options:
- A. Launch with waitlist CTA — simplest, no dependency on #482
- B. Gate public launch until demo is minimally viable — stronger conversion but delays timeline
Recommendation: Option A. Launch with waitlist CTA, swap to demo CTA in a follow-on sprint when #482 closes.
getraxx.com DNS verificationQuestion: Is getraxx.com currently pointed at raxx-app.pages.dev (or a redirect)? The repository has no DNS records or CF Pages project config for this domain. This needs manual verification in the Cloudflare dashboard.
Action required: Kristerpher to confirm whether getraxx.com CNAME/redirect is live and that raxx-app.pages.dev serves the React SPA at the root. If getraxx.com is not wired, a CF Pages custom domain config and a redirect rule from / to /marketing/getraxx are needed.
Gate 1 — Legal posture (in parallel, owner: Kristerpher)
Engage securities attorney and privacy attorney. Both need ~1-2 weeks for review. No public indexing before Gate 1 closes. The noindex header buys time here — site can be "live" in structure but not publicly crawlable.
Gate 2 — P0 blockers (1-2 sprints, owner: feature-developer)
Wire waitlist backend (#107), draft Privacy Policy + ToS pages (can be legal-placeholder stubs pending attorney redline), scrub broker names from Pillar 03, fix hero tagline, fix index.html meta description.
Gate 3 — P1 infrastructure (1 sprint) Remove noindex header. Verify getraxx.com DNS. Add OG/Twitter meta tags. Fix nav dead links. Fix footer contact email. Add trademark notice.
Gate 4 — Cookie consent + analytics (after privacy attorney review) Wire PostHog (#219) with consent-gated banner. Do not instrument before attorney blesses the consent implementation.
Gate 5 — Demo CTA swap (after #482 closes) Swap hero CTA from "Join the waitlist" to "Try the demo."
Estimated earliest public-indexable launch: ~3-4 weeks out, gated primarily on attorney engagement speed.
| Check | Status |
|---|---|
| No broker names in copy | FAIL — Alpaca + Alpha Vantage in PillarsSection.js Pillar 03 |
| No forward-looking framing | PASS — no "will," "predict," "guarantee" language found |
| AI is never the headline | PASS — no "AI-powered" standalone claims found |
| Deterministic execution language | PASS — copy does not imply autonomous order firing |
| Locked tagline ("No guessing") | FAIL — HeroSection.js reads "Trust the tape." |
| No "investment advice" claim | PASS — footer reads "Not investment advice." |
| No LLC claim before formation | PASS — "A MooseQuest product." makes no entity claim |
| Cream/moss/ink palette (Direction C) | PASS — CSS vars are --raxx-ink, --raxx-moss, --raxx-snow throughout |
| No TradeMaster product name in UI | FAIL — index.html meta description still reads "TradeMaster API" |
| No Founders Promo $19 orphans | PASS — no $19 references found in getraxx pages |