External Infrastructure Roadmap
This page documents all features currently marked as Aplazado (deferred) across the platform. Each requires external infrastructure, third-party APIs, or significant architectural changes that go beyond the current stack.
Storage & Media
Section titled “Storage & Media”Avatar Storage Migration (S3 / Cloudflare R2)
Section titled “Avatar Storage Migration (S3 / Cloudflare R2)”| Page | Profile |
| Current state | Teacher avatar stored as data URI in teachers.avatarUrl. Works but inflates the teachers table row size and slows queries at scale. |
| What’s needed | Object storage service (Cloudflare R2, AWS S3, or similar). Upload endpoint that stores the file, returns a URL, and saves only the URL in the DB. |
| Infrastructure | Cloudflare R2 (recommended — no egress fees) or AWS S3 |
| Effort | Medium — new upload route, storage client, migration to rewrite existing data URIs |
| Priority | Medium — becomes important with 500+ teachers |
Video Testimonials
Section titled “Video Testimonials”| Page | Public Profile |
| Current state | Reviews are text-only (title + body + rating + quickTags). No video upload support. |
| What’s needed | Video hosting/transcoding service. Upload flow for students, player component, moderation queue. |
| Infrastructure | Cloudflare Stream, Mux, or AWS MediaConvert + S3 |
| Effort | High — video upload, transcoding pipeline, player component, storage costs, moderation |
| Priority | Low — nice-to-have, not blocking any core flow |
Communication Channels
Section titled “Communication Channels”SMS via Twilio
Section titled “SMS via Twilio”| Page | Messages |
| Current state | Contact channels: WhatsApp (link), Email (mailto), Phone (tel). No SMS. |
| What’s needed | Twilio account, SMS sending service, phone number validation, opt-in/opt-out tracking, per-message costs. |
| Infrastructure | Twilio Programmable SMS (or alternatives: Vonage, MessageBird) |
| Effort | Medium — Twilio SDK integration, phone validation, delivery tracking, cost management |
| Priority | Low — WhatsApp covers most use cases in the target market (LATAM + Spain) |
Scheduled Messages
Section titled “Scheduled Messages”| Page | Messages |
| Current state | Contact log records are created immediately. No scheduling for future sends. |
| What’s needed | Job scheduling system for delayed message delivery. Requires either a dedicated queue or extending BullMQ with delayed jobs for WhatsApp/Email/SMS sends. |
| Infrastructure | BullMQ delayed jobs (already available) + actual send integration (depends on SMS/WhatsApp Business API) |
| Effort | Medium — delayed job scheduling is easy, but actual automated sending requires WhatsApp Business API or email automation beyond mailto links |
| Priority | Low — teachers currently send manually via WhatsApp/Email links |
Payment & Billing
Section titled “Payment & Billing”Discount Codes / Coupons
Section titled “Discount Codes / Coupons”| Page | Student Packages |
| Current state | No coupon or promotional code field in the checkout flow. Discounts are managed directly in Stripe Dashboard. |
| What’s needed | Stripe Coupons API integration. UI for teachers to create/manage coupons. Student-facing input field during checkout. Validation endpoint. |
| Infrastructure | Stripe Coupons + Promotion Codes API (already part of Stripe, no new service) |
| Effort | Medium — Stripe API already supports it, need teacher management UI + student checkout integration |
| Priority | Medium — common feature request from teachers |
Advanced Payment Configuration
Section titled “Advanced Payment Configuration”| Page | Settings |
| Current state | Default currency configurable. Stripe Connect handles payments. Invoice/receipt management done via Stripe Dashboard. |
| What’s needed | In-app invoice management, multiple payment methods, tax configuration. Most of this already exists in Stripe Dashboard. |
| Infrastructure | Stripe Invoicing API, Stripe Tax (optional) |
| Effort | High — duplicating Stripe Dashboard features in-app has questionable ROI |
| Priority | Low — Stripe Dashboard already provides this. Link to Stripe Dashboard already added. |
Third-Party Integrations
Section titled “Third-Party Integrations”Zoom Integration
Section titled “Zoom Integration”| Page | Settings |
| Current state | Google Meet is the only video conferencing integration (via Google Calendar). Meet links are auto-generated when creating calendar events. |
| What’s needed | Zoom OAuth app, meeting creation API, webhook handling for meeting events. The oauth_connections table already supports multiple providers. |
| Infrastructure | Zoom Marketplace App (OAuth 2.0), Zoom Meeting API v2 |
| Effort | Medium — OAuth flow reusable from Google pattern, but Zoom has different webhook/event model |
| Priority | Medium — many teachers use Zoom instead of Google Meet |
WhatsApp Business API
Section titled “WhatsApp Business API”| Page | Settings |
| Current state | WhatsApp contact uses wa.me links (opens WhatsApp app). No programmatic sending. |
| What’s needed | WhatsApp Business API (via Meta Cloud API or BSP like Twilio/360dialog). Template messages, session messages, delivery receipts. |
| Infrastructure | Meta Cloud API or BSP (Twilio WhatsApp, 360dialog) |
| Effort | High — Meta approval process, template review, message window rules, per-conversation costs |
| Priority | Medium — would enable automated reminders and scheduled messages |
Auto-Translation (Google Translate)
Section titled “Auto-Translation (Google Translate)”| Page | Reviews |
| Current state | Reviews display in the language they were written in. International students may write in their native language. |
| What’s needed | Google Cloud Translation API or DeepL API. Auto-detect language, translate on demand or at write time, store translations. |
| Infrastructure | Google Cloud Translation API v3 or DeepL API |
| Effort | Low-Medium — API call per review, cache translations, show toggle |
| Priority | Low — only relevant for teachers with international student base |
Frontend Architecture
Section titled “Frontend Architecture”Responsive Layout per Breakpoint
Section titled “Responsive Layout per Breakpoint”| Page | Profile |
| Current state | Profile layout editor configures column count globally. Responsive behavior is automatic (CSS grid). Teachers cannot set different column orders for mobile vs desktop. |
| What’s needed | Per-breakpoint layout configuration in profileLayout JSONB. Preview component showing mobile/tablet/desktop layouts side by side. |
| Infrastructure | None (frontend-only) — but requires significant UI/UX rework of the layout editor |
| Effort | High — complex drag-and-drop editor for multiple breakpoints, increased JSONB schema complexity |
| Priority | Low — current auto-responsive layout works well for most profiles |
Summary Table
Section titled “Summary Table”| Feature | External Service | Effort | Priority | Blocking? |
|---|---|---|---|---|
| Avatar storage (S3/R2) | Cloudflare R2 / AWS S3 | Medium | Medium | No |
| Video testimonials | Cloudflare Stream / Mux | High | Low | No |
| SMS via Twilio | Twilio SMS | Medium | Low | No |
| Scheduled messages | WhatsApp Business API | Medium | Low | No |
| Discount codes | Stripe Coupons API | Medium | Medium | No |
| Advanced payments | Stripe Invoicing API | High | Low | No |
| Zoom integration | Zoom API | Medium | Medium | No |
| WhatsApp Business API | Meta Cloud API / BSP | High | Medium | No |
| Auto-translation | Google Translate / DeepL | Low | Low | No |
| Responsive breakpoints | None (frontend rework) | High | Low | No |
Recommended Implementation Order
Section titled “Recommended Implementation Order”- Stripe Coupons — lowest effort, high teacher demand, no new service
- Zoom integration — reuses existing OAuth pattern, unlocks non-Google teachers
- Avatar storage migration — prevents DB bloat, straightforward S3/R2 integration
- WhatsApp Business API — enables automated messaging, unlocks scheduled messages + SMS
- Auto-translation — simple API integration, low effort
- Video testimonials — nice-to-have, high effort
- Responsive breakpoints — frontend-only but complex UX challenge
- Advanced payments — low ROI vs Stripe Dashboard