A zero-login, local-first sales CRM web app that runs entirely in your browser. No backend, no authentication, no external APIs β just pure client-side magic with IndexedDB persistence.
Preview URL: https://skill-deploy-0upah6o69k-agent-skill-vercel.vercel.app
Claim URL: https://vercel.com/claim-deployment?code=7e2b2570-4aed-4d66-841d-e6ac558e4e26
(Transfer to your Vercel account)
- Complete lead profiles: Name, company, role, email, phone, source, tags, stage, value, notes
- Customizable stages: New β Contacted β Qualified β Proposal β Won β Lost
- Tagging system: Organize leads with custom tags
- Pipeline value tracking: Track total and won deal values
- π Dashboard: Follow-up reminders (overdue, today, upcoming) + recent activity + stats
- π Kanban Board: Drag-and-drop leads between stages
- π Table View: Sortable columns, inline stage editing, responsive cards on mobile
- π€ Lead Detail: Full lead view with activity log
- Track interactions: Email, Call, Meeting, Note, Task
- Outcome tracking: Positive, Neutral, Negative, No Response
- Next steps: Record follow-up actions
- Activity history: Chronological timeline per lead
- Next follow-up dates: Set and track follow-ups
- Dashboard buckets: Overdue (red), Today (orange), Upcoming (blue)
- Visual alerts: Overdue follow-ups highlighted in table view
- Full-text search: Name, company, email, phone
- Stage filter: Filter by pipeline stage
- Source filter: Filter by lead source
- Tag filter: Multi-select tag filtering
- Persistent UI: Filters apply across all views
- JSON backup: Full database export for backup/migration
- CSV export: Leads table for spreadsheets/reporting
- JSON import: Restore from backup file
- Responsive layouts: Touch-friendly from 320px to desktop
- Adaptive views: Card layouts on mobile, tables on desktop
- Sticky headers: Easy navigation on all screens
- Framework: Vite + React + TypeScript
- Styling: Tailwind CSS (mobile-first responsive)
- Data: IndexedDB for persistent storage
- No backend: Runs entirely client-side
- No auth: Zero-login experience
Just visit the preview URL above β your data is stored in your browser's IndexedDB.
# Clone the repository
git clone https://github.com/agent-cortex/pocket-crm.git
cd pocket-crm
# Install dependencies
npm install
# Start development server
npm run dev
# Open http://localhost:5173# Build for production
npm run build
# Preview production build
npm run preview
# Deploy to Vercel
vercel- Click Dashboard β + New Lead
- Fill in lead details (name and company required)
- Set a follow-up date to track your next action
- Add tags for organization (e.g., "Hot Lead", "Enterprise")
- Switch to Kanban view
- Drag leads between stage columns
- Click any lead to view full details
- Open a lead detail page
- Click + Log Activity
- Choose activity type (Email, Call, Meeting, etc.)
- Record outcome and next steps
- Activities appear in chronological order
The Dashboard shows three buckets:
- Overdue (red): Past-due follow-ups β action needed
- Today (orange): Follow-ups due today
- Upcoming (blue): Future follow-ups scheduled
Use the search bar and filters to find leads:
- Search: Type name, company, email, or phone
- Stage: Select a pipeline stage
- Source: Filter by lead source
- Tags: Click tags to toggle filter
Backup (JSON):
- Click π₯ JSON to download full database
- Restore by clicking π€ Import and selecting your backup file
Report (CSV):
- Click π CSV to download leads as spreadsheet
- Open in Excel, Google Sheets, or any spreadsheet app
- 100% local-first: All data stored in your browser's IndexedDB
- No server: No data transmission, no tracking, no analytics
- No authentication: No passwords, accounts, or sign-ups
- Your browser, your data: Completely private and offline-capable
The app uses Tailwind CSS for styling. To customize:
- Edit
tailwind.config.jsfor theme changes - Modify stage colors in components (search for
stageColors) - Add custom fields to
src/types.tsand forms
- Browser-specific: Data is tied to the browser/device you use
- No cloud sync: Use JSON export/import to transfer data between devices
- IndexedDB limits: Browser storage quotas apply (typically 50MB-1GB)
interface Lead {
id: string
name: string
company: string
role: string
email: string
phone: string
source: string
tags: string[]
stage: 'New' | 'Contacted' | 'Qualified' | 'Proposal' | 'Won' | 'Lost'
value: number
notes: string
nextFollowUp: string | null // ISO date
createdAt: string
updatedAt: string
}
interface Activity {
id: string
leadId: string
date: string // ISO date
type: 'Email' | 'Call' | 'Meeting' | 'Note' | 'Task'
outcome: 'Positive' | 'Neutral' | 'Negative' | 'No Response'
notes: string
nextStep: string
createdAt: string
}This is a personal project, but feel free to fork and customize for your needs!
MIT β use it however you like!
Built with β€οΈ using:
Start managing your leads today β zero setup required! π