A lightweight CRM for sales teams to map and route company visits. Import your accounts from Excel, plot them on Google Maps, and plan an optimized driving route for the day.
- Company management — add, edit, and delete companies with contact info and notes
- Excel import — drag and drop a
.xlsxor.csvfile, auto-maps columns, geocodes all addresses - Interactive map — all companies plotted as pins (red = not planned, blue = planned, green = visited)
- Day planner — pick a date, check the companies you're visiting, and generate an optimized driving route
- Visit tracking — mark stops as visited throughout the day
- Frontend: React 18 + Vite
- Backend: Express (Node.js)
- Storage: JSON file (
server/crm.json) - Maps: Google Maps JavaScript API (Geocoding + Directions)
- Node.js 18+
- A Google Maps API key with Maps JavaScript API, Geocoding API, and Directions API enabled
# Install all dependencies
npm run setup
# Add your API key
echo "VITE_GOOGLE_MAPS_API_KEY=your_key_here" > client/.env.local
# Start both servers
npm run devApp runs at http://localhost:5173 — the backend API runs on port 3001.
- Go to console.cloud.google.com
- Create a project and go to APIs & Services → Library
- Enable: Maps JavaScript API, Geocoding API, Directions API
- Go to Credentials → Create API Key
- Paste it into
client/.env.local
Google provides $200/month in free credits — more than enough for normal CRM usage.
- Push this repo to GitHub
- Create a new Web Service on render.com connected to your repo
- Set the environment variable
VITE_GOOGLE_MAPS_API_KEYin Render's dashboard - Render auto-detects
render.yaml— just hit Deploy - In Netlify DNS, add a
CNAMErecord:crm→your-app.onrender.com
Any .xlsx or .csv file works. Column names are auto-detected — common variations like "Company", "Business Name", "Street", "Location", "Tel", etc. are all recognized. At minimum you need a name column and an address column.
| Company Name | Address | Contact Name | Phone | |
|---|---|---|---|---|
| Acme Corp | 123 Main St, Tampa, FL 33601 | Jane Smith | (813) 555-0100 | jane@acme.com |