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