A modern, responsive personal portfolio application built with Angular 19, featuring dynamic content management through JSON configuration and a clean, professional design with dark/light theme support.
- Modern Angular Architecture: Built with Angular 19 using standalone components and latest best practices
- Responsive Design: Mobile-first approach with Bootstrap 5 integration
- Dynamic Content: Portfolio data driven by JSON configuration for easy updates
- Theme Support: Dark/light theme toggle with system preference detection
- Professional Sections: About, Skills, Experience, Education, Certificates, and Projects
- Performance Optimized: Lazy loading, optimized builds, and efficient asset management
- Cloud Deployment: Vercel integration with automated CI/CD pipeline
- Type Safety: Full TypeScript implementation with strict type checking
- Angular 19 - Modern web framework with standalone components
- TypeScript 5.6 - Type-safe JavaScript development
- SCSS - Enhanced CSS with variables and mixins
- Bootstrap 5 - Responsive UI framework
- RxJS - Reactive programming for state management
- Angular CLI - Development tooling and build system
- Vercel - Cloud platform for deployment
- GitHub Actions - CI/CD automation
- Font Awesome & Devicons - Icon libraries
angular-portfolio/
βββ src/
β βββ app/
β β βββ components/ # Organized component structure
β β β βββ layout/ # Layout components
β β β β βββ header/ # Navigation header
β β β β βββ home/ # Main landing page
β β β βββ portfolio/ # Portfolio-specific components
β β β β βββ about/ # About section
β β β β βββ certificates/ # Certificates display
β β β β βββ contact/ # Contact information
β β β β βββ education/ # Education timeline
β β β β βββ experience/ # Work experience
β β β β βββ projects/ # Projects showcase
β β β β βββ skills/ # Skills grid
β β β βββ ui/ # Reusable UI components
β β β βββ loading-spinner/ # Loading component
β β β βββ theme-toggle/ # Theme switcher
β β βββ models/ # TypeScript interfaces
β β β βββ certificate.model.ts
β β β βββ contactInfo.model.ts
β β β βββ education.model.ts
β β β βββ experience.model.ts
β β β βββ project.model.ts
β β β βββ skill.model.ts
β β β βββ index.ts # Model exports
β β βββ services/ # Angular services
β β β βββ data.service.ts # Portfolio data management
β β β βββ error-handler.service.ts # Error handling
β β β βββ seo.service.ts # SEO optimization
β β β βββ theme.service.ts # Theme management
β β βββ app.component.* # Root component
β β βββ app.config.ts # App configuration
β β βββ app.module.ts # App module
β β βββ app.routes.ts # Routing configuration
β βββ environments/ # Environment configurations
β βββ styles/ # Global styles and themes
βββ public/
β βββ data/ # Portfolio data files
β β βββ data.json # Main portfolio data
β β βββ data.sample.json # Sample data template
β β βββ *.ts # TypeScript data files
β βββ favicon.ico # Site favicon
βββ api/ # Vercel serverless functions
β βββ fetch-portfolio.js # Portfolio data API
βββ script/ # Deployment utilities
β βββ uploadFile.js # Vercel blob upload
βββ .github/workflows/ # CI/CD pipelines
β βββ preview.yml # Preview deployment
βββ .vscode/ # VS Code settings
βββ angular.json # Angular CLI configuration
βββ package.json # Dependencies and scripts
βββ tsconfig.json # TypeScript configuration
- Standalone Components: Modern Angular approach without NgModules
- Service-Based State: Theme and data management through Angular services
- Reactive Programming: RxJS observables for theme state management
- Type-Safe Models: Comprehensive TypeScript interfaces for all data structures
- JSON-Driven Content: Portfolio data stored in configurable JSON files
- Environment-Based Configuration: Different data sources for development/production
- Serverless API: Vercel functions for dynamic data fetching
- Local Development Support: Static JSON files for offline development
- Node.js 18+ and npm
- Angular CLI 19+
- Git
-
Clone the repository
git clone https://github.com/QianqianQ/angular-portfolio.git cd angular-portfolio -
Install dependencies
npm install
-
Configure portfolio data
# Copy sample data file cp public/data/data.sample.json public/data/data.json # Edit the data file with your information # Update sections: about, experience, education, skills, certificates, projects
-
Start development server
npm start # or ng serve -
Open in browser
http://localhost:4200
npm start # Start development server
npm run build # Build for production
npm run watch # Build with file watching
npm test # Run unit tests
npm run lint # Run linting (if configured)The portfolio content is managed through JSON files in public/data/:
{
"about": {
"FULL_NAME": "Your Name",
"ABOUT_ME": "Your professional summary"
},
"contactInfo": [
{
"type": "email",
"icon": "fas fa-envelope",
"label": "Email",
"value": "your.email@example.com",
"link": "mailto:your.email@example.com"
}
],
"experience": [...],
"education": [...],
"skills": [...],
"certificates": [...],
"projects": [...]
}- Personal Information: Update
aboutsection with your details - Contact Details: Modify
contactInfoarray with your social links - Professional Experience: Add your work history in
experience - Education: Include your academic background
- Skills: List your technical skills with appropriate icons
- Certificates: Showcase your certifications with images and links
- Projects: Display your portfolio projects
-
Prepare data file
# Upload data to Vercel Blob Storage node script/uploadFile.js data/data.json -
Configure environment variables
PORTFOLIO_JSON_URL: URL of uploaded data.json fileBLOB_READ_WRITE_TOKEN: Vercel blob storage token
-
Deploy to Vercel
# Preview deployment vercel # Production deployment vercel --prod
The project includes automated deployment workflows:
- Preview Deployment: Triggers on pushes to master branch
- Environment Management: Handles Vercel environment variables
- Build Optimization: Automated production builds
Required GitHub Secrets:
VERCEL_ORG_IDVERCEL_PROJECT_IDVERCEL_TOKEN
- Automatic Detection: Respects system color scheme preference
- Manual Toggle: User can switch between light/dark themes
- Persistent Storage: Theme preference saved in localStorage
- Smooth Transitions: CSS transitions for theme switching
Modify theme variables in src/styles/:
_variables.scss: Color definitions and spacing_themes.scss: Light and dark theme implementationsstyles.scss: Global styles and theme application
- Lazy Loading: Route-based code splitting
- Tree Shaking: Unused code elimination
- Asset Optimization: Image and font optimization
- Bundle Analysis: Webpack bundle analyzer integration
- Data Caching: Service-level caching with retry logic
- Error Handling: Graceful fallbacks and user feedback
- Build Budgets: Configured size limits for bundles
- Lighthouse Integration: Performance auditing
- Core Web Vitals: Monitoring key performance metrics
- TypeScript Strict Mode: Enhanced type safety
- ESLint Configuration: Code quality enforcement
- Prettier Integration: Consistent code formatting
- Angular Style Guide: Following official conventions
All components moved to organized structure:
src/app/components/ui/- Reusable UI componentssrc/app/components/portfolio/- Portfolio-specific sectionssrc/app/components/layout/- Layout and navigationsrc/app/services/- Business logic servicessrc/app/models/- TypeScript interfaces