• Blog
  • Docs
  • Pricing
  • We’re hiring!
Log inSign up
dcm31

dcm31

crm

Open source CRM - contacts, companies, deals, activities
Public
Like
crm
Home
Code
3
backend
2
README.md
H
main.ts
Environment variables
Branches
1
Pull requests
Remixes
1
History
Val Town is a collaborative website to build and scale JavaScript apps.
Deploy APIs, crons, & store data – all from the browser, and deployed in milliseconds.
Sign up now
Code
/
README.md
Code
/
README.md
Search
2/5/2026
Viewing readonly version of main branch: v5
View latest version
README.md

⚡ CRM

A full-featured, open-source CRM built entirely on Val Town. Manage contacts, companies, deals, and activities with a modern dark UI — no external infrastructure needed.

Live Demo →

Features

📊 Dashboard

  • Pipeline value & revenue stats at a glance
  • Recent deals feed
  • Activity timeline

👤 Contacts

  • Full CRUD with search
  • Linked to companies
  • Job title, email, phone, location tracking
  • Color-coded avatar initials

🏢 Companies

  • Domain, industry, size tracking
  • Contacts auto-linked
  • Search & filter

💰 Deals Pipeline

  • Kanban board — visual pipeline with Lead → Qualified → Proposal → Negotiation → Won → Lost stages
  • Table view — sortable list of all deals
  • One-click stage transitions from kanban cards
  • Amount, probability, close date, linked contact & company

📋 Activities

  • Log notes, calls, emails, meetings, and tasks
  • Link to contacts, companies, or deals
  • Due date tracking
  • Chronological timeline view

Tech Stack

  • Runtime: Val Town (Deno)
  • Database: Val Town SQLite (persistent, zero-config)
  • Frontend: React 18 via esm.sh (no build step)
  • Styling: Custom CSS, dark theme
  • API: RESTful JSON endpoints

API Reference

All endpoints return JSON. Base URL is the val's HTTP endpoint.

Dashboard

MethodPathDescription
GET/api/dashboardPipeline stats & counts

Contacts

MethodPathDescription
GET/api/contacts?search=List/search contacts
GET/api/contacts/:idGet single contact
POST/api/contactsCreate contact
PUT/api/contacts/:idUpdate contact
DELETE/api/contacts/:idDelete contact

Companies

MethodPathDescription
GET/api/companies?search=List/search companies
GET/api/companies/:idGet single company
POST/api/companiesCreate company
PUT/api/companies/:idUpdate company
DELETE/api/companies/:idDelete company

Deals

MethodPathDescription
GET/api/deals?stage=List deals (optional stage filter)
GET/api/deals/:idGet single deal
POST/api/dealsCreate deal
PUT/api/deals/:idUpdate deal (including stage changes)
DELETE/api/deals/:idDelete deal

Activities

MethodPathDescription
GET/api/activities?contact_id=&company_id=&deal_id=List activities (filterable)
POST/api/activitiesCreate activity
PUT/api/activities/:idUpdate activity
DELETE/api/activities/:idDelete activity

Deal Stages

lead → qualified → proposal → negotiation → won / lost

Activity Types

note · call · email · meeting · task

Project Structure

main.ts          # HTTP handler — serves frontend + routes API
backend/
  db.ts          # SQLite schema, migrations, all data access functions
  api.ts         # REST API router

Extending

Some ideas for what to build on top:

  • CSV import/export for bulk contact uploads
  • Email integration via Val Town email vals
  • Webhooks on deal stage changes
  • Custom fields per entity type
  • Multi-user auth with Val Town environment variables
  • Reporting — win rate, avg deal size, sales velocity charts
FeaturesVersion controlCode intelligenceCLIMCP
Use cases
TeamsAI agentsSlackGTM
DocsShowcaseTemplatesNewestTrendingAPI examplesNPM packages
PricingNewsletterBlogAboutCareers
We’re hiring!
Brandhi@val.townStatus
X (Twitter)
Discord community
GitHub discussions
YouTube channel
Bluesky
Open Source Pledge
Terms of usePrivacy policyAbuse contact
© 2026 Val Town, Inc.