Internal Infrastructure Document

MinuteMan
Car Wash

Communications Infrastructure
Four Locations. One System.

Twilio FreePBX Google Voice Odoo Washify POS Rinsed CRM Cloudflare
4
Locations

The Team

Current staff with extension assignments, outbound caller IDs, and Google Voice lines.

Alex Genson
VP
Location 39337 Mound Rd
Ext 103
Outbound 855-646-9274
GVoice 586-210-9986
Corp Office
Deanna
PH Call Agent
Location 39337 Mound Rd
Ext 101
Outbound 855-646-9274
GVoice 586-741-8927
Primary Agent
Mike
District Manager
Location 39337 Mound Rd
Ext 102
Outbound 855-646-9274
GVoice 586-210-0870
Corp Office
Peter
General Manager
Location 5020 Monroe St
Ext 104
Outbound 419-472-4466
GVoice 419-xxx-yyyy
Toledo GM
Pending Hires: Reynolds Rd (Ext 110) and Auburn Hills (Ext 120) General Manager positions will be provisioned upon hiring. Follow Me to Google Voice configured on day one.

Locations & Public Numbers

All inbound DIDs route through Twilio SIP trunks into FreePBX.

Corp Office
Headquarters
Address 39337 Mound Rd
Number 855-646-9274
Type Toll-Free
Active
5020 Monroe St
Toledo, OH
Number 419-472-4466
Ext 100
Active
633 S Reynolds Rd
Toledo, OH
Number 419-xxx-yyyy
Ext 110
Opening Fall 2026
3915 Auburn Rd
Auburn Hills, MI
Number 586-xxx-yyyy
Ext 120
Future Location

How It Works

A three-layer architecture — public PSTN → Twilio cloud → FreePBX internal routing.

📞
Customer
Dials toll-free 855 number or local store DID from any phone
☁️
Twilio Layer
Receives call · validates DID · forwards via SIP trunk to FreePBX
🖥
FreePBX Routing
Time conditions · ring groups · IVR · extensions · voicemail
Extension Rings FreePBX rings the assigned extension. Follow Me rules simultaneously forward to the agent's Google Voice number — no app install needed, works on any mobile.
Agent Answers Agent picks up on Odoo softphone, desk handset, or Google Voice mobile. Caller ID always shows the published store number — not a personal number.
Voicemail → Odoo Ticket Missed calls hit voicemail. FreePBX transcribes and emails the recording. Odoo Helpdesk auto-creates a ticket so nothing falls through the cracks.

Inbound Call Flow

Every inbound call — from first ring to live answer — follows this six-step path.

📲
01
Customer Dials
Calls 855-646-9274 or a local store DID (e.g. 419-472-4466)
☁️
02
Twilio SIP Trunk
Twilio receives the call and routes it to FreePBX via SIP trunk — no physical phone lines needed
🕐
03
Time Condition
FreePBX checks business hours. Open hours → Ring Group. Closed → After-hours announcement → voicemail
🔔
04
Ring Group
PH Agents ring first (Deanna, Alex). Falls to store extension, then voicemail if unanswered
📱
05
Follow Me
Extension simultaneously rings agent's Google Voice number — agent answers on their mobile without exposing personal number
06
Connected!
Agent answers live. Caller ID shows published store number. Call recorded per FreePBX policy

SMS Strategy

Three distinct SMS channels — each purpose-built for its use case.

🧾
Transactional SMS
via Washify POS
  • Purchase receipts
  • Payment confirmations
  • Membership renewal notices
  • Automated, system-triggered
  • No agent interaction needed
📣
CRM Campaigns
via Rinsed
  • Declined card win-backs
  • Cancellation saves
  • Promotional blasts
  • Targeted member segments
  • Drip sequences & automations
💬
Conversational SMS
Custom Portal · Planned
  • Inbound reply handling
  • Agent-to-customer threads
  • Cloudflare-secured portal
  • Odoo integration
  • Shared team inbox

Outbound Calling

All outbound calls present the published store number — never a personal line.

Agent Role Location Method Shows As
Deanna PH Call Agent 39337 Mound Rd Odoo Softphone 855-646-9274
Alex VP 39337 Mound Rd Odoo Softphone 855-646-9274
Mike District Manager 39337 Mound Rd Odoo or Handset 855-646-9274
Peter General Manager 5020 Monroe St Odoo Softphone + Store Handset 419-472-4466
Why this matters: Customers always see the same number they called — reinforcing brand identity and ensuring callbacks reach the right queue, not a personal voicemail.

What Staff Actually See

No new apps to learn. Calls flow through hardware they already know — a desk phone, a mobile notification, or the CRM screen that's already open.

MinuteMan Car Wash
Ext 104 · Peter
Active Call
419-555-0144
00:01:52
Hold Xfer Mute
Line 1
Line 2
Line 3
Line 4
1
2
ABC
3
DEF
4
GHI
5
JKL
6
MNO
7
PQR
8
TUV
9
WXY
*
0
+
#
Poly Edge E220
Desk phone at Monroe St (Ext 100). Standard SIP — plug into any internet connection, register to FreePBX, done. No special cabling, no vendor portal.
9:41●●● LTE
Google Voice
📞
MinuteMan Car Wash
855-646-9274
Forwarded → Ext 101 · Deanna
Google Voice · Follow Me
FreePBX rings the desk first, then forwards to the agent's personal Google Voice number. They answer on their cell — caller never sees that number.
minutemancarwash.odoo.com/crm
⬡ Odoo CRM
Active call
JD
Jane Doe
Member · Monroe St · Since 2022
Inbound · 419-472-4466 · answered
Helpdesk ticket #1042 auto-created
Last call: 14 days ago · 2m 18s
Softphone · SIP ext 101
419-472-4466
● 00:03:11
Odoo Softphone
Agents dial directly from the CRM. Every call is auto-logged, a helpdesk ticket is created on missed calls, and the customer record is right there on screen.
sms.minutemancarwash.com
Conversations
3 new
Mike T.
Is there a wait right now?
Sarah K.
Thanks for the quick reply!
Is there a wait right now?
No wait — come on in! 🚗
Perfect, on my way!
See you soon 👋
Reply to 586-555-0188…
Conversational SMS Portal
Inbound replies land in a shared team inbox — secured behind Cloudflare. Agents reply from one screen. No personal phones, no missed threads.

Adding a New Location

The system is built to grow. Provisioning a new site takes roughly two hours with no new software costs.

  1. 1
    Buy a DID — Purchase a local number in Twilio (~$1/mo). Point it to the existing SIP trunk.
  2. 2
    Create an Extension Block — Assign extension range (e.g., 110–119) in FreePBX for the new location.
  3. 3
    Set Up Ring Group — Create a ring group (e.g., 602) that includes PH Agents + new store extensions.
  4. 4
    Configure Follow Me — Add the new GM's Google Voice number to their extension Follow Me rules.
  5. 5
    Provision Handset — Register a physical desk phone or configure Odoo softphone with new extension credentials.
  6. 6
    Test & Go Live — Place test calls, verify caller ID, confirm voicemail-to-Odoo-ticket pipeline. Done.
~2
Hours Setup Time
$0
Additional Software Cost
$1
Per Month New DID
Locations Supported

Rollout Plan

Three phases from immediate cutover through Fall 2026 opening of Reynolds Rd.

Phase 1 — Now
Switch Twilio 855 & 419 numbers to SIP trunk
Configure Follow Me for Mike & Peter
Provision Monroe St desk handset (Ext 100)
Confirm Deanna's Odoo softphone operational
Test all inbound DIDs end-to-end
Verify voicemail → Odoo ticket pipeline
Phase 2 — 30 Days
10DLC SMS registration (brand + campaigns)
Launch custom SMS conversational portal
Deploy IVR on 855 toll-free number
Remove legacy SipStation trunks
Rinsed campaign integration review
Staff training on Odoo softphone + ticketing
Phase 3 — Fall 2026
Acquire 633 S Reynolds Rd local DID
Provision Extensions 110–119 in FreePBX
Create Ring Group 602 for Reynolds
Hire GM → configure Follow Me on day one
Install and provision desk handset on-site
Full go-live test before soft open

Why This Stack

We've run Vonage Business and Google Voice. We used Freshdesk for ticketing. Here's why every alternative we've evaluated falls short — in dollars, flexibility, hardware, and integrations.

Vonage Business
UCaaS / Hosted VoIP
We used this
Per-seat licensing — every user is a billable seat (~$25–$40/mo each). 4 staff = $100–$160/mo before a single call is made.
Proprietary hardware lock-in — required Vonage-certified desk phones. Phones wouldn't work on any other system if we left.
No real PBX control — routing rules, ring groups, and time conditions lived in a cloud GUI. Limited logic, no scripting.
Poor Odoo integration — no native connector. Required third-party middleware that broke on every update.
Contract lock-in — annual contracts with early termination fees. Scaling a new location meant renegotiating the plan.
Freshdesk
Help Desk / Ticketing
We used this — for ticketing only
Separate data silo — Freshdesk maintained its own customer database entirely apart from Odoo. Records drifted out of sync constantly — two sources of truth, neither trustworthy.
No native phone system — Freshcaller (their add-on VoIP product) is a separate paid subscription on top of Freshdesk. You're paying twice for what Odoo does natively.
No FreePBX bridge — no way to connect Freshcaller into an on-prem PBX. Agents would need yet another app alongside Odoo and the handset.
Migration cost — exporting ticket history, re-importing to Odoo, and retraining staff is non-trivial. Staying in two systems indefinitely was the path of least resistance — which is a cost too.
Why we moved off it — Odoo Helpdesk handles ticketing natively and is already connected to our CRM, contacts, and phone system. Zero reason to maintain both.
Google Voice
Standalone / Google Workspace
We used this
No real inbound routing — calls ring one number, one person. No ring groups, no time conditions, no IVR.
No SIP trunk support — can't connect to FreePBX as a trunk. It's a closed ecosystem that doesn't play with PBX infrastructure.
Caller ID unreliable for outbound — presenting a consistent business number across staff was hit-or-miss without a proper PBX layer.
No voicemail-to-ticket — voicemails land in Gmail. No automation path to Odoo without custom scripting.
Business tier requires Workspace — $6–$18/user/mo just for the Google account layer on top of Voice fees.
RingCentral
UCaaS / Enterprise VoIP
Expensive at scale — Core plan starts ~$20/user/mo, Advanced ~$25, Ultra ~$35. 5 users = $100–$175/mo minimum.
Proprietary ecosystem — RingCentral phones, apps, and integrations are designed to keep you inside their walled garden permanently.
Complex admin — enterprise-grade UI designed for IT departments, not a lean multi-site car wash operation.
Hardware dependency — certified handsets required for full feature set. Hardware becomes e-waste if you switch providers.
No Odoo integration out of the box — custom API work required; ongoing maintenance burden.
8x8 / Nextiva
Mid-Market VoIP Suites
Per-seat model punishes growth — $15–$44/user/mo per tier. Every new hire, every new GM, every new location adds a seat and a recurring bill.
Certified hardware lock-in — provisioning is locked to a vendor portal. Third-party SIP phones are blocked or feature-degraded. Your desk phones are worthless if you leave.
SMS is a premium add-on — A2P 10DLC support either absent or gated behind a higher tier. Not built for multi-channel SMS strategy.
Multi-location = enterprise pricing — managing DIDs across 4+ sites triggers "multi-site" tier upgrades costing 40–60% more than single-site plans.
Number portability is slow and painful — porting DIDs out takes 2–4 weeks minimum and often requires legal department escalation. You're not free to leave quickly.
3CX
Licensed Soft PBX
Annual license required for real features — the free tier is genuinely limited. Standard runs ~$175/yr (10 users), Pro ~$295/yr. Still needs a paid SIP trunk on top.
No native Odoo integration — requires a third-party community module or a custom API connector. This creates a maintenance burden on every Odoo or 3CX update.
Hosted-cloud option is per-user — 3CX's managed cloud hosting reverts to per-user pricing, negating the cost advantage of self-hosting entirely.
Less community support than FreePBX — FreePBX/Asterisk has 20+ years of documentation, modules, and community forums. 3CX's ecosystem is smaller and more proprietary.
Pricing model changed in 2023 — 3CX moved from perpetual to annual subscription. Customers who built on perpetual licenses were forced to migrate. We'd rather own our infrastructure outright.
Why Twilio + FreePBX + Google Voice + Odoo wins for us
No per-seat fees. We pay for what we use — Twilio charges per minute and per DID, not per employee on payroll.
Own our infrastructure. FreePBX runs on our hardware. No vendor can raise prices, change features, or shut us down.
Any SIP phone works. Standard SIP hardware from any manufacturer. Zero proprietary lock-in. Phones outlast any vendor relationship.
Google Voice as Follow Me — free. We're not paying for GVoice as a phone system; we use it as a free mobile forwarding layer only.
Native Odoo softphone. Agents call directly from the CRM. Every call is logged against the customer record automatically.
Full routing control. Ring groups, time conditions, IVR, follow-me, voicemail-to-email — all configured in FreePBX with no ticket to a vendor support team.
New location in 2 hours. Buy a $1/mo Twilio DID, add extensions in FreePBX. No new contracts, no hardware orders, no rep to call.
Voicemail → Odoo ticket automatically. Nothing falls through the cracks. No manual copy-paste between a help desk and a CRM.
Number portability always available. All DIDs live in Twilio. Port them anywhere in days if needed — we're never held hostage.
SMS built correctly. Washify for transactional, Rinsed for CRM campaigns, custom portal for conversational — each channel purpose-built, not bolted on.

Cost Breakdown

Apples-to-apples monthly cost for a 4–5 person team across 4 locations. Per-seat systems punish every hire and every new site.

System Model 4 Users / Month Add a Location Hardware Odoo Integration
Our Stack
Twilio + FreePBX + GVoice + Odoo
Usage-based ~$20–30 ~$1 / mo Any SIP phone Native
Vonage Business Used Per seat $100–$160 New seats + plan Vonage-only Middleware only
3CX + SIP Trunk
Self-hosted Standard + Twilio
License + usage ~$40–55 ~$1 DID + call vol. Standard SIP Community module
Google Voice Used
as standalone system
Per user (Workspace) $48–$72 New Workspace seat Any phone None
Freshdesk + Freshcaller
Ticketing used; Freshcaller not adopted
Per agent ×2 subs $120–$200 New agents + plan Standard SIP Not available
Vonage Business Used Per seat $100–$160 New seats + plan tier Vonage-only phones Middleware only
RingCentral Per seat $100–$175 New seats + site fee RC-certified only Custom API work
8x8 / Nextiva Per seat $80–$180 Multi-site tier Vendor-certified Not available
Twilio
~$20–35 / mo
DIDs ~$1/mo each. Inbound local: $0.0085/min · Inbound toll-free: $0.0110/min · Outbound: $0.0130/min. Est. 2,000 inbound + 800 outbound min/mo = ~$23 in usage.
FreePBX
$0 / mo
Open-source, self-hosted. No licensing fees ever. We own it — no vendor can change the price, deprecate a feature, or cut us off.
Google Voice
$0 / mo
Used only as a Follow Me forwarding target, not as a standalone phone system. Personal accounts — no Workspace fees.
Odoo Softphone
$0 additional
Built into the Odoo subscription we already pay for CRM, helpdesk, and operations. Zero incremental cost for VoIP capability.
Our total monthly communications cost
~$28 / month
vs. $120–$245/mo on any per-seat alternative.
Includes all Twilio minutes + DIDs. As we grow to 4 locations & 7 staff, our cost rises to ~$42/mo — while per-seat systems climb past $245/mo. Over 3 years: we spend ~$1,300 total vs. $6,000–$7,400 elsewhere.
Cumulative Cost Over 3 Years — Scaled to Our Growth
Per-seat costs spike at every new hire and every new location. Ours barely moves. Includes estimated Twilio minutes usage.
Our Stack (Twilio + FreePBX)
3CX + Twilio
Google Voice (Workspace)
Vonage Business
RingCentral
8x8 / Nextiva
Assumptions: Phase 1 (now) = 2 locations, 4 staff. Phase 2 (Fall 2026) = 3 locations, 5 staff (Reynolds Rd opens). Phase 3 (future) = 4 locations, 7 staff (Auburn Hills + new hires). Our stack minutes estimate: ~2,000 inbound min/mo at $0.0085–$0.011 + ~800 outbound min/mo at $0.013 + DID fees. Per-seat costs use published rack rates (Vonage $32/seat, RingCentral $35/seat, 8x8 $30/seat, GVoice Workspace $12/seat). All figures are monthly recurring — setup/hardware costs excluded.

Built to Scale.

One unified system. Zero per-seat licensing. Ready for the next location before you sign the lease.

4
Locations
$0
Per-Seat Licensing
2hr
To Add a Location
Scalability