Sangeetha-Grantha

Metadata Value
Status Active
Version 1.1.0
Last Updated 2026-09-10
Author Sangeetha Grantha Team
Document Type Decision record

ADR-002: Frontend Architecture Decision - React vs Kotlin/JS


[!NOTE] Decision record: preserve the original rationale and check its decision/supersession status. Current runtime guidance is in system architecture and Flyway migrations.

Context

Sangita Grantha requires a modern web-based admin console for content management (Krithis, Composers, Ragas, Talas, Tags, Imports). The platform needed to choose between:

  1. React with TypeScript: Industry-standard web framework with large ecosystem
  2. Kotlin/JS (Compose for Web): Shared codebase potential with KMP mobile app

The admin console requires:

Decision

Choose React 19 with TypeScript for the admin web console (modules/frontend/sangita-admin-web).

The frontend stack includes:

Rationale

The decision was driven by several factors:

  1. Mature Ecosystem: React has extensive UI libraries, documentation, and community support
  2. Developer Productivity: TypeScript + React provides excellent DX with type safety and tooling
  3. Performance: React 19 offers improved performance and Vite provides fast development builds
  4. Hiring & Maintenance: React skills are widely available, reducing onboarding time
  5. Separation of Concerns: Admin web is distinct from mobile app; shared UI code was not a primary requirement
  6. UI Library Availability: Rich component ecosystems (Material UI, Ant Design) accelerate development

Alternative Considered: Kotlin/JS with Compose for Web was evaluated but rejected due to:

Implementation Details

Project Structure

modules/frontend/sangita-admin-web/
├── src/
│   ├── components/        # Reusable UI components
│   ├── pages/            # Route-level page components
│   ├── api/              # API client utilities
│   ├── App.tsx           # Main app router
│   └── index.css         # Tailwind CSS setup
├── package.json          # Dependencies (React 19.2.4, TypeScript 5.9.0)
├── vite.config.ts        # Vite configuration
└── tsconfig.json         # TypeScript strict mode config

Key Patterns

Current Implementation Status

Completed:

🔄 In Progress:

📋 Planned:

Consequences

Positive

Negative

Neutral

Follow-up

References


Section index · Documentation home · Feature status