π Modern portfolio website built with TypeScript, Vite, and deployed on GitHub Pages.
Visit: https://why-pengo.github.io/
- Build Tool: Vite 6.0
- Language: TypeScript 5.7
- Testing: Vitest 2.1 with jsdom
- Styling: Bootstrap 5.3 + Custom CSS
- Code Quality: ESLint + Prettier
- CI/CD: GitHub Actions
- Node.js 20.x or higher
- npm 10.x or higher
npm installRun the development server with hot module replacement:
npm run devOpen http://localhost:5173 to view it in the browser.
Build the production-ready static site:
npm run buildThe built files will be output to the docs/ directory for GitHub Pages deployment.
Preview the production build locally:
npm run previewnpm testnpm run test:uinpm run test:coverageCoverage reports are generated in the coverage/ directory.
npm run formatnpm run lintnpm run lint:fixnpm run type-checkThe site is automatically deployed to GitHub Pages when changes are pushed to the main branch.
- Build the project:
npm run build - The output in
docs/folder is served by GitHub Pages - Commit and push the changes
The project includes a GitHub Actions workflow (.github/workflows/deploy.yml) that:
- Runs tests
- Performs type checking
- Lints code
- Builds the project
- Deploys to GitHub Pages
.
βββ .github/
β βββ workflows/
β βββ deploy.yml # GitHub Actions deployment workflow
βββ src/
β βββ test/
β β βββ setup.ts # Vitest setup
β β βββ index.test.ts # Unit tests
β βββ index.ts # Main entry point
βββ public/ # Static assets (copied to docs/)
β βββ favicon.ico
β βββ index.css
β βββ profile.png
β βββ robots.txt
β βββ separator.svg
βββ docs/ # Build output (GitHub Pages serves this)
βββ index.html # Main HTML file
βββ vite.config.ts # Vite configuration
βββ vitest.config.ts # Vitest configuration
βββ tsconfig.json # TypeScript configuration
βββ eslint.config.js # ESLint configuration
βββ .prettierrc # Prettier configuration
βββ package.json # Dependencies and scripts
- Responsive Design: Mobile-first approach with Bootstrap 5
- Animated Background: CSS-based animated circles
- Profile Showcase: Animated profile image
- Project Links: Direct links to various projects:
- Angular Sudoku (v18)
- Python Sprinkler Control
- Three.js WebGL Playground
- Phaser Game Development
- Modern Build: Optimized with Vite for fast builds and HMR
- Type Safety: Full TypeScript support
- Test Coverage: Comprehensive Vitest test suite
- CI/CD: Automated testing and deployment
Configuration is in vite.config.ts. Key settings:
- Output directory:
docs/(for GitHub Pages) - Base URL:
/(root path) - Source maps enabled in production
Modern TypeScript configuration with:
- Strict mode enabled
- ES2020 target
- Bundler module resolution
Flat config format with TypeScript support and recommended rules.
Consistent code formatting with sensible defaults.
MIT
Jon Morgan
- LinkedIn: jon-p-morgan
- GitHub: @why-pengo
This is a personal portfolio project, but suggestions and improvements are welcome!
- β Modern build tooling (Vite)
- β TypeScript for type safety
- β Comprehensive test suite with Vitest
- β Code quality tools (ESLint, Prettier)
- β Automated CI/CD with GitHub Actions
- β Semantic HTML and accessibility
- β Responsive design
- β Optimized assets and build output
- β Security headers and best practices
- β Git ignored files properly configured