My personal portfolio website.
Built with Next.js 16, Tailwind CSS v4, shadcn/ui, Magic UI, and next-intl. Content is managed through Upstash Redis.
-
Install dependencies:
pnpm install
-
Copy
.env.exampleto.envand fill in your Upstash Redis credentials:cp .env.example .env
-
Seed the database:
npx tsx src/scripts/seed.ts
-
Start the dev server:
pnpm dev
Pages use ISR (Incremental Static Regeneration) with a 30-day cache (revalidate = 2592000). This means:
- Pages are statically cached after the first request.
- The cache automatically expires after 30 days.
- You can manually trigger revalidation at any time (see below).
Whenever you update content in Redis, trigger an immediate cache refresh:
curl -X POST https://ezeed.dev/api/revalidate?secret=YOUR_REVALIDATE_SECRETSetup:
-
Generate a secure secret:
openssl rand -base64 32
-
Add it to your local
.envfile:REVALIDATE_SECRET=your-generated-secret
-
Add the same value to Vercel under Settings → Environment Variables with the name
REVALIDATE_SECRET.
The endpoint returns { "revalidated": true } on success and 401 if the secret is wrong.
Based on dillionverma/portfolio.