A complete portfolio-ready CRM system with three integrated layers: Excel data backend, Python sync server, and beautiful HTML/JS frontend.
Note: The live demo may take a moment to load as it's hosted on a free tier. The demo includes sample data and all features are fully functional.
- Layer 1: Excel Backend (
customers.xlsx) - Data storage with styled sheets - Layer 2: Python Backend (
server.py) - Flask REST API bridge - Layer 3: Frontend (
index.html) - Beautiful single-page application
- Dashboard: Interactive KPI cards, status breakdown charts, recent activity feed
- Customer Management: Full CRUD operations, inline editing, advanced search & filtering
- Activity Logging: Timeline view, add activities per customer, bulk operations
- Data Export: Export to CSV, JSON, or Excel formats
- Responsive Design: "Refined Cream & Ink" theme with smooth micro-interactions
- Real-time Updates: Live data sync between Excel and frontend
- Dark Mode: Toggle between light and dark themes with persistent preferences
- Keyboard Shortcuts: Power-user shortcuts (Ctrl+D, Ctrl+K, Ctrl+N, etc.)
- Interactive Charts: Deal value distribution and monthly trends visualization
- Advanced Search: Filter by deal value range, dates, tags, and more
- Bulk Operations: Select multiple customers for bulk actions
- Loading States: Professional loading animations and error handling
- Performance Optimized: Virtual scrolling, sticky headers, efficient rendering
-
Install dependencies
python3 -m venv venv source venv/bin/activate # On Windows: venv\Scripts\activate pip install -r requirements.txt
-
Generate Excel data
python setup_excel.py
-
Start the server
python server.py
-
Open the application
- Open
index.htmlin your browser, or - Visit
http://localhost:8000(if using Python's built-in server)
- Open
Ctrl + D- Toggle dark modeCtrl + K- Focus searchCtrl + N- Add new customerCtrl + E- Export dataCtrl + R- Refresh page
Click the "Shortcuts" button in the app for more help.
GET /customers- Get all customersGET /customers/<id>- Get customer with activity logPOST /customers- Add new customerPUT /customers/<id>- Update customerDELETE /customers/<id>- Delete customerPOST /customers/<id>/log- Add activity log entryGET /stats- Get aggregate statisticsGET /health- Health check
- Colors: Warm off-white (#f7f3ee), deep ink (#1a1410), terracotta accent (#c1440e)
- Typography: Playfair Display (headings), DM Mono (data)
- Interactions: Hover states, smooth animations, toast notifications
- Layout: Sidebar navigation, card-based content, responsive design
The system comes pre-populated with:
- 15 realistic customer records
- 20 activity log entries
- Various status types (Lead, Active, Churned, Prospect)
- Different deal values and company types
- Python 3: Core language
- Flask: REST API framework
- openpyxl: Excel file manipulation
- Flask-CORS: Cross-origin resource sharing
- Gunicorn: Production WSGI server
- HTML5: Semantic markup
- CSS3: Modern styling with CSS variables
- JavaScript (ES6+): Vanilla JS with modern features
- Canvas API: Custom chart implementations
- Web APIs: Fetch, LocalStorage, Blob
- Excel Workbook: Database alternative with styled sheets
- Google Fonts: Playfair Display (headings), DM Mono (data)
- CSS Grid & Flexbox: Responsive layouts
- CSS Variables: Theme management
- Python Virtual Environment: Dependency isolation
- Git: Version control
- Render: Cloud deployment platform
mini-crm/
|-- setup_excel.py # Generates customers.xlsx with sample data
|-- server.py # Flask REST API server
|-- index.html # Complete frontend application
|-- customers.xlsx # Auto-generated Excel database
|-- requirements.txt # Development dependencies
|-- requirements_production.txt # Production dependencies
|-- Procfile # Heroku/Render deployment config
|-- gunicorn_config.py # Gunicorn server configuration
|-- .gitignore # Git ignore file
|-- README.md # This documentation
|-- venv/ # Python virtual environment (gitignored)
- Fork this repository to your GitHub account
- Create a Render account at render.com
- Connect your GitHub account to Render
- Create a New Web Service:
- Choose your forked repository
- Use the following build settings:
- Build Command:
pip install -r requirements_production.txt && python setup_excel.py - Start Command:
gunicorn server:app
- Build Command:
- Add Environment Variable:
PYTHON_VERSION=3.9
- Deploy! Your app will be live at
https://your-app-name.onrender.com
- Create a PythonAnywhere account
- Upload your files via Web interface or Git
- Install dependencies in a virtual environment
- Configure a web app using the Flask template
- Set the working directory and point to
server.py
Similar to Render - both support Flask apps with Git deployment.
# Install production dependencies
pip install -r requirements_production.txt
# Generate Excel data (if needed)
python setup_excel.py
# Start with Gunicorn
gunicorn server:app- Excel as Database: All operations read/write directly to
customers.xlsx - CORS Enabled: Works with local development and cross-origin requests
- No Build Tools: Pure HTML/CSS/JS - runs in any modern browser
- Virtual Environment: Recommended for dependency isolation
- Production Ready: Includes Gunicorn configuration and deployment setup
- Data Persistence: Excel file maintains data between server restarts
- Concurrent Safety: File locking prevents data corruption
- Modify
setup_excel.pyto add columns to the Excel file - Update the frontend forms and table headers
- Adjust API endpoints to handle new fields
Edit the CSS variables in index.html:
:root {
--bg-primary: #your-color;
--accent: #your-accent;
/* etc */
}The chart system is extensible - add new chart types in the JavaScript section.
- Issues: Report bugs or request features via GitHub Issues
- Contributions: Pull requests are welcome!
- Questions: Check the keyboard shortcuts help (Ctrl+H) in the app
Built with β€οΈ for demonstrating full-stack development capabilities
This project is designed to showcase modern web development skills and is perfect for portfolios, interviews, or learning purposes.
This project showcases advanced full-stack development skills:
- Creative Data Layer: Using Excel as a database alternative with styled sheets
- Three-Layer Architecture: Clean separation between data, API, and presentation
- RESTful API Design: Well-structured endpoints with proper HTTP methods
- Modern UI/UX: Professional "Refined Cream & Ink" design system
- Frontend Engineering: Vanilla JavaScript with ES6+, custom charts, state management
- Backend Development: Flask API with CORS, error handling, and data validation
- Performance Optimization: Loading states, virtual scrolling, efficient rendering
- Accessibility: Keyboard navigation, semantic HTML, ARIA support
- Dark Mode: Theme switching with CSS variables and localStorage
- Keyboard Shortcuts: Power-user productivity features
- Data Visualization: Custom canvas-based charts and graphs
- Advanced Search: Multi-field filtering with range queries
- Bulk Operations: Selection management and batch actions
- Export Functionality: Multiple format support (CSV, JSON, Excel)
- Production Ready: Gunicorn configuration and deployment setup
- Cloud Deployment: Render.com integration with GitHub
- Environment Management: Development vs production dependencies
- Version Control: Proper Git workflow and ignore patterns
- Responsive Design: Works seamlessly on desktop, tablet, and mobile
- Micro-interactions: Smooth animations and hover states
- Error Handling: User-friendly toast notifications and validation
- Real-time Updates: Live data synchronization across components