π A modern, high-performance React portfolio showcasing enterprise-grade web development
π Live Demo β’ π Documentation β’ π§ Admin Panel β’ π Report Bug
ReactSparkPortfolio is a production-ready, enterprise-grade developer portfolio built with React 19, TypeScript, and Vite. It demonstrates modern frontend engineering best practices, serverless architecture, and cloud-native deployment patterns. The project serves as both a personal portfolio and a comprehensive reference implementation for scalable, maintainable web applications.
- π¨ Modern UI/UX - Bootstrap 5 + custom SCSS with dark/light theme switching
- β‘ Performance First - Vite + lazy loading + code splitting for optimal UX
- π Type Safety - Full TypeScript implementation with strict mode
- π Multi-Platform - Dual deployment (Azure Static Web Apps + GitHub Pages)
- π Real-time Features - SignalR chat, live weather, dynamic content
- βΏ Accessibility - WCAG compliant with semantic HTML and ARIA
- π± Responsive - Mobile-first design that works on all devices
- π CI/CD Ready - Automated builds and deployments via GitHub Actions
graph TD
A[React Frontend] --> B[Azure Functions API]
A --> C[External APIs]
B --> D[WebSpark Backend]
C --> E[OpenWeather API]
C --> F[RSS Feeds]
A --> G[SignalR Hub]
G --> H[Real-time Chat]
A --> I[Static Assets]
I --> J[Azure CDN]
- π Dark/Light Mode - Persistent theme switching with smooth transitions
- π± Responsive Design - Mobile-first approach with Bootstrap 5 components
- β‘ Fast Loading - Optimized bundle size with lazy-loaded components
- π SEO Optimized - Meta tags, Open Graph, JSON-LD structured data
- βΏ Accessible - WCAG 2.1 AA compliant with keyboard navigation
- π Real-time Chat - SignalR integration with multiple AI personalities
- π€οΈ Weather Widget - Live weather data with interactive maps (Leaflet)
- π° RSS Integration - Dynamic blog post feeds with XML parsing
- π Fun Elements - Random jokes API integration
- π Project Showcase - Searchable, sortable portfolio with admin panel
- πΊοΈ Interactive Maps - Location-based weather visualization
- π§ Admin Interface - Live project management with image browser
- π TypeScript - Strict type safety and IntelliSense support
- π§ͺ Modern Tooling - ESLint, Prettier, SCSS compilation
- π Documentation - Comprehensive guides in
/documentation - π Hot Reload - Instant development feedback with Vite
π― Frontend Core
- React 19.1 - Latest React with concurrent features
- TypeScript 5.9 - Type safety and modern JavaScript features
- Vite 7.0 - Lightning-fast build tool and development server
- React Router 7.7 - Client-side routing and navigation
π¨ Styling & UI
- Bootstrap 5.3.7 - Responsive component framework
- SCSS/Sass 1.89 - Enhanced CSS with variables and mixins
- React Bootstrap 2.10 - Bootstrap components for React
- Bootstrap Icons 1.13 - Comprehensive icon library
- Bootswatch 5.3 - Bootstrap theme variants
π§ State & Data
- React Context API - Global state management
- Axios 1.11 - HTTP client for API requests
- date-fns 4.1 - Modern date utility library
- xml2js 0.6 - XML parsing for RSS feeds
π APIs & Integration
- SignalR 9.0 - Real-time web communication
- OpenWeather API - Weather data via WebSpark proxy
- JokeAPI - Entertainment content integration
- Leaflet 1.9 - Interactive maps and geolocation
βοΈ Cloud & Deployment
- Azure Static Web Apps - Serverless hosting with CDN
- Azure Functions - Serverless API endpoints
- GitHub Pages - Alternative static hosting
- GitHub Actions - CI/CD automation
π§Ή Development Tools
- ESLint 9.32 - Code linting and quality
- TypeScript ESLint - TypeScript-specific linting
- Concurrently - Run multiple npm scripts
- rimraf - Cross-platform file removal
- ts-node - TypeScript execution for scripts
ReactSparkPortfolio/
βββ π± src/ # Source code
β βββ π§© components/ # React components
β β βββ About.tsx # About section with tech stack
β β βββ Articles.tsx # RSS blog integration
β β βββ Chat.tsx # SignalR real-time chat
β β βββ Header.tsx # Navigation with theme toggle
β β βββ Hero.tsx # Landing page hero section
β β βββ Projects.tsx # Portfolio project showcase
β β βββ WeatherForecast.tsx # Weather widget with maps
β β βββ ... # Additional components
β βββ π¨ scss/ # SCSS styling
β β βββ components/ # Component-specific styles
β β βββ utilities/ # Custom utility classes
β β βββ variables/ # SCSS variables and mixins
β β βββ styles.scss # Main stylesheet entry
β βββ π§ contexts/ # React context providers
β βββ π data/ # Static data files
β βββ οΏ½ services/ # API service layers
β βββ π models/ # TypeScript interfaces
β βββ βοΈ utils/ # Utility functions
βββ βοΈ api/ # Azure Functions
β βββ proxy-rss/ # RSS proxy function
βββ ποΈ admin/ # Project management interface
βββ π documentation/ # Project documentation
βββ ποΈ docs/ # Production build output
βββ βοΈ .github/ # GitHub workflows and templates
βββ π Configuration files # Various config files
# Clone the repository
git clone https://github.com/markhazleton/ReactSparkPortfolio.git
cd ReactSparkPortfolio
# Install dependencies
npm install
# Start development server
npm run devπ That's it! Open http://localhost:3000 to see the app.
| Command | Description |
|---|---|
npm run dev |
π Start development server with hot reload |
npm run build |
π¦ Build production bundle |
npm run preview |
π Preview production build locally |
npm run lint |
π Lint codebase with ESLint |
npm run clean |
π§Ή Remove build artifacts and cache |
npm run build-css |
π¨ Compile SCSS to CSS |
npm run watch-css |
ποΈ Watch and compile SCSS changes |
npm run generate-seo-files |
π Generate sitemap.xml and robots.txt |
The project is configured for automatic deployment to Azure Static Web Apps:
- Automatic CI/CD - Triggered on push to
mainbranch - Serverless API - Azure Functions for backend services
- Global CDN - Worldwide content delivery
- Custom Domains - SSL certificates included
- Preview Deployments - Automatic PR previews
Configuration Files:
.github/workflows/azure-static-web-apps-*.yml- GitHub Actions workflowstaticwebapp.config.json- Azure SWA routing and settingsapi/- Azure Functions for serverless backend
Alternative deployment to GitHub Pages:
# Build and deploy to GitHub Pages
npm run build
git add docs/
git commit -m "Deploy to GitHub Pages"
git push origin mainSetup: Enable GitHub Pages in repository settings, source: /docs folder.
The project includes a full-featured admin interface for managing portfolio content:
# Navigate to admin directory
cd admin
# Install dependencies
npm install
# Start admin server
npm run dev- π Project Management - Add, edit, delete portfolio projects
- πΌοΈ Image Browser - Visual image selection with previews
- π URL Validation - Real-time accessibility checking
- π± Responsive Interface - Works on all devices
- οΏ½ Data Persistence - Projects saved to JSON file
Access: http://localhost:3001 (when admin server is running)
# Run linting
npm run lint
# Type checking
npx tsc --noEmit
# Check for outdated dependencies
npm outdated# Security audit
npm audit
# Fix vulnerabilities
npm audit fix- Semantic HTML - Proper heading hierarchy and landmarks
- ARIA Labels - Screen reader compatibility
- Color Contrast - WCAG 2.1 AA compliant
- Keyboard Navigation - Full keyboard accessibility
We welcome contributions! Please see our Contributing Guide for details.
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
- π Complete Documentation - Comprehensive guides
- ποΈ Admin Guide - Admin panel usage
- ποΈ Architecture Guide - System design
- π Deployment Guide - Deployment options
- WebSpark - Backend API ecosystem
- PromptSpark - AI prompt engineering
- DataSpark - Data visualization platform
- Lighthouse Score: 95+ across all metrics
- Bundle Size: <500KB gzipped
- First Contentful Paint: <1.5s
- Time to Interactive: <3s
- οΏ½ Issues: GitHub Issues
- π¬ Discussions: GitHub Discussions
- π Bug Reports: Use the bug report template
- β¨ Feature Requests: Use the feature request template
This project is licensed under the MIT License - see the LICENSE file for details.
- React Team - For the amazing framework
- Microsoft Azure - For excellent cloud services
- Bootstrap Team - For the responsive framework
- Vite Team - For the lightning-fast build tool
- Open Source Community - For countless contributions
- Responsive Design: Mobile-first, accessible, and optimized for all device sizes (Bootstrap 5.3)
- Dark/Light Mode: Theme toggle with persistent context-based state
- Dynamic Content: RSS feed integration, real-time weather, jokes, and chat
- TypeScript: Strict type safety and modern React patterns
- SEO Optimized: Meta tags, Open Graph, and JSON-LD structured data
- Serverless Backend: Azure Functions for API/data proxying
- Dual Deployment: GitHub Pages & Azure Static Web Apps (with CI/CD)
- CI/CD: Automated builds and deployments via GitHub Actions
- Accessibility: Semantic HTML, ARIA, and color contrast best practices
- Performance: Lazy loading, code splitting, and optimized assets
- Frontend: React 19.1, TypeScript 5.8, Vite 6.3
- Styling: Bootstrap 5.3.5, SCSS/Sass, React Bootstrap, Bootstrap Icons
- State Management: React Context API
- Routing: React Router v7.5
- APIs: Axios, OpenWeather, JokeAPI, SignalR (real-time chat), XML2JS (RSS)
- Maps: Leaflet & React Leaflet
- Markdown: React Markdown
- Date Handling: date-fns
- Syntax Highlighting: Prism.js
- Serverless: Azure Functions (API)
- CI/CD: GitHub Actions
- Deployment: Azure Static Web Apps, GitHub Pages
ReactSparkPortfolio/
βββ public/ # Static assets
βββ src/
β βββ assets/ # Images, SVGs
β βββ components/ # React components (hooks/, modules/)
β βββ contexts/ # React context providers
β βββ css/ # Compiled CSS
β βββ data/ # Static data (JSON, XML)
β βββ models/ # TypeScript interfaces/types
β βββ scss/ # SCSS source files (components/, utilities/, variables/)
β βββ services/ # API/data services
β βββ App.tsx # Main app
β βββ main.tsx # Entry point
βββ api/ # Azure Functions (serverless API)
βββ docs/ # Production build output
βββ .github/ # Workflows, issue/PR templates
βββ scripts/ # Utility scripts (SEO, robots.txt, etc.)
βββ vite.config.ts # Vite config
βββ tsconfig.json # TypeScript config
βββ staticwebapp.config.json# Azure SWA config
βββ swa-cli.config.json # SWA CLI config
βββ package.json # Dependencies & scripts
- Node.js: v18 or higher
- npm: v9+ recommended
- .env files: Supports environment-specific config via
.env,.env.development,.env.production, etc. Seevite.config.tsfor details. - Required Variables: (example)
VITE_BASE_URL- Base URL for the appOPENWEATHER_API_KEY- (if using direct weather API)- See
vite.config.tsand service files for more
# Clone the repository
git clone https://github.com/markhazleton/ReactSparkPortfolio.git
cd ReactSparkPortfolio
# Install dependencies
npm install| Script | Description |
|---|---|
npm run dev |
Start dev server with HMR and SCSS watcher |
npm run build |
Build production bundle (outputs to docs/) |
npm run preview |
Preview local production build |
npm run lint |
Lint codebase with ESLint |
npm run clean |
Remove build artifacts and cache |
npm run build-css |
Compile SCSS to CSS |
npm run watch-css |
Watch and auto-compile SCSS |
npm run generate-sitemap |
Generate sitemap.xml |
npm run generate-robots |
Generate robots.txt |
npm run generate-seo-files |
Generate all SEO files |
npm run dev
# Open http://localhost:3000- Lint:
npm run lint(uses ESLint, seeeslint.config.js) - Type Checking: TypeScript strict mode enabled
- Formatting: (Recommend using Prettier or VSCode default)
npm run build
npm run preview # (optional, to preview build)- Output is in
docs/(for GitHub Pages & Azure SWA)
- No automated tests included yet.
- Manual Testing: Use the live demo or local preview to verify features.
- Recommended: Add unit/integration tests with Jest, React Testing Library, or Cypress.
- Build:
npm run build(outputs todocs/) - Push: Commit and push
docs/tomainbranch - Enable Pages: In GitHub repo settings, set Pages source to
/docsonmain - Access:
https://<your-username>.github.io/<repository-name>/
-
Config Files:
staticwebapp.config.json,swa-cli.config.json,.github/workflows/azure-static-web-apps-gentle-smoke-063be0b10.yml
-
CI/CD Workflow: Automated publishing is handled by a GitHub Actions workflow:
- Trigger: Runs on push and pull requests to the
mainbranch. - Jobs:
build_and_deploy_job: Builds and deploys the app and API unless the PR is closed.close_pull_request_job: Cleans up deployments when a PR is closed.
Key Steps:
-
Checkout code: Uses
actions/checkout@v3with submodules. -
Setup Node.js: Uses
actions/setup-node@v3(Node 18, npm cache). -
Install dependencies: Runs
npm cifor clean install. -
OIDC Client: Installs
@actions/coreand@actions/http-clientfor authentication. -
Get Id Token: Uses
actions/github-script@v6to retrieve an OIDC token for Azure authentication. -
Build and Deploy: Uses
Azure/static-web-apps-deploy@v1with these settings:azure_static_web_apps_api_token: Secure token from repo secretsaction: "upload"app_location:/(root)api_location:api(serverless API)output_location:docs(Vite build output)app_build_command:npm run buildskip_app_build/skip_api_build: falsegithub_id_token: OIDC token for secure deployment
-
Close PR Deployments: When a PR is closed, the workflow runs a job to clean up preview deployments using the same Azure action.
Reference: See
.github/workflows/azure-static-web-apps-gentle-smoke-063be0b10.ymlfor the full workflow file. - Trigger: Runs on push and pull requests to the
-
Local Dev:
npm install -g @azure/static-web-apps-cli swa start
-
Features:
- Global CDN, SSL, serverless API, staging environments, advanced routing
- Dependencies: Run
npm outdatedandnpm updateregularly - Security: Use
npm auditand keep dependencies patched - Azure Best Practices: Use managed identity, never hardcode secrets, follow Azure security guidance
- Accessibility: Test with screen readers and color contrast tools
- Performance: Audit with Lighthouse, optimize images/assets
- Accessibility: Semantic HTML, ARIA, alt text, keyboard navigation, color contrast
- Security: No secrets in code, uses environment variables, follows Azure best practices
- Performance: Lazy loading, code splitting, optimized assets, CDN delivery
Contributions are welcome!
- Issues: Use GitHub Issues
- Pull Requests: Fork, branch, and submit PRs
- Code Style: Follow existing TypeScript/React patterns and lint rules
- Templates: See
.github/ISSUE_TEMPLATE/for bug/feature templates
- Q: Build fails on Windows?
- A: Ensure Node.js v18+, use PowerShell, and check for locked files in
node_modules.
- A: Ensure Node.js v18+, use PowerShell, and check for locked files in
- Q: Weather/Chat/API not working?
- A: Check environment variables and API keys.
- Q: Styling issues?
- A: Run
npm run build-cssand ensure SCSS compiles without errors.
- A: Run
- Q: How do I update dependencies?
- A:
npm updateand review changelogs for breaking changes.
- A:
- Semantic HTML5, meta tags, Open Graph, JSON-LD, canonical URLs, mobile-friendly, fast loading
- See
index.htmland SEO context for implementation details
- Building My First React Site Using Vite and GitHub
- Adding Weather to My Profile Application
- Using TypeScript with React: Lessons Learned
This project is licensed under the MIT License - see the LICENSE file for details.
- Issues: GitHub Issues
- Pull Requests: Welcome!
- General Questions: Please use GitHub Issues for all support and contact
Built with β€οΈ by the ReactSparkPortfolio community. Report an issue