Skip to content

Admin SMS outreach (Twilio) + Facebook portfolio import - #40

Merged
SaurabhPandey9752 merged 2 commits into
mainfrom
feat/admin-sms-outreach
Aug 1, 2026
Merged

Admin SMS outreach (Twilio) + Facebook portfolio import#40
SaurabhPandey9752 merged 2 commits into
mainfrom
feat/admin-sms-outreach

Conversation

@SaurabhPandey9752

Copy link
Copy Markdown
Collaborator

Two independent features, one commit each, branched clean off main (preserves the in-flight analytics branch and everyone's working tree).

1. SMS outreach admin tool — feat(admin)

Personalized bulk SMS to providers/prospects from /admin/sms, via Twilio.

  • Compose from paste/upload, Load approved providers, or a starter list; live cost estimate; AI message preview.
  • Dry-run by default; chunked live send (serverless-safe); Sync from Twilio to reconcile delivery status; recent-messages log.
  • lib/sms/* (segments, message, Groq personalize → shows in /admin/costs, Supabase store, recipient parsing). sendSms + fetchMessageStatus added to lib/twilio/client.
  • API under /api/admin/sms/* + /api/webhooks/twilio/sms (STOP/HELP + delivery receipts, signature-verified).
  • Migration 191: sms_optouts + sms_campaign_log (admin RLS, service-role writes). Idempotent.
  • Compliance: opt-out suppression, quiet hours, no double-sends.

Before enabling live in prod: migration 191 applied (already applied to the DB), set TWILIO_MESSAGING_SERVICE_SID or TWILIO_SMS_FROM, register A2P 10DLC. Verified end-to-end: real test SMS sent + delivered.

2. Facebook portfolio import — feat(provider) (separate session)

Pull work photos from a Facebook page, re-hosted in our bucket (FB CDN links expire), surfaced on the provider public profile. Route + lib + test included.

Validation

  • tsc: source clean (only stale .next generated-cache noise, gitignored).
  • eslint: clean on the SMS files.

🤖 Generated with Claude Code

SaurabhPandey9752 and others added 2 commits August 1, 2026 23:43
Personalized bulk SMS to providers/prospects from /admin/sms.
- Admin page: compose, load providers/starter list/CSV, cost estimate,
  AI preview, dry-run + chunked live send, "Sync from Twilio" status.
- lib/sms/* (segments, message, config, Groq personalize, Supabase store,
  recipient parsing); sendSms + fetchMessageStatus added to lib/twilio/client.
- API: /api/admin/sms/{summary,providers,preview,send,log,seed,sync} + the
  /api/webhooks/twilio/sms inbound/status webhook (STOP/HELP + receipts).
- Migration 191: sms_optouts + sms_campaign_log (admin RLS, service-role write).
- Dry-run by default; opt-out suppression, quiet hours, idempotent live sends.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Pull work photos from a Facebook page and re-host them in our bucket
(Facebook CDN links expire), surfaced on the provider public profile.
- /api/provider/portfolio/import route + lib/link-import/facebook-photos
- "Import from Facebook" affordance on the provider public profile
- tests/marketplace/portfolio-photo-import

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@SaurabhPandey9752
SaurabhPandey9752 merged commit 6949540 into main Aug 1, 2026
6 checks passed
@railway-app
railway-app Bot temporarily deployed to keen-growth / production August 1, 2026 18:31 Inactive
@tasklyappai
tasklyappai deleted the feat/admin-sms-outreach branch August 1, 2026 20:31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant