Orange Charger's interactive partner and incentive data visualization tool.
-
Interactive Spreadsheet: Full Excel-like editing with AG Grid
- Upload and download
.xlsxfiles - Edit cells inline
- Add rows and columns
- Two sheets: EC Partners and Incentives
- Automatic validation on upload
- Upload and download
-
Interactive US Map: State-level choropleth visualization
- Incentive density color coding
- Partner coverage overlay
- Click states for detailed breakdowns
- Filter by partner type and incentive level
- Hover tooltips with quick stats
-
Password Protected: Simple access code gate
- Node.js 18+ and npm
- The Excel file:
Copy of Approved Install Partner Nework .xlsx
-
Clone or extract this project
-
Install dependencies:
npm install
-
Set up environment variables:
- Copy
.env.exampleto.env.local - Set
ACCESS_CODEto your desired password
- Copy
-
Run the development server:
npm run dev
- You'll be prompted to enter the access code
- Upload your Excel file from the spreadsheet page
- Data will be validated and loaded
- Navigate to the map to see visualizations
partner-coverage-app/
├── app/
│ ├── api/ # API routes (data, upload, download, auth)
│ ├── login/ # Login page
│ ├── spreadsheet/ # Spreadsheet view with AG Grid
│ ├── map/ # Interactive map view
│ └── layout.tsx # Root layout with design system
├── components/
│ ├── spreadsheet/ # Upload and validation modals
│ └── map/ # Map components (legend, filters, detail panel)
├── lib/
│ ├── excel-parser.ts # Excel parsing and validation
│ ├── schema.ts # Column schema definitions
│ └── state-mapping.ts # State normalization logic
└── data/ # Runtime data storage (created automatically)
Colors:
#F4F1EAWarm ivory (page background)#FF571DFlame orange (primary CTA)#FF8961Coral orange (hover states)#FFBCA5Peach (light accents)#AEB595Olive sage (partner coverage)#D6DACAPale sage (alternating rows)#F9F7F3Off-white (card surfaces)#D2D2D0Soft gray (borders)#606639Dark olive (text)
Typography:
- Font: Plus Jakarta Sans
- Headers: 22px / 700
- Body: 14px / 400
- Captions: 12px / 400
- Push your code to GitHub
- Import project in Vercel
- Set environment variable:
ACCESS_CODE - Deploy
The file-based data storage works on Vercel's filesystem (ephemeral), so for production use, consider:
- Upgrading to Vercel Postgres or Supabase for persistent storage
- Using Vercel Blob for the Excel file storage
Ensure the platform supports:
- Node.js 18+
- Next.js 15
- File system write access (for
data/directory)
- Row 1: Title
- Row 2: Headers (Partner Type, Contractor, Contact, Phone Number, Email, Areas Services, Union, Orange Projects, Price Point, Project Referrals, Notes)
- Row 3+: Data
- Row 1: Group headers (Level 1 Outlet, Level 2 Outlet, EVSE, Readiness/Panel Upgrade)
- Row 2: Column headers
- Row 3+: Data
Partner coverage areas are freeform text that get normalized to US state abbreviations:
- "CA (will travel)" → CA
- "So Cal, No Cal" → CA
- "NY, NJ, MA, CT, MD" → NY, NJ, MA, CT, MD
- "Nationwide" → All 50 states
- "Texas (will travel)" → TX
Internal tool for Orange Charger. Not for public distribution.
For issues or questions, contact the development team.