Contributing to VibeApps
March 3, 2026 · View on GitHub
Thank you for your interest in contributing! This guide will help you get started.
Getting Started
- Fork the repository
- Clone your fork:
git clone https://github.com/YOUR_USERNAME/OpenRoom.git - Install dependencies:
pnpm install - Start the dev server:
pnpm dev - Create a feature branch:
git checkout -b feat/my-feature
Development Workflow
Code Style
- TypeScript is required for all source files
- ESLint and Prettier are enforced via pre-commit hooks
- Run
pnpm run lintto check and auto-fix issues - Run
pnpm run prettyto format code
Design Tokens
All apps must use the project's design token system. Do not hardcode colors or spacing values. See .claude/rules/design-tokens.md for the full palette and CSS variable reference.
Data Interaction
- All file/message operations must go through
@/lib— never import@gui/vibe-containerdirectly - Use
reportAction(APP_ID, actionType, params)for user-triggered actions - Use
useAgentActionListener(APP_ID, handler)for Agent-triggered actions - See
.claude/rules/data-interaction.mdfor the full specification
Icons
Use Lucide React icons only. Emoji is not allowed in the UI.
Adding a New App
Option 1: Using the Vibe Workflow (requires Claude Code)
The fastest way is via the Vibe workflow with Claude Code:
/vibe MyApp Description of the app
This automatically generates all boilerplate, integrates with the AI Agent, and registers the app.
Option 2: Building Manually (no Claude Code required)
You can build an app by hand without any AI tooling. Follow this structure:
src/pages/MyApp/
├── components/ # UI components
├── store/ # State management (Context/Reducer)
├── actions/
│ └── constants.ts # APP_ID, APP_NAME, ActionTypes
├── i18n/
│ ├── en.ts
│ └── zh.ts
├── data/ # Seed data (JSON only)
├── meta/
│ ├── meta_cn/ # Chinese guide.md + meta.yaml
│ └── meta_en/ # English guide.md + meta.yaml
├── index.tsx # Entry point (lifecycle reports here only)
├── index.module.scss
└── types.ts
Don't forget to:
- Register the route in
src/routers/index.tsx - Add the app to
APP_STATIC_REGISTRYinsrc/lib/appRegistry.ts - Define
APP_IDandActionTypesinactions/constants.ts - Add seed data as JSON files in
data/ - Use
reportLifecycle()inindex.tsxfor the AI Agent integration - Provide i18n translations (at minimum
en.tsandzh.ts)
For reference, look at any existing app (e.g., src/pages/MusicApp/) as a template.
Note: The
.claude/directory contains the AI workflow engine used by the Vibe Workflow. It is not required for manual development — you can safely ignore it if you're not using Claude Code.
Pull Request Process
- Ensure
pnpm run lintpasses with 0 errors - Ensure
pnpm buildsucceeds - Write a clear PR title and description
- Link any related issues
Commit Messages
We follow Conventional Commits:
feat: add new weather app
fix: resolve task list empty state
docs: update README with setup instructions
refactor: extract shared file API utilities
Reporting Issues
- Use GitHub Issues to report bugs or request features
- Include browser version, OS, and steps to reproduce for bugs
- Screenshots are always helpful
License
By contributing, you agree that your contributions will be licensed under the MIT License.