[2.9.0] Rename plugin to compound-engineering
BREAKING: Plugin renamed from compounding-engineering to compound-engineering. Users will need to reinstall with the new name: claude /plugin install compound-engineering Changes: - Renamed plugin directory and all references - Updated documentation counts (24 agents, 19 commands) - Added julik-frontend-races-reviewer to docs 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,179 @@
|
||||
# DHH Ruby Style Resources
|
||||
|
||||
Links to source material, documentation, and further reading for mastering DHH's Ruby/Rails style.
|
||||
|
||||
## Primary Source Code
|
||||
|
||||
### Campfire (Once)
|
||||
The main codebase this style guide is derived from.
|
||||
|
||||
- **Repository**: https://github.com/basecamp/once-campfire
|
||||
- **Messages Controller**: https://github.com/basecamp/once-campfire/blob/main/app/controllers/messages_controller.rb
|
||||
- **JavaScript/Stimulus**: https://github.com/basecamp/once-campfire/tree/main/app/javascript
|
||||
- **Deployment**: Single Docker container with SQLite
|
||||
|
||||
### Other 37signals Open Source
|
||||
- **Solid Queue**: https://github.com/rails/solid_queue - Database-backed Active Job backend
|
||||
- **Solid Cache**: https://github.com/rails/solid_cache - Database-backed Rails cache
|
||||
- **Solid Cable**: https://github.com/rails/solid_cable - Database-backed Action Cable adapter
|
||||
- **Kamal**: https://github.com/basecamp/kamal - Zero-downtime deployment tool
|
||||
- **Turbo**: https://github.com/hotwired/turbo-rails - Hotwire's SPA-like page accelerator
|
||||
- **Stimulus**: https://github.com/hotwired/stimulus - Modest JavaScript framework
|
||||
|
||||
## Articles & Blog Posts
|
||||
|
||||
### Controller Organization
|
||||
- **How DHH Organizes His Rails Controllers**: https://jeromedalbert.com/how-dhh-organizes-his-rails-controllers/
|
||||
- Definitive article on REST-pure controller design
|
||||
- Documents the "only 7 actions" philosophy
|
||||
- Shows how to create new controllers instead of custom actions
|
||||
|
||||
### Testing Philosophy
|
||||
- **37signals Dev - Pending Tests**: https://dev.37signals.com/pending-tests/
|
||||
- How 37signals handles incomplete tests
|
||||
- Pragmatic approach to test coverage
|
||||
- **37signals Dev - All About QA**: https://dev.37signals.com/all-about-qa/
|
||||
- QA philosophy at 37signals
|
||||
- Balance between automated and manual testing
|
||||
|
||||
### Architecture & Deployment
|
||||
- **Deploy Campfire on Railway**: https://railway.com/deploy/campfire
|
||||
- Single-container deployment example
|
||||
- SQLite in production patterns
|
||||
|
||||
## Official Documentation
|
||||
|
||||
### Rails Guides (DHH's Vision)
|
||||
- **Rails Doctrine**: https://rubyonrails.org/doctrine
|
||||
- The philosophical foundation
|
||||
- Convention over configuration explained
|
||||
- "Optimize for programmer happiness"
|
||||
|
||||
### Hotwire
|
||||
- **Hotwire**: https://hotwired.dev/
|
||||
- Official Hotwire documentation
|
||||
- Turbo Drive, Frames, and Streams
|
||||
- **Turbo Handbook**: https://turbo.hotwired.dev/handbook/introduction
|
||||
- **Stimulus Handbook**: https://stimulus.hotwired.dev/handbook/introduction
|
||||
|
||||
### Current Attributes
|
||||
- **Rails API - CurrentAttributes**: https://api.rubyonrails.org/classes/ActiveSupport/CurrentAttributes.html
|
||||
- Official documentation for the Current pattern
|
||||
- Thread-isolated attribute singleton
|
||||
|
||||
## Videos & Talks
|
||||
|
||||
### DHH Keynotes
|
||||
- **RailsConf Keynotes**: Search YouTube for "DHH RailsConf"
|
||||
- Annual state of Rails addresses
|
||||
- Philosophy and direction discussions
|
||||
|
||||
### Hotwire Tutorials
|
||||
- **Hotwire Demo by DHH**: Original demo showing the approach
|
||||
- **GoRails Hotwire Series**: Practical implementation tutorials
|
||||
|
||||
## Books
|
||||
|
||||
### By DHH & 37signals
|
||||
- **Getting Real**: https://basecamp.com/gettingreal
|
||||
- Product development philosophy
|
||||
- Less is more approach
|
||||
- **Remote**: Working remotely philosophy
|
||||
- **It Doesn't Have to Be Crazy at Work**: Calm company culture
|
||||
|
||||
### Rails Books
|
||||
- **Agile Web Development with Rails**: The original Rails book
|
||||
- **The Rails Way**: Comprehensive Rails patterns
|
||||
|
||||
## Gems & Tools Used
|
||||
|
||||
### Core Stack
|
||||
```ruby
|
||||
# Gemfile patterns from Campfire
|
||||
gem "rails", "~> 8.0"
|
||||
gem "sqlite3"
|
||||
gem "propshaft" # Asset pipeline
|
||||
gem "importmap-rails" # JavaScript imports
|
||||
gem "turbo-rails" # Hotwire Turbo
|
||||
gem "stimulus-rails" # Hotwire Stimulus
|
||||
gem "solid_queue" # Job backend
|
||||
gem "solid_cache" # Cache backend
|
||||
gem "solid_cable" # WebSocket backend
|
||||
gem "kamal" # Deployment
|
||||
gem "thruster" # HTTP/2 proxy
|
||||
gem "image_processing" # Active Storage variants
|
||||
```
|
||||
|
||||
### Development
|
||||
```ruby
|
||||
group :development do
|
||||
gem "web-console"
|
||||
gem "rubocop-rails-omakase" # 37signals style rules
|
||||
end
|
||||
|
||||
group :test do
|
||||
gem "capybara"
|
||||
gem "selenium-webdriver"
|
||||
end
|
||||
```
|
||||
|
||||
## RuboCop Configuration
|
||||
|
||||
37signals publishes their RuboCop rules:
|
||||
- **rubocop-rails-omakase**: https://github.com/rails/rubocop-rails-omakase
|
||||
- Official Rails/37signals style rules
|
||||
- Use this for consistent style enforcement
|
||||
|
||||
```yaml
|
||||
# .rubocop.yml
|
||||
inherit_gem:
|
||||
rubocop-rails-omakase: rubocop.yml
|
||||
|
||||
# Project-specific overrides if needed
|
||||
```
|
||||
|
||||
## Community Resources
|
||||
|
||||
### Forums & Discussion
|
||||
- **Ruby on Rails Discourse**: https://discuss.rubyonrails.org/
|
||||
- **Reddit r/rails**: https://reddit.com/r/rails
|
||||
|
||||
### Podcasts
|
||||
- **Remote Ruby**: Ruby/Rails discussions
|
||||
- **Ruby Rogues**: Long-running Ruby podcast
|
||||
- **The Bike Shed**: Thoughtbot's development podcast
|
||||
|
||||
## Key Philosophy Documents
|
||||
|
||||
### The Rails Doctrine Pillars
|
||||
1. Optimize for programmer happiness
|
||||
2. Convention over Configuration
|
||||
3. The menu is omakase
|
||||
4. No one paradigm
|
||||
5. Exalt beautiful code
|
||||
6. Provide sharp knives
|
||||
7. Value integrated systems
|
||||
8. Progress over stability
|
||||
9. Push up a big tent
|
||||
|
||||
### DHH Quotes to Remember
|
||||
|
||||
> "The vast majority of Rails controllers can use the same seven actions."
|
||||
|
||||
> "If you're adding a custom action, you're probably missing a controller."
|
||||
|
||||
> "Clear code is better than clever code."
|
||||
|
||||
> "The test file should be a love letter to the code."
|
||||
|
||||
> "SQLite is enough for most applications."
|
||||
|
||||
## Version History
|
||||
|
||||
This style guide is based on:
|
||||
- Campfire source code (2024)
|
||||
- Rails 8.0 conventions
|
||||
- Ruby 3.3 syntax preferences
|
||||
- Hotwire 2.0 patterns
|
||||
|
||||
Last updated: 2024
|
||||
Reference in New Issue
Block a user