Welcome to a sleek, modern, and fully customizable portfolio template built with SvelteKit and Tailwind CSS. The core philosophy of this project is to separate content from presentation, allowing you to update your entire portfolio just by editing a single JSON file, with no need to touch the Svelte components.
Live Demo: dhanus.pages.dev
- Fully Dynamic Content: All text, projects, experiences, and links are powered by a single
src/lib/data.jsonfile. - Modern Tech Stack: Built with SvelteKit 5, Vite, and Tailwind CSS for a fast, modern development experience.
- Engaging UI/UX:
- Smooth scrolling for anchor links.
- An interactive, animated navigation dock.
- Elegant "spotlight" hover effects on project cards.
- Subtle micro-interactions on skills and timeline elements.
- Developer-Friendly: Includes a "View JSON" toggle that displays the site's underlying data, making it a great showcase of how the portfolio is built.
- Responsive Design: Looks great on all devices, from mobile phones to desktops.
- Easy to Customize & Deploy: Get your own version up and running in minutes.
Follow these instructions to get a local copy up and running.
You need to have Node.js (v18 or higher) and a package manager (npm, pnpm, or yarn) installed on your machine.
-
Clone the repository:
git clone https://github.com/Dhanus3133/Portfolio.git
-
Navigate to the project directory:
cd Portfolio -
Install the dependencies:
bun install # or pnpm install / yarn install -
Run the development server:
bun run dev
Your site is now running at http://localhost:5173/.
The heart of this portfolio is the src/lib/data.json file. You can customize nearly everything by editing this file.
Open src/lib/data.json and start by editing the personalDetails, about, and hobbies sections with your own information.
{
"personalDetails": {
"name": "Your Name",
"title": "Your Title (e.g., Backend Developer)",
"location": "Your City, Country"
},
"about": "A passionate developer...",
"hobbies": [
{ "name": "A hobby", "link": "https://example.com" },
{ "name": "Another hobby" }
]
}Fill in the workExperience, achievements, and projects arrays. You can add or remove as many items as you like; the UI will adapt automatically.
descriptionis an array of strings, where each string is a bullet point.techandskillsare arrays of strings that will be rendered as tags.
"workExperience": [
{
"role": "Software Engineer",
"company": "Tech Corp",
"duration": "Jan 2023 - Present",
"description": [
"Developed cool features.",
"Fixed important bugs."
],
"skills": ["React", "Node.js", "AWS"]
}
],
"projects": [
{
"name": "My Awesome Project",
"description": "A brief description of the project.",
"tech": ["SvelteKit", "Tailwind CSS", "Firebase"],
"link": "https://github.com/your-username/your-project"
}
]The skills object is grouped by category. You can rename categories or add/remove skills as needed.
"skills": {
"Languages": ["JavaScript", "TypeScript", "Python"],
"Frameworks": ["SvelteKit", "Next.js", "Express.js"]
}Place your new favicon (e.g., icon.png) inside the /static directory.
The contact icons in the navigation dock are also dynamic.
-
Add the Icon Component: If you are adding a new icon (e.g., for Instagram), you first need a Svelte component for it. Place it in
src/lib/components/icons/. -
Import and Register the Icon: Open
src/routes/+page.svelteand:-
Import your new icon component at the top:
import InstagramIcon from '$lib/components/icons/InstagramIcon.svelte';
-
Add it to the
iconsmap:const icons = { // ... other icons InstagramIcon // Add your new icon here };
-
-
Update
data.json: Finally, add the new entry to thenavs.contactarray indata.json. Theiconkey must match the name you used in theiconsmap."contact": [ // ... other contacts { "label": "Instagram", "icon": "InstagramIcon", "href": "https://instagram.com/your-profile" } ]
This project is ready to deploy on any modern hosting platform that supports Node.js. I use Cloudflare pages.
- Log in to your Cloudflare dashboard.
- Navigate to Workers & Pages > Create application > Pages > Connect to Git.
- Select your new GitHub repository and click Begin setup.
- In the build settings section, select SvelteKit as the Framework preset. Cloudflare should automatically fill in the correct build settings for you.
- Click Save and Deploy.
This project was originally cloned from my friend Sai Sabarish’s portfolio.
Huge thanks to him for open-sourcing his work and providing inspiration!
This project is open-source and available under the MIT License.