S

Satshrut Jain Portals

System Architecture v1.0

Domain
Jain Spiritual Content
Org
Sri Kund Kund Raj Kahan Trust
Last Updated
March 2026
Distributed Content & Live Streaming Platform
Satshrut
Multi-portal Jain spiritual content platform — pravachan library, live streaming, mobile app
Next.js 15 Flutter NestJS PostgreSQL AWS IVS Payload CMS
7 Applications 3 Portals 12 Git Repositories 3 Shared npm Packages
Unified content platform serving web, mobile, and live streaming across 3 distinct portals
1Problem
Jain spiritual trust needed to distribute pravachans, scriptures, and live streams across multiple audiences (general devotees, young devotees, permission-based streaming)
2Solution
Built 3 portal ecosystem (Satshrut, Veervaani, Vitrag Satsang) with 7 applications, shared npm packages for type safety, Payload CMS for content management, AWS IVS for live streaming, and Flutter mobile app with Clean Architecture
3Outcome
12 Git repositories, 227+ test files, unified content pipeline serving web and mobile
Key Engineering Decisions
Multi-portal architecture with 3 shared npm packages for consistency
Cross-portal type safety
AWS IVS for low-latency live streaming with HLS.js playback
Real-time streaming infrastructure
Payload CMS 3 with 9 block types for flexible content modeling
Content management flexibility
Clean Architecture in Flutter with Riverpod state management
Scalable mobile architecture
Dual API strategy: TypeORM for Satshrut, raw pg for Veervaani (performance-optimized)
Performance vs. DX tradeoff
GitLab npm registry for private shared package distribution
Monorepo-lite strategy
PgBouncer for connection pooling across multiple API services
Database connection efficiency
7
Applications
3
Portals
12
Git Repos
15
Database
Entities
3
Shared
Packages
227+
Tests
My Role
Multi-portal architecture
Live streaming infrastructure
Shared package strategy
Mobile app architecture
3
Portal
Websites
3
Backend
APIs
15
DB Entities
/ Models
23
Mobile
Screens
78
Web
Pages
12
Shared
Packages
01
Client Applications
Satshrut — Public Pravachan Library
Satshrut Web
Next.js 15 / React 19 / Payload CMS
+
40 Pages Tailwind Framer Motion
Page Groups
Home (Hero, Pillars, Saints)
Pravachans (list + detail)
Video Pravachans + Playlists
Shastras (PDF viewer)
Magazines (multi-lang)
Speakers / Series
Donations / Tithi / About
Admin CRUD Panels
Key Components (64 TSX)
  • AudioPlayer with queue, speed, volume, sleep timer, mini player
  • PdfViewer with embedded rendering via pdfjs-dist
  • CMS-driven pages via Payload blocks (Hero, FAQ, Newsletter, etc.)
  • SEO: JSON-LD structured data, SSR metadata
  • PWA install prompt, i18n support
Satshrut Mobile
Flutter 3.x / Dart / Riverpod
+
23 Screens 116 Dart files Clean Architecture
Feature Modules
Auth (Login, OTP, Register)
Pravachans (list + detail)
Shastras / Magazines
Audio Player (background)
Playlists / Favorites
Downloads (offline)
History / Search
Speakers / Series
Architecture
  • Clean Architecture: data/domain/presentation per feature
  • Riverpod for state management (not Provider)
  • Dio HTTP client, Hive for local cache
  • just_audio + audio_service for background playback
  • Firebase Auth (Google Sign-In) + FCM push notifications
  • go_router for navigation, cached_network_image
Satshrut API
NestJS 10 / TypeORM / 125 files
+
17 Modules Swagger Port 3001
Modules
Pravachans
VideoPravachans
Shastras
Magazines
Speakers
Series
Playlists
Favorites
PlayHistory
Languages
Locations
YouTubeSync
YouTubePlaylists
Auth / Users
Key Features
  • PDF thumbnail generation via poppler (pdftocairo)
  • YouTube sync for video pravachans
  • Firebase Auth guard with JWT bearer tokens
  • 15 TypeORM entities with UUID primary keys
Veervaani — Young Devotees Portal
Veervaani Web
Next.js 14 / React 18 / Framer Motion
+
25 Pages Radix UI React Query
Page Groups
Pravachans (list + detail)
Shastras (list + detail)
Bhakti / Children sections
Live streaming page
Events / Photos
Playlists / Favorites
Notes / History
Admin panel (CRUD)
Unique Features
  • Docker Compose for local dev + production deployment
  • Variant system for multi-tenant deployments
  • 70 TSX components across audio, layout, content
Veervaani API
NestJS 10 / Raw SQL / 94 files
+
15 Modules Firebase Admin Health Checks
Modules
Pravachans
Shastras
Speakers
Playlists
Favorites
Quotes
Notes / History
Tags / Locations
Architecture
  • Raw pg (no ORM) with custom repository pattern
  • Role-based access: user, admin, super_admin guards
  • Excel data import scripts for legacy migration
  • @nestjs/terminus health checks
Vitrag Satsang — Permission-Based Live Streaming
Vitrag Satsang Web
Next.js 14 / React 18 / Socket.io
+
13 Pages HLS.js Zod
Page Groups
Live stream viewer + chat
Audio library
Video library
Admin user management
Profile / Auth
Registration
Unique Features
  • Real-time chat via Socket.io during live streams
  • HLS video streaming with adaptive quality
  • React Hook Form + Zod for form validation
  • Permission-based content access control
  • Variant system + Playwright E2E tests
Vitrag Satsang API
NestJS 10 / Socket.io / AWS IVS
+
8 Modules WebSockets Email
Modules
Streaming (IVS)
Chat Gateway
Video / Audio
Users / Auth
Notifications (email)
Health
Unique Architecture
  • AWS Interactive Video Service for live streaming
  • WebSocket chat gateway (Socket.io)
  • Nodemailer for email notifications
  • Access logging middleware for audit trail
  • Permission-based content gating per user
REST / Firebase JWT
React Query / Dio HTTP
02
API Modules — Satshrut (Primary)
NestJS 10
Satshrut API
Port 3001 · /api/v1 · 17 Modules · TypeORM · TypeScript
+
Content
Pravachans
Audio discourses: list, filter, search, play count
Content
VideoPravachans
YouTube-synced video discourses
Content
Shastras
Sacred scriptures with PDF thumbnails
Content
Magazines
Multi-language magazines with PDF viewer
Content
Series
Discourse series grouping
Content
Speakers
Guru profiles with linked content
Content
Languages
Multi-language content support
Content
Locations
Recording venue / city metadata
Media
YouTubeSync
Auto-sync YouTube channel videos
Media
YouTubePlaylists
Playlist import from YouTube API
User
Auth
Firebase Auth guard, JWT validation
User
Users
User CRUD, roles, profile management
User
Playlists
User-created playlists with items
User
Favorites
Bookmark pravachans for quick access
User
PlayHistory
Track listening progress per user
Firebase Auth Guard
Validation Pipe
Transform Interceptor
Exception Filter
Helmet
Swagger / OpenAPI
TypeORM / Raw SQL
Firebase Admin SDK
03
Data Layer & External Services
PostgreSQL 16
15 Entities · TypeORM · PgBouncer
+
UUID PKs JSONB metadata Migration scripts
Core Entities
Pravachan (audio)
Speaker
Shastra (scripture)
Magazine
Series
Language
Location / Yatra
User
Playlist / PlaylistItem
Favorite
PlayHistory
Contact / Slider
Database Features
  • Shared PostgreSQL with per-portal schemas
  • PgBouncer connection pooling (transaction mode, 1000 max clients)
  • Legacy ID columns for CodeIgniter migration
  • Computed columns (year, month, day from recording_date)
  • pgAdmin on port 5050 for management
Payload CMS 3
Headless CMS · Lexical Editor
+
9 Block Types Postgres Adapter Globals
Collections
Pages (block layout)
Media (image/PDF)
Announcements
Life Sketches
Admins (auth)
Block Types
  • Hero, Five Pillars, Saints, Quick Access
  • Testimonials, FAQ, Newsletter, Announcements
  • Rich Text (Lexical editor)
Global: Site Settings
  • Trust name, live stream URL, social links
  • Feature flags (donations, tithi, newsletter)
  • Donation bank details + UPI
Firebase
Auth · FCM · Admin SDK
+
Phone Auth Google Sign-In Push Notifications
Services Used
  • Firebase Auth: phone + Google Sign-In on mobile
  • Firebase Auth: email/password on web portals
  • Firebase Admin SDK: token verification on all 3 APIs
  • FCM: push notifications to mobile app
  • Used across all 3 portals with shared project
AWS IVS
Live streaming
Vitrag Satsang portal
Nodemailer
Transactional email
notifications
Razorpay
Donation payments
INR processing
YouTube API
Video sync &
playlist import
📄
Poppler
PDF thumbnail
generation (pdftocairo)
Shared Types
Shared UI
04
Shared Packages & Patterns
@satshrut-jain-portals/shared-types
TypeScript · npm package
+
19 Files GitLab npm registry
Type Definitions
Pravachan
Speaker
Shastra
Magazine
Series / Language
Location / Playlist
User / LiveStream
Pagination / Status
API Types
  • Request/Response DTOs shared across all portals
  • Pagination helpers with cursor + offset support
  • Portal enum (satshrut, veervaani, vitragsatsang)
@satshrut-jain-portals/shared-ui
React / tsup / Vitest
+
22 Files Tailwind ESM + CJS
Components
Button
Card
Input
Spinner
AudioPlayer
Header / Footer
Navigation
Hooks
  • useDebounce, useLocalStorage, useMediaQuery
  • Vitest + Testing Library test suite
  • Dual export: ESM (.mjs) + CJS (.js)
shared-config
ESLint / Prettier / TSConfig
+
Linting Formatting Build Config
Config Presets
  • Shared ESLint config for all TypeScript projects
  • Shared Prettier config for consistent formatting
  • Shared TSConfig base for strict type checking
  • Used by all 3 web apps + 3 APIs
Controller → Service → Repository
All NestJS APIs follow layered architecture with DI
Clean Architecture (Mobile)
Feature-based: data/domain/presentation layers per module
CMS-Driven Pages
Payload blocks render dynamic layouts server-side
Legacy Migration
CodeIgniter to NestJS with legacy_id columns preserved
Multi-Portal Auth
Shared Firebase project with per-portal user roles
Shared npm Packages
GitLab registry for types, UI, config across all repos
DTO Validation
class-validator decorators + whitelist pipe on all APIs
SSR + ISR
Next.js server components with incremental revalidation
GitLab CI/CD
Docker Deploy
05
Infrastructure & DevOps
📦
Docker
Multi-stage builds
Alpine images
🚀
GitLab CI/CD
4 CI templates
NestJS, Next.js, Flutter, npm
🐘
PostgreSQL 16
PgBouncer
pgAdmin 4
📊
Testing
Jest (147 tests)
Playwright E2E
Flutter tests (80)
📝
Migration Infra
SQL scripts, Python
TSV/Excel importers
12
Git Repositories
3 APIs, 3 webs, 1 mobile,
3 shared, infra, docs
270+
API Source Files
125 (satshrut) + 94 (veervaani)
+ 51 (vitragsatsang)
178
Web Components
64 (satshrut) + 70 (veervaani)
+ 44 (vitragsatsang)
116
Mobile Dart Files
13 feature modules
Clean Architecture
227+
Total Test Files
18 API + 49 web + 80 mobile
+ E2E (Playwright)