A Signal-like, local-first messaging Progressive Web App built with XMTP v3.
π Live Demo: converge.cv (coming soon)
π¦ Repository: github.com/pierce403/converge.cv
- Local-First Architecture: All data encrypted and stored locally on your device
- Progressive Web App: Install on iOS, Android, and desktop - works offline
- XMTP v3 Protocol: Decentralized messaging via the XMTP v3 browser SDK (production network)
- End-to-End Encrypted: Military-grade AES-GCM 256-bit encryption with WebCrypto
- Passkey Support: WebAuthn PRF integration prepared for passwordless authentication
- Signal-like UX: Clean, intuitive interface with familiar messaging patterns
- Send and receive encrypted text messages
- Real-time message status indicators (pending β sent β delivered)
- Message reactions support
- Conversation management (pin, archive, search)
- Unread message badges
- Full-text search across conversations
- Vault key encryption with passphrase (PBKDF2 600k iterations)
- Local message encryption at rest
- No server-side storage of messages
- Lock screen with vault protection
- Secure key management in memory
- Offline app shell caching
- Installable on all platforms
- Push notification support (with VAPID setup)
- Badge API for unread counts
- Service worker for background sync
- Framework: React 18 + TypeScript + Vite
- Routing: react-router-dom
- State Management: Zustand
- Styling: Tailwind CSS
- PWA: vite-plugin-pwa (Workbox)
- Messaging: XMTP v3 browser SDK (production network connection in progress)
- Storage: Dexie (IndexedDB) with SQLite WASM migration path
- Crypto: WebCrypto API + WebAuthn
- Testing: Vitest + Playwright
- CI/CD: GitHub Actions
- Node.js 18+ or 20+
- pnpm (recommended) or npm
# Clone the repository
git clone https://github.com/pierce403/converge.cv.git
cd converge.cv
# Install dependencies
pnpm install
# Start development server
pnpm dev
# Open http://localhost:3000# Development
pnpm dev # Start dev server with HMR
pnpm build # Build for production
pnpm preview # Preview production build
pnpm typecheck # Run TypeScript checks
# Code Quality
pnpm lint # Run ESLint
pnpm format # Format code with Prettier
# Testing
pnpm test # Run unit tests
pnpm test:e2e # Run E2E tests (Playwright)src/
βββ app/ # App shell, router, providers
βββ features/ # Feature modules
β βββ auth/ # Authentication & vault
β βββ conversations/
β βββ messages/
β βββ settings/
β βββ search/
βββ lib/ # Core libraries
β βββ xmtp/ # XMTP client wrapper
β βββ storage/ # Storage drivers (Dexie/SQLite)
β βββ crypto/ # Encryption & key management
β βββ push/ # Web Push notifications
β βββ sw-bridge/ # Service worker communication
βββ components/ # Shared UI components
βββ types/ # TypeScript types
- Messages encrypted at rest with AES-GCM
- Vault key derived from passkey (WebAuthn PRF) or passphrase (PBKDF2)
- No plaintext message storage
- Optional disappearing messages
- Installable on all platforms
- Offline support
- Web Push notifications
- Background sync
- App shell caching
See TODO.md for development roadmap and tasks.
For AI Agents: Read AGENTS.md first! It contains critical context about user preferences, architectural decisions, and project conventions. Update it whenever you learn something new.
src/
βββ app/ # App shell, router, providers, layout
βββ features/ # Feature modules
β βββ auth/ # Authentication, onboarding, lock screen
β βββ conversations/# Chat list, new chat
β βββ messages/ # Conversation view, message bubbles, composer
β βββ settings/ # Settings page
β βββ search/ # Search functionality
βββ lib/ # Core libraries
β βββ xmtp/ # XMTP client wrapper
β βββ storage/ # Storage driver (Dexie)
β βββ crypto/ # Vault, encryption, key management
β βββ stores/ # Zustand state stores
β βββ push/ # Push notification utilities
β βββ sw-bridge/ # Service worker communication
βββ components/ # Shared UI components
βββ types/ # TypeScript type definitions
Every push to master automatically:
- Runs type checking and linting
- Builds the production bundle
- Deploys to GitHub Pages
See DEPLOYMENT.md for detailed deployment instructions.
pnpm build
# Deploy the dist/ folder to your hosting providerpnpm test # Run all tests
pnpm test -- --coverage # Run with coverage
pnpm test -- --watch # Watch modepnpm test:e2e # Run E2E tests- Client-Side Encryption: All encryption happens in the browser
- Vault Key Protection: Keys derived from passphrase with PBKDF2 (600k iterations)
- No Server Storage: Messages never leave your device unencrypted
- Local Storage Only: IndexedDB with encrypted data at rest
- WebAuthn Ready: Passkey integration prepared for production
- β Complete authentication flow
- β Message sending and receiving (local pipeline while XMTP integration matures)
- β Encrypted local storage
- β Search functionality
- β Settings and vault management
- β PWA with offline support
- β Push notification infrastructure
- Complete end-to-end XMTP v3 messaging flows
- Implement attachment support
- Add message reactions (interactive)
- Disappearing messages
- SQLite WASM migration for FTS
- Group chat support
- Voice messages
- Link previews
- Multi-device sync
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'feat: add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
MIT License - see LICENSE for details
- Live App: converge.cv
- Repository: github.com/pierce403/converge.cv
- Issues: GitHub Issues
- XMTP Protocol: xmtp.org
Dean Pierce - @pierce403
Built with β€οΈ using React, TypeScript, and XMTP