Newsletter
Join the Community
Subscribe to our newsletter for the latest news and updates
Portfolio Website built using Nextjs and Tailwind, uses ISR to increase web performance while reducing server load

Portfolio library replicating the GitHub UI, built with Next.js, TypeScript, and Tailwind CSS.
Portfolio Website V2 is an open-source Next.js 13 portfolio template that uses Tailwind CSS and Incremental Static Regeneration (ISR) to display projects and designs with minimal server load. It pulls data from the GitHub REST API and the Dribbble v2 API, and comes with a contact form protected by ReCAPTCHA v2.
Portfolio Website V2 is a portfolio website template built by Ervin Sungkono, intended for developers and designers to present their work. The input is configuration via environment variables—such as a GitHub username, Dribbble API token, and ReCAPTCHA keys—and the output is a statically generated site with per-page revalidation every 60 seconds. It runs on Next.js v13 and is deployed to Vercel, as shown by the live demo link. The template is open source and available for cloning from GitHub.
/api/revalidate with a secret token is also provided.GITHUB_USERNAME and an optional GITHUB_TOKEN for authenticated requests.DRIBBBLE_TOKEN, letting designers display their latest work.next-themes to toggle between light and dark modes, with a responsive layout that adapts to any screen size.EMAIL and EMAIL_PASS environment variables, while NEXT_PUBLIC_RECAPTCHA_KEY and RECAPTCHA_SECRET handle spam protection.react-google-recaptcha and typewriter-effect for typed headings.GITHUB_USERNAME, and the template will fetch and display repos with their metadata.DRIBBBLE_TOKEN to pull shot thumbnails and titles into a carousel.The template uses a static-first approach: at build time, GitHub and Dribbble data are fetched and stored as static props, then ISR revalidates those pages every 60 seconds. For immediate updates, you can trigger /api/revalidate with the SECRET_TOKEN environment variable. To run it locally, clone the repository, copy .env.example to .env, fill in the required variables, then run npm install and npm run dev.
You need DRIBBBLE_TOKEN, GITHUB_USERNAME, SECRET_TOKEN, SITE_URL, EMAIL, EMAIL_PASS, NEXT_PUBLIC_RECAPTCHA_KEY, and RECAPTCHA_SECRET. The optional GITHUB_TOKEN is only needed for higher GitHub API rate limits.
Apply for access at the Dribbble developer portal (developer.dribbble.com/v2) and set the resulting token as DRIBBBLE_TOKEN in your .env file.
Yes, the default ISR revalidation is set to 60 seconds; you can modify the revalidate value in the page/component that calls the APIs. The on-demand revalidation route also lets you update content immediately.
Yes, via next-themes. A theme switch toggles between light and dark modes, and the preference can be persisted.
Because the site uses ISR, pages are generated at build time and revalidated periodically, so there is no per-request server processing for data fetching. The contact form and revalidation route run as serverless functions when hosted on Vercel.
