Modern portfolio website built with Nuxt 4 and Nuxt UI.
- ⚡ Nuxt 4 - Latest version with optimal performance
- 🎯 Sharp Corners - Distinctive square design elements
- 📱 Fully Responsive - Works seamlessly on all devices
- 📝 Content Management - Powered by Nuxt Content for easy updates
- 🔍 SEO Optimized - Built-in meta tags and OpenGraph support
- ♿ Accessible - WCAG compliant components
- 🚀 Fast - Optimized for Core Web Vitals
- Nuxt 4 - Vue.js meta-framework
- Vue 3 - Progressive JavaScript framework
- TypeScript - Type-safe development
- Nuxt UI - Component library
- Tailwind CSS v4 - Utility-first CSS
- Nuxt Content - File-based CMS
- Nuxt Fonts - Font optimization
- Nuxt Image - Image optimization
- ESLint - Code linting
- Bun v1.0+ (recommended) or Node.js v18+
- Git
# Clone the repository
git clone https://github.com/kbrdn1/kbrdn.dev-v2.git
cd kbrdn.dev-v2
# Install dependencies
bun install
# Start development server
bun run devVisit http://localhost:3000 to see your site!
# Development server (http://localhost:3000)
bun run dev
# Build for production
bun run build
# Preview production build
bun run preview
# Generate static site
bun run generate
# Lint code
bunx eslint .kbrdn.dev-v2/
├── app/
│ ├── assets/css/ # Global styles & theme
│ ├── components/ # Vue components
│ │ ├── home/ # Homepage sections
│ │ ├── layout/ # Header, Footer
│ │ ├── projects/ # Project components
│ │ └── ui/ # Reusable UI components
│ ├── composables/ # Composition functions
│ ├── content/ # Markdown content
│ │ └── blogs/ # Blogs markdown files
│ ├── layouts/ # Layout templates
│ ├── pages/ # File-based routes
│ └── app.vue # Root component
├── public/ # Static assets
├── app.config.ts # Nuxt UI configuration
├── content.config.ts # Content collections config
├── nuxt.config.ts # Nuxt configuration
└── package.json
- Create a new markdown file in
app/content/blogs/:
touch app/content/blogs/my-article.md- Add frontmatter and content:
---
title: My Awesome Article
description: A brief description of the article
slug: my-article
image: /images/blogs/my-article.png
tags: [Vue, TypeScript, Nuxt]
featured: true
publishedAt: 2025-01-15
---
## Introduction
Your article content goes here...- The blog post will automatically appear on your site!
title- Article titledescription- Short description (used in cards)slug- URL-friendly identifierimage- Cover image (optional)tags- Topics/categories (array)featured- Highlight on homepage (boolean)publishedAt- Publication date
Edit app/assets/css/main.css to customize the theme:
:root {
--ui-primary: var(--color-ctp-mauve); /* Primary color */
--ui-secondary: var(--color-ctp-blue); /* Secondary color */
--ui-radius: 0; /* Border radius (0 for sharp) */
}Edit app.config.ts to customize component defaults:
export default defineAppConfig({
ui: {
colors: {
primary: "ctp-mauve",
secondary: "ctp-blue",
},
button: {
default: {
size: "md",
variant: "solid",
},
},
},
});The project uses Inter by default. To change fonts, edit nuxt.config.ts:
fonts: {
families: [{ name: "Your Font", provider: "google" }];
}Then update app/assets/css/main.css:
@theme {
--font-sans: "Your Font", system-ui, sans-serif;
}- Lighthouse Score: 98+/100
- First Contentful Paint: < 1s
- Time to Interactive: < 2s
- Total Bundle Size: ~50KB (gzipped)
- Push your code to GitHub
- Import project in Vercel
- Deploy!
- Build command:
bun run generate - Publish directory:
.output/public
# Generate static files
bun run generate
# Files will be in .output/public
# Upload to any static hosting serviceMIT License - feel free to use this template for your own portfolio!
- Nuxt Team for the amazing framework
- Nuxt UI for the component library
- Inter Font for the typography
- Website: kbrdn.dev
- GitHub: @kbrdn1
- Email: contact@kbrdn.dev
Built with ❤️ using Nuxt