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