Product guide
ReplyBox CRM is a kanban-style board system for turning WhatsApp conversations into sales, support, and follow-up work. Boards hold stages, cards, contact context, chat links, assignees, tags, and privacy rules.
Working model
Teams can move between boards such as CRM, Sales Pipeline, Support Queue, or a custom template without leaving the ReplyBox shell.
Admins create, rename, recolour, reorder, and delete stages. Stage colours come from a fixed palette so both themes stay legible.
Cards can show client name, ticket title, tags, assignee, and phone. Contact-backed fields stay derived from the contact record.
Cards move between stages or within a stage using neighbour ids and fractional positions, so one move writes one card.
Owners can preview what another teammate sees, but server-side privacy gates still decide what data is actually returned.
New boards start from templates with visible stage previews before the team commits to a workflow.
Inbox bridge
The inbox conversation menu includes Create ticket for users with crm:card. The dialog carries chat context into a CRM card: title from the conversation, assignee from the chat owner, contact from the conversation, and both contact_id and conversation_id on the card.
Load-bearing decisions
Client name and phone come from contacts through contact_id. Copying them onto cards would leave stale numbers in the place agents use to follow up.
crm_card_tags uses the org tag catalog for names and colours, but it must not sync into contact, conversation, or broadcast tag scopes.
Moves use after_card_id and before_card_id, not array indexes. The server writes the midpoint and rebalances only when needed.
Privacy
A private board is visible only to created_by_user_id, including against admins. The only exception is an ownerless private board, where crm:manage holders can see and remove it so orphaned data does not become permanent.
Every board-scoped read and write resolves through the same visibility gate: list boards, get board, list stages, list cards, create card, and move card.
Implementation map
app/models/crm.py, migration 0112_crm_boards, schemas, services, templates, board CRUD, card CRUD, move API, and tests are in place.
The /crm route, board canvas, stage columns, card tiles, dialogs, toolbar, optimistic moves, and inbox Create ticket flow are wired.
Custom fields, Socket.IO crm.card.* cache updates, board search, saved views, and duplicate-chat hints are still future work.
Keep true
crm:* permission to already-cloned organization roles, not only role templates.crm_card_tags out of tag mirroring, broadcast audience filters, and reconcile-tags.load_board so private-board enumeration stays blocked.conversation_id; do not turn it into a real tag.