# Technology Stack

**Analysis Date:** 2026-01-11

## Languages

**Primary:**
- Ruby 2.4.1 (pinned for production, with noted upgrade path to 2.5+) - All service Gemfiles
- JavaScript/React - Frontend application code in `jam-ui/src/`
- Protocol Buffers (proto3) - Real-time messaging definitions in `pb/src/client_container.proto`

**Secondary:**
- TypeScript 3.9.10 (dev dependency) - `jam-ui/package.json`, used for type checking
- Python - Utility scripts in `web/script/py/`

## Runtime

**Environment:**
- Node.js 14.21.3 - `jam-ui/.nvmrc`
- Ruby 2.4.1 (production), Ruby 2.3.1 (legacy compatibility) - Multiple service Gemfiles
- PostgreSQL database server

**Package Manager:**
- npm - `jam-ui/package.json` (React frontend)
- Bundler 1.17.3 - Ruby gem management (Gemfile.alt for Silicon/M1 Macs with `MODERN_OS=1` flag)
- Lockfiles: `package-lock.json` (npm), `Gemfile.lock` (bundler), `Gemfile.alt.lock` (M1 Macs)

## Frameworks

**Core:**
- Rails 4.2.8 - Backend API framework (`web/Gemfile`, `admin/Gemfile`, `websocket-gateway/Gemfile`)
- React 16.13.1 - Frontend SPA framework (`jam-ui/package.json`)
- React Router DOM 5.2.0 - Client-side routing
- Redux Toolkit 1.6.1 - State management (`jam-ui/src/store/`)
- EventMachine 1.0.4/1.2.3 - Async I/O for WebSocket gateway

**Testing:**
- Jest - Unit testing for React (inferred from test patterns)
- Playwright 1.40.0 - E2E testing (`jam-ui/package.json`, `jam-ui/playwright.config.ts`)
- RSpec 2.11 - Ruby testing framework (`ruby/Gemfile`, test specs in `*/spec/`)
- Jasmine - Legacy JavaScript tests (`web/spec/javascripts/karma.conf.js`)
- Capybara 2.13.0 - Browser automation for Rails tests

**Build/Dev:**
- React Scripts 3.4.3 (Create React App) - `jam-ui/package.json`
- Webpack CLI 4.10.0 - Module bundling
- Gulp 4.0.2 - SCSS compilation (`jam-ui/package.json`)
- Sprockets 3.6.3 - Rails asset pipeline (all Rails services)
- Babel - JavaScript transpilation (via React Scripts)

## Key Dependencies

**Critical:**
- ruby-protocol-buffers 1.2.2 - WebSocket message serialization (all service Gemfiles)
- Devise 3.3.0 - User authentication (all Rails services)
- ActiveRecord 4.2.8 - ORM for PostgreSQL (`ruby/Gemfile`)
- Resque - Background job processing (`ruby/Gemfile`, `web/Gemfile`, `admin/Gemfile`)
- amqp gem - RabbitMQ messaging (`ruby/Gemfile`, `web/Gemfile`, `websocket-gateway/Gemfile`)

**Infrastructure:**
- PostgreSQL adapter (pg 0.17.1/0.21.0) - Database connectivity
- Redis (redis gem 3.3.0/3.3.3) - Job queue and session storage
- CarrierWave 0.9.0/0.11.2 - File upload handling with S3 support
- aws-sdk ~1 - AWS S3 integration for file storage

**Frontend UI:**
- Bootstrap 4.5.3 - CSS framework
- Reactstrap 8.6.0 - Bootstrap React components
- Font Awesome 5.15.1 - Icon library
- Howler.js 2.2.4 - Audio playback
- Chart.js 2.9.3, ECharts 4.9.0 - Data visualization
- FullCalendar 5.3.1 - Calendar UI
- Leaflet 1.7.1 - Maps integration
- React Hook Form 7.11.1 - Form handling
- i18next 21.3.3 - Internationalization

**Payment/Billing:**
- Stripe (via stripe gem) - Payment processing
- PayPal SDK (paypal-sdk-merchant-jk 1.118.1) - PayPal integration
- Recurly 2.19.14 - Subscription management

## Configuration

**Environment:**
- `.env` files for environment-specific config - `jam-ui/.env.development`, `.env.staging`, `.env.production`
- Rails environments - `web/config/environments/*.rb`
- Application config - `web/config/application.rb` (534 lines of configuration)
- Initializers - `web/config/initializers/` (26+ initialization files)

**Build:**
- `tsconfig.json` - TypeScript compiler options (if TypeScript used)
- `jam-ui/package.json` - Node dependencies and scripts
- Gemfiles - Ruby dependencies for each service
- `.prettierrc` - Code formatting (`jam-ui/`)
- `.eslintrc.json` - JavaScript linting (`jam-ui/`)

## Platform Requirements

**Development:**
- macOS/Linux/Windows with Node.js 14.21.3
- Ruby 2.4.1 (or 2.3.1 for legacy)
- PostgreSQL server
- Redis server (for Resque)
- RabbitMQ server (for AMQP messaging)
- Local hosts configuration: `www.jamkazam.local` (Rails), `beta.jamkazam.local` (React)

**Production:**
- Linux server environment
- PostgreSQL production database
- Redis for job queuing
- RabbitMQ for async messaging
- AWS S3 for file storage with CloudFront CDN
- WebSocket gateway server with EventMachine

---

*Stack analysis: 2026-01-11*
*Update after major dependency changes*
