Identity & Routing Strategy - The BIG Question

Date: 2026-01-04 Status: πŸ€” Design Discussion Question: How do we route messages long-term? What is the unique ID for companies and contacts?


🎯 The Challenge

Current State (Demo/MVP)

  • Supplier responds via magic link: /respond?requestId=REQ_123&phone=%2B27835775735

  • Phone number as primary identifier

  • No company concept yet

  • No multi-contact support

The Questions

  1. What is a Company's unique ID?

    • Is it a generated UUID?

    • Is it derived from first contact's phone?

    • Is it a company registration number?

  2. What is a Contact's unique ID?

    • Phone number as root identity?

    • Email as fallback?

    • What if someone changes their number?

  3. How do we route messages?

    • One company, multiple contacts (who receives what?)

    • One contact, multiple companies (freelancer working for different fleets)

    • Team structure (owner, manager, technician roles)


πŸ’‘ Your Ideas + Strategic Analysis

Option 1: Phone-First Identity (WhatsApp Model)

Concept: Phone number IS the identity, everything else is metadata

Pros:

  • βœ… Matches WhatsApp mental model (contacts = people, not companies)

  • βœ… Simple onboarding (one person, one phone)

  • βœ… Natural team growth (add teammates later)

  • βœ… Phone number portability (if Joe changes numbers, create new identity)

Cons:

  • ❌ What if Joe loses his phone? (New number = new identity)

  • ❌ Company structure unclear at start

  • ❌ Who "owns" the company account?

Use Case:


Option 2: Email-First Identity (SaaS Model)

Concept: Email IS the identity, phone is just a notification channel

Pros:

  • βœ… Standard SaaS model (understood by developers)

  • βœ… Email doesn't change as often as phone

  • βœ… Clear company ownership (owner email)

Cons:

  • ❌ More friction (need email upfront)

  • ❌ Doesn't match WhatsApp model (we lose zero-signup flow)

  • ❌ Many suppliers don't use email actively


Option 3: Hybrid - Phone for Identity, Company for Routing

Concept: Phone is root identity, company is routing layer

Pros:

  • βœ… Zero-signup preserved (phone is initial identity)

  • βœ… Stable identity even if phone changes (update Contact.phone)

  • βœ… Flexible routing (different contacts for different request types)

  • βœ… Team structure emerges naturally

Cons:

  • ❌ More complex database schema

  • ❌ Routing logic complexity

Use Case:


Phase 1: MVP (Current)

Just Contacts

  • Phone number as primary identifier

  • Name collected on first response

  • No company concept yet

  • Direct phone-to-phone messaging

Phase 2: Company Emergence (After First Beta)

Introduce Company Layer

  • After X requests from same contact, prompt: "Are you a business?"

  • Create company record if yes

  • Link contact as owner

Phase 3: Smart Routing (After Observing Usage)

Routing Rules

  • Observe which contacts handle which types of requests

  • Allow manual routing rules: "Urgent tires β†’ Tom, Everything else β†’ Joe"

  • AI suggestions: "I notice Tom handles all urgent requests. Want to route them automatically?"


🚦 Message Routing Logic

Phase 1 (MVP): Direct Contact

Phase 2: Company Routing

Phase 3: Multi-Contact Notification


πŸ€” Open Questions for Discussion

1. Phone Number as Primary Key?

Pros: Simple, matches WhatsApp model, zero signup Cons: What if someone changes their number?

Proposed Solution:

  • Phase 1: Phone is primary key

  • Phase 2: UUID is primary key, phone can be updated (with verification)

2. Company Discovery?

When do we prompt: "Are you a business? What's the name?"

  • After 3 requests from same contact?

  • After they respond to 2 different fleets?

  • Manual trigger: "Want to add your business name?"

Proposed Solution:

  • Wait until they've seen value (3-5 successful requests)

  • Soft prompt: "Looks like you're running a business. Want to add a business name?" [Yes] [Not now]

3. Team Member Addition?

How does Joe add Tom?

  • Joe sends invite via WhatsApp?

  • Joe enters Tom's number in settings?

  • Tom receives request, responds, system asks: "Are you with ABC Tires?"

Proposed Solution:

  • Start with option 3 (organic discovery)

  • Later add option 1 (manual invite)

4. Multi-Company Freelancers?

Tom works for ABC Tires AND XYZ Mechanical

  • Does Tom have one Contact record or two?

  • How do we show "Tom (ABC Tires)" vs "Tom (XYZ Mechanical)" to fleets?

Proposed Solution:

  • One Contact record for Tom

  • Tom can be linked to multiple companies via company_contacts table

  • When Tom responds, system asks: "Which business is this for? [ABC Tires] [XYZ Mechanical] [Personal]"


πŸ“‹ Next Steps

  1. Implement Phase 1 (MVP) - Just contacts, phone-based

  2. Observe real usage - See how suppliers actually organize themselves

  3. Design Phase 2 - Based on observed patterns, not assumptions

  4. Iterate on routing - Let complexity emerge from actual needs

Key Principle: Start simple (phone + name), let structure emerge from usage.


🧠 Your Ideas?

This is the foundation - what are your thoughts on:

  1. Phone vs Email as primary identity?

  2. When to introduce company concept?

  3. How routing should work for teams?

  4. Multi-company contact handling?

Let's discuss and refine before building Phase 2! πŸš€

Last updated

Was this helpful?