A production-ready portfolio built for Cloudflare Pages and Cloudflare Workers.
/contact, /resume, and /healthInstall dependencies:
npm install
Copy .env.example to .env.local and fill in:
NEXT_PUBLIC_SITE_URLNEXT_PUBLIC_API_BASE_URLNEXT_PUBLIC_TURNSTILE_SITE_KEYNEXT_PUBLIC_CF_WEB_ANALYTICS_TOKENCopy worker/.dev.vars.example to worker/.dev.vars and add:
TURNSTILE_SECRET_KEYStart the frontend:
npm run dev
Start the Worker in a second terminal:
npm run worker:dev
npm run buildout.env.local.aryan.nexoraonesolution.com.portfolio-assets.aryan-portfolio-db.worker/wrangler.toml.Add the secret:
wrangler secret put TURNSTILE_SECRET_KEY --config worker/wrangler.toml
Deploy the Worker:
npm run worker:deploy
portfolio-api.nexoraonesolution.com.Run the initial migration after creating the database:
npm run db:migrate:remote
The Worker expects the file at resume/aryan-pandya-resume.pdf in the private R2 bucket.
Place the final PDF at assets/resume/aryan-pandya-resume.pdf before uploading.
Upload the bundled resume file with:
npm run r2:upload:resume
POST /contact as an extra defensive layer.npm run buildnpm run typechecknpm run worker:typecheck