Patch Logs

Technical notes about changes to this site.

v1.1.1 — Language System

2026-1-13
  • Implemented full EN/ES language support using next-intl, with locale-based routing via the App Router /[locale] segment, a shared locale layout/provider, and JSON message files (src/messages/en.json + src/messages/es.json) powering translated UI text.

v0.3.1 — Bug Fixes & Improvements

2025-11-16
  • Code smell in api/contact: Declared ip twice, removed redundant line
  • Rate limiting is handled by Redis now
  • Deleted dependencies that were not being used
  • Polished code

v0.3.0 — About page

2025-11-16
  • Added `/about` page with info on me and my background

v0.2.5 — SEO & Metadata

2025-11-16
  • Added global metadata in `layout.tsx` (title template, metadataBase, Open Graph, Twitter card)
  • Moved favicon set and `site.webmanifest` into `/public` and wired them through the Next.js metadata API
  • Set per-page metadata for home, contact, contact/sent, and projects
  • Added `SeoPersonJsonLd` component with Person schema and mounted it in the root layout
  • Created `/robots.txt` and `/sitemap.xml` routes with a static URL list
  • Updated home hero copy to include name and role for better context

v0.2.4 — Book A Call

2025-11-09
  • Added `/book` page to let people schedule a call (Calendly embed)
  • Created reusable `BookCallButton` component to trigger the popup
  • Added a book-a-call CTA to the `/contact/sent` page

v0.2.3 — Patch Log Page

2025-11-08
  • Added hidden `/patch-logs` page with versioned entries
  • Backfilled entries for Next.js, contact form, and infra changes
  • Kept the page out of the main navigation (direct-link only)

v0.2.2 — Observability & Fallbacks

2025-11-08
  • Structured server logging on `/api/contact` (ip, user-agent, error type)
  • Implemented optional mail fallback via Resend when Formspree is unavailable
  • Set up external uptime monitoring for the contact endpoint

v0.2.1 — Contact Form Hardening

2025-11-08
  • Added Google reCAPTCHA v3 (client token + server verification)
  • Added graceful handling when captcha configuration is not active
  • Honeypot field to deter bots
  • Thank-you route `/contact/sent` with clean UI
  • Fixed TS lint: removed `any`, added `window.d.ts` for grecaptcha types

v0.2.0 — next-intl Investigation

2025-11-08
  • Tracked down prerender build failures related to next-intl configuration
  • Introduced `next-intl.config.ts` with typed `RequestConfig` return
  • Verified dependency versions: [email protected], [email protected], [email protected]
  • Paused i18n rollout for now; site runs as single-locale (en) until needed
2025-11-07
  • Initial investigation of prerender errors on `/`, `/projects`, `/contact`, and `/_not-found`
  • Confirmed app router build (compile + lint) was passing before prerender step

v0.1.0 — Initial Cut

2025-11-06
  • Set up home hero and services grid
  • Scaffolded Projects and Contact pages
  • Added Tailwind styling and basic motion utilities