-
This is the frontend of my portfolio website.
See more here.
-
Copy
.env.example to .env.local and fill in the values.
The contact form (/api/email) needs the SMTP variables; reCAPTCHA v3
is optional and fail-open (the form works without it).
| Variable | Purpose |
|---|---|
EMAIL_HOST / EMAIL_USER / EMAIL_PASS |
SMTP transport for the contact form |
FROM_EMAIL / TO_EMAIL |
Sender + recipient for contact submissions |
NEXT_PUBLIC_RECAPTCHA_SITE_KEY |
reCAPTCHA v3 public site key (client) |
RECAPTCHA_SECRET_KEY |
reCAPTCHA v3 secret key (server verification) |
BEHANCE_API_KEY |
Behance API for the "Digital Art" page |
- Create keys at https://www.google.com/recaptcha/admin/create — type reCAPTCHA v3, domains
zack.land,www.zack.land,localhost. - Set
NEXT_PUBLIC_RECAPTCHA_SITE_KEYandRECAPTCHA_SECRET_KEY(locally and in Vercel). - In production, redeploy after adding them so the public site key is inlined into the client bundle.
When the secret is unset, submissions skip verification; when set, a submission must clear a 0.5 score threshold on the contact action. Verification logic is unit-tested — run npm test.
-
This was built by starting from next.js.