MM
  • Home
  • Projects
  • About
  • Blog
  • Music
  • Contact
Matt Maitland

Engineer focused on reliable web systems, production troubleshooting, and delivery under real constraints.

Navigation

  • Home
  • Projects
  • About
  • Blog
  • Music
  • Contact

Connect

© 2026 Matt Maitland. All rights reserved.

Built with Next.js, TypeScript & Tailwind CSS

Back to projects
Next.jsAuth.jsPrismaContact & admin

Portfolio Website: Engineering and Operational Choices

This page documents how mmaitland.dev handles contact submissions, optional admin access, and content delivery — the same problems as any small production site, with choices tuned for one maintainer and low operational overhead.

Architecture artifact

Flow diagram: public routes, server actions, contact validation and rate limits, optional admin inbox
Sketch of the contact path and optional admin persistence — useful for keeping assumptions explicit when iterating alone.

What runs in production

  • Server-side Zod validation for contact and waitlist before side effects
  • Honeypot field plus Upstash sliding-window rate limiting on contact submissions
  • GitHub OAuth via Auth.js for admin routes and inbox views when configured
  • Optional Prisma persistence for contact and waitlist records after email sends
  • Playwright smoke tests on public routes, titles, and OG metadata

Tradeoffs

Managed services over custom infrastructure

Used Resend, Upstash, and Neon-backed Prisma integration to reduce ops burden and improve reliability during solo iteration.

Delivery first, then persistence

Contact action treats email delivery as the primary success path, with inbox persistence as best-effort to avoid silent form success when mail is misconfigured.

Small, reviewable changes

Incremental PRs and merge gates so fixes stay easy to reason about instead of landing as one large batch.

Evidence links

Contact form decision recordRepository (webproject)Playwright route smoke spec

Where it stands

Live at mmaitland.dev: contact works with validation and rate limiting, admin is gated when env is set, and decisions are documented in linked posts. Still iterating like any personal site.

Leave a question or comment

(1)
mmaitland300Mar 24, 2026

Hello! Leaving first comment to test functionality. Please leave a comment or question if you find anything interesting. Thanks for checking it out!