A tool to help manage codebar.io members and events.
If you are considering making a PR, please take a look at the GitHub issues to see if there are any new feature requirements or bugs that you maybe able to help resolve.
Need help? We're on Slack!
Before you start, please check out our contributing guidelines.
We recommend native installation for local development. A full step-by-step guide is in docs/development-setup.md. The quick version is below.
-
Install prerequisites (macOS or Linux):
- mise β manages Ruby and environment variables
- PostgreSQL β database server
- ImageMagick β image processing
On macOS with Homebrew:
brew install mise postgresql imagemagick brew services start postgresql
-
Clone the project:
git clone https://github.com/codebar/planner.git cd planner -
Install Ruby (managed by mise):
mise install
-
Configure GitHub OAuth:
- Create a GitHub OAuth app at https://github.com/settings/applications/new
- Authorization callback URL:
http://localhost:3000/auth/github - Copy your Client ID and Client Secret into
mise.local.toml:cp mise.local.toml.example mise.local.toml # Edit mise.local.toml with your real credentials
-
Install dependencies and set up the database:
gem install bundler bundle install bundle exec rake db:create db:migrate db:test:prepare -
Check your environment:
bundle exec rake setup:check -
Start the app:
bundle exec rails serverVisit http://localhost:3000.
bundle exec rspecRun tests in parallel for faster results:
bundle exec parallel_rspec spec/ -n 3Run a single test:
bundle exec rspec spec/path/to/test_spec.rb:42Run JavaScript-enabled feature tests with a visible browser:
PLAYWRIGHT_HEADLESS=false bundle exec rspecAfter signing up locally, run:
bundle exec rails runner "Member.find_by(email: 'your-email@example.com').add_role(:admin)"For detailed, step-by-step instructions β including troubleshooting, Linux-specific steps, and explanations of what each tool does β see docs/development-setup.md.
A Docker setup exists but is not recommended for local development. It is slower, harder to debug, and does not support running JavaScript feature tests with a visible browser.
If you prefer Docker, see the commands in bin/d*:
| Command | What it does |
|---|---|
bin/dup |
Build and start a new container (also resets the database) |
bin/dstart |
Start an existing container |
bin/dserver |
Run the Rails server inside the container |
bin/drspec |
Run the test suite inside the container |
bin/drake |
Run rake inside the container |
bin/dexec |
Open a shell inside the container |
bin/dstop |
Stop the container |
bin/ddown |
Stop and remove the container |
We use Bootstrap 5. Documentation: https://getbootstrap.com/docs/5.2/getting-started/introduction/
This project follows layered architecture principles as described in Layered Design for Ruby on Rails Applications by Vladimir Dementyev. The goal is to organise code into four layers with strict unidirectional dependencies:
| Layer | Responsibility | Key directories |
|---|---|---|
| Presentation | HTTP/WebSocket concerns | app/controllers/, app/views/, app/mailers/ |
| Application | Orchestration, coordination | app/services/, app/form_models/, app/policies/ |
| Domain | Business logic, rules | app/models/, app/models/concerns/ |
| Infrastructure | Persistence, external APIs | Active Record models, external service clients |
Guidelines for contributors:
- Keep controllers thin β they should only handle HTTP concerns (params, session, response format)
- Put business logic in domain models, not services (services orchestrate, they don't own logic)
- Don't reference
Currentattributes from models β pass values explicitly - Extract reusable queries into query objects, complex view logic into presenters
- Use form objects for multi-model forms or complex validation
AGENTS.md also references these patterns in its For planning agents section.
You can pick one of the open issues, fix a bug, improve the interface, refactor the code or improve test coverage!
If there is something else that you would like to work on, open an issue first so we can discuss it. We are always open to new ideas and ways of improving planner!
