First pass at honest-cam landing pages

2026-04-03

honest-cam has, to this point, been all backend. The study portal and owner portal are real, but they're both password-gated — if I send somebody "hey check out the project," I need a public URL that explains what the thing is.

This PR is that first pass. Four static HTML landing pages, a shared CSS/JS bundle, vercel.json routing, and a feature doc laying out the analytics plan.

What's in the box

Under a new packages/landing/ directory:

  • index.html — top-level "what is honest-cam" pitch.
  • managers.html — the property manager persona.
  • owners.html — the unit owner / board member persona.
  • investors.html — the fundraising / investor persona.
  • css/landing.css (387 lines) — shared styles across all four pages.
  • js/landing.js (100 lines) — shared interactions.
  • images/ — compliance dashboard, document library, and owner portal screenshots.
  • vercel.json — Vercel routing for this subtree.

One shared bundle so every page gets the same fonts, the same nav, and the same consistent look without duplicating CSS. The four HTML files differ only in the hero copy, the feature sections, and the CTAs.

Docs

  • docs/feature-analytics.md — plan for what to instrument on the landing pages (PostHog for behavior, Vercel Analytics for Web Vitals, what events fire on CTA clicks, how to close the loop back to the CRM).
  • docs/feature-landing-pages.md — shrunk down from a longer draft, now pointing at the actual pages as the source of truth for copy and structure.

A small test cleanup came along for the ride (packages/py/tests/test_portal_routes.py lost some dead assertions), and .claude/launch.json gained a few debug entries for working on the pages locally.

What comes next

The pages are functional but cosmetically bare — no real design system, no SEO metadata worth mentioning, no conversion copy. PR #11 adds Vercel Analytics, PR #12 is the actual visual redesign with SEO and a copy rewrite, and PR #15 adds the translations. This PR is the scaffold that all of that sits on top of.


PR: https://github.com/StevieIsmagic/honest-cam/pull/9