← All templates

Telemedicine

Health & Fitness · React + Node (Express) · 24 @molecule/* packages

Teladoc-like telemedicine platform with appointments, video consultations, medical records, and prescriptions — with built-in Stripe-backed subscription tiers

Open in Molecule

What is inside

  • auth
  • search
  • notifications
  • video
  • calendar
  • file-upload
  • permissions
  • subscriptions

Screens (16)

  • Landing /
  • Login /login
  • Signup /signup
  • ForgotPassword /forgot-password
  • ResetPassword /reset-password
  • Dashboard /dashboard (signed in)
  • Appointments /appointments (signed in)
  • Consult /consult/:id (signed in)
  • AppointmentDetail /appointments/:id (signed in)
  • Patients /patients (signed in)
  • PatientDetail /patients/:id (signed in)
  • Prescriptions /prescriptions (signed in)
  • MedicalRecords /records (signed in)
  • Messages /messages (signed in)
  • Notifications /notifications (signed in)
  • Settings /settings (signed in)

Data model (13 tables)

  • appointments — id, patient_user_id, patient_id, provider_user_id, provider_id, scheduled_at, duration_minutes, type, …
  • availability_slots — id, provider_id, starts_at, ends_at, date, start_time, end_time, is_booked, …
  • consultation_messages — id, consultation_id, appointment_id, sender_user_id, sender_id, sender_role, body, content, …
  • consultations — id, appointment_id, patient_user_id, patient_id, provider_user_id, provider_id, started_at, ended_at, …
  • devices — id, createdAt, updatedAt, userId, name, pushPlatform, pushSubscription, hasPushSubscription
  • medical_records — id, patient_user_id, patient_id, provider_user_id, provider_id, consultation_id, encounter_id, kind, …
  • notifications — id, user_id, kind, payload, read_at, created_at
  • payments — id, createdAt, updatedAt, userId, transactionId, productId, platformKey, data, …
  • pharmacies — id, name, address, phone, ncpdp_id, created_at
  • prescriptions — id, appointment_id, consultation_id, provider_user_id, provider_id, patient_user_id, patient_id, drug_name, …
  • providers — id, user_id, display_name, npi, license_number, license_state, specialty_id, specialty, …
  • record_shares — id, record_id, owner_user_id, shared_with_provider_id, scope, expires_at, revoked_at, created_at
  • specialties — id, slug, label, icon, created_at

API (8 handlers)

  • \_seed api/src/handlers/_seed.ts
  • appointments api/src/handlers/appointments.ts
  • consultations api/src/handlers/consultations.ts
  • notifications api/src/handlers/notifications.ts
  • portal api/src/handlers/portal.ts
  • prescriptions api/src/handlers/prescriptions.ts
  • providers api/src/handlers/providers.ts
  • records api/src/handlers/records.ts

Subscription tiers

free / pro / team — gated by: maxAppointments, maxConsultations, maxPrescriptions, maxProviders, maxRecords, advancedFeatures, canExport, retentionDays

Built from 24 @molecule/* packages

Browse all @molecule/* packages →

Required secrets

  • DATABASE_URL PostgreSQL connection string
  • MEILISEARCH_API_KEY Meilisearch API key
  • VAPID_PUBLIC_KEY VAPID public key for push notifications
  • VAPID_PRIVATE_KEY VAPID private key for push notifications
  • MAILGUN_API_KEY Mailgun API key for email notifications
  • MAILGUN_DOMAIN Mailgun domain
  • S3_BUCKET S3 bucket for medical documents
  • S3_ACCESS_KEY_ID S3 access key ID
  • S3_SECRET_ACCESS_KEY S3 secret access key

The @molecule/* packages are Apache-2.0. The app you build from this template is yours to export and self-host. Licensing