This repository contains the source code for my personal website and blog, built with Nuxt 3 and styled with Tailwind CSS.
- Blog: Markdown-based content management using Nuxt Content.
- Command Palette: Quick navigation and actions (Ctrl/Cmd + K).
- Last.fm Integration: Displaying current music presence (if configured).
- Dark Mode: Theme switching support.
- SEO Friendly: Meta tags automatically generated for pages and posts.
- Responsive Design: Adapts to different screen sizes.
- Page Transitions & Animations: Smooth transitions and entry animations using VueUse Motion.
- Mermaid Renderer: Support for rendering Mermaid diagrams within Markdown content.
- Framework: Nuxt 3 (with Vue 3)
- Styling: Tailwind CSS (with
@tailwindcss/typography
plugin) - Language: TypeScript
- Content: Nuxt Content
- Icons: Iconify (via
nuxt-icon
) - Utilities & Animations: VueUse (including
@vueuse/motion
)
.
βββ @types/ # Global TypeScript type definitions
β βββ index.d.ts
βββ assets/ # Uncompiled assets (CSS, fonts)
β βββ css/
β βββ main.css
βββ components/ # Reusable Vue components
β βββ command-palette-button.vue
β βββ command-palette.vue
β βββ content/ # Components used by Nuxt Content
β β βββ prose-pre.vue
β βββ footer.vue
β βββ image.vue
β βββ link.vue
β βββ mermaid.vue
β βββ music-notes.vue
β βββ music-presence.vue
β βββ navbar.vue
β βββ theme-switch.vue
βββ composables/ # Reusable Vue composables (logic)
β βββ socials.ts
β βββ themes.ts
β βββ work.ts
βββ content/ # Markdown content files (managed as a submodule)
β βββ posts/ # Blog posts (submodule content)
β βββ post.md.template # Template for new posts
βββ pages/ # Application pages and routes
β βββ index.vue # Home page
β βββ posts/
β β βββ [id].vue # Dynamic page for single post
β β βββ index.vue # Blog posts list page
β βββ work.vue # Work experience page
βββ plugins/ # Nuxt plugins
β βββ medium-zoom.client.ts
β βββ mermaid.client.ts
βββ public/ # Static files directly served
β βββ favicon.ico
β βββ robots.txt
βββ server/ # Server-side logic
β βββ api/ # API routes
β β βββ track.ts # Last.fm tracking API
β βββ tsconfig.json # Server-specific TS config
βββ .env # Environment variables (gitignored)
βββ .gitignore # Files/directories ignored by Git
βββ .gitmodules # Submodule configuration
βββ app.vue # Main application layout/entry point
βββ content.config.ts # Nuxt Content module configuration
βββ error.vue # Custom error page (e.g., 404)
βββ LICENSE # Project license file
βββ nuxt.config.ts # Nuxt main configuration file
βββ package.json # Project manifest (dependencies, scripts)
βββ README.md # This file
βββ tailwind.config.js # Tailwind CSS configuration
βββ tsconfig.json # Main TypeScript configuration
βββ yarn.lock # Yarn dependency lock file
Clone the repository and install dependencies:
# Clone the repo
git clone https://github.com/merloss/website.git # if you want to get existing posts, add '--recurse-submodules' flag
cd website
# If you already cloned without submodules, initialize them:
# git submodule update --init --recursive
# Install dependencies (choose your package manager)
# npm
npm install
# pnpm
pnpm install
# yarn
yarn install
# bun
bun install
Start the development server on http://localhost:3000
:
# npm
npm run dev
# pnpm
pnpm dev
# yarn
yarn dev
# bun
bun run dev
The server will automatically reload when you make changes to the code.