cristian-dev

Personal portfolio with a production-ready contact form.

Tech Stack

Project Structure

Contact Flow

  1. A user submits the form on the frontend.
  2. The frontend sends a POST request to /api/contact.
  3. The backend sanitizes and validates input.
  4. The backend applies rate limiting.
  5. The backend sends the email using Resend.

Environment Variables

Frontend

Backend

See server/.env.example and client/.env.example for templates.

Local Development

Install dependencies:

npm install
npm install --prefix client
npm install --prefix server

Run backend:

npm run dev

Run frontend in another terminal:

npm run dev:client

Deployment

Frontend (Cloudflare Pages)

Backend (Render)

Notes