ACQ CRM Repo Overview Back to Operations Guides
Repo Overview

Acquira CRM is the internal operating layer for contacts, outreach, pipeline, inbox, calls, campaigns, and team collaboration.

This page condenses the teammate-facing parts of the repo README into an interactive guide. Use it when someone needs to understand what the CRM is, what is live today, how the repo is structured, and where the Codex command surface fits into the system.

Hosting

crm.acquira.coLive on Vercel with invite-only Google sign-in for approved @acquira.com users.

Primary Data Layer

Supabase + PrismaContacts, opportunities, activities, templates, tasks, and reporting state are stored in Postgres through Prisma.

Current Status

The current high-level system posture taken from the README and repo docs.

AreaCurrent Status
HostingLive on crm.acquira.co via Vercel.
DatabaseSupabase Postgres accessed through Prisma.
EmailGmail for 1:1 email and Resend for campaign or bulk email.
SMSTwilio for 1:1 SMS and marketing SMS.
CallsTwilio Voice for browser dialer, inbound handling, recording, Gemini summaries, and final-result logging.
Lead syncAirtable realtime webhook notification plus scheduled daily fallback sync.
Call recording storageGoogle Shared Drive for retained recordings and full transcripts.

Core Workspaces

The main operator-facing surfaces inside the CRM app.

WorkspaceDescription
DashboardContact and call reporting with daily snapshot refresh plus manual refresh.
ContactsContact search, ownership, activity timeline, tasks, messaging, and pipeline fields.
PipelineStage-based list or kanban workflow with filters, confidence, and next steps.
CallsBrowser dialer, caller-ID picker by state, and final call log view across agents.
InboxShared email inbox with contact matching and full email activity logging.
SMSFull inbound and outbound SMS messages linked to contacts.
CampaignsCampaign creation, editing, recipients, and send controls.
SettingsSync monitoring, templates, Saved Links, Signatures, team management, and configuration.

Integrations

The main integrated services and what they do in the live CRM.

IntegrationUse
Google OAuthUser authentication.
Gmail APIMailbox sync and 1:1 email sending.
TwilioSMS, inbound and outbound calls, tokens, and webhooks.
ResendCampaign and bulk email delivery.
AirtableContact sync and webhook updates.
SupabasePostgres database host.
VercelApp hosting and preview or production deployments.
Google Shared DriveLong-term storage for recorded-call audio and transcript files.
GeminiRecorded-call transcript and summary generation.

Airtable Sync Monitoring

How the live CRM now handles Airtable lead ingestion and where teammates should look first when sync behavior seems off.

ItemDescription
Realtime pathAirtable sends signed webhook notifications to /api/sync/webhook, which trigger overlap-based incremental CRM syncs using LAST_MODIFIED_TIME().
Fallback path/api/sync/auto/cron runs the scheduled daily fallback sync if realtime delivery is missed.
Monitoring UIOpen Settings → Sync in the CRM to review webhook health, last Airtable notification time, expiration timing, and recent realtime logs.
Warning bannerThe Sync tab surfaces a prominent warning if the webhook lookup fails, the webhook expires within 48 hours, the webhook looks stale, or realtime sync is not configured.
Current scopeRealtime coverage is tuned for Airtable creates and updates. Delete reconciliation is still a follow-up item.
Operator habit

If something seems off with new lead arrival, start in Settings → Sync before running manual sync commands. That view now shows whether the webhook is healthy, stale, or approaching expiration.

Local Setup and Environment

These are the basics a teammate needs before running the repo or CLI locally.

Run locally

  • npm install
  • cp .env.local.example .env.local
  • npm run db:generate
  • npm run dev

Environment groups

  • Database: DATABASE_URL, DIRECT_URL
  • Auth: NEXTAUTH_URL, AUTH_SECRET
  • Google: GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET
  • Airtable, Twilio, Gemini, Gmail Push, Drive uploads, and cron secrets

Codex Command Surface

Use the repo-local CRM commands when you want Codex to operate on CRM data from the terminal without browser automation.

CommandDescription
npm run crm:helpShow available CRM commands and examples.
npm run crm:nl -- "find Andi Cunanan"Interpret a natural-language CRM request.
npm run crm:contact -- --query "Name"Search contacts by name, email, phone, or company.
npm run crm:email -- --contact-id <contactId> --from-user-email contact@acquira.com --body "..."Save a 1:1 email draft in the Codex session workflow.
npm run crm:sms -- --contact-id <contactId> --message "..." --route CUSTOMER_CARE --user-email <agent@acquira.com>Save a compliance-safe SMS draft in the Codex session workflow.
npm run crm:send-draft -- --draft-id <draftId> --confirm-sendSend a previously saved email or SMS draft after approval from the Codex session workflow.
npm run crm:report -- --range week --jsonPrint a dashboard-style CRM summary.
npm run crm:task-count -- --user-email nathan@acquira.com --status OPEN --jsonCount tasks for a CRM user by status.
Important note

The CRM app no longer exposes a Drafts tab or Drafts APIs. Teammate setup and sharing guidance for the Codex/CLI workflow is covered in the separate interactive CLI Onboarding page.

Documentation Map

The main share-ready docs and where they fit.

DocumentDescription
crm-ui-walkthrough.htmlInteractive end-to-end user guide for the Acquira team.
crm-system-documentation.htmlInteractive full-system guide for runtime, integrations, pricing, and workflows.
cli-onboarding.htmlInteractive teammate onboarding for the repo-native CLI.
agent-onboarding.htmlInteractive onboarding for Codex use in this repo.
change-management-protocol.htmlInteractive change-control rules for keeping code, docs, and workflows aligned.