Develop Two-Way SMS Module
Budget: $3,000 – $5,000 USD
Budget Category Selected: MEDIUM ($3k–$5k). Stretch budget for FULL scope. Bid ONLY if you can deliver.
WHAT "FULLY SHIPPED WORKING PRODUCT" MEANS
You will deliver a production-ready, fully functional SMS feature set inside our existing SaaS (Laravel/Vue). Definition of Done:
Code in our GitHub, merged.
DB migrations run & safe.
Users can buy numbers, register A2P, send/receive SMS, build drips, view usage, export CSV.
Deployed in our production env.
Critical bugs fixed during burn-in window.
No prototypes. No "code handed to you to finish."
PROJECT OVERVIEW
Revamp365.ai = real estate investor SaaS. Need multi-tenant SMS layer:
User searches 3-digit prefix, buys 1+ US SMS numbers.
User registers own A2P 10DLC brand + campaign.
2-way SMS w/ contacts in app.
Threaded convo history, unread counts, search.
Drip automations (scheduled multi-step), quiet hours, throttle, stop-on-reply.
STOP/HELP compliance + opt-out ledger.
Usage tracking & CSV export (future billing).
US only. SMS only (no voice, no MMS). <50 active users at launch; architect to scale.
IN-SCOPE PHASES (ALL REQUIRED IN THIS CONTRACT)
PHASE 0 – Discovery/Tech Plan: Review codebase/tenancy; choose CPaaS (default Twilio ok); produce short written plan (arch, data model, queue, env vars, migrations). Must be approved before coding.
PHASE 1 – Number Search/Purchase: Prefix search -> provider inventory -> buy -> assign to user; My Numbers list; release flow.
PHASE 2 – A2P Brand/Campaign Reg: Wizard collects biz name, EIN, sample msg, support; submit via API; poll status; outbound blocked until approved (admin override).
PHASE 3 – Core 2-Way SMS + Compliance: Send outbound; receive inbound webhook; map to account/contact; create lead if unknown; persist msgs; STOP/HELP auto; suppress opted-out; delivery state updates.
PHASE 4 – Conversation UI: Recent thread list; unread counts; scrollback; compose box; message templates; search (name/number/text); responsive.
PHASE 5 – Drip Automations: Build campaign (audience select, steps w/ delays); start/pause; quiet hours (default 8a-8p local, configurable); throttle msgs/sec/user + global; optional stop on reply; basic stats.
PHASE 6 – Usage Ledger/Export/Admin: Per segment ledger; provider meta if available; monthly totals; CSV export; simple admin summary.
OUT OF SCOPE (CHANGE ORDER ONLY)
Voice/IVR/voicemail/WebRTC; MMS; advanced analytics; automated billing/charging; AI auto-reply; deliverability scoring; localization. If you wish to quote add-ons, mark separately.
TECH REQUIREMENTS
Backend (Laravel 12 / PHP 8.x):
Jobs/Queues (Redis or existing).
Provider abstraction interface (Twilio impl now; must support Plivo/SignalWire later).
Signed webhook verification; idempotent.
Encrypt message bodies (field or column); document.
Configurable rate limits & quiet hours (env/admin).
Safe migrations + rollback.
Frontend (Vue 3 + Tailwind):
Use existing components/layout.
Pinia or current store pattern.
Poll or realtime; match current infra.
Show status/errors (campaign pending, number inactive, failed send).
Security/Compliance:
STOP/HELP keyword parse + auto reply.
Opt-out ledger & suppression enforcement.
Quiet hours for marketing; transactional override.
Multi-tenant isolation: user sees only own data.
Audit admin overrides.
Testing:
Unit tests provider service (mocked).
Feature test inbound->conversation.
Drip scheduler test (delayed send).
Basic browser smoke: buy number, send, receive.
Performance targets (initial scale):
<50 users, ~1k outbound msgs/mo/user.
Fetch latest 50 msgs <300ms server time (indexed DB).
Outbound queue clears <1 min under expected load.
DATA MODEL (MIN REQUIRED – MAY EXTEND)
phone_numbers(id, account_id, e164, vendor, vendor_sid, status, country, a2p_brand_id, a2p_campaign_id, timestamps)
sms_messages(id, account_id, contact_id?, phone_number_id, direction, body, segment_count, vendor_sid, delivery_status, error_code?, sent_at?, received_at?, timestamps)
sms_conversations(id, account_id, contact_id, last_message_at, unread_count, last_direction, timestamps)
sms_optin_events(id, account_id, contact_id, source, opted_in_at?, opted_out_at?, keyword, timestamps)
sms_usage_ledger(id, account_id, phone_number_id, direction, segment_count, carrier?, provider_cost_cents?, meta_json, occurred_at, timestamps)
MILESTONES & PAYMENT (FIXED PRICE REQUIRED)
M1 Discovery/Tech Plan approved.
M2 Number Search/Purchase live in staging.
M3 A2P Reg flow functional; status visible; outbound block enforced.
M4 Core Send/Receive + STOP/HELP + message persistence; minimal convo list.
M5 Full Conversation UI + Drip Automations (quiet hours, throttle, stop-on-reply).
M6 Usage Ledger + CSV Export + Tests passing + Prod deploy + 5-day critical bug window.
Propose % split w/ bid. Guideline: 10/15/15/25/20/15. No more than 25% of total paid before M4 acceptance.
ACCEPTANCE CRITERIA
Milestone accepted when:
Code merged in our GitHub.
Feature works in our staging env.
Tests for that feature pass CI.
Setup/config notes (Markdown) delivered.
No P1 blocking bugs remain.
Final milestone adds production deploy + 5 business days critical bug fix (included).
WARRANTY / SUPPORT
State warranty (min 30 days critical defects recommended). Define response SLA. Include in bid.
VENDOR RESPONSIBILITIES
Clean, documented code (PSR-12, linted).
Env vars for secrets; no hardcoding.
Frequent commits (min 3x/week) + weekly live/screen demo.
Flag risks early (A2P delays, API limits).
Maintain branch hygiene.
CLIENT RESPONSIBILITIES
We supply GitHub access, staging/prod envs, provider creds, UI style guide, tenancy docs, test contacts, and review within 2 biz days.
HOW TO SUBMIT YOUR BID (REQUIRED FORMAT)
Start first line with DEALMAKER. Then answer inline:
SMS app experience? Short summary + tech stack.
A2P 10DLC brand/campaign work done before? Which provider?
Laravel + Vue experience (yrs; notable apps).
CPaaS choice (Twilio default ok; suggest alt if cheaper/compliant).
Milestone schedule (dates).
Fixed USD price per milestone.
Team (names/roles/time zones/hours per week).
Warranty & support SLA.
Links: repos, screenshots, live demos.
Incomplete bids or missing DEALMAKER keyword = ignore.
CHANGE CONTROL
Anything not in Scope Sec 2 is change order. Must be quoted & approved before work starts.
IP & CONFIDENTIALITY
Work-for-hire. All code, tests, docs belong to Revamp 365 after paid milestone. Keep data & creds confidential. No code reuse elsewhere without written OK.
IMPORTANT – BID INSTRUCTION: Include the word DEALMAKER in first line so I know you read everything. Bids missing this will be ignored.
TIMELINE TARGET
Goal: Full scope in ~8–12 weeks from repo access. Faster welcome if credible. Provide calendar in bid.
QUESTIONS
Post questions in Freelancer clarification board. Need NDA for deeper review? Say so.
WHAT "FULLY SHIPPED WORKING PRODUCT" MEANS
You will deliver a production-ready, fully functional SMS feature set inside our existing SaaS (Laravel/Vue). Definition of Done:
Code in our GitHub, merged.
DB migrations run & safe.
Users can buy numbers, register A2P, send/receive SMS, build drips, view usage, export CSV.
Deployed in our production env.
Critical bugs fixed during burn-in window.
No prototypes. No "code handed to you to finish."
PROJECT OVERVIEW
Revamp365.ai = real estate investor SaaS. Need multi-tenant SMS layer:
User searches 3-digit prefix, buys 1+ US SMS numbers.
User registers own A2P 10DLC brand + campaign.
2-way SMS w/ contacts in app.
Threaded convo history, unread counts, search.
Drip automations (scheduled multi-step), quiet hours, throttle, stop-on-reply.
STOP/HELP compliance + opt-out ledger.
Usage tracking & CSV export (future billing).
US only. SMS only (no voice, no MMS). <50 active users at launch; architect to scale.
IN-SCOPE PHASES (ALL REQUIRED IN THIS CONTRACT)
PHASE 0 – Discovery/Tech Plan: Review codebase/tenancy; choose CPaaS (default Twilio ok); produce short written plan (arch, data model, queue, env vars, migrations). Must be approved before coding.
PHASE 1 – Number Search/Purchase: Prefix search -> provider inventory -> buy -> assign to user; My Numbers list; release flow.
PHASE 2 – A2P Brand/Campaign Reg: Wizard collects biz name, EIN, sample msg, support; submit via API; poll status; outbound blocked until approved (admin override).
PHASE 3 – Core 2-Way SMS + Compliance: Send outbound; receive inbound webhook; map to account/contact; create lead if unknown; persist msgs; STOP/HELP auto; suppress opted-out; delivery state updates.
PHASE 4 – Conversation UI: Recent thread list; unread counts; scrollback; compose box; message templates; search (name/number/text); responsive.
PHASE 5 – Drip Automations: Build campaign (audience select, steps w/ delays); start/pause; quiet hours (default 8a-8p local, configurable); throttle msgs/sec/user + global; optional stop on reply; basic stats.
PHASE 6 – Usage Ledger/Export/Admin: Per segment ledger; provider meta if available; monthly totals; CSV export; simple admin summary.
OUT OF SCOPE (CHANGE ORDER ONLY)
Voice/IVR/voicemail/WebRTC; MMS; advanced analytics; automated billing/charging; AI auto-reply; deliverability scoring; localization. If you wish to quote add-ons, mark separately.
TECH REQUIREMENTS
Backend (Laravel 12 / PHP 8.x):
Jobs/Queues (Redis or existing).
Provider abstraction interface (Twilio impl now; must support Plivo/SignalWire later).
Signed webhook verification; idempotent.
Encrypt message bodies (field or column); document.
Configurable rate limits & quiet hours (env/admin).
Safe migrations + rollback.
Frontend (Vue 3 + Tailwind):
Use existing components/layout.
Pinia or current store pattern.
Poll or realtime; match current infra.
Show status/errors (campaign pending, number inactive, failed send).
Security/Compliance:
STOP/HELP keyword parse + auto reply.
Opt-out ledger & suppression enforcement.
Quiet hours for marketing; transactional override.
Multi-tenant isolation: user sees only own data.
Audit admin overrides.
Testing:
Unit tests provider service (mocked).
Feature test inbound->conversation.
Drip scheduler test (delayed send).
Basic browser smoke: buy number, send, receive.
Performance targets (initial scale):
<50 users, ~1k outbound msgs/mo/user.
Fetch latest 50 msgs <300ms server time (indexed DB).
Outbound queue clears <1 min under expected load.
DATA MODEL (MIN REQUIRED – MAY EXTEND)
phone_numbers(id, account_id, e164, vendor, vendor_sid, status, country, a2p_brand_id, a2p_campaign_id, timestamps)
sms_messages(id, account_id, contact_id?, phone_number_id, direction, body, segment_count, vendor_sid, delivery_status, error_code?, sent_at?, received_at?, timestamps)
sms_conversations(id, account_id, contact_id, last_message_at, unread_count, last_direction, timestamps)
sms_optin_events(id, account_id, contact_id, source, opted_in_at?, opted_out_at?, keyword, timestamps)
sms_usage_ledger(id, account_id, phone_number_id, direction, segment_count, carrier?, provider_cost_cents?, meta_json, occurred_at, timestamps)
MILESTONES & PAYMENT (FIXED PRICE REQUIRED)
M1 Discovery/Tech Plan approved.
M2 Number Search/Purchase live in staging.
M3 A2P Reg flow functional; status visible; outbound block enforced.
M4 Core Send/Receive + STOP/HELP + message persistence; minimal convo list.
M5 Full Conversation UI + Drip Automations (quiet hours, throttle, stop-on-reply).
M6 Usage Ledger + CSV Export + Tests passing + Prod deploy + 5-day critical bug window.
Propose % split w/ bid. Guideline: 10/15/15/25/20/15. No more than 25% of total paid before M4 acceptance.
ACCEPTANCE CRITERIA
Milestone accepted when:
Code merged in our GitHub.
Feature works in our staging env.
Tests for that feature pass CI.
Setup/config notes (Markdown) delivered.
No P1 blocking bugs remain.
Final milestone adds production deploy + 5 business days critical bug fix (included).
WARRANTY / SUPPORT
State warranty (min 30 days critical defects recommended). Define response SLA. Include in bid.
VENDOR RESPONSIBILITIES
Clean, documented code (PSR-12, linted).
Env vars for secrets; no hardcoding.
Frequent commits (min 3x/week) + weekly live/screen demo.
Flag risks early (A2P delays, API limits).
Maintain branch hygiene.
CLIENT RESPONSIBILITIES
We supply GitHub access, staging/prod envs, provider creds, UI style guide, tenancy docs, test contacts, and review within 2 biz days.
HOW TO SUBMIT YOUR BID (REQUIRED FORMAT)
Start first line with DEALMAKER. Then answer inline:
SMS app experience? Short summary + tech stack.
A2P 10DLC brand/campaign work done before? Which provider?
Laravel + Vue experience (yrs; notable apps).
CPaaS choice (Twilio default ok; suggest alt if cheaper/compliant).
Milestone schedule (dates).
Fixed USD price per milestone.
Team (names/roles/time zones/hours per week).
Warranty & support SLA.
Links: repos, screenshots, live demos.
Incomplete bids or missing DEALMAKER keyword = ignore.
CHANGE CONTROL
Anything not in Scope Sec 2 is change order. Must be quoted & approved before work starts.
IP & CONFIDENTIALITY
Work-for-hire. All code, tests, docs belong to Revamp 365 after paid milestone. Keep data & creds confidential. No code reuse elsewhere without written OK.
IMPORTANT – BID INSTRUCTION: Include the word DEALMAKER in first line so I know you read everything. Bids missing this will be ignored.
TIMELINE TARGET
Goal: Full scope in ~8–12 weeks from repo access. Faster welcome if credible. Provide calendar in bid.
QUESTIONS
Post questions in Freelancer clarification board. Need NDA for deeper review? Say so.