Sven Relijveld - Portfolio Website¶
A professional portfolio website for Sven Relijveld, Data Engineer & Solution Architect at OneDNA, showcasing expertise in Azure, Databricks, and AI solutions with a modern full-stack architecture.
Table of Contents¶
- Overview
- Features
- Tech Stack
- Architecture
- Getting Started
- Environment Variables
- Email Configuration
- Project Structure
- Development
- Deployment
- API Documentation
- License
Overview¶
This portfolio website presents a comprehensive showcase of professional experience, skills, and projects in data engineering and solution architecture. Built with modern web technologies, it features a responsive design, functional contact system, and professional presentation of real-world projects.
Key Highlights¶
- Professional Experience: 13+ years in data engineering and solution architecture
- Real Projects: Authentic project showcases based on actual client work
- Modern Stack: React, TypeScript, FastAPI, and Tailwind CSS
- Email Integration: Functional contact form with SMTP email delivery
- Responsive Design: Mobile-first approach with dark mode support
- Cloud-Native: Deployed on Azure Container Apps with CI/CD
Features¶
Multi-Page Architecture¶
- Home Page: Hero section, skills overview, and project highlights
- About Page: Detailed professional journey and company information
- Projects Page: Comprehensive project portfolio with case studies
- Experience Page: Animated timeline of professional positions
- Contact Page: Functional contact form with email notifications
Email System¶
- Dual Email Functionality: Notification and confirmation emails
- Professional Templates: HTML emails matching website branding
- SMTP Integration: Gmail-based email delivery
- Error Handling: Robust error management and user feedback
UI/UX Features¶
- OneDNA Branding: Professional pink accent colors
- Dark Mode: Full dark/light theme support
- Responsive Design: Mobile, tablet, and desktop optimized
- Smooth Animations: CSS transitions and scroll-based animations
- Component Library: shadcn/ui for consistent design system
Tech Stack¶
Frontend¶
- Framework: React 18 with TypeScript
- Routing: Wouter for client-side navigation
- Styling: Tailwind CSS with CSS custom properties
- Components: shadcn/ui built on Radix UI primitives
- Icons: Lucide React
- Build Tool: Vite for development and production
- State Management: TanStack Query for server state
Backend¶
- API Framework: FastAPI with Python 3.11
- Email Service: SMTP with Python's built-in libraries
- Validation: Pydantic for API validation
- Server: Uvicorn ASGI server
Infrastructure¶
- Hosting: Azure Container Apps
- Registry: Azure Container Registry
- Secrets: Azure Key Vault
- Monitoring: Application Insights + Log Analytics
- IaC: Bicep templates
- CI/CD: GitHub Actions (two-phase deployment)
- Documentation: MkDocs on Azure Static Web App
Architecture¶
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Frontend │ │ Nginx │ │ FastAPI │
│ (React/Vite) │────│ (Reverse │────│ (Email API) │
│ Container │ │ Proxy) │ │ Container │
└─────────────────┘ └─────────────────┘ └─────────────────┘
│ │ │
▼ ▼ ▼
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Browser │ │ Azure CDN │ │ Gmail SMTP │
│ (User) │ │ (Static) │ │ (Email) │
└─────────────────┘ └─────────────────┘ └─────────────────┘
Data Flow¶
- Static Content: React components served via Nginx container
- Contact Form: Form submission → Validation → FastAPI → Email delivery → User feedback
- Monitoring: All components log to Application Insights
Getting Started¶
Prerequisites¶
- Node.js 20+ and npm
- Python 3.11+
- Docker Desktop
- Git
- Azure CLI (for deployments)
Installation¶
- Clone the repository
- Install dependencies
- Set up environment variables
- Start development servers
Docker Development¶
# Build and run with Docker Compose
docker-compose up --build
# Run in detached mode
docker-compose up -d
# Stop services
docker-compose down
Environment Variables¶
Required Variables¶
# Email Configuration (Required for contact form)
EMAIL_ADDRESS=your-email@gmail.com
EMAIL_PASSWORD=your-gmail-app-password
Optional Variables¶
Email Configuration¶
Gmail SMTP Setup¶
- Enable 2FA on your Gmail account
- Generate App Password:
- Go to Google Account Settings
- Select "Mail" as the app
- Generate a 16-character password
- Set Environment Variables:
EMAIL_ADDRESS: Your Gmail addressEMAIL_PASSWORD: The generated App Password (not your regular password)
Email Features¶
- Notification Emails: Sent to
sven.relijveld@onedna.nlwith contact details - Confirmation Emails: Sent to form submitters with professional branding
- HTML Templates: Responsive design matching website aesthetics
Project Structure¶
portfolio/
├── client/ # Frontend React application
│ ├── src/
│ │ ├── components/ # Reusable UI components
│ │ ├── pages/ # Page components
│ │ ├── assets/ # Images and static assets
│ │ ├── hooks/ # Custom React hooks
│ │ └── lib/ # Utility functions
│ └── public/ # Static files (CVs, images)
├── api/ # FastAPI backend
│ ├── main.py # FastAPI application
│ └── requirements.txt # Python dependencies
├── infra/ # Azure Bicep IaC templates
│ ├── main.bicep
│ └── modules/
├── .github/workflows/ # CI/CD pipelines
├── docs/ # MkDocs documentation
├── Dockerfile.frontend # Frontend container image
├── Dockerfile.backend # Backend container image
├── docker-compose.yml # Local development
├── nginx.conf # Nginx reverse proxy config
└── mkdocs.yml # Documentation config
Development¶
Development Commands¶
# Start development environment
npm run dev
# Build for production
npm run build
# Start production server
npm start
# Type checking
npm run check
FastAPI Development¶
# Start FastAPI server separately
cd api
python -m uvicorn main:app --reload --port 8000
# Test API endpoints
curl http://localhost:8000/health
Deployment¶
The project uses a two-phase CI/CD pipeline via GitHub Actions:
- Phase 1: Infrastructure — Deploys Azure resources via Bicep
- Phase 2: Application — Builds Docker images and deploys to Container Apps
See Deployment Documentation for full details.
API Documentation¶
See API Endpoints for the complete API reference.
License¶
This project is licensed under the MIT License.
Built by Sven Relijveld Data Engineer & Solution Architect at OneDNA
- Email: sven.relijveld@onedna.nl
- LinkedIn: svenrelijveld
- GitHub: SvenRelijveld1995