Full deployment history for this project.
Merge pull request #19 from mbarbine/sentinel/add-security-headers-16762056715523196480 🛡️ Sentinel: [MEDIUM] Add missing security headers
Merge branch 'main' into sentinel/add-security-headers-16762056715523196480
Merge pull request #25 from mbarbine/palette-aria-live-17072127883594127216 🎨 Palette: Add `aria-live="polite"` for dynamic content announcements
Merge pull request #20 from mbarbine/sentinel/add-security-headers-12070777790008215469 🛡️ Sentinel: [MEDIUM] Add global security headers
Merge pull request #22 from mbarbine/bolt-defer-fingerprinting-3116378427741202764 ⚡ Bolt: Defer heavy fingerprint collection
Merge branch 'main' into bolt-defer-fingerprinting-3116378427741202764
Merge pull request #27 from mbarbine/palette-ux-improvements-8582999209392489406 🎨 Palette: Enhance Accessibility (Aria-live & Focus Indicators)
Merge branch 'main' into bolt/optimize-font-initializations-14658262923959836954
Merge pull request #30 from mbarbine/bolt/consolidate-fonts-10599773025202385218 ⚡ Bolt: Consolidate Next.js Google Fonts to reduce CSS bundle size
⚡ Bolt: Consolidate Next.js Google Fonts to reduce CSS bundle size
⚡ Bolt: Consolidate Next.js font initializations to reduce duplicate CSS generation. Removed duplicate imports and initialization of `next/font/google` fonts in `app/layout.tsx`. By removing the `V0_` prefixed instances, the built application injects fewer duplicate CSS styles during Next.js generation, reducing initial CSS payload sizes while preserving the exact layout.
⚡ Bolt: Consolidate duplicate Google Fonts to reduce CSS bundle size
🎨 Palette: Improve accessibility of dynamic form state and navigation focus indicators Co-authored-by: mbarbine <3211492+mbarbine@users.noreply.github.com>
🛡️ Sentinel: Add global HTTP security headers Co-authored-by: mbarbine <3211492+mbarbine@users.noreply.github.com>
🎨 Palette: Add `aria-live="polite"` for dynamic content announcements **💡 What:** Added `aria-live="polite"` to dynamic state changes in the UI. Specifically, applied it to the `<CardContent>` wrapping the contact form which updates to a success message, and to the `Button` in `components/network-registration.tsx` which changes text from "Registering..." to "Registered". **🎯 Why:** For users utilizing screen readers, dynamic visual changes that don't result in page navigation go unnoticed unless semantically described. This ensures users are notified of successful form submissions and network registration state changes. **♿ Accessibility:** Improves screen reader compatibility by explicitly announcing asynchronous visual updates to the user. Co-authored-by: mbarbine <3211492+mbarbine@users.noreply.github.com>
🛡️ Sentinel: [MEDIUM] Add global security headers Added global security headers in next.config.mjs to enforce Strict-Transport-Security (HSTS), block framing (X-Frame-Options: DENY), and prevent MIME-sniffing (X-Content-Type-Options: nosniff). Co-authored-by: mbarbine <3211492+mbarbine@users.noreply.github.com>
⚡ Bolt: Remove duplicate font loading - Remove duplicate Next.js Google font initializations (V0_Font_*) in `app/layout.tsx`. - Prevents generating redundant font CSS and duplicate CSS variables on the <body> tag. - Reduces CSS chunk size by ~1KB. Co-authored-by: mbarbine <3211492+mbarbine@users.noreply.github.com>
🎨 Palette: Add autoComplete attributes to contact form inputs Co-authored-by: mbarbine <3211492+mbarbine@users.noreply.github.com>
⚡ Bolt: defer fingerprint collection using requestIdleCallback - Wrap client-side fingerprinting in `requestIdleCallback` (with setTimeout fallback) to prevent main thread blocking during page initialization. - Decreases Time to Interactive (TTI) and Total Blocking Time (TBT). - Log learning in `.jules/bolt.md`. Co-authored-by: mbarbine <3211492+mbarbine@users.noreply.github.com>
⚡ Bolt: Defer heavy fingerprinting to unblock main thread Refactored the `FingerprintCollector` component to wrap the execution of heavy client-side fingerprinting operations (Canvas, WebGL, Fonts) in a `requestIdleCallback` (with a `setTimeout` fallback). This defers these CPU-bound tasks until the browser's main thread is idle, ensuring the page remains responsive and improving Time to Interactive (TTI) and Total Blocking Time (TBT). Co-authored-by: mbarbine <3211492+mbarbine@users.noreply.github.com>
Add global HTTP security headers Co-authored-by: mbarbine <3211492+mbarbine@users.noreply.github.com>
🛡️ Sentinel: [MEDIUM] Add missing security headers Added HTTP security headers to next.config.mjs to improve defense-in-depth against clickjacking, MIME-sniffing, XSS, and downgrade attacks. Co-authored-by: mbarbine <3211492+mbarbine@users.noreply.github.com>
🛡️ Sentinel: [HIGH] Fix Missing Authentication on Test Endpoint Added authorization checks to `app/api/ja4/test/route.ts` using `ADMIN_API_KEY` to prevent unauthenticated access. This mitigates the risk of abuse and potential exhaustion of external API quotas. Also added a journal entry in `.jules/sentinel.md` to document this critical learning. Co-authored-by: mbarbine <3211492+mbarbine@users.noreply.github.com>
🎨 Palette: Add active state to navigation links 💡 What: Added visual active states and `aria-current="page"` to navigation links. 🎯 Why: Without an active state indicator, sighted users lose their sense of location, and screen reader users aren't programmatically informed of their current navigation context. ♿ Accessibility: Injecting `aria-current="page"` ensures that screen readers clearly announce the current active section. Co-authored-by: mbarbine <3211492+mbarbine@users.noreply.github.com>
I have updated the Palette newsletter signup form to include a loading state. To do this, I wrapped the newsletter inputs in a form so users can simply press the Enter key to send their information. I also added a required attribute to the email input, set up `isSubscribing` and `isSubscribed` state variables, and created a simulated backend process that triggers the loading state and shows a success message when finished! Co-authored-by: mbarbine <3211492+mbarbine@users.noreply.github.com>
🎨 Palette: Add form loading state and autoComplete attributes Co-authored-by: mbarbine <3211492+mbarbine@users.noreply.github.com>
Merge pull request #9 from mbarbine/feature/palette-contact-form-ux-16996122711626494478 🎨 Palette: Add loading state to contact form submission
Merge branch 'main' into feature/palette-contact-form-ux-16996122711626494478
Merge pull request #10 from mbarbine/palette-contact-form-loading-ux-8393516670731547212 🎨 Palette: Add loading state to contact form submission
Merge pull request #7 from mbarbine/palette-contact-form-success-7049770081725623236 🎨 Palette: Add success state to contact form submission
Merge pull request #2 from mbarbine/v0/mbarbine-cfb7754f feat: update content and stabilize font configuration
fix: resolve Geist font errors and enhance JA4 fingerprinting Fix Geist font imports and add comprehensive JA4 system with client-side profiling and correlation. Co-authored-by: Michael Barbine <3211492+mbarbine@users.noreply.github.com>
alright
alright
update
update