John-Michael Crawford

JM Crawford Portfolio & Business Platform

🎨 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


πŸš€ Core Features

🎨 Portfolio Showcase

Hero Carousel Featured Projects:

Featured Project: Portfolio Upgrade Case Study

Design Portfolio (25+ Projects)

πŸ’Ό Business Proposal System

4-Step Client Onboarding Workflow:

  1. Services Catalog (/services) - Interactive selection with 29 professional services ($1,000-$21,500)
  2. Proposal Builder (/proposal-builder) - Dynamic configuration with real-time pricing
  3. Proposal Review (/proposal-review) - Professional presentation with Stripe payment integration
  4. Scheduling (/proposal-next) - Calendly integration for kickoff meeting booking

Key Services:

Features:

πŸ’³ Stripe Payment Processing

Production Payment Infrastructure:

Security Features:

Test Cards:

πŸ“Š QuickBooks Online Integration

Automated Accounting Pipeline:

Financial Workflow:

  1. Stripe payment received β†’ stripeWebhook.js triggered
  2. Create QBO customer via qboClient.createCustomer()
  3. Generate QBO invoice with service line items via qboClient.createInvoice()
  4. Record payment against invoice via qboClient.createPayment()
  5. Track Stripe fees in clearing account
  6. Bank reconciliation with deposit matching

πŸ“ˆ Advanced Analytics & Business Intelligence

Analytics Dashboard Features (AnalyticsDashboard.js):

Automated Email Workflows (emailAutomation.js):

🏦 Banking & Reconciliation Automation

Plaid Integration (plaidIntegration.js):

Reconciliation Features (bankReconciliation.js):


πŸ› οΈ Technical Architecture

Frontend Stack

Core Framework:

UI/UX Libraries:

Business Integrations:

Backend Infrastructure

Firebase Services:

API Integrations:

Performance Optimizations

Code Splitting & Lazy Loading:

Mobile Optimizations:

Build Optimizations:

Recent Fixes (January 2026):


πŸ“‚ 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:

Client-Side Security:

Deployment Security


πŸš€ Getting Started

Prerequisites

Installation

  1. Clone the repository:
    git clone https://github.com/JMC818386/JMC818386.github.io.git
    cd JMC818386.github.io
    
  2. Install React app dependencies:
    cd my-app
    npm install
    
  3. Install Firebase Functions dependencies:
    cd ../functions
    npm install
    cd ..
    
  4. Start development server:
    cd my-app
    npm start
    
  5. 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/)

Firebase Functions (/functions/)

Root Level


πŸ§ͺ Testing

Stripe Payment Testing

Test Cards (Stripe Test Mode):

Test Workflow:

  1. Navigate to /services and select services
  2. Go to /proposal-builder and fill out client information
  3. Review proposal at /proposal-review
  4. Click β€œProcess Payment” and use test card
  5. Verify payment success message and Firebase Functions logs

Browser Compatibility

Tested & Verified:

Performance Metrics

Lighthouse Scores (Target):

Build Metrics:


🎨 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

Component Patterns


πŸ“ˆ Performance & Analytics

Current Performance

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:

Analytics Tracking

Business Metrics:

Technical Metrics:


πŸ”„ Recent Updates & Changelog

January 2026 - iOS Compatibility & Performance Fixes

Critical Fixes:

Layout & Responsive Design:

Component Architecture:

Previous Major Updates

Phase 8 - Banking & Reconciliation:

Phase 7 - Analytics & Email Automation:

Phase 6 - QuickBooks Integration:

Phase 4-5 - Stripe Payment Processing:


🀝 Contributing

This is a personal portfolio and business platform project. While the codebase is public for portfolio demonstration purposes:


πŸ“ž Contact & Connect


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:

Business Platform Features:


Built with ❀️ and careful attention to user experience, performance, mobile compatibility, and professional presentation.