A high-performance, accessible portfolio website built with Astro and Tailwind CSS, showcasing 8+ years of frontend development experience.
- Perfect Core Web Vitals - 100 scores across all metrics (Performance, Accessibility, Best Practices, SEO)
- Optimized Performance - Self-hosted fonts (97% reduction), lazy-loaded analytics, minimal JavaScript
- Modern Stack - Built with Astro v5, Tailwind CSS v4, and TypeScript
- Accessibility First - WCAG 2.1 compliant with semantic HTML and ARIA attributes
- SEO Optimized - Structured data (JSON-LD), geo-targeting, optimized meta tags
- Responsive Design - Mobile-first approach with fluid layouts
- Dark Mode - Automatic theme detection with smooth transitions
- Type-Safe - Full TypeScript support across components and data
- Framework: Astro v5.16.11
- Styling: Tailwind CSS v4.1.18
- Language: TypeScript v5.9.3
- Build Tool: Vite v7.3.1
- Analytics: Google Tag Manager + GA4 (interaction-based loading)
- Deployment: Vercel
- Code Quality: Prettier, Husky, lint-staged
- Self-hosted fonts: Local woff2 files (92 KB total) vs CDN (3.7 MB) - 97% reduction
- SVG icons: Inline SVGs with
currentColorsupport (removed 1.7 KB font file) - Lazy GTM: Loads on user interaction (scroll/click/touch) or 3s timeout
- Optimized images: WebP format with responsive sizes and lazy loading
- CSS optimization: Single bundled CSS file with PostCSS processing
- Zero layout shift: Fixed aspect ratios and content-visibility strategies
/
├── public/
│ ├── fonts/ # Self-hosted woff2 fonts
│ └── icons/ # SVG icon library
├── src/
│ ├── assets/images/ # Optimized images
│ ├── components/
│ │ ├── atoms/ # Button, Icon, Tool
│ │ ├── molecules/ # Experience, SectionHeader
│ │ └── organisms/ # Header, Footer, Hero
│ ├── data/ # JSON configuration files
│ ├── layouts/ # Page layouts
│ ├── pages/ # Route pages
│ ├── styles/ # Global CSS and fonts
│ └── types/ # TypeScript definitions
└── package.json
- Node.js 18+ and npm/pnpm/yarn
# Clone the repository
git clone https://github.com/yourusername/web-portfolio.git
# Navigate to directory
cd web-portfolio
# Install dependencies
npm install
# Start development server
npm run devThe site will be available at http://localhost:4321
npm run dev- Start development servernpm run build- Build for production (includes type checking)npm run preview- Preview production build locallynpm run format- Format code with Prettiernpm run format:check- Check code formatting
Edit JSON files in /src/data/:
global.json- Site-wide settings and social linksexperiences.json- Work historyeducation.json- Educational backgroundprojects.json- Portfolio projectstoolbox.json- Tech stack and tools
- Colors/Typography: Edit
/src/styles/variables.css - Component styles: Use Tailwind utility classes
- Global styles: Modify
/src/styles/fonts.css
Create new .astro files in /src/pages/ - file-based routing automatically generates routes.
The site is configured for Vercel deployment with automatic builds on push.
# Build for production
npm run build
# Output will be in /dist- Build command:
npm run build - Output directory:
dist - Framework preset: Astro
- Keywords: Frontend Developer Toronto, React Developer, TypeScript Developer
- Structured Data: Person schema with job title, location, skills
- Geo-targeting: Toronto coordinates for local search
- Social Meta: Open Graph and Twitter Card tags
- Semantic HTML: Proper heading hierarchy and landmarks
This is a personal portfolio, but suggestions and feedback are welcome! Feel free to open an issue or reach out.
MIT License - feel free to use this as a template for your own portfolio.
Shavar Cox - Senior Frontend Developer
📍 Toronto, ON, Canada
🔗 LinkedIn | GitHub
Built with ❤️ using Astro and Tailwind CSS