- GitHub repository connected to Vercel
- Node.js LTS locally (for pre-deploy checks)
Run this before pushing:
npm install
npm run buildSet these in Vercel Project Settings -> Environment Variables:
RESEND_API_KEY=re_your_resend_api_key
CONTACT_TO_EMAIL=hello@yourdomain.com
CONTACT_FROM_EMAIL=Portfolio Contact <hello@yourdomain.com>
NEXT_PUBLIC_CONTACT_EMAIL=hello@yourdomain.com
NEXT_PUBLIC_SITE_URL=https://yourdomain.com
UPSTASH_REDIS_REST_URL=https://your-upstash-url.upstash.io
UPSTASH_REDIS_REST_TOKEN=your_upstash_tokenOptional but recommended:
GITHUB_TOKEN=ghp_xxx
NEXT_PUBLIC_GITHUB_USERNAME=DeryFerd- Push to
main-> production deployment. - Push to feature branch / PR -> preview deployment.
- Confirm the deployment build logs are green.
- Home page loads in light/dark mode.
Core Stackicons render correctly.Download My CVdownloads from/documents/dery-ferdika-cv.pdf.- Contact form:
- valid request works,
- invalid origin is blocked,
- rate limiting responds with 429 when abused.
- Security headers and CSP are configured in
next.config.ts. - Contact API hardening is in
src/app/api/contact/route.ts. - Distributed rate limiting is in
src/lib/contactRateLimit.tsand relies on Upstash Redis in production.