---
title: "Recce Corporate Website: reccehq.com Marketing Site"
description: "Case study: working on reccehq.com. JSON-LD structured data across 149 pages, an opt-in cookie consent system that blocks trackers until consent, brand consolidation off the legacy datarecce.io domain, and a three-tier docs split for new contributors."
doc_version: 1
last_updated: 2026-05-24
canonical: https://variable.team/projects/recce-website
---

<!--
  Source of truth: app/projects/recce-website/page.tsx. Keep the h1 in sync.
  scripts/check-markdown-drift.ts verifies this in pre-commit.
-->

# Recce Corporate Website

- **Company:** [Recce](https://reccehq.com)
- **Industry:** Data Engineering / Analytics Engineering
- **Dates:** Apr 2025 to Present
- **Project link:** <https://reccehq.com>
- **Stack:** Astro, React, TypeScript, Tailwind CSS, Shadcn/ui, GitHub
  Pages, Cloudflare, PostHog, GTM

### Structured data across 149 pages

The site had a strong product story but missed the metadata that lets
search engines and AI agents parse it. I added a SiteStructuredData
component that emits BreadcrumbList and WebPage JSON-LD on every page, plus
DefinedTermSet for the glossary entries. The work covered 149 pages, set
dateModified on the 39 that actually change, and tightened the sitemap
canonical URLs. The a14y score moved from 65 into the 90s as a result.

### Opt-in cookie consent that actually blocks

Most consent banners load the trackers first and turn them off if the user
objects. I wrote the 303-line vanilla JS system that does the opposite.
GTM, PostHog, Vector, and HubSpot don't load until the user clicks accept.
The banner is keyboard-navigable and WCAG-compliant, and the consent state
syncs to the data layer so analytics knows when it can fire.

### Consolidating the brand off the legacy domain

The company had two domains in circulation: datarecce.io as the legacy and
reccehq.com as the canonical. Internal links, blog post images, and
case-study CTAs were split between them. I worked through 7 blog posts and
the surrounding navigation, replacing the legacy domain everywhere it
appeared so future link rot and analytics splits stop happening.

### Three-tier docs for new contributors

The CLAUDE.md file had grown to 190 lines, trying to cover everything any
contributor or AI assistant might ever need. I trimmed it to a 44-line
summary that points into three focused docs: architecture, development, and
git-practices. Anyone new can read CLAUDE.md in two minutes and find the
deeper doc they actually need.

## Sitemap

[Full site index](/sitemap.md)
