3D-themed visuals with gradients and Framer Motion animations
3d-portfolio — Next.js Portfolio Template
By Deri-Kurniawan
A Next.js-based 3D-themed personal portfolio template using Tailwind CSS and Framer Motion, with name, projects, tech stack, and social links managed centrally in a single configuration file.
Explore the design
Compare the page layouts and mobile experience. Open any screenshot for a closer look.
Actual screenshot captured by the server browser.
All pages & views 3
Screenshots show visual appearance; interactive behavior may differ.
What stands out
A quick read of the recorded project description.
Responsive layout covering mobile, tablet, and desktop
Name, projects, tech stack, and social links configured in one place: src/config/index.ts
Tech stack icons can reuse built-in items in src/constant/tech-stack.tsx or be extended from react-icons
Let's Connect offers five fixed positions, configurable with icons and links or hidden by leaving empty
MIT license, allowing free use, modification, commercial use, and distribution
Template Details
This is a 3D-themed personal portfolio website template by Deri Kurniawan, built with the Next.js App Router, styled with Tailwind CSS, animated with Framer Motion, using icons from React Icons, linted with Biome, and managing environment variables via @t3-oss/env-nextjs. The repository is MIT-licensed, allowing free use, modification, commercial use, and distribution, but third-party assets such as demo images, fonts, and icons require separate license verification.
Content configuration is centralized in src/config/index.ts: name, email, professional role, location, social links, quotes, resume download URL, project list, and displayed tech stack are all maintained in this file. Project entries include title, description, image, tech stack, optional demo/GitHub/Figma links, and category; tech stack icons are defined in src/constant/tech-stack.tsx, where you can reuse built-in items or add new ones from react-icons.
For visuals and assets, theme colors are defined in the @theme inline block of src/app/globals.css (primary, secondary, text, background gray, etc.); the 3D avatar requires replacing two files: src/assets/images/home/hero/avatar-smile.webp and src/assets/images/home/letsConnect/avatar-big-smile.webp; the Let's Connect section has five fixed positions—topLeft, topRight, bottomRight, bottomLeft, bottomCenter—where you can configure icons, links, and labels, or set to null or comment out to hide; the social preview image is replaced at public/og-image.webp. Navigation links are added or removed in src/constant/navigation.ts.
Before running, copy example.env to .env and set NEXT_PUBLIC_APP_URL; the development command is npm run dev, and build and start are npm run build and npm run start. The README provides a one-click Vercel deploy button, and manual deployment is also possible. The template does not include documentation for a backend, database, or content management system; projects and personal information are written as static configuration in the code, so updating content requires modifying the source and rebuilding.
Is it right for your project?
Use Cases
- Building a personal portfolio website for developers or designers
- Showcasing project lists, tech stack, and a resume download entry
- Serving as a learning and secondary development starting point for Next.js + Tailwind CSS
- Deploying to Vercel or a self-hosted Node environment as a static showcase site
Suitable For
- Developers familiar with Next.js and TypeScript who can directly edit configuration files
- Individuals who need to quickly launch a personal portfolio and accept content written in code
- Teams or individuals who want to freely modify and distribute the template under the MIT license
Getting started & customization
Use these recorded setup notes alongside the repository instructions for your chosen version.
- 1
After cloning the repository, run npm install, copy example.env to .env, and set NEXT_PUBLIC_APP_URL
- 2
Edit src/config/index.ts to fill in name, email, role, location, social links, quotes, resume, and projects
- 3
Replace the resume PDF under public/files/, project images under public/projects/ (recommended webp, about 800x400), and the two 3D avatar images
- 4
Adjust theme colors in the @theme inline block of src/app/globals.css, and replace the social preview image at public/og-image.webp
- 5
Use npm run dev for development, and npm run build and npm run start for production; third-party assets require independent license verification
License & source material
Usage conditions & limitations
Free to use · keep license noticeThis entry covers the free version in the public repository under the MIT license; the free scope is the code of this version and does not imply that external services or third-party assets are free.
Must comply with when using
- Free use, modification, commercial use, and distribution of this version's code are permitted.
- When distributing copies or substantial portions of the code, retain the original author's copyright notice and the full MIT license notice.
- The code is provided as is; warranties and limitations of liability are governed by the original license and applicable law.
Additional costs & items to verify
- The template's built-in 3D avatar images come from the external site peeps.ui8.net; the README suggests users visit that site to create and replace avatars; the licensing of these demo assets must be verified separately, as the MIT license covers only the code.
- Adding new tech stack icons relies on the third-party react-icons library, and its icon licensing must be confirmed independently; the template's built-in icons are also third-party assets.
- The environment variable NEXT_PUBLIC_APP_URL must be configured before deployment (both locally and in production), otherwise site URL-related functionality may be incorrect.
- One-click deployment relies on the external hosting service Vercel; using this method requires registering a Vercel account and accepting its terms of service and possible fees.
- Demo images, fonts, icons, and other third-party assets must be checked against their respective licenses and cannot be judged solely by the code's MIT license.
- External services such as domains, hosting, databases, payments, or AI may incur additional charges.
View Original Text Basis
Permission is hereby granted, free of charge
Original License Text
Create your own 3D character at [peeps.ui8.net](https://peeps.ui8.net/)
Original README
Find icons at [react-icons.github.io/react-icons](https://react-icons.github.io/react-icons/)
Original README
Set `NEXT_PUBLIC_APP_URL` to your domain
Original README
https://github.com/Deri-Kurniawan/3d-portfolio/blob/main/LICENSEhttps://github.com/Deri-Kurniawan/3d-portfolio/blob/main/README.md[](https://vercel.com/new/clone?repository-url=
Original README
Compiled by DeepSeek based on repository license and README ·2026-10-02. Results only cover the materials read; dependencies, images, fonts, and subsequent term changes are subject to their respective original texts.
Project checks & description sources
Template Information
- Source platforms
- GitHub
- Documentation and maintenance reference score
- More documented · 87 / 100
- Technologies
- Next.js · React
- Website type
- Portfolio
How this score is calculated
Our heuristic uses license records (up to 30), a demo link (12), a preview (10), stars (15), recorded maintenance (15), description completeness (8), feature records (5) and classification data (5). It is not a code, security or performance test, or a Google score. A link does not establish tested functionality.
What to verify for this project
- Repository update recorded
- 2026-09-06
- Screenshot last checked
- 2026-10-02
A demo link is listed. Check it with your own content and viewport sizes; its presence does not confirm that forms, authentication or payments work.
The catalog identifies Next.js as the primary stack. Check the actual dependency manifest and lockfile for versions and hosting requirements. These notes use recorded metadata, not a code audit or a deployment test.
Use a selection guide →How this description was prepared
AI-assisted description based on catalog records and repository material. Repository authors are not automatically the reviewers of this description.
Automatically checked against source and license rules; no manual editorial review.
Inspect the recorded source material
SHA-256: f77989ebc70a2b0cd000220b205356ebd42d3b94de0d3f778350c0750385c969
2026-10-02T16:16:34.835Z
Source file / repository# Deri Kurniawan's 3D Portfolio
[](https://github.com/Deri-Kurniawan/3d-portfolio "Go to GitHub repo") [](#license) [](https://github.com/Deri-Kurniawan/3d-portfolio)
[](https://github.com/Deri-Kurniawan/3d-portfolio)
A beautiful 3D-themed portfolio website built with Next.js 15, Tailwind CSS 4, and Framer Motion. This portfolio is based on my designs in [Dribbble - Deri Kurniawan](https://dribbble.com/shots/21642242-3D-Theme-Portfolio-Website).
## ✨ Features
- 🎨 Modern 3D-themed design with gradient animations
- 📱 Fully responsive (mobile, tablet, desktop)
- ⚡ Built with Next.js 15 + Turbopack for fast development
- 🎭 Smooth animations powered by Framer Motion
- 🔧 Easy configuration - just edit one file!
- 🚀 One-click deploy to Vercel
## 🚀 Quick Start
### 1. Clone & Install
```bash
git clone https://github.com/Deri-Kurniawan/3d-portfolio.git
cd 3d-portfolio
npm install
```
### 2. Set Up Environment
```bash
cp example.env .env
```
Edit `.env` and set your app URL:
```env
NEXT_PUBLIC_APP_URL=http://localhost:3000
```
### 3. Run Development Server
```bash
npm run dev
```
Open [http://localhost:3000](http://localhost:3000) to see your portfolio.
---
## 🎨 Customization Guide
### Quick Customization (5 minutes)
The main configuration file is `src/config/index.ts`. Edit this file to personalize your portfolio:
```typescript
export const CONFIG = {
// Your name
name: {
first: "Your",
last: "Name",
},
// Contact email
email: "[email protected]",
// Your professional role
role: "Full-stack Web Developer",
// Your location
location: "City, Country",
// Social media links
socials: {
github: "https://github.com/yourusername",
linkedin: "https://www.linkedin.com/in/yourusername",
instagram: "https://www.instagram.com/yourusername",
dribbble: "https://dribbble.com/yourusername",
},
// Quote section
quotes: {
text: "Your inspiring quote here...",
author: "Your Name",
},
// Resume download
resume: {
fileName: "YourName-Resume.pdf",
downloadUrl: "/files/your-resume.pdf",
},
// ... projects and tech stacks
};
```
### Adding Your Resume
1. Place your PDF file in `public/files/`
2. Update the config:
```typescript
resume: {
fileName: "John-Doe-Resume.pdf",
downloadUrl: "/files/John-Doe-Resume.pdf",
}
```
### Adding Projects
Add projects to the `projects` array in `src/config/index.ts`:
```typescript
projects: [
{
title: "My Awesome Project",
summary: "A brief description of what this project does and the problem it solves.",
image: "/projects/my-project.webp", // Place image in public/projects/
techStack: [
TECH_STACK.reactjs,
TECH_STACK.nextjs,
TECH_STACK.tailwindcss,
],
urls: {
demo: "https://my-project.com", // Optional
github: "https://github.com/...", // Optional
figma: "https://figma.com/...", // Optional
},
category: "Web App",
},
]
```
**Project Image Guidelines:**
- Place images in `public/projects/`
- Recommended format: `.webp` for best performance
- Recommended size: 800x400px or similar aspect ratio
### Customizing Tech Stack
#### Using Existing Tech Icons
The portfolio includes pre-configured tech stacks in `src/constant/tech-stack.tsx`:
- `TECH_STACK.nextjs`
- `TECH_STACK.reactjs`
- `TECH_STACK.typescript`
- `TECH_STACK.javascript`
- `TECH_STACK.tailwindcss`
- `TECH_STACK.laravel`
- `TECH_STACK.expressjs`
- `TECH_STACK.prisma`
- `TECH_STACK.expo`
- `TECH_STACK.reactnative`
#### Adding New Tech Stack
Edit `src/constant/tech-stack.tsx`:
```typescript
import { SiVuedotjs } from "react-icons/si"; // Import icon from react-icons
export const TECH_STACK = {
// ... existing stacks
vuejs: {
name: "Vue.js",
icon: <SiVuedotjs />,
color: "text-green-500", // Tailwind color class
siteUrl: "https://vuejs.org/",
},
};
```
Find icons at [react-icons.github.io/react-icons](https://react-icons.github.io/react-icons/) (search for `Si` prefix for brand icons).
#### Selecting Which Tech Stacks to Display
In `src/config/index.ts`, you can either show all or select specific ones:
```typescript
// Show ALL registered tech stacks
techStacks: [...Object.values(TECH_STACK)],
// OR select specific ones
techStacks: [
TECH_STACK.nextjs,
TECH_STACK.reactjs,
TECH_STACK.typescript,
TECH_STACK.tailwindcss,
],
```
### Replacing Avatar Images
Your 3D avatar appears in two places. Replace these files:
| Location | File Path | Recommended Size |
| ------------- | ---------------------------------------------------------- | ---------------- |
| Hero Section | `src/assets/images/home/hero/avatar-smile.webp` | 480x480px |
| Let's Connect | `src/assets/images/home/letsConnect/avatar-big-smile.webp` | 530x530px |
**Create your own 3D character at [peeps.ui8.net](https://peeps.ui8.net/)**
### Customizing Let's Connect Icons
The Let's Connect section has 5 fixed positions. Configure them in `src/config/index.ts`:
```typescript
import { ASSETS } from "@/constant/assets";
letsConnect: {
topLeft: {
icon: ASSETS.home.letsConnect.linkedin,
href: "https://www.linkedin.com/in/yourname",
label: "LinkedIn",
},
topRight: {
icon: ASSETS.home.letsConnect.instagram,
href: "https://www.instagram.com/yourname",
label: "Instagram",
},
bottomRight: {
icon: ASSETS.home.letsConnect.github,
href: "https://github.com/yourname",
label: "GitHub",
},
bottomLeft: {
icon: ASSETS.home.letsConnect.dribbble,
href: "https://dribbble.com/yourname",
label: "Dribbble",
},
bottomCenter: {
icon: ASSETS.home.letsConnect.gmail,
href: "mailto:[email protected]",
label: "Email",
},
}
```
- `icon` must be an `ASSETS` reference (e.g. `ASSETS.home.letsConnect.youtube`).
- Available icons: `behance`, `discord`, `dribbble`, `facebook`, `github`, `gmail`, `instagram`, `linkedin`, `pinterest`, `slack`, `tiktok`, `twitter`, `youtube` (files in `src/assets/images/home/letsConnect/`).
- `href` supports `https://` and `mailto:`.
- To hide a position, comment it out or set to `null`:
```typescript
// topLeft: {
// icon: ASSETS.home.letsConnect.linkedin,
// href: "https://...",
// label: "LinkedIn",
// },
// or
topLeft: null,
```
To add a new icon, place a `.webp` file in `src/assets/images/home/letsConnect/`, register it in `src/constant/assets.ts` (`ASSETS.home.letsConnect`), then use it in the config.
### Customizing Colors
Edit the theme colors in `src/app/globals.css`:
```css
@theme inline {
--color-primary: #a293ff; /* Purple - gradient start */
--color-secondary: #00f0ff; /* Cyan - gradient end */
--color-accent: #000000; /* Text color */
--color-accent2: #8e8e8e; /* Secondary text */
--color-gray: #f1f1f1; /* Background gray */
}
```
### Updating Open Graph Image
Replace `public/og-image.webp` with your own image (recommended: 1200x630px) for social media previews.
### Adding Navigation Links
Edit `src/constant/navigation.ts`:
```typescript
export const NAVIGATION_LINKS: NavigationLink[] = [
{ name: "Home", href: "/" },
{ name: "Project", href: "/project" },
{ name: "Blog", href: "/blog" }, // Add new pages
];
```
---
## 📁 Project Structure
```
src/
├── app/ # Next.js App Router pages
│ ├── _components/ # Page-specific components
│ ├── project/ # Project listing page
│ ├── globals.css # Global styles & theme
│ └── layout.tsx # Root layout
├── assets/
│ ├── fonts/ # Custom fonts
│ └── images/ # Static images (avatars, decoratives)
├── components/ # Shared components
├── config/
│ └── index.ts # ⭐ MAIN CONFIGURATION FILE
├── constant/
│ ├── assets.ts # Asset path mappings
│ ├── font.ts # Font configurations
│ ├── navigation.ts # Navigation links
│ └── tech-stack.tsx # Tech stack definitions
└── types/
└── globals.d.ts # TypeScript type definitions
```
---
## 🚀 Deployment
### Deploy to Vercel
[](https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2FDeri-Kurniawan%2F3d-portfolio&env=NEXT_PUBLIC_APP_URL)
1. Click the button above
2. Set `NEXT_PUBLIC_APP_URL` to your domain (e.g., `https://yourname.vercel.app`)
3. Deploy!
### Manual Deployment
```bash
npm run build
npm run start
```
### Environment Variables for Production
```env
NEXT_PUBLIC_APP_URL=https://yourdomain.com
```
---
## 📜 Available Scripts
| Command | Description |
| ---------------------- | --------------------------------------- |
| `npm run dev` | Start development server with Turbopack |
| `npm run build` | Build for production |
| `npm run start` | Start production server |
| `npm run lint` | Run Biome linter |
| `npm run lint:fix` | Fix linting issues |
| `npm run format:check` | Check code formatting |
| `npm run format:fix` | Fix code formatting |
---
## 🛠️ Tech Stack
- **Framework:** [Next.js 15](https://nextjs.org/) with App Router
- **Styling:** [Tailwind CSS 4](https://tailwindcss.com/)
- **Animations:** [Framer Motion](https://www.framer.com/motion/)
- **Icons:** [React Icons](https://react-icons.github.io/react-icons/)
- **Linting:** [Biome](https://biomejs.dev/)
- **Type Safety:** [TypeScript](https://www.typescriptlang.org/)
- **Environment:** [@t3-oss/env-nextjs](https://env.t3.gg/)
---
## 📄 License
Released under [MIT](/LICENSE) by [@Deri-Kurniawan](https://github.com/Deri-Kurniawan).
Feel free to use this template for your own portfolio.Explore similar templates
Compare previews and descriptions within the same stack and category.

react-resume-template
A personal resume website template for software developers, built with Next.js, React, and TypeScript and styled with Tailwind CSS. Site content is driven by a single data file at /src/data/data.tsx, with types in dataDef.ts and images in src/images/.
Next.js · Portfolio

nxt-lnk
nxt-lnk is a Next.js-based bio link page template that manages personal information and links via BioData.js and LinksData.js, positioned as a self-hosted alternative to Linktree. It groups links by type, supports enabling/disabling individual links, and offers hexagonal or oval avatars.
Next.js · Portfolio

sylph
Sylph is a minimal portfolio and blog template built on Next.js, supporting MDX/Markdown writing, light/dark themes, and automatic OG image generation. It includes sitemap, robots.txt, metadata, and syntax highlighting, with automatic blog timestamps.
Next.js · Portfolio

sleek-portfolio
A modern, responsive portfolio template built with Next.js 15, TypeScript, Tailwind CSS, and Shadcn UI. It includes an MDX blog, project showcase, work experience timeline, and a contact form that receives messages via Telegram Bot.
Next.js · Portfolio

research-website-template
A React + Next.js template for research personal websites, aimed at PhD students and researchers. It centralizes publications, projects, and other content in src/data as arrays of objects, with optional fields automatically generating UI components.
Next.js · Portfolio

shadcn-portfolio
A developer portfolio template built with Next.js 15, shadcn/ui, Tailwind CSS, and Framer Motion, featuring an MDX blog, light and dark modes, responsive design, and SEO meta tags.
Next.js · Portfolio
