π¨ Overview
A production-ready React 18 portfolio website and full-stack business automation platform. Features comprehensive design portfolio showcases, integrated proposal generation, Stripe payment processing, QuickBooks Online accounting automation, and advanced business intelligence dashboards. Optimized for performance with mobile-first responsive design and iOS Safari compatibility.
Live Site: https://www.jmcrawforddesign.com
Deployment: Firebase Hosting with custom domain
Status: β
Production - Fully operational
Last Updated: January 2026
β¨ Key Highlights
- π― Portfolio Showcase: 25+ design projects with standalone optimized components
- πΌ Business Automation: Complete proposal-to-payment-to-accounting pipeline
- π± Mobile Optimized: iOS Safari compatibility fixes, responsive layouts, performance tuning
- β‘ Performance: Code splitting, lazy loading, optimized bundle size
- π Production Ready: Firebase backend, Stripe payments, QuickBooks integration, secure API handling
- π¨ Hero Carousel: Featured projects with dual-button functionality and custom PDF integration
π Core Features
π¨ Portfolio Showcase
Hero Carousel Featured Projects:
- Ideal GenAI Experience: Research study exploring ideal UX for generative AI tools with comprehensive analysis
- Decoding Design Systems: Interactive educational platform breaking down complex design system concepts
- Clover Golf App: Mobile app for coaches and teams with performance tracking and team management
- Survey of Data Visualization Tools - 2025: Medium article with downloadable PDF summary
- MD99 Platform: Web-based KPI visualization platform for developers
Featured Project: Portfolio Upgrade Case Study
- Standalone optimized component (
PortfolioUpgrade.js) showcasing 10-phase system optimization
- 79% code reduction (12,000 β 2,500 lines), 50% bundle size improvement, 32% faster FCP
- Interactive PDF documentation with preview thumbnails (5 technical documents)
- Mobile-optimized layout with responsive image scaling (max 1500px infographic)
- Professional presentation with ROI analysis (293% first year, 1,868% over 5 years)
- PDF preview images generated with macOS qlmanage tool
Design Portfolio (25+ Projects)
- Editorial Design: Silent Battle, Stoked on Stoicism Series, Ideal Experience Research
- Brand Identity: MD99 Platform, Clover Golf App, Total PT Connect, AG_CON 2026, Sea Kayak Georgia
- Print & Digital: Phantom Fireworks, Ranger Handbook, Space Monkey Mafia NFT Collection
- Architecture: Standalone components with image lightbox, AOS animations, responsive layouts
- iOS Compatibility: Removed react-pdf library and ProjectTemplate to fix iOS Safari crashes
πΌ Business Proposal System
4-Step Client Onboarding Workflow:
- Services Catalog (
/services) - Interactive selection with 29 professional services ($1,000-$21,500)
- Proposal Builder (
/proposal-builder) - Dynamic configuration with real-time pricing
- Proposal Review (
/proposal-review) - Professional presentation with Stripe payment integration
- Scheduling (
/proposal-next) - Calendly integration for kickoff meeting booking
Key Services:
- UI/UX Design: $1,200 - Design systems, user flows, interactive prototypes
- Brand Strategy & Identity: $900 - Logo, typography, color systems, collateral design
- Front-End Development: $1,500 - React/Bootstrap responsive applications
Features:
- localStorage draft persistence
- Real-time pricing calculations
- Client information validation
- Professional proposal presentation
- Seamless scheduling integration
π³ Stripe Payment Processing
Production Payment Infrastructure:
- Complete Stripe Elements integration with secure payment form
- Firebase Functions backend for payment intent creation (
createPaymentIntent.js)
- Webhook handling for payment confirmations (
stripeWebhook.js)
- Comprehensive test card support for development workflow
- Environment-based API key management (publishable/secret keys)
- Real-time payment status updates and error handling
Security Features:
- Server-side payment intent creation (no secret keys exposed client-side)
- Webhook signature verification for authentic Stripe events
- CORS configuration for secure cross-origin requests
- PCI-compliant payment form with Stripe Elements
Test Cards:
- Success:
4242 4242 4242 4242
- Declined:
4000 0000 0000 0002
- Processing Error:
4000 0000 0000 0119
π QuickBooks Online Integration
Automated Accounting Pipeline:
- Automatic customer record creation from Stripe payments
- Invoice generation with line items matching proposal services
- Payment recording with Stripe clearing account for proper reconciliation
- OAuth2 token management with automatic refresh (
qboAuth.js, qboClient.js)
- Sandbox testing environment before production deployment
- Comprehensive error logging and retry mechanisms
Financial Workflow:
- Stripe payment received β
stripeWebhook.js triggered
- Create QBO customer via
qboClient.createCustomer()
- Generate QBO invoice with service line items via
qboClient.createInvoice()
- Record payment against invoice via
qboClient.createPayment()
- Track Stripe fees in clearing account
- Bank reconciliation with deposit matching
π Advanced Analytics & Business Intelligence
Analytics Dashboard Features (AnalyticsDashboard.js):
- Real-time KPI tracking: revenue, conversion rates, proposal metrics
- Revenue forecasting with trend analysis
- Customer lifetime value calculations
- Service popularity and pricing optimization insights
- Email campaign performance tracking (delivery, open rates, revenue attribution)
- Interactive charts with Chart.js and Recharts
Automated Email Workflows (emailAutomation.js):
- Proposal delivery and follow-up sequences
- Abandoned proposal recovery (15-25% conversion lift)
- Project milestone notifications
- Payment confirmation and receipt delivery
π¦ Banking & Reconciliation Automation
Plaid Integration (plaidIntegration.js):
- Secure read-only bank account access (Chase, USAA, etc.)
- Real-time balance monitoring across multiple accounts
- Automatic transaction retrieval and categorization
- Stripe deposit detection and matching
Reconciliation Features (bankReconciliation.js):
- Daily matching of Stripe payouts with bank deposits
- QuickBooks transaction synchronization
- Discrepancy alerts for unmatched transactions
- Complete audit trail from payment to bank deposit
- BankingDashboard.js interface for monitoring
π οΈ Technical Architecture
Frontend Stack
Core Framework:
- React 18.2.0 - Component-based architecture with hooks
- React Router 6.9.0 - Client-side routing and navigation
- React Scripts 5.0.1 - Build tooling and development server (CRA)
- Bootstrap 5.3.8 - Responsive grid system and UI components
UI/UX Libraries:
- @coreui/react 5.7.0 - Professional dashboard components
- AOS 2.3.4 - Scroll-triggered animations (disabled on mobile for performance)
- Framer Motion 12.23.24 - Advanced animations and transitions
- Chart.js 4.5.1 + react-chartjs-2 5.3.1 - Analytics visualizations
- Recharts 3.6.0 - Additional charting capabilities
- lightbox.js-react 0.6.9 - Image gallery and zoom functionality
Business Integrations:
- @stripe/stripe-js 8.3.0 + @stripe/react-stripe-js 5.3.0 - Payment processing
- @emailjs/browser 3.11.0 - Contact form email delivery
- Calendly Widget - Embedded scheduling (loaded via CDN in index.html)
Backend Infrastructure
Firebase Services:
- Firebase Hosting - Production deployment with custom domain (www.jmcrawforddesign.com)
- Firebase Functions - Serverless backend (Node.js):
createPaymentIntent.js - Stripe payment intent creation
stripeWebhook.js - Stripe event handling with QBO integration
qboAuth.js - QuickBooks OAuth2 authentication endpoints
qboClient.js - QBO API client with token management and refresh
qboBiz.js - QBO business logic (customers, invoices, payments)
analyticsEngine.js - Business intelligence data processing
emailAutomation.js - Automated email workflow engine
proposalTracking.js - Proposal lifecycle tracking
bankReconciliation.js - Automated bank reconciliation logic
plaidIntegration.js - Bank account monitoring and transactions
API Integrations:
- Stripe API - Payment processing and webhook events
- QuickBooks Online API - Accounting automation and financial data
- Plaid API - Banking data and transaction retrieval
- Adobe PDF Services - Proposal PDF generation (planned)
- Calendly API - Scheduling and meeting management
Code Splitting & Lazy Loading:
- Route-based code splitting with React.lazy() and Suspense
- Lazy loading for all portfolio components
- Main bundle: 307.59 KB gzipped
- Chunk splitting: 305.js (88.58 KB), 769.js (10.74 KB), etc.
Mobile Optimizations:
- iOS Safari Compatibility Fixes:
- Removed react-pdf library (web worker incompatibility on iOS)
- Created standalone components for PortfolioUpgrade, Clover, DreamPosters, MD99
- Replaced PDF carousel with preview images and direct download links
- Performance Tuning:
- AOS animations disabled on mobile devices (detection via user agent)
- Responsive image sizing with max-width constraints
overflowX: hidden to prevent horizontal scroll
- Centered layouts with
maxWidth: 1360px and margin: 0 auto
Build Optimizations:
- Production builds with minification and tree shaking
- Asset optimization and compression
- CSS optimization with main bundle: 43.84 KB gzipped
- Webpack chunk optimization for better caching
Recent Fixes (January 2026):
- Fixed βLoading chunk 314 failedβ errors on iOS Safari
- Fixed home page blank screen (removed lazy loading from App component)
- Centered title alignment for Portfolio Upgrade section headings
- Generated PDF preview images using macOS
qlmanage tool
- Optimized infographic scaling (max 1500px, centered with equal spacing)
π Project Structure
JMC818386.github.io/
βββ my-app/ # Main React application
β βββ src/
β β βββ Components/
β β β βββ App.js # Home page (About + GraphicDesignBody)
β β β βββ ServicesMain.js # Service catalog page
β β β βββ ProposalBuilder.js # Interactive proposal configuration
β β β βββ ProposalReview.js # Proposal presentation & Stripe payment
β β β βββ ProposalNext.js # Calendly scheduling integration
β β β βββ QboAdmin.js # QuickBooks Online admin interface
β β β βββ AnalyticsDashboard.js # Business analytics dashboard
β β β βββ BankingDashboard.js # Banking reconciliation interface
β β β βββ Portfolio/
β β β β βββ ProjectTemplate.js # Data-driven template (not used for iOS-sensitive pages)
β β β β βββ Design/
β β β β βββ PortfolioUpgrade.js # Standalone component (iOS optimized)
β β β β βββ Clover.js # Standalone component (iOS optimized)
β β β β βββ DreamPosters.js # Standalone component (iOS optimized)
β β β β βββ MD99.js # Standalone component (iOS optimized)
β β β β βββ upgrade-media/ # PDF files and preview images
β β β β βββ ... (20+ other portfolio components)
β β β βββ TopNav.js # Navigation component
β β β βββ PortfolioNav.js # Portfolio navigation
β β β βββ Layout.js # Page layout wrapper
β β βββ config/
β β β βββ services.config.js # Service definitions & Calendly config
β β βββ data/
β β β βββ portfolioProjects.js # Portfolio project data (for ProjectTemplate)
β β βββ utils/
β β β βββ analytics.js # Analytics tracking utilities
β β βββ index.js # Application entry point & routing
β βββ public/
β β βββ index.html # HTML template with Calendly script
β β βββ upgrade-media/ # Static assets for Portfolio Upgrade
β β βββ *.pdf (5 files) # Technical documentation PDFs
β β βββ *_preview.png (5 files) # PDF preview thumbnails
β βββ build/ # Production build output
β βββ package.json # Dependencies and scripts
βββ functions/ # Firebase Functions backend
β βββ index.js # Functions export configuration
β βββ firebaseInit.js # Firebase admin initialization
β βββ createPaymentIntent.js # Stripe payment intent creation
β βββ stripeWebhook.js # Stripe webhook with QBO integration
β βββ qboAuth.js # QuickBooks OAuth endpoints
β βββ qboClient.js # QBO API client
β βββ qboBiz.js # QBO business logic helpers
β βββ analyticsEngine.js # Business analytics tracking
β βββ emailAutomation.js # Automated email workflows
β βββ proposalTracking.js # Proposal lifecycle tracking
β βββ bankReconciliation.js # Bank reconciliation automation
β βββ plaidIntegration.js # Plaid banking integration
β βββ sendForSignature.js # Adobe Sign integration (planned)
β βββ adobeSignWebhook.js # Adobe Sign webhook handler (planned)
β βββ package.json # Functions dependencies
β βββ QBO_SECRETS_SETUP.md # QuickBooks setup guide
βββ scripts/
β βββ generateProposalPdf.js # Adobe PDF generation script
β βββ create-backup.sh # Backup utility
β βββ safe-deploy.sh # Deployment script
βββ docs/ # Documentation and guides
β βββ PHASE_7_ANALYTICS_EMAIL_GUIDE.md
β βββ PHASE_8_BANKING_SETUP.md
β βββ QBO_INTEGRATION_GUIDE.md
β βββ STRIPE_INTEGRATION_README.md
β βββ STRIPE_SETUP.md
β βββ STRIPE_TESTING_GUIDE.md
β βββ ... (additional documentation)
βββ firebase.json # Firebase configuration
βββ .gitignore # Security rules for credentials
βββ package.json # Root package configuration
βββ README.md # This documentation
π Security & Configuration
Environment Security
Protected Credentials:
- Adobe PDF Services credentials (
.gitignore protected)
- Stripe secret keys (Firebase Functions environment variables)
- QuickBooks OAuth tokens (Firebase Functions secure storage)
- Plaid API keys (Firebase Functions environment variables)
Client-Side Security:
- Only Stripe publishable keys exposed to browser
- No secret keys in React codebase
- API requests authenticated through Firebase Functions
- Webhook signature verification for all external events
Deployment Security
- HTTPS: Enforced on all Firebase Hosting connections
- CORS: Proper cross-origin configuration for Firebase Functions
- OAuth2: Token-based authentication for QuickBooks integration
- Webhook Verification: Signature validation for Stripe and Adobe Sign events
- Git Exclusions: Sensitive files never committed (pdfservices-api-credentials.json, .env files)
π Getting Started
Prerequisites
- Node.js 16+ and npm
- Git for version control
- Code editor (VS Code recommended)
- Firebase CLI (
npm install -g firebase-tools)
Installation
- Clone the repository:
git clone https://github.com/JMC818386/JMC818386.github.io.git
cd JMC818386.github.io
- Install React app dependencies:
- Install Firebase Functions dependencies:
cd ../functions
npm install
cd ..
- Start development server:
- Access local development:
Production Deployment
# Build production version
cd my-app
npm run build
# Deploy to Firebase Hosting
cd ..
firebase deploy --only hosting
# Deploy Firebase Functions (if changed)
firebase deploy --only functions
π Available Scripts
React Application (/my-app/)
npm start - Development server with hot reload (port 3000)
npm run build - Production build with optimization
npm run test - Run test suite
npm run eject - Eject from Create React App (irreversible)
Firebase Functions (/functions/)
npm run serve - Start Functions emulator locally
npm run deploy - Deploy functions to Firebase
Root Level
firebase deploy --only hosting - Deploy React app to Firebase Hosting
firebase deploy --only functions - Deploy backend functions
firebase deploy - Deploy everything
π§ͺ Testing
Stripe Payment Testing
Test Cards (Stripe Test Mode):
- Success:
4242 4242 4242 4242 (any future expiry, any 3-digit CVC, any ZIP)
- Declined:
4000 0000 0000 0002
- Insufficient Funds:
4000 0000 0000 9995
- Processing Error:
4000 0000 0000 0119
Test Workflow:
- Navigate to
/services and select services
- Go to
/proposal-builder and fill out client information
- Review proposal at
/proposal-review
- Click βProcess Paymentβ and use test card
- Verify payment success message and Firebase Functions logs
Browser Compatibility
Tested & Verified:
- β
Chrome (latest) - Desktop & Mobile
- β
Firefox (latest) - Desktop & Mobile
- β
Safari (latest) - Desktop & iOS
- β
Edge (latest) - Desktop
- β
iOS Safari (iPhone 13) - Full compatibility after optimizations
- β
Android Chrome - Full compatibility
Lighthouse Scores (Target):
- Performance: > 90
- Accessibility: > 95
- Best Practices: > 95
- SEO: > 95
Build Metrics:
- Main bundle: 307.59 KB gzipped
- Largest chunk: 305.js (88.58 KB gzipped)
- CSS bundle: 43.84 KB gzipped
π¨ Design System
Color Palette
--color-bg: #fdfdfd /* Background - Clean minimal white */
--color-gray: #21272a /* Text - Dark gray for readability */
--color-silver: #7a7a7a /* Secondary text - Silver accents */
--color-primary: #007bff /* Primary action color */
--color-white: #ffffff /* Pure white for contrast */
Typography
- Inter: Modern sans-serif for headings, UI elements, professional interfaces
- Hind: Readable font for body text and descriptions
- System Fonts: Fallbacks for performance (
-apple-system, BlinkMacSystemFont, "Segoe UI")
Component Patterns
- Cards:
padding: 20px, borderRadius: 8px, boxShadow: 0 4px 12px rgba(0,0,0,0.3)
- Hover States:
translateY(-4px), enhanced shadow, color transitions
- Responsive Containers:
maxWidth: 1360px, margin: 0 auto, padding: 0 15px
- Grid System: Bootstrap
col-12 col-md-6 for responsive layouts
Bundle Analysis (Production Build):
Main bundle: 307.59 KB gzipped
CSS bundle: 43.84 KB gzipped
Largest chunk: 305.js (88.58 KB) - Core UI components
Total build: 402 files deployed
Optimization Strategies:
- Route-based code splitting
- Lazy loading for portfolio components
- AOS disabled on mobile
- Optimized image assets
- Webpack chunk optimization
Analytics Tracking
Business Metrics:
- Proposal creation and conversion rates
- Service selection popularity
- Payment processing success rates
- Customer lifetime value
- Revenue forecasting trends
Technical Metrics:
- Page load times (FCP, LCP, TTI)
- Error tracking and monitoring
- API response times
- Payment processing latency
π Recent Updates & Changelog
Critical Fixes:
- β
Fixed βLoading chunk 314 failedβ errors on iOS Safari
- β
Removed react-pdf library causing iOS web worker crashes
- β
Created standalone PortfolioUpgrade, Clover, DreamPosters, MD99 components
- β
Replaced PDF carousel with preview images and direct download links
- β
Generated PDF preview thumbnails using macOS
qlmanage tool
- β
Fixed home page blank screen by removing lazy loading from App component
Layout & Responsive Design:
- β
Centered title alignment for Portfolio Upgrade section headings
- β
Fixed Documentation section structure (title/body above PDF cards)
- β
Optimized infographic scaling (max 1500px, centered)
- β
Added responsive padding and maxWidth constraints
- β
Implemented
overflowX: hidden to prevent horizontal scroll
- β
Added drop shadows to PDF cards with hover effects
Component Architecture:
- β
Converted vertical ROI card layout to match other cards
- β
Disabled AOS animations on mobile for performance
- β
Optimized component lazy loading strategy
- β
Improved Bootstrap grid usage for responsive layouts
Previous Major Updates
Phase 8 - Banking & Reconciliation:
- Plaid integration for bank account monitoring
- Automated bank reconciliation with Stripe payouts
- BankingDashboard interface for transaction monitoring
Phase 7 - Analytics & Email Automation:
- AnalyticsDashboard with real-time KPIs
- Automated email workflows for proposal lifecycle
- Customer analytics and revenue forecasting
Phase 6 - QuickBooks Integration:
- Complete QBO accounting automation
- OAuth2 authentication and token management
- Automated customer, invoice, and payment creation
Phase 4-5 - Stripe Payment Processing:
- Full Stripe Elements integration
- Firebase Functions backend for payment intents
- Webhook handling with signature verification
π€ Contributing
This is a personal portfolio and business platform project. While the codebase is public for portfolio demonstration purposes:
- Issues: Bug reports and suggestions welcome
- Discussions: Architecture and implementation feedback appreciated
- Code Review: Comments on best practices and optimizations welcome
π License & Copyright
Copyright Β© 2025-2026 JM Crawford
This project represents personal portfolio work and business capabilities. The code structure and implementation approaches may be referenced for educational purposes, but direct copying of design assets, brand identity, content, or business logic is not permitted without explicit permission.
π Project Statistics
Codebase Metrics:
- Total Files: 402 files in production build
- React Components: 50+ components
- Portfolio Projects: 25+ design showcases
- Firebase Functions: 11 serverless backend functions
- API Integrations: 5 major third-party APIs (Stripe, QBO, Plaid, Calendly, Adobe)
- Lines of Code: ~15,000+ lines (React app + Firebase Functions)
Business Platform Features:
- Services Offered: 29 professional services
- Payment Processing: Full Stripe integration
- Accounting Automation: Complete QuickBooks Online pipeline
- Analytics: Comprehensive business intelligence dashboard
- Banking: Automated reconciliation with Plaid
Built with β€οΈ and careful attention to user experience, performance, mobile compatibility, and professional presentation.