The CRM is a web-based customer relationship management tool with a spreadsheet-first interface.
Key features:
Navigate to the CRM URL. If you're not logged in, you'll be redirected to the login page.
The menu bar at the top contains all navigation and actions:
| Section | Description |
|---|---|
| Sheet / Kanban | Toggle between spreadsheet and Kanban views |
| Filters | Open the saved filter presets bar |
| Category filters | Per-column filter buttons (Industry ▽, City ▽, etc.) with + to manage options |
| Quick presets | Saved filter combinations (appear as blue chips) |
| Import | Bulk import from XLSX/CSV |
| Panel toggles | Notes, Contacts, Tasks, Comms, Templates — each with count |
| Users | User management (admin only) |
| Your name | Click to change password |
| Logout | Sign out |
The main view is a full-screen editable spreadsheet showing customers (companies).
Columns:
| Column | Description |
|---|---|
| Company | Company name (required) |
| Website | Company URL |
| Industry | Business sector (dropdown) |
| City | Location (dropdown) |
| Tier | Customer tier (dropdown) |
| Source | Lead source (dropdown) |
| Stage | Pipeline stage (dropdown, triggers cadences) |
| Assigned To | User assignment (admin only, dropdown) |
| Next Action | Planned next step |
| Next Action Date | When to take action |
| Outcome | Result/status |
Editing:
Row selection:
Each category column has a filter button in the menu bar (e.g., "Industry ▽").
To filter:
Active filters show as ▼ in blue.
Saved filter presets:
Filters apply to both Sheet and Kanban views.
Category columns (Industry, City, Tier, Source, Next Action, Outcome) have manageable dropdown options.
To add/remove options:
Toggle to Kanban view using the Kanban button.
Features:
Toggle panels using the buttons in the menu bar. Only one panel shows at a time. Each panel has:
Fields:
Filters: Company, search, source (All/Manual/Auto), show done toggle
Completing: Click checkbox to mark done (auto-sets completedAt), click again to reopen.
Fields: Name, Designation, Phones (comma-separated), Email, LinkedIn, Note
Action buttons on each contact (don't trigger edit):
tel: link, click to callTypes: LI Connect, LI DM, Cold Email, Email Reply, Call, WhatsApp, Follow-up, Breakup Email
Each entry shows: Direction (IN/OUT), Channel (E/C/LI/WA), Status (sent/opened/replied/missed/completed)
Auto follow-ups: Logging an outbound communication automatically creates a follow-up task (e.g., "Follow up on cold email" due in 3 days).
Filter by channel: All/Email/Phone/LinkedIn/WhatsApp
Two tabs within this panel:
Templates tab:
{{company}}, {{contact_name}}, {{first_name}}, {{designation}}{{email}}, {{phone}}, {{city}}, {{industry}}Cadences tab:
The Assigned To column in the spreadsheet (admin only) shows which user is responsible for each customer.
Use the Assigned To ▽ filter in the menu bar to filter by assigned user.
Click Import in the menu bar (admin only).
Supported entities:
| Entity | Required | Optional |
|---|---|---|
| Companies | Company | Website, Industry, City, Tier, Source, Stage, Next Action, Outcome |
| Contacts | Company, Name | Designation, Phone 1, Phone 2, Email, LinkedIn, Note |
| Notes | Company, Note | — |
| Tasks | Title | Company, Description, Type, Priority, Due Date, Recurrence |
| Templates | Name, Subject | Body |
Steps:
Smart mapping: Headers like "Company Name", "PoC Name", "Email ID" are auto-recognized.
Click an email address on a contact to open the template selector:
{{company}}, {{first_name}}, etc.Cadences automate outreach when a customer enters a pipeline stage.
Example cadence for "New Lead":
| Step | Day | Action | Template |
|---|---|---|---|
| 1 | 0 | Send LI Connect | — |
| 2 | 1 | Send Cold Email | Intro Email |
| 3 | 3 | Follow-up Email | Follow Up 1 |
| 4 | 5 | Call | — |
| 5 | 10 | Breakup Email | Breakup |
When a customer moves to "New Lead" (via Kanban drag or spreadsheet edit), 5 tasks are auto-created with due dates calculated from today. Each task appears in the Tasks panel with a blue auto badge.
Notes support file attachments (images, PDFs, documents).
Adding attachments:
Viewing:
Files are stored in data/uploads/ on the server.
Change password:
Logout: Click the red Logout link.
| Feature | Admin | Regular User |
|---|---|---|
| View all customers | Yes | Only assigned |
| Assign users to customers | Yes | No |
| "Assigned To" column | Visible | Hidden |
| User management | Yes | No |
| Import data | Yes | No |
| Create/edit/delete data | Yes | Yes (own customers) |
| Manage column options | Yes | Yes |
| Manage templates & cadences | Yes | Yes |
| Key | Action |
|---|---|
| Enter | Confirm cell edit |
| Escape | Cancel edit / close modal |
| Tab | Move to next cell |
| Arrow keys | Navigate cells |
Special keys (Win, F1-F12, CapsLock, etc.) are blocked from affecting cell content.
Environment variables:
| Variable | Default | Description |
|---|---|---|
PORT |
3333 | Server port |
DATABASE_URL |
file:data/crm.db | SQLite database path |
AUTH_SECRET |
(dev default) | Session signing secret — must set in production |
BASE_URL |
http://localhost:3333 | Public URL for auth |
TRUSTED_ORIGINS |
http://localhost:3333 | Comma-separated trusted origins |
CORS_ORIGIN |
http://localhost:3333 | Comma-separated allowed CORS origins |
First run: Creates default admin user admin@crm.local with password password. Change immediately after first login.
Tech stack: BunJS, Elysia, SQLite (Drizzle ORM), React, FortuneSheet, better-auth