Skip to content

ci(website): publish the dependency security patch and CI hardening - #74

Merged
scttbnsn merged 28 commits into
mainfrom
dev
Oct 25, 2026
Merged

scttbnsn merged 28 commits into
mainfrom
dev

Conversation

@scttbnsn

Copy link
Copy Markdown
Collaborator

Publishes #72 and #73. The dev tree matches the reviewed #73 head (f3ea2d7, squashed as 8cb1156) exactly; the reconcile commit changes ancestry only.

  • build(deps): patch next, dompurify and sharp security advisories #72: Next 16.3.3 to 16.4.3 (critical: image optimization SSRF, SSG/ISR cache poisoning), dompurify 3.4.13 to 3.4.17 via posthog-js (critical), sharp 0.35.4 to 0.35.5 (high), plus transitive lockfile patches. npm audit --omit=dev is clean. This clears all 20 open Dependabot alerts on main; each alert's patched version was checked against the dev lockfile.
  • ci(website): harden the verify workflow, remove stray files, refresh the roadmap #73: verify now runs the support contract tests, skips only the duplicate run for an internal dev to main promotion (fork branches named dev still run, eight regression cases cover the condition), cancels superseded PR runs only, gives push runs unique concurrency groups, stops persisting the checkout credential, and pins actions/checkout and actions/setup-node to their v4.4.0 commits. Also removes the unrelated visual-schedule-manager-portfolio app, the old start.sh launcher and two tracked log files, and refreshes ROADMAP.md.

Review: #72 and #73 each got a CodeRabbit pass with no actionable comments; #73 also got a Codex review (one finding fixed in-branch). verify and Vercel preview were green on both heads.

Expected on this PR: the pull_request verify run is skipped by the new promotion condition, and the push run on dev carries the real result for this SHA.

After merge: confirm the Vercel production deployment is the merge commit, then the README-VERCEL checks in a browser (theme toggle switches and persists after reload, specimen plates render, /support shows its buy links).

biggest-littlest and others added 28 commits August 15, 2026 18:45
…stion (#52)

PostHog's cookieless server-hash step reads $raw_user_agent and $host
straight off event.properties and drops the event with a
cookieless_missing_user_agent/cookieless_missing_host ingestion warning
if either is absent. createCommonProperties rebuilt an allowlisted
properties object that dropped both, so every event was silently
discarded at ingestion. Forward them through; never add $ip, which
PostHog's capture service fills in server-side from the connection.

Co-authored-by: scttbnsn <80784472+scttbnsn@users.noreply.github.com>
* fix(analytics): promote cookieless ingestion fix to production (#53)

PostHog's cookieless server-hash step reads $raw_user_agent and $host
straight off event.properties and drops the event with a
cookieless_missing_user_agent/cookieless_missing_host ingestion warning
if either is absent. createCommonProperties rebuilt an allowlisted
properties object that dropped both, so every event was silently
discarded at ingestion. Forward them through; never add $ip, which
PostHog's capture service fills in server-side from the connection.

Co-authored-by: biggest-littlest <zap_inane.2p@icloud.com>

* chore(config): drop the stale Cursor rules folder

* docs(config): drop dangling .cursorrules references

---------

Co-authored-by: biggest-littlest <zap_inane.2p@icloud.com>
Measured over the shared PostHog project, 208 of 432 sessions across
the five instrumented sites record zero duration, and PostHog's
built-in Web analytics Page/Entry page/Exit page tables return zero
rows. capture_pageleave was false, so a session's last recorded
timestamp is its last pageview, and a five-minute read of one page
scores as zero seconds.

Flipping the option alone fixes nothing: sanitizeEvent allowlisted
only $pageview, cta activated, and $web_vitals, so every $pageleave
posthog-js emitted would have been dropped silently with no error and
no ingestion warning. This adds a $pageleave branch that rebuilds the
event the same way $pageview does. capture_pageview is false here
(pageviews are captured by hand), so posthog-js's
_shouldCapturePageleave gate needs an explicit true rather than the
default.

$pathname is the property PostHog's page tables actually key off, and
it was never sent. It's bound to the already-sanitized `path` value,
never the raw pathname, so it can't carry a route outside
ALLOWED_ROUTES and adds no information the event wasn't already
sending. A regression test asserts the two never diverge.

No privacy option changes: cookieless_mode, person_profiles,
persistence, disable_persistence, respect_dnt, save_referrer, and
save_campaign_params are untouched.

Part of X16 in the ops execution plan.
- fix(seo): point Organization.logo at /icon-512x512.png; the referenced
  /logos/codeswhat-logo-green.png never existed, so crawlers got a 404
- fix(seo): strip trailing slashes from BASE_URL and reuse it in robots.ts
  and sitemap.ts, so a NEXT_PUBLIC_SITE_URL set with a trailing slash can't
  emit //sitemap.xml-style URLs
- chore(seo): disallow /studio/ in robots.txt; the capture pages already
  404 in production but the exclusion shouldn't depend on that guard
- chore(seo): 308 the stable *.vercel.app production aliases to
  codeswhat.com instead of serving duplicate content
- fix(api): stop forwarding EmailOctopus error detail to subscribe clients;
  log it server-side and return a fixed message
One-line range bump; npm resolves next 16.3.3, which also pulls the
patched transitive versions: postcss 8.5.23, nanoid 3.3.18, sharp 0.35.4.
npm audit now reports zero vulnerabilities. No code changes needed: the
app has no middleware, rewrites, server actions, CSP nonces, or
next/image usage, so none of the fixed CVEs required app-side work.
- build(deps): pick up the root-params.d.ts reference next 16.3 adds
- ci(hooks): pass --no-errors-on-unmatched to the biome pre-commit job so
  committing only biome-ignored files (like next-env.d.ts) doesn't fail
It was covered only by .git/info/exclude, which protects one clone and nobody else's. Without a tracked line, `git add -A` in the parent stages a nested worktree as an embedded gitlink and `git clean -ffd` deletes it.
… bounded UTM labels (#68)

* fix(analytics): set $pathname on web vitals from the sanitized path

* feat(analytics): add project CTA, newsletter and client error events

* feat(analytics): record campaign labels through a bounded UTM vocabulary
* fix(analytics): set $pathname on web vitals from the sanitized path

* feat(analytics): add project CTA, newsletter and client error events

* feat(analytics): record campaign labels through a bounded UTM vocabulary

* feat(site): add /support page with GitHub Sponsors, Stripe tiers and supporters list

Six tiers mirror GitHub Sponsors and Stripe, with links read only from
CODESWHAT_SUPPORT_LINKS. Support clicks go through the existing PostHog
sanitizer under the support placement, and /support joins the route allowlist.

* feat(site): replace the 3D scene design with the Catalogue design

Homepage, /projects/<slug> specimen pages and /support now use the Catalogue
shell, sprites and fonts. One light/dark theme via the nonce'd init script.
Drops the WebGL scene from the shipped routes and the Tailwind/shadcn
layer; three stays only for the dev-only /studio capture tools.

* fix(site): replace the old tagline and em dashes in site copy

* feat(site): render Catalogue share cards for every page

* fix(site): match the share-card wordmark to the site header

* fix(site): drop the wind-down policy from the support page

* style(site): remove the unused notice signature rule

* fix(site): make the homepage support section a plain ask
# Conflicts:
#	frontend/app/layout.tsx
#	frontend/test/site-browser.test.mjs
Next 16.3.3 -> 16.4.3 (critical: image optimization SSRF, SSG/ISR cache poisoning), dompurify 3.4.13 -> 3.4.17 via posthog-js (critical), sharp 0.35.4 -> 0.35.5 (high), plus transitive lockfile patches. npm audit --omit=dev is clean on this head. CodeRabbit review delivered with no actionable comments; verify and Vercel preview green.
…the roadmap (#73)

- ci(website): run support contracts and stop duplicate verify runs
- ci(website): stop persisting the checkout credential
- ci(website): verify fork branches named dev
- ci(website): pin workflow actions to immutable revisions
- ci(website): give push runs a unique concurrency group
- refactor(repo): remove the stray portfolio app, old launcher and log junk
- docs(roadmap): record the 2026-10-25 status and retire the superseded 3D items

Review: Codex (two P2s, one fixed in-branch, one recorded as no-action) and CodeRabbit (no actionable comments). verify and Vercel preview green on f3ea2d7.
@vercel

vercel Bot commented Oct 25, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
codeswhat-website Ready Ready Preview Oct 25, 2026 9:54pm UTC

@coderabbitai

coderabbitai Bot commented Oct 25, 2026

Copy link
Copy Markdown

Warning

Review limit reached

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Next included review available in 54 minutes.

Check out review usage here.

View limit details

Limit details: You’ve used the included review currently available.

Learn how review limits work.

Review configuration:

Run configuration
Commits

Reviewing files that changed from the base of the PR and between 68520ee and e422e9a.

Files ignored due to path filters: 5
  • frontend/package-lock.json is excluded by !**/package-lock.json, !**/package-lock.json
  • logs/mcp-puppeteer-2025-12-10.log is excluded by !**/*.log
  • visual-schedule-manager-portfolio/assets/integrations/fyle_favicon.png is excluded by !**/*.png
  • visual-schedule-manager-portfolio/assets/integrations/onelogin_favicon.png is excluded by !**/*.png
  • visual-schedule-manager-portfolio/assets/integrations/sage_favicon.png is excluded by !**/*.png
Files selected for processing: 48
  • .github/workflows/website.yml
  • ROADMAP.md
  • frontend/package.json
  • frontend/test/workflow.test.mjs
  • logs/.d4add09e83cef3872faf6ff0dd90aa7b611e2105-audit.json
  • start.sh
  • visual-schedule-manager-portfolio/.gitignore
  • visual-schedule-manager-portfolio/README.md
  • visual-schedule-manager-portfolio/components/schedules/AutoScheduleDialog.tsx
  • visual-schedule-manager-portfolio/components/schedules/BusinessHoursModal.tsx
  • visual-schedule-manager-portfolio/components/schedules/BusinessHoursOverlay.tsx
  • visual-schedule-manager-portfolio/components/schedules/CurrentTimeIndicator.tsx
  • visual-schedule-manager-portfolio/components/schedules/DragPreview.tsx
  • visual-schedule-manager-portfolio/components/schedules/DraggableJobBadge.tsx
  • visual-schedule-manager-portfolio/components/schedules/DroppableTimeSlot.tsx
  • visual-schedule-manager-portfolio/components/schedules/README.md
  • visual-schedule-manager-portfolio/components/schedules/ScheduleDetailsModal.tsx
  • visual-schedule-manager-portfolio/components/schedules/SchedulerErrorBoundary.tsx
  • visual-schedule-manager-portfolio/components/schedules/TimelineGrid.tsx
  • visual-schedule-manager-portfolio/components/schedules/TimelineScheduler.tsx
  • visual-schedule-manager-portfolio/components/schedules/TimelineTrack.tsx
  • visual-schedule-manager-portfolio/components/schedules/TimezoneSelector.tsx
  • visual-schedule-manager-portfolio/components/schedules/index.ts
  • visual-schedule-manager-portfolio/components/ui/alert.tsx
  • visual-schedule-manager-portfolio/components/ui/badge.tsx
  • visual-schedule-manager-portfolio/components/ui/button.tsx
  • visual-schedule-manager-portfolio/components/ui/card.tsx
  • visual-schedule-manager-portfolio/components/ui/dialog.tsx
  • visual-schedule-manager-portfolio/components/ui/label.tsx
  • visual-schedule-manager-portfolio/components/ui/scroll-area.tsx
  • visual-schedule-manager-portfolio/components/ui/select.tsx
  • visual-schedule-manager-portfolio/components/ui/separator.tsx
  • visual-schedule-manager-portfolio/components/ui/switch.tsx
  • visual-schedule-manager-portfolio/components/ui/tooltip.tsx
  • visual-schedule-manager-portfolio/demo.tsx
  • visual-schedule-manager-portfolio/hooks/useDragAndDrop.ts
  • visual-schedule-manager-portfolio/hooks/useScheduleTimezone.ts
  • visual-schedule-manager-portfolio/lib/api/client.ts
  • visual-schedule-manager-portfolio/lib/utils.ts
  • visual-schedule-manager-portfolio/package.json
  • visual-schedule-manager-portfolio/stores/schedule-store.ts
  • visual-schedule-manager-portfolio/tailwind.config.js
  • visual-schedule-manager-portfolio/tsconfig.json
  • visual-schedule-manager-portfolio/utils/auto-schedule.ts
  • visual-schedule-manager-portfolio/utils/collision-detection.ts
  • visual-schedule-manager-portfolio/utils/date.ts
  • visual-schedule-manager-portfolio/utils/timeline-helpers.ts
  • visual-schedule-manager-portfolio/utils/timezone-conversion.ts
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@scttbnsn
scttbnsn merged commit 722af11 into main Oct 25, 2026
5 checks passed

This branch was successfully deployed

1 active deployment
Preview — e422e9ab Deployed Oct 25, 2026 by vercel[bot]
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.

2 participants