A modern, responsive portfolio website built with Angular 20, featuring dynamic weather integration, technology showcase, and beautiful Material Design components.
- Material Design 3 components with beautiful animations
- Responsive design that works on all devices
- Dark/Light theme support with dynamic switching
- Smooth transitions and micro-interactions
- Accessibility-first approach with ARIA labels
- Real-time weather data for Utrecht, Netherlands
- 7-day forecast with beautiful weather icons
- Serverless API integration using DigitalOcean Functions
- Automatic updates and error handling
- Interactive tech cards with hover effects
- Categorized technologies: Professional, Hobby, Tools, Archive
- Direct links to technology documentation
- Sortable views (alphabetical/custom order)
- Professional tech stack including Azure, C#, Angular, Docker
- Hobby projects featuring Deno, Fresh, Vue, Preact
- Docker containerization with multi-stage builds
- Nginx reverse proxy for optimal performance
- CI/CD pipeline with GitHub Actions
- Code quality with ESLint and Prettier
- TypeScript for type safety
- Standalone components for better tree-shaking
- Hot reload during development
- Comprehensive linting and formatting rules
- Modern Angular CLI with latest features
- FontAwesome icons for consistent iconography
- Node.js 22+
- npm or yarn
- Docker (optional)
# Clone the repository
git clone https://github.com/Nergy101/Portfolio.git
cd Portfolio
# Install dependencies
npm install
# Start development server
npm start
# Open http://localhost:4200 in your browser# Build the Docker image
docker build -t portfolio:latest .
# Run the container
docker run -p 4200:80 portfolio:latest
# Or use docker-compose
docker-compose up -d| Command | Description |
|---|---|
npm start |
Start development server |
npm run build |
Build for production |
npm run test |
Run unit tests |
npm run lint |
Run ESLint |
npm run format |
Format code with Prettier |
npm run check |
Run format and lint checks |
Portfolio/
βββ π src/
β βββ π app/
β β βββ π components/
β β β βββ π dialogs/ # Modal dialogs
β β β βββ π footer/ # Footer component
β β β βββ π header/ # Header component
β β β βββ π landing/ # Main landing page
β β β βββ π menu/ # Navigation menu
β β β βββ π tech-card/ # Technology cards
β β β βββ π weather-card/ # Weather widget
β β βββ π services/ # Angular services
β βββ π assets/
β β βββ π techs/ # Technology icons
β β βββ π weather-icons/ # Weather icons
β β βββ π prebuilt-themes/ # Theme files
β βββ π environments/ # Environment configs
βββ π config/ # Nginx configuration
βββ π³ Dockerfile # Multi-stage Docker build
βββ π³ docker-compose.yml # Docker Compose setup
βββ π package.json # Dependencies and scripts
- Fetches real-time weather data from DigitalOcean Functions
- Displays 7-day forecast with custom weather icons
- Automatic error handling and loading states
- Configurable city parameter (currently set to Utrecht)
- Professional Techs: Azure, C#, TypeScript, Angular, Docker, Git
- Hobby Techs: Deno, Fresh, Vue, Preact, Python, GraphQL
- Tools: VS Code, Cursor, GitHub Copilot, Prettier
- Archive: Previously used technologies for reference
- Standalone Components: Modern Angular 20 architecture
- Signal-based State: Reactive state management
- Material Design: Consistent UI components
- Responsive Design: Mobile-first approach
This project uses Tolgee for internationalization management. The configuration is set up to pull translations from a Tolgee instance and store them locally.
The project uses a .tolgeerc configuration file to manage translations:
{
"apiKey": "<add-key-here>",
"apiUrl": "<add-url-here>>",
"pull": {
"path": "./src/assets/translations",
"format": "JSON_ICU",
"delimiter": ""
},
"patterns": ["src/**/*.ts", "src/**/*.html"]
}- Translation Files: Stored in
src/assets/translations/ - Supported Languages: English (US/GB), Dutch (NL), German (DE)
- Format: JSON with ICU message format support
- Patterns: Scans TypeScript and HTML files for translation keys
- Add translation keys to your components using the
| translatepipe - Run Tolgee CLI to pull latest translations:
npx @tolgee/cli pull
- The translations will be automatically updated in
src/assets/translations/
- Translation keys are automatically detected in your code
- Use the
| translatepipe in templates:{{ 'key.name' | translate }} - The custom
TranslatePipehandles translation resolution - Language switching is managed through the
TranslationsService
This project uses Playwright for end-to-end browser testing. To get started:
cd playwright
npm install
npm run install-browsers
npm test- Tests are located in
playwright/tests/. - Configuration is in
playwright/playwright.config.ts. - See
playwright/README.mdfor more details.
This project is licensed under the MIT License - see the LICENSE file for details.
- Angular Team for the amazing framework
- Material Design for beautiful UI components
- FontAwesome for the icon library
- DigitalOcean for serverless functions
- OpenWeatherMap for weather data inspiration
Made with β€οΈ by Nergy