Modern website for Shepherd IT Sec built with Vue 3, Quasar Framework, and TypeScript.
- π Bilingual Support: English and German (i18n)
- π± Responsive Design: Mobile-first, modern UI
- π¨ Brand Colors: Custom color scheme matching Shepherd IT Sec branding
- π Blog System: Markdown-based blog posts
- π CV Display: Embedded PDF viewer for curriculum vitae
- π Appointment Booking: Integration with Easy!Appointments system
- π Dark Theme: Optimized dark mode experience
- Vue 3 - Progressive JavaScript framework
- Quasar Framework - Vue.js based framework
- TypeScript - Type-safe JavaScript
- Vite - Fast build tool (via Quasar CLI)
- Vue Router - Client-side routing
- Markdown-it - Markdown rendering for blog posts
- Highlight.js - Code syntax highlighting
- Node.js 20+ and npm
npm installStart the development server:
npm run dev
# or
quasar devThe site will be available at http://localhost:9000 (or the port shown in the terminal).
Build for production:
npm run build
# or
quasar buildThe output is written to dist/spa/.
src/
βββ boot/ # Quasar boot files (i18n)
βββ components/ # Vue components
βββ composables/ # Vue composables (useI18n)
βββ content/ # Markdown blog posts
βββ css/ # Global styles
βββ i18n/ # Translation files (en-US, de-DE)
βββ layouts/ # Layout components
βββ pages/ # Page components
βββ router/ # Vue Router configuration
βββ site/ # Site configuration and content utilities
The site is automatically deployed to GitHub Pages via GitHub Actions:
- Push to the
mainormasterbranch - The workflow
/.github/workflows/deploy-pages.ymlbuilds and deploys automatically - Ensure Pages β Build and deployment β Source is set to GitHub Actions in repository settings
The custom domain is configured via public/CNAME. The site is available at:
The primary brand color is defined in src/css/quasar.variables.scss:
- Primary:
#168F8B(rgb(22, 143, 139)) - Secondary:
#4ECDC4 - Accent:
#64B5F6
Translation files are located in src/i18n/:
en-US.ts- English translationsde-DE.ts- German translations
Add new translations by updating these files and using the useI18n() composable in components.
Blog posts are written in Markdown and stored in src/content/posts/. Each post should include frontmatter:
---
title: "Post Title"
date: 2023-05-08T15:30:23+02:00
draft: false
tag: ['tag1', 'tag2']
---
Post content here...Private project - Shepherd IT Sec