ttushar.

Full-stack developer · 2026

Loyallist

An all-in-one business platform for small businesses: CRM, two-way email and SMS, e-signature, inventory with WooCommerce sync, invoicing and billing, built on one shared contact record instead of five vendors that do not talk to each other.

Node.jsExpressMongoDBReactBull
Role
Full-stack developer
Scope
CRM, comms, commerce & queue infrastructure
Surface
95 models, 76 route modules, 80 controllers
Status
Live with business customers

The problem

What was broken

A small business with fifteen staff ends up running on subscriptions: one tool for the CRM, another for email campaigns, another for e-signatures, another for invoicing, something for inventory. Each is individually reasonable and the combination is a mess — not because of the cost, but because the customer now exists five times.

Five copies of every customer

A phone number updated in the CRM never reaches the mailing list. When a customer calls asking about their order, the answer is assembled from four tabs and a guess.

Humans as the integration layer

A quote signed in the e-signature tool does not become an invoice without someone retyping it — and every retype is a chance to get it wrong.

Syncs that fail silently

Integrations mostly relocate the problem. Every sync is a seam with a direction and a delay, and the failure mode is silence: the record that did not sync looks exactly like the record that did.

The empty-app cold start

A configurable platform greets a new business with nothing — no groups, no statuses, no pipelines — and asks someone who has never used it to design their own taxonomy before they can do anything. That is the moment they close the tab.

The product

What I built

Loyallist replaces the five-subscription stack a small business accumulates — CRM, email marketing, e-signature, invoicing, inventory — with one platform on one database, where every module reads the same contact record. The surface area is honest about what that costs: about 95 Mongoose models behind 76 route modules and 80 controllers, which is roughly the price of "replace five vendors."

Contacts sit at the centre, with communication flowing both directions through SendGrid, Twilio, IMAP sync and Lob. Documents run from forms through e-signature to invoices. Operations — tasks, events, chat — keep teams in the app daily, and commerce mirrors WooCommerce storefronts rather than replacing them. Underneath, nine Bull queues carry the unbounded work, node-cron handles schedules, Socket.IO pushes progress and chat, and notifications fan out to web push and Firebase. The onboarding generator closes the cold-start gap: instead of asking a new business to design a taxonomy, an LLM drafts one in their industry's vocabulary, validated before a single write and idempotent after it.

Capabilities

Key features

A CRM built on one record

Contacts with companies, relationships, typed custom fields, tags, groups, statuses, pipelines and a full activity trail — every module reads the same row, not a copy of it.

Genuinely two-way communication

Templated email and SMS with mass and scheduled sends going out; IMAP mailbox sync bringing replies back to land against the contact instead of only in someone's Outlook. Even physical direct mail, via Lob.

Documents that flow

E-signature envelopes, forms and responses, folders and quotes — and a quote becomes an invoice without a human retyping it, which was one of the original motivating annoyances.

Daily operations

Tasks with timers, checklists and configurable statuses, events with RSVPs, recurring schedules, and team chat with attachments and read status — the conversation about a customer lives next to the customer.

Commerce without replacing the store

Inventory with categories, spec sheets and warehouse locations, online and offline orders, invoicing, billing templates and Stripe payment history — mirroring an existing WooCommerce storefront rather than competing with it.

AI-generated onboarding

A business profile goes to an LLM and comes back as a full starting CRM setup — groups, categories, statuses, tags, task taxonomy and pipelines in the business's own vocabulary, so a law firm's tasks read Research, Drafting, Client Review, Filed instead of To Do and Done.

Under the hood

How it's engineered

Nine queues carrying the load

Contact and product imports, bulk operations, change logging, chat, notifications and IMAP sync all run through Bull queues — a map of everywhere the product would otherwise fall over. A 20,000-row import inside an HTTP request times out, gets retried, and runs twice; as a queued job it is inspectable state.

Onboarding that is safe to run twice

The AI setup job is idempotent because the interesting failure is a retry: partial output cleans itself up through soft deletes, and a completion guard stops the job from ever touching a company that has finished onboarding and holds live data.

Taxonomy as deliberate distinctions

Groups, categories, statuses, tags and pipelines are five different concepts on purpose — a relationship type is not a tier, is not a progression, is not a day-to-day filter. Collapsing them into one flexible list produces a product where nobody can express what they mean.

Deletion that isn't

Almost everything is soft-deleted with a change log alongside, because in a CRM a deleted contact is a relationship, possibly a contractual obligation, occasionally a legal record. Data survives the person who removed it.

Where it landed

Outcomes

The consolidation thesis holds where it matters: a customer exists once, an updated phone number is updated everywhere, and the answer to "what's happening with my order" comes from one screen. A quote becoming an invoice without retyping is exactly the kind of seam the five-tool stack could never close.

The honest ledger is about costs, not victories. Five tools fail separately; one platform fails together, sharing a database, a deploy and a blast radius — so a slow query in inventory is a slow app for someone doing outreach, and the standard rises everywhere. And every module competes with a company that does only that module, better. Loyallist's e-signature will not beat DocuSign on features; it wins on what DocuSign cannot know — who the contact is, what they bought, what the last five conversations were about. That advantage is only real if the shared contact record is genuinely shared, which is a schema discipline, not a feature list.