Messaging App
Communication · React + Node (Express) · 21 @molecule/* packages
WhatsApp-like 1:1 and group messaging with end-to-end encryption, read receipts, and media sharing — with built-in Stripe-backed subscription tiers
Try it
Opens instantly. Runs on sample data, so changes reset on reload.
What is inside
Screens (18)
- Landing
/ - Login
/login - Signup
/signup - ForgotPassword
/forgot-password - ResetPassword
/reset-password - Inbox
/inbox(signed in) - Conversation
/conversations/:id(signed in) - NewConversation
/conversations/new(signed in) - Contacts
/contacts(signed in) - Groups
/groups(signed in) - Settings
/settings(signed in) - ContactDetail
/contacts/:id(signed in) - GroupDetail
/groups/:id(signed in) - NewGroup
/groups/new(signed in) - Profile
/profile(signed in) - Archive
/archive(signed in) - Search
/search(signed in) - Notifications
/notifications(signed in)
Data model (13 tables)
- contacts — id, user_id, contact_user_id, nickname, is_blocked, created_at, updated_at, updatedAt
- conversation_participants — id, conversation_id, user_id, joined_at, last_read_at, is_muted, muted_until, is_archived, …
- conversations — id, type, title, created_by, group_id, last_message_at, last_message_preview, last_sender_id, …
- devices — id, createdAt, updatedAt, userId, name, pushPlatform, pushSubscription, hasPushSubscription
- group_members — id, group_id, user_id, role, is_muted, joined_at, updatedAt
- groups — id, owner_id, name, description, avatar_url, encryption_enabled, created_at, updated_at, …
- media — id, conversation_id, sender_id, url, thumbnail_url, type, size, name, …
- message_receipts — id, message_id, user_id, status, at, updatedAt
- messages — id, conversation_id, sender_id, content, type, media_id, reply_to_message_id, is_edited, …
- payments — id, createdAt, updatedAt, userId, transactionId, productId, platformKey, data, …
- reactions — id, message_id, user_id, emoji, created_at, updatedAt
- notifications — id, user_id, kind, payload, read_at, created_at, updatedAt
- user_preferences — user_id, preferences, updated_at, updatedAt
API (12 handlers)
- \_decorate
api/src/handlers/_decorate.ts - \_seed
api/src/handlers/_seed.ts - contacts
api/src/handlers/contacts.ts - conversations
api/src/handlers/conversations.ts - group-members
api/src/handlers/group-members.ts - groups
api/src/handlers/groups.ts - media
api/src/handlers/media.ts - messages
api/src/handlers/messages.ts - notifications
api/src/handlers/notifications.ts - profile
api/src/handlers/profile.ts - reactions
api/src/handlers/reactions.ts - search
api/src/handlers/search.ts
Subscription tiers
free / pro / team — gated by: maxContacts, maxConversations, maxMedia, maxMessages, advancedFeatures, canExport, retentionDays
Built from 21 @molecule/* packages
@molecule/api-database-postgresql@molecule/api-email-templates@molecule/api-emails-mailgun@molecule/api-encryption-aes@molecule/api-entitlements@molecule/api-image-sharp@molecule/api-payments-stripe@molecule/api-push-notifications-web-push@molecule/api-realtime-socketio@molecule/api-resource-notification@molecule/api-resource-payment@molecule/api-resource-reaction@molecule/api-resource-thread@molecule/api-resource-user@molecule/api-uploads-s3@molecule/app-billing-react@molecule/app-file-upload@molecule/app-image-crop@molecule/app-notification-feed-react@molecule/app-realtime-socketio@molecule/app-virtual-scroll
Required secrets
DATABASE_URLPostgreSQL connection stringS3_BUCKETS3 bucket for media uploadsENCRYPTION_KEYAES encryption key for message encryption
The @molecule/* packages are Apache-2.0. The app you build from this template is yours to export and self-host. Licensing