Initial commit - but way too late.
Some checks failed
ci / site (push) Has been cancelled

This commit is contained in:
2026-02-10 00:22:18 -05:00
commit af112a713c
173 changed files with 27667 additions and 0 deletions

View File

@@ -0,0 +1,44 @@
## MODIFIED Requirements
### Requirement: Umami pageview tracking
When Umami is enabled by configuration, the site MUST load Umami tracking on all indexable pages and MUST record pageviews.
When Umami is disabled or not configured, the site MUST still function and MUST NOT error in the browser due to missing analytics.
#### Scenario: Umami enabled
- **WHEN** Umami is enabled by configuration
- **THEN** the site includes the Umami script on `/`, `/videos`, `/podcast`, and `/about`
#### Scenario: Umami disabled
- **WHEN** Umami is not configured
- **THEN** the site renders normally and no analytics script is required
### Requirement: Custom event tracking
When Umami is enabled, the site MUST support custom event emission for:
- `cta_click`
- `outbound_click`
- a general click interaction event for all instrumented clickable items (per the site tracking taxonomy)
Each emitted event MUST include enough properties to segment reports by platform and placement when applicable.
All tracked clickable items MUST emit events with a unique, consistent set of data elements as defined by the site tracking taxonomy, including at minimum `target_id` and `placement`.
#### Scenario: Emit outbound click event
- **WHEN** a user clicks a non-CTA outbound link from the homepage
- **THEN** the system emits an `outbound_click` event with a property identifying the destination domain
#### Scenario: Emit general click event for any clickable
- **WHEN** a user clicks an instrumented navigation link
- **THEN** the system emits a click interaction event with `target_id` and `placement`
#### Scenario: Uninstrumented clicks do not break the page
- **WHEN** a user clicks an element with no tracking metadata
- **THEN** the system does not throw and navigation/interaction proceeds normally
### Requirement: Environment configuration
The site MUST support configuration of Umami parameters (at minimum: website ID and script URL) without requiring code changes.
#### Scenario: Configure Umami via environment
- **WHEN** Umami configuration values are provided via environment or config file
- **THEN** the site uses those values to initialize analytics without modifying source code

View File

@@ -0,0 +1,41 @@
## MODIFIED Requirements
### Requirement: Reusable CTA component
The site MUST implement CTAs as a reusable component that can render at least the following actions:
- YouTube subscribe action (linking to the channel)
- Instagram follow action (linking to the profile)
- Podcast listen action (linking to a designated destination)
Each CTA MUST be configurable with:
- `platform` (`youtube`, `instagram`, `podcast`)
- `placement` (e.g., `hero`, `module_header`, `footer`)
- destination `url`
#### Scenario: Rendering a YouTube subscribe CTA
- **WHEN** the homepage includes a CTA with `platform: youtube`
- **THEN** the site renders a visible action that links to the configured YouTube channel destination URL
### Requirement: Trackable outbound links
CTA outbound links MUST support appending UTM parameters so traffic can be attributed in downstream analytics.
#### Scenario: UTM parameters applied
- **WHEN** a CTA is configured with UTM parameters
- **THEN** the rendered outbound link includes the UTM query parameters in its URL
### Requirement: CTA click event emission
CTA clicks MUST emit an analytics event with at least:
- event name `cta_click`
- `platform`
- `placement`
- `target` (destination URL or a stable identifier)
In addition, CTA clicks MUST conform to the site click tracking taxonomy and MUST include a stable, unique identifier (`target_id`) for the CTA instance (so multiple CTAs with the same destination can be measured independently).
#### Scenario: User clicks CTA
- **WHEN** a user clicks an Instagram follow CTA in the hero placement
- **THEN** the system emits a `cta_click` event with `platform=instagram` and `placement=hero`
#### Scenario: Two CTAs to the same destination
- **WHEN** two CTAs link to the same destination but appear in different placements
- **THEN** their emitted events contain different `target_id` values

View File

@@ -0,0 +1,43 @@
## ADDED Requirements
### Requirement: Standard click tracking taxonomy
The system MUST define and follow a standard taxonomy for tracking user interactions (clicks) across the website.
The taxonomy MUST define:
- required event name(s)
- required event properties
- allowed values for categorical properties (where applicable)
- uniqueness rules for identifiers
#### Scenario: Adding a new tracked link
- **WHEN** a new link is added to any page/component
- **THEN** it is instrumented according to the taxonomy (required event name and required properties) without additional bespoke tracking code
### Requirement: Unique identifier for every clickable item
Every clickable item that is tracked MUST have a stable identifier (`target_id`) that is unique across the site (or unique within a documented namespace).
The identifier MUST be deterministic across builds for the same element and placement.
#### Scenario: Two links in different placements
- **WHEN** two links point to the same destination but appear in different placements
- **THEN** their `target_id` values are different so their clicks can be measured independently
### Requirement: Minimum required properties
Every tracked click event MUST include, at minimum:
- `target_id`
- `placement`
For links, the event MUST also include:
- `target_url` (or a stable target identifier that can be mapped to a URL)
#### Scenario: Tracking a content card click
- **WHEN** a user clicks a content card link
- **THEN** the emitted event includes `target_id`, `placement`, and `target_url`
### Requirement: No PII in event properties
The taxonomy MUST prohibit including personally identifiable information (PII) in event names or event properties.
#### Scenario: Tracking includes only categorical metadata
- **WHEN** tracking metadata is defined for a clickable item
- **THEN** it contains only categorical identifiers (ids, placements, domains) and does not include user-provided content