Next.jsReactPortfolio

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.

3 previews
Desktop homepage1 / 3
Desktop captureTop of page

Actual screenshot captured by the server browser.

All pages & views 3

Screenshots show visual appearance; interactive behavior may differ.

Recorded 2026-10-02View source

What stands out

A quick read of the recorded project description.

01

3D-themed visuals with gradients and Framer Motion animations

02

Responsive layout covering mobile, tablet, and desktop

03

Name, projects, tech stack, and social links configured in one place: src/config/index.ts

04

Tech stack icons can reuse built-in items in src/constant/tech-stack.tsx or be extended from react-icons

05

Let's Connect offers five fixed positions, configurable with icons and links or hidden by leaving empty

06

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.

Next.jsPortfolio

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. 1

    After cloning the repository, run npm install, copy example.env to .env, and set NEXT_PUBLIC_APP_URL

  2. 2

    Edit src/config/index.ts to fill in name, email, role, location, social links, quotes, resume, and projects

  3. 3

    Replace the resume PDF under public/files/, project images under public/projects/ (recommended webp, about 800x400), and the two 3D avatar images

  4. 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. 5

    Use npm run dev for development, and npm run build and npm run start for production; third-party assets require independent license verification

Read repository instructions

License & source material

Usage conditions & limitations

Free to use · keep license notice

This 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

[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=

Original README
https://github.com/Deri-Kurniawan/3d-portfolio/blob/main/LICENSEhttps://github.com/Deri-Kurniawan/3d-portfolio/blob/main/README.md

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

[![Deri-Kurniawan - 3D Portfolio](https://img.shields.io/static/v1?label=Deri-Kurniawan&message=3d-portfolio&color=blue&logo=github)](https://github.com/Deri-Kurniawan/3d-portfolio "Go to GitHub repo") [![License](https://img.shields.io/badge/License-MIT-blue)](#license) [![stars - 3D Portfolio](https://img.shields.io/github/stars/Deri-Kurniawan/3d-portfolio?style=social)](https://github.com/Deri-Kurniawan/3d-portfolio)
[![forks - 3D Portfolio](https://img.shields.io/github/forks/Deri-Kurniawan/3d-portfolio?style=social)](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

[![Deploy with Vercel](https://vercel.com/button)](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.
Report a correction

Explore similar templates

Compare previews and descriptions within the same stack and category.

react-resume-template

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

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

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

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

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

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