7.8 KiB
7.8 KiB
Codebase Structure
Analysis Date: 2026-01-11
Directory Layout
jam-cloud/
├── jam-ui/ # React SPA frontend (port 4000)
├── web/ # Rails 4.2.8 API backend (port 3000)
├── admin/ # Rails admin portal (ActiveAdmin)
├── websocket-gateway/ # EventMachine WebSocket server
├── ruby/ # Shared business logic gem (jam_ruby)
├── pb/ # Protocol Buffer definitions
├── db/ # PostgreSQL migrations (403+ files)
├── lambda/ # AWS Lambda functions
├── monitor/ # Monitoring/observability
├── wordpress/ # WordPress integration
├── CLAUDE.md # Development documentation
└── .planning/ # GSD project planning
Directory Purposes
jam-ui/
- Purpose: Modern React 16 frontend SPA
- Contains: React components, hooks, Redux store, helpers, layouts
- Key files:
src/index.js(entry),src/App.js(root),package.json(deps) - Subdirectories:
src/components/- 47 component directories (auth, client, dashboard, jamtracks, feed, common, etc.)src/hooks/- 41 custom React hookssrc/helpers/- 22 utility files (rest.js, apiFetch.js, MixerHelper.js, JamServer.js)src/store/- Redux Toolkit setup with 12 feature slicessrc/layouts/- 18 layout componentssrc/context/- 18 Context API providers
web/
- Purpose: Rails 4.2.8 REST API backend
- Contains: Controllers (83 API), models (via ruby gem), views (legacy), mailers
- Key files:
config/routes.rb(51KB),config/application.rb(534 lines of config) - Subdirectories:
app/controllers/- 83 API controller filesapp/views/- 71 view directories (legacy Rails views)config/initializers/- 26 initialization filesspec/- RSpec tests
ruby/
- Purpose: Shared business logic gem (jam_ruby)
- Contains: ActiveRecord models, managers, validators, message factory
- Key files:
lib/jam_ruby.rb(gem manifest),lib/jam_ruby/message_factory.rb(42KB) - Subdirectories:
lib/jam_ruby/models/- 217 model files (User, MusicSession, JamTrack, Recording, etc.)lib/jam_ruby/lib/- 29 manager/utility fileslib/jam_ruby/amqp/- Message queue handlerslib/jam_ruby/resque/- Background job definitions
websocket-gateway/
- Purpose: Real-time WebSocket communication server
- Contains: EventMachine-based server, WebSocket protocol handling
- Key files: Gemfile (dependencies), lib/ (implementation)
- Subdirectories:
spec/for RSpec tests
pb/
- Purpose: Protocol Buffer message definitions
- Contains:
.protosource files, generated Ruby/JavaScript bindings - Key files:
src/client_container.proto(WebSocket message types) - Subdirectories:
target/ruby/jampb/- Generated Ruby Protocol Buffer classestarget/javascript/- Generated JavaScript bindings
admin/
- Purpose: Rails admin portal with ActiveAdmin
- Contains: Admin controllers, configurations, views
- Key files: Gemfile (includes activeadmin), config/
- Subdirectories: Same structure as Rails web service
db/
- Purpose: Database schema and migrations
- Contains: 403+ migration files in
up/directory - Key files:
build(migration runner),manifest(migration manifest) - Subdirectories:
up/- All migration SQL/Ruby files
Key File Locations
Entry Points:
jam-ui/src/index.js- React DOM render entryjam-ui/public/index.html- HTML template with<div id="main">web/config/routes.rb- Rails route definitions (51KB)web/config/application.rb- Rails configuration (534 lines)ruby/lib/jam_ruby.rb- Shared gem manifest
Configuration:
jam-ui/.env.development,.env.staging,.env.production- Frontend environment configjam-ui/.eslintrc.json- ESLint configurationjam-ui/.prettierrc- Prettier formatting rulesjam-ui/package.json- Node dependencies and scriptsweb/config/database.yml- PostgreSQL connection configweb/config/environments/*.rb- Rails environment-specific settings*/Gemfile,*/Gemfile.alt- Ruby gem dependencies (Gemfile.alt for M1 Macs)
Core Logic:
jam-ui/src/components/- All React componentsjam-ui/src/helpers/rest.js- 70+ API operation functions (945 lines)jam-ui/src/helpers/MixerHelper.js- Audio mixer logic (1,270 lines)jam-ui/src/hooks/useJamServer.js- WebSocket orchestration (26KB)web/app/controllers/- All Rails API controllersruby/lib/jam_ruby/models/- All business logic models
Testing:
jam-ui/tests/- React tests (Playwright, Jest)jam-ui/playwright.config.ts- Playwright E2E configweb/spec/- Rails RSpec testsweb/spec/javascripts/- Legacy Jasmine tests with Karmaruby/spec/- Ruby gem RSpec tests
Documentation:
CLAUDE.md- Project documentation for Claude CodeREADME.md- Project setup and usage (root and service-level)
Naming Conventions
Files:
- React components:
JK{ComponentName}.js(e.g.,JKDashboardMain.js,JKSessionModal.js) - Non-JK components:
PascalCase.js(e.g.,Avatar.js,FalconCardHeader.js) - React hooks:
use{Feature}.js(e.g.,useJamServer.js,useGearUtils.js) - Helpers:
camelCase.js(e.g.,apiFetch.js,rest.js,utils.js) - Rails controllers:
api_{resource}_controller.rb(e.g.,api_sessions_controller.rb) - Ruby models:
snake_case.rb(e.g.,user.rb,music_session.rb,jam_track.rb) - Test files:
*.test.js(Jest),*.spec.js(Jasmine),*.spec.rb(RSpec),*.spec.ts(Playwright)
Directories:
- React: kebab-case or camelCase (e.g.,
components/,dashboard/,jamtracks/) - Rails: snake_case (e.g.,
app/controllers/,config/initializers/) - Ruby: snake_case (e.g.,
lib/jam_ruby/models/)
Special Patterns:
index.js- Barrel exports or entry points*_controller.rb- Rails controllers*_spec.rb- RSpec test files*.proto- Protocol Buffer definitions
Where to Add New Code
New React Feature:
- Primary code:
jam-ui/src/components/{category}/JK{FeatureName}.js - State management:
jam-ui/src/store/features/{feature}Slice.js - API calls: Add functions to
jam-ui/src/helpers/rest.js - Custom hooks:
jam-ui/src/hooks/use{Feature}.js - Tests:
jam-ui/tests/{category}/{feature}.test.js
New API Endpoint:
- Controller:
web/app/controllers/api_{resource}_controller.rb - Routes: Add to
web/config/routes.rb - Business logic:
ruby/lib/jam_ruby/models/{model}.rb - Tests:
web/spec/controllers/api_{resource}_controller_spec.rb
New Model/Business Logic:
- Model definition:
ruby/lib/jam_ruby/models/{model_name}.rb - Tests:
ruby/spec/jam_ruby/models/{model_name}_spec.rb
New WebSocket Message Type:
- Protocol definition:
pb/src/client_container.proto - Rebuild:
cd pb && ./build - Handler: Add to websocket-gateway or message_factory
New Background Job:
- Job class:
ruby/lib/jam_ruby/resque/{job_name}.rb - Enqueue: Call
Resque.enqueue(JobClass, args)from models/controllers
Special Directories
pb/target/
- Purpose: Generated Protocol Buffer bindings (Ruby/JavaScript)
- Source: Auto-generated by
pb/buildscript from.protofiles - Committed: Yes (generated code checked in)
node_modules/
- Purpose: npm dependencies for jam-ui
- Source: Installed via
npm install - Committed: No (.gitignored)
vendor/bundle/
- Purpose: Bundler-installed Ruby gems
- Source: Installed via
bundle install - Committed: No (.gitignored)
.planning/
- Purpose: GSD project planning files
- Source: Created by /gsd:* commands
- Committed: Yes (project planning state)
Structure analysis: 2026-01-11 Update when directory structure changes