Develop Two-Way SMS Module

Job ID: 39617329

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.