Complete development context for Zammad open-source helpdesk platform including legacy desktop-app, Vue frontends, Rails backend, and GraphQL API
You are working on Zammad, an open-source web-based helpdesk/customer support system. This guide provides the essential mental model to ship changes efficiently.
Zammad is a Ruby on Rails application with three distinct frontends:
1. **Legacy desktop-app** (`app/assets/`): Original UI using CoffeeScript, Spine.js MVC framework, Sprockets, and REST API
2. **desktop-view** (`app/frontend/apps/desktop`): Modern desktop UI using Vue 3 + GraphQL
3. **mobile** (`app/frontend/apps/mobile`): Modern mobile UI using Vue 3 + GraphQL
```
app/
├── assets/ # Legacy desktop-app (CoffeeScript/Sprockets)
├── frontend/
│ ├── apps/
│ │ ├── desktop/ # Modern desktop Vue app
│ │ └── mobile/ # Modern mobile Vue app
│ ├── shared/ # Cross-app modules (components, utils, stores, GraphQL, i18n)
│ └── tests/ # Vitest setup and test helpers
├── controllers/ # Rails controllers (REST + standard routes)
├── models/ # ActiveRecord models
├── views/ # Rails views/templates
├── graphql/ # GraphQL schema, types, and resolvers
├── services/ # Business logic modules
├── jobs/ # Background jobs
├── mailers/ # Email templates and logic
├── channels/ # ActionCable channels
├── policies/ # Authorization policies
└── helpers/ # View helpers
lib/ # Core extensions, integrations, business logic
├── core_ext/ # Ruby/Rails extensions
├── github/, gitlab/ # Git integrations
├── microsoft_graph/ # Microsoft integrations
├── whatsapp/ # WhatsApp integration
├── knowledge_base/ # KB features
├── secure_mailing/ # Encryption features
├── background_services/ # Background operations
└── [helpers, utilities, and feature modules]
config/ # Rails configuration
db/ # Database migrations and schema
doc/developer_manual/ # **SOURCE OF TRUTH** for setup, standards, testing
spec/ # RSpec tests (backend)
test/ # QUnit tests (legacy frontend)
```
Always consult these files for authoritative runtime and environment details:
**Location**: `app/assets/javascripts/` and `app/assets/stylesheets/`
1. **Path aliases**: Use aliases defined in `tsconfig.base.json`
2. **No cross-app imports**: Desktop and mobile apps are isolated (ESLint enforces boundaries)
3. **Shared code**: Place reusable code in `app/frontend/shared/`
4. **Testing**: Use Vitest + Testing Library for unit/component tests (`app/frontend/tests/`)
5. **Styling**: Use Tailwind CSS utility classes; lint with Stylelint and Prettier
6. **i18n**: Wrap all user-facing strings (rules in `eslint.config.ts`)
Contains core extensions, integrations, and non-standard business logic:
1. **Setup**: Follow `doc/developer_manual/` for environment setup
2. **Run locally**: Use `Procfile.dev` for development server
3. **Path aliases**: Check `tsconfig.base.json` before importing
4. **Linting**: Run ESLint/Stylelint/Prettier before committing
5. **Testing**: Add tests for all new features
6. **PRs**: Keep focused; include test coverage
1. **Developer Manual** (`doc/developer_manual/`) is the source of truth
2. Check configuration files for runtime constraints
3. Follow existing patterns in the codebase
4. Prefer modern Vue apps for new features
5. Keep legacy changes minimal and isolated
Leave a review
No reviews yet. Be the first to review this skill!
# Download SKILL.md from killerskills.ai/api/skills/zammad-development-guide/raw