Manage client leads and sales follow-up process.
- Lead tracking dashboard
- Client communication logs
- Follow-up reminders
- Django / Firebase
- Backend: Django
- Frontend: React + Vite
- Database: Firebase Firestore for app data
- LLM: Hosted Hugging Face endpoint with fallback to local Ollama
- frontend: React app (landing page, login page, CRM workspace UI)
- backend: Django API (auth, leads, dashboard metrics)
- Python 3.10+
- Node.js 20+ (nvm recommended)
cd backendpython3 -m pip install --user -r requirements.txtcp .env.example .env- Fill in the Firebase values in
.env - Put your Firebase service account JSON at
backend/firebase-key.json python manage.py migratepython manage.py runserver
cd frontendnvm use 20npm installcp .env.example .env- Fill in the same Firebase web app config values used by the project
npm run dev
To connect to the same database, a new developer needs:
- The same Firebase project ID:
smartcrm-dd52b - The same web app config values from Firebase Console
- The Firebase service account JSON for the backend
- Firestore rules already published in the Firebase project
- The repo
.envvalues copied from.env.example
If they use different Firebase values, they will connect to a different database.
If you are handing this project to someone else, tell them to do this:
- Accept the Firebase project invite with their Google account.
- Copy
backend/.env.exampletobackend/.envand setFIREBASE_PROJECT_ID=smartcrm-dd52b. - Put a valid service account JSON file at
backend/firebase-key.json. - Copy
frontend/.env.exampletofrontend/.envand fill the Firebase web app config from Firebase Console. - Run
cd backend && python manage.py migrateandpython manage.py runserver. - Run
cd frontend && nvm use 20 && npm install && npm run dev. - Open the web app and verify that a new lead appears in Firestore.
For Android later, they only need the same Firebase project plus google-services.json from Firebase Console.
- If frontend fails with Node errors, run
nvm use 20insidefrontend. - If port 8000 or 5173 is already in use, stop old dev servers or run with a different port.
- If Firebase reads fail, confirm the backend
.envpoints tosmartcrm-dd52band the service account JSON is present. - If the web app connects to the wrong database, check the frontend
.envFirebase values.
- POST /api/auth/login/
- POST /api/auth/logout/
- GET /api/auth/session/
- GET /api/dashboard/
- GET /api/leads/
- POST /api/leads/
- PATCH /api/leads/<lead_id>/
- POST /api/leads/<lead_id>/notes/
Use two interfaces instead of one overloaded screen:
- Lead Intake Interface
- Purpose: capture clean lead input quickly
- Fields: company, contact, source, owner, estimated value, notes
- Used by: marketing ops, SDRs, admin
- Sales Workspace Interface
- Purpose: manage lead progression and follow-up
- Includes: pipeline cards, lead table, reminders, activity timeline
- Used by: account execs, sales managers
Recommended flow:
- new lead enters through intake form
- lead appears in workspace as stage=new
- sales team updates stage over time (qualified -> proposal -> negotiation -> won/lost)
- Lead pipeline
- Conversion reports