Skip to content

About

A portfolio website built with Angular

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Latest commit

Β 

History

36 Commits

Folders and files

Repository files navigation

Angular Portfolio

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.

πŸš€ Features

  • 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

πŸ› οΈ Tech Stack

Frontend

  • 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

Development & Deployment

  • Angular CLI - Development tooling and build system
  • Vercel - Cloud platform for deployment
  • GitHub Actions - CI/CD automation
  • Font Awesome & Devicons - Icon libraries

πŸ“ Project Structure

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

πŸ—οΈ Architecture

Component Architecture

  • 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

Data Management

  • 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

πŸš€ Quick Start

Prerequisites

  • Node.js 18+ and npm
  • Angular CLI 19+
  • Git

Local Development

  1. Clone the repository

    git clone https://github.com/QianqianQ/angular-portfolio.git
    cd angular-portfolio
  2. Install dependencies

    npm install
  3. 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
  4. Start development server

    npm start
    # or
    ng serve
  5. Open in browser

    http://localhost:4200
    

Available Scripts

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)

πŸ“Š Data Configuration

Portfolio Data Structure

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": [...]
}

Customization Guide

  1. Personal Information: Update about section with your details
  2. Contact Details: Modify contactInfo array with your social links
  3. Professional Experience: Add your work history in experience
  4. Education: Include your academic background
  5. Skills: List your technical skills with appropriate icons
  6. Certificates: Showcase your certifications with images and links
  7. Projects: Display your portfolio projects

🌐 Deployment

Vercel Deployment

  1. Prepare data file

    # Upload data to Vercel Blob Storage
    node script/uploadFile.js data/data.json
  2. Configure environment variables

    • PORTFOLIO_JSON_URL: URL of uploaded data.json file
    • BLOB_READ_WRITE_TOKEN: Vercel blob storage token
  3. Deploy to Vercel

    # Preview deployment
    vercel
    
    # Production deployment
    vercel --prod

GitHub Actions CI/CD

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_ID
  • VERCEL_PROJECT_ID
  • VERCEL_TOKEN

🎨 Theming

Theme System

  • 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

Customizing Themes

Modify theme variables in src/styles/:

  • _variables.scss: Color definitions and spacing
  • _themes.scss: Light and dark theme implementations
  • styles.scss: Global styles and theme application

πŸ“ˆ Performance

Optimization Features

  • 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

Performance Monitoring

  • Build Budgets: Configured size limits for bundles
  • Lighthouse Integration: Performance auditing
  • Core Web Vitals: Monitoring key performance metrics

πŸ”§ Development

Code Standards

  • TypeScript Strict Mode: Enhanced type safety
  • ESLint Configuration: Code quality enforcement
  • Prettier Integration: Consistent code formatting
  • Angular Style Guide: Following official conventions

6. Updated File Structure

All components moved to organized structure:

  • src/app/components/ui/ - Reusable UI components
  • src/app/components/portfolio/ - Portfolio-specific sections
  • src/app/components/layout/ - Layout and navigation
  • src/app/services/ - Business logic services
  • src/app/models/ - TypeScript interfaces

About

A portfolio website built with Angular

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages