Admin SMS outreach (Twilio) + Facebook portfolio import - #40
Merged
Conversation
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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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.
lib/sms/*(segments, message, Groq personalize → shows in /admin/costs, Supabase store, recipient parsing).sendSms+fetchMessageStatusadded tolib/twilio/client./api/admin/sms/*+/api/webhooks/twilio/sms(STOP/HELP + delivery receipts, signature-verified).sms_optouts+sms_campaign_log(admin RLS, service-role writes). Idempotent.Before enabling live in prod: migration 191 applied (already applied to the DB), set
TWILIO_MESSAGING_SERVICE_SIDorTWILIO_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.nextgenerated-cache noise, gitignored).eslint: clean on the SMS files.🤖 Generated with Claude Code