Skip to content

Overhaul marketing site#25

Draft
thehoegh wants to merge 242 commits into
mainfrom
overhaul
Draft

Overhaul marketing site#25
thehoegh wants to merge 242 commits into
mainfrom
overhaul

Conversation

@thehoegh

@thehoegh thehoegh commented Feb 14, 2026

Copy link
Copy Markdown
Member

Summary

  • add foundation token and theme infrastructure for area:foundation (#27, #31, #32): semantic surface/border/on-primary tokens, dark-theme overrides, and heading scale extensions
  • implement FOUC-safe theme bootstrapping in BaseHead, default root theme state in Base, and accessible persisted header toggles (desktop + mobile)
  • add foundation-handoff-checklist.md with validation gates and downstream contracts; plus README setup note for Corepack PATH edge case

Test plan

  • pnpm lint
  • pnpm build
  • Run pnpm dev and verify no flash-of-wrong-theme on hard refresh in light/dark
  • Toggle theme in desktop header and mobile drawer, reload, and verify persistence
  • Spot-check pages (/, /tjenester, /prosjekter, /om-kynd) for token-driven contrast in both themes

Notes

  • intentionally excluded .cursor/mcp.json from commits because it contains a plaintext API key
  • intentionally left pnpm-lock.yaml out of this PR update because the lockfile diff is tool-version churn (v6 -> v9 format) unrelated to foundation behavior

Note

Medium Risk
Medium risk due to major version upgrades (Astro 6 + Netlify adapter) and changes to build/CI configuration and environment schema, which could affect deploy/build behavior. Most other changes are additive docs/config, but the upgrade surface is broad.

Overview
Upgrades the Astro/Netlify toolchain and tightens CI reproducibility. CI now pins pnpm to 10.24.0, injects GitHub App secrets during the workflow, and package.json adds pnpm.onlyBuiltDependencies plus a ci:local script.

Extends site build configuration and env handling. astro.config.mjs adds remark-gfm, astro-icon, Shiki markdown config, sitemap filtering, updates font weights, and makes Slack + GitHub App env fields optional.

Adds/updates repo docs and misc config. Introduces CHANGELOG.md, GITHUB-AUTH.md, foundation-handoff-checklist.md, and overhaul briefs; updates README.md; ignores .cursor/ in Prettier; and adds .cursor/mcp.json using an env-based API key reference.

Reviewed by Cursor Bugbot for commit a86e9a8. Bugbot is set up for automated code reviews on this repo. Configure here.

- Add labs collection to content.config.ts with schema for title, description, category, githubUrl, demoUrl, status, startDate
- Create sample labs content files: raycast-extensions.mdx, job-scraper-bot.mdx, kynd-design-system.mdx
- Add labs index page that displays all labs using WideCard components
- Add dynamic [id].astro page for individual lab items with support for both single-item and multi-item labs
- Support for multi-item labs (like Raycast Extensions) with LinkCard grids
- Support for single-item labs with content and sidebar metadata
- Use default/green/black variants instead of non-existent labs variant
- Fix Prettier formatting issues
- Labs pages now work with standard styling
Merge remote-tracking branch 'origin/cards' into labs
- Add GITHUB_APP_ID, GITHUB_APP_INSTALLATION_ID, and GITHUB_APP_PRIVATE_KEY
- Configure as server-side secret environment variables
- Required for GitHub App authentication in Labs collection
- Add @octokit/app, @octokit/auth-app, @octokit/rest for GitHub API
- Add marked for markdown rendering
- Add dotenv for environment variable loading
- Add @types/marked for TypeScript support
- Update lockfile with new dependencies
- Replace file-based loader with async GitHub API loader
- Fetch repositories with 'labs' topic from kyndig organization
- Add comprehensive schema for GitHub repository data
- Include README content, technology detection, and metadata
- Support for private repositories and contributor information
- Replace MDX content with GitHub README rendering
- Add comprehensive metadata sidebar with repo stats
- Include technology badges and contributor avatars
- Show language breakdown and repository information
- Add proper ARIA labels and accessibility features
- Support for private repository indicators
- Sort labs by stars and last updated date
- Add repository statistics (stars, forks) to cards
- Include status and category badges
- Show private repository indicators
- Improve responsive design for mobile devices
- Support both YYYY-MM format and ISO date strings
- Handle GitHub API date format (2024-03-21T15:44:06Z)
- Maintain backward compatibility with existing date formats
- githubAuth.ts: GitHub App authentication with Octokit
- labsDataFetcher.ts: Fetch and process repository data from GitHub
- githubHelpers.ts: GitHub API helper functions and utilities
- technologyDetection.ts: Detect technologies from package.json, files, and README
- TechnologyBadges.astro: Display detected technologies as badges
- Delete static MDX files replaced by GitHub API integration
- Remove brreg-raycast-extension.mdx, job-scraper-bot.mdx
- Remove slacktivity.mdx, yr-raycast-extension.mdx
- Content now dynamically fetched from GitHub repositories
- Remove test-github-connection.js (temporary debugging file)
- GitHub App integration now working and tested
- Extract GitHub stats display into reusable component
- Use StarIcon and ForkIcon components instead of hardcoded SVGs
- Add responsive design with mobile center alignment
- Support stargazersCount and forksCount props
- Add variant prop to respect DynamicCard color schemes
- Fix CSS specificity for black variant category badges
- Separate background and text colors for proper contrast
- Ensure dark text on light background for black variant category badges
thehoegh added 30 commits April 14, 2026 12:15
Rename adjacent near-duplicate section headings so visitors can distinguish identity from traits at a glance.

Made-with: Cursor
Implement content and IA overhaul across primary routes
Split parsing, GitHub transport, project sync, issue operations, and orchestration into dedicated files, while keeping the legacy script as a compatibility shim and pointing the merge workflow to the new entrypoint.

Made-with: Cursor
Add a dedicated Node test step so script refactors stay covered in the check workflow instead of relying on manual local execution.

Made-with: Cursor
Re-export parse helper functions from the legacy issue-hygiene entrypoint to preserve backward compatibility, and add a regression test that locks the shim API to the canonical parser exports.

Made-with: Cursor
Refactor issue-hygiene merge script into focused modules
Add a shared Playwright config and explicit e2e scripts so browser tests use one deterministic base URL and runner setup instead of ad hoc invocation.

Made-with: Cursor
Install Chromium in the workflow and execute the shared e2e script after build so browser regressions are caught before merge.

Made-with: Cursor
Remove manual localhost probing from the Contact CTA contrast test and rely on the central Playwright config for deterministic navigation.

Made-with: Cursor
Exclude generated Playwright reports and failure artifacts from version control to keep the working tree clean during e2e development.

Made-with: Cursor
Switch the Playwright web server command from preview to dev because the Netlify adapter does not support `astro preview` in this project.

Made-with: Cursor
Install `@axe-core/playwright` and introduce a reusable helper that asserts violations with readable failure output to keep route and journey specs DRY.

Made-with: Cursor
Introduce parameterized accessibility scans for key static and dynamic routes so broad WCAG regressions are caught without duplicating test boilerplate.

Made-with: Cursor
Add focused interaction tests for keyboard navigation and stateful controls so behavior changes in core shell components are validated alongside route scans.

Made-with: Cursor
Add form error-state coverage and address defects uncovered by axe by exposing non-validation action errors, avoiding redundant employee image alt text, and improving error text contrast.

Made-with: Cursor
Fix TypeScript compatibility for axe violation formatting and format the contact form error branch after exposing server-side action failures to users.

Made-with: Cursor
Install link checking dependencies and add explicit scripts for internal crawl checks plus scheduled external monitoring.

Made-with: Cursor
Make internal link validation blocking in CI while adding a scheduled non-blocking external link check workflow for third-party drift visibility.

Made-with: Cursor
Cover critical flows from header/footer/CTA routing through project and employee detail access plus handbook hash navigation to detect broken user journeys quickly.

Made-with: Cursor
Add a dedicated QA automation guide and README quick-start instructions so contributors can run, interpret, and extend the layered checks consistently.

Made-with: Cursor
Use a single E2E script entrypoint because Playwright already switches CI behavior from process.env.CI, which avoids drift between local and CI commands.

Made-with: Cursor
The previous hasNot descendant filter was a no-op for anchor elements and could still match footer links. Scope the locator to main content so the test validates a real on-page conversion CTA.

Made-with: Cursor
Split internal link checking into a dist-only script and have the CI workflow call that after the explicit build step. This removes a duplicate build without changing the validation behavior.

Made-with: Cursor
The previous skip pattern excluded all kynd.no URLs, which prevented recursive crawling from reaching subpages and discovering their outbound links. Keep recursion and only skip non-http schemes.

Made-with: Cursor
Add axe-driven accessibility coverage and interaction checks
Resolve the CI/package merge conflict while preserving the PR's link-check coverage and deduplicating the Playwright CI script entrypoint.

Made-with: Cursor
Add internal link checks and journey smoke automation
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant