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