Newsletter
Join the Community
Subscribe to our newsletter for the latest news and updates
Interactive 3D developer portfolio with a Spline keyboard where each keycap is a skill, built with Next.js, React, TypeScript, GSAP and Framer Motion.
3D Portfolio is an open-source developer portfolio template that renders a fully interactive 3D keyboard in Spline, where each keycap represents a skill the developer wants to showcase. Built by Naresh Khatri, this Next.js 14 portfolio combines a space-themed canvas with GSAP and Framer Motion animations, making it a striking alternative to standard single-page portfolio layouts.
3D Portfolio is an open-source, MIT-licensed portfolio template that turns a developer's personal data, projects, and skills into a single-page animated website. It runs on Next.js 14, React 18, and TypeScript, with Tailwind CSS, Shadcn UI, and Aceternity UI for styling. The template takes input from centralized TypeScript data files — src/data/config.ts for personal info, src/data/projects.tsx for projects, and src/data/constants.ts for skills and experience — and outputs a fully usable portfolio with a contact form, light/dark mode, and optional realtime features. It is designed for one-click deployment on Vercel.
After cloning the repository, install dependencies with pnpm (or npm/yarn), copy .env.example to .env.local, and set RESEND_API_KEY. Run pnpm dev to start the Next.js development server on localhost:3000. To update the 3D keyboard, import public/assets/skills-keyboard.spline into the Spline editor, unhide keycap objects, change their logos, rename each keycap to match the skill name in src/data/constants.ts, and re-export. The SkillNames enum, SKILLS record, and Spline keycap names must stay synced for the interactions to work.
3D Portfolio is free and open source under the MIT License. There is no paid tier; the README only requests a credit or link back to the original repository when you use it.
Yes. The template is open source under the MIT License, and the README asks for a credit or link back to the original repository. A deployed copy reports its own hostname once per browser to the author — no visitor, page, or referrer data is collected.
Edit the SKILLS record in src/data/constants.ts and the Spline file public/assets/skills-keyboard.spline using the Spline editor. Each keycap object must be named to match the skill's name field in the code, and the SkillNames enum must include the same keys.
No. The contact form uses Resend, so you must provide a RESEND_API_KEY in your .env.local file or Vercel environment variables. Without that key, the form cannot send emails.
Yes. The README includes a deploy button linked to Vercel that clones the repository, and the deployment guide explains connecting a GitHub repo, adding environment variables, and getting automatic deployments on every push.
Yes. Light and dark mode are built in using next-themes, with a theme toggle in the header. Switching themes also triggers the cheeky disclaimer toasts mentioned in the README.