Files
zeekay 48f9b8faf0 Serve Zen, and stop serving Inter's bytes
The Geist->Zen rename reached the stylesheets and stopped there. Four layers
were still handing users another vendor's face.

frontend/public still carried Inter.woff2/woff, the real upstream binaries
signed RSMS, and fonts.scss declared three static Inter weights on top of the
variable face; one variable file spans 100-900, so those three collapse into it.
The Zen pair here named only Hanzo in its copyright, which OFL does not allow
for a cut of Geist — @hanzo/font's identity check reads family, vendor tag and
both notices out of the name table and refuses to publish a face that fails, so
the bytes now come from there.

common/tailwind/dist/tailwind.css is a build artifact. .gitignore names it,
`insightscli doctor` deletes it, nothing imports it (the app imports the source
tailwind.css), and a single upstream merge dragged it in. Its
--default-font-family still said MatterSQ, two renames behind the config it is
supposed to come from. Untracked rather than hand-edited.

@hanzo/quill's tokens set --font-sans behind [data-quill], a later declaration
than base.scss's :root, so every component inside a quill subtree resolved to
the token's own Inter stack instead of the app's. The token now leads with Zen,
and each package's own build regenerates its dist.

The preload lookup in build.mjs matched /Inter(-hash)?\.woff2/ and throws when
it resolves empty, so it had to move with the file. It was also warming the
second family in --font-sans rather than the first.

Two smaller ones: the region picker fetched Inter from fonts.googleapis.com on
an unauthenticated page, and quill's storybook depended on
@fontsource-variable/inter, which declares the family "Inter Variable" — a name
no stack in this repo asks for, so it downloaded and painted nothing.
2026-08-28 17:12:24 -07:00
..
…

Hedgebox dummy app

This app represents our Hedgebox product simulation for demo data purposes.

Background

We've had a demo data generator simulating a product called Hedgebox (like Dropbox for mascots) for a while now. It creates realistic event data with user profiles, behaviors, timezones, even includes features like a Marius Tech Tips sponsorship landing page and an A/B test on the signup flow.

However, the generator hasn't been able to create session recording data, as that's a hard nut to crack store. Session recordings need an actual app with actual user interactions to capture. Hedgebox never had one - until now.

This dummy app brings Hedgebox to life as a working Next.js app that can be used to generate real session recordings for demos and testing.

What's Inside

A fully functional (fake) demo app with:

  • Login/signup flows
  • File management interface
  • Pricing page
  • Marius Tech Tips landing page
  • Insights integration for tracking and session recording

Setup

  1. Install dependencies:
npm install
  1. Set up Insights environment variables:

The app automatically fetches the Insights API key from your local database at build/dev time. You can configure the database connection and team ID using these environment variables:

NEXT_PUBLIC_INSIGHTS_HOST # Insights host (default: http://localhost:8010)
NEXT_PUBLIC_INSIGHTS_KEY  # Insights API key, fetched automatically on `npm run dev`
DEMO_TEAM_ID             # Team ID to fetch token from (default: latest team)

Note: The API key is automatically fetched and written to .env.local when you run npm run dev or npm run build. The script will skip fetching if .env.local already exists (to avoid unnecessary database queries on every run).

To manually fetch the key or force a re-fetch, run:

# Fetch if .env.local doesn't exist or doesn't have key NEXT_PUBLIC_INSIGHTS_KEY
npm run fetch-insights-key
# Force re-fetch even if NEXT_PUBLIC_INSIGHTS_KEY set in .env.local
FORCE_FETCH_KEY=1 npm run fetch-insights-key

Alternatively, you can manually create a .env.local file with the NEXT_* vars above.

  1. Run the development server:
npm run dev

The app will be available at http://localhost:3000.

Generating session recordings

The app is instrumented as long as npm run dev has NEXT_PUBLIC_INSIGHTS_KEY set. Just interact normally and recordings will be captured in your Insights instance.