Inline is a customer communication platform for modern SaaS teams, inspired by products like Intercom and Crisp.
It combines live chat, AI assistance, knowledge base, analytics, and multi-team collaboration in one modular system.
This organization hosts production and proprietary code in private repositories.
This public repository exists to document architecture, engineering decisions, and product scope without exposing confidential implementation details.
Inline provides:
- Live chat for websites and applications
- AI assistant for support automation
- Knowledge base and internal documentation tools
- Team inboxes and role-based collaboration
- Analytics and reporting
- Email integration and OTP flows
- Translation workflows
- Embeddable widget SDK
- React
- TypeScript
- Vite
- Redux/Context Style
- Widget isolation via Shadow DOM
- WebApi .NET
- Commands like CQRS/MediatR
- PostgreSQL
- Redis
- SignalR for real-time communication
- Docker
- Nginx
- GitHub Actions
- Environment-based configuration and deployment pipelines
- JWT access tokens
- Refresh tokens
- HMAC verification for widget and API integrity
- OTP email authentication
- Access and permission boundaries for multi-team scenarios
- Lucene.NET for indexing and retrieval
- OpenAI integration for assistant flows
- Google Translate integration for multilingual support
This system was built to explore and validate a production-grade SaaS architecture from scratch, with focus on:
- Scalability
- Modular service boundaries
- High performance under real-time load
- Strong domain modeling
- Security-first design
- Multi-tenancy readiness
- Live Chat
- Team Management
- Permissions and Access Control
- Analytics
- Widget SDK
- Email Authentication
- HMAC Authentication
- AI Assistant
- Translation
- Knowledge Base
- Search
- Reporting
- Attachments
- Notifications
- Multi-language support
- Mobile-oriented UX flows
The actual implementation is private, but the platform follows a modular monorepo/service-oriented structure:
- frontend projects
- ui2 (custom ui library to make lib light weight)
- shared libraries (to avoid repetable code)
- widget
- workspace
- admin panel
- backend projects
- auth
- main
- search
- analytics
- widget
- admin
- licensing
- cleaner
- database
- core
Design choices documented in this organization focus on trade-offs, not just technology names:
- Why Commands (CQRS + MediatR) was selected for backend command/query isolation
- Why PostgreSQL + Redis combination was used for consistency + speed
- Why SignalR was chosen for real-time chat transport
- Why Shadow DOM is used in widget embedding scenarios
- Why Lucene.NET was selected for in-app search indexing strategy
- Why HMAC is required for secure widget and request validation
Client App / Website
- Inline Widget
- API Layer
- Auth Service
- Chat and Messaging Services
- Redis (presence/session/cache)
- SignalR (real-time events)
- PostgreSQL (persistent storage)
- Search Index (Lucene.NET)
- Dashboard
- Team Inbox / Chat Console
- Widget Conversation View
- Analytics
- Knowledge Base
- Settings and Access Control
- Designing tenant-safe architecture boundaries
- Operating long-lived real-time connections reliably
- Building secure authentication flows for mixed channels
- Optimizing index lifecycle and search relevance
- Structuring large React + TypeScript frontend systems
- Maintaining delivery speed in a multi-service backend
- AI Copilot workflows
- Voice and omnichannel support
- Mobile SDK expansion
- Webhooks and external automation triggers
- Slack and Microsoft Teams integrations
- Extended audit and compliance tooling
Only include values you can verify.
- Started: 2024
- Main Languages: TypeScript, C#, SQL
- Architecture: Monorepo + Multi-service + Multi-tenant
- Implemented Modules: 20+
- Authentication Methods: 3+
- Backend .NET projects (*.csproj): 14
- Frontend package projects (frontend/packages/*): 6
This organization will publish architecture notes and technical write-ups, for example:
- Why Commands (CQRS + MediatR) for Inline
- Secure widget design with HMAC authentication
- Building a multi-tenant SaaS platform from scratch
- Lucene.NET decision log and search architecture
- Lessons from real-time chat system design
- Structuring a large React + TypeScript codebase
- LinkedIn: Dzmitry Dym