Individual skill
37signals-rails
37signals Rails coding principles and conventions from DHH, Jorge Manrubia, and the Fizzy/Basecamp/HEY codebase. This skill should be used when writing, reviewing, or refactoring Ruby on Rails code following the 37signals philosophy — vanilla Rails, CRUD controllers, rich domain models, concerns, no service objects, Hotwire, Turbo, Stimulus, Solid Queue, Solid Cache, Solid Cable, multi-tenancy, Minitest, custom auth, or DHH conventions.
skills/.experimental/37signals-rails/SKILL.md
Source commit cf93c57cac89d6fc3e4194686000411567f5caf3
What was checked
- Matches the observed repository HEAD
- Yes
- Scanner rules are current
- No
- Repository scan complete
- No
- Skill scan complete
- Yes
- Observed behavior
- Not checked yet
- Last checked
- Nov 5, 2026
These are observations at the recorded commit, not a guarantee of safety. Review the source before running it.
Install this skill
Choose an agent in your Stack or copy a command below. Commands fetch the pinned commit and copy only this skill directory. Existing destinations are refused. Copying a command does not install anything.
An install command is unavailable: current rules, complete repository and skill scans, an eligible behavior level and a permitted license are required.
Repository context
- Repository stars (not skill ratings)
- 222
- Repository last updated
- Aug 15, 2026
- License
- MIT
Observed agent integration: No specific integration evidence. Standard SKILL.md installation does not imply verified compatibility.
- engineering Derived category
- writing Derived category
Files and excerpt
File metadata and permitted, redacted excerpts come from the recorded scan. Source links are pinned to that commit.
Browse files
SKILL.mdcore · 8,352 bytesassets/templates/_template.mddoc · 883 bytesmetadata.jsonasset · 1,229 bytesreferences/_sections.mddoc · 1,967 bytesreferences/arch-avoid-patterns.mddoc · 4,021 bytesreferences/arch-build-before-gems.mddoc · 2,579 bytesreferences/arch-custom-auth.mddoc · 3,680 bytesreferences/arch-domain-facades.mddoc · 2,386 bytesreferences/arch-earn-abstractions.mddoc · 2,195 bytesreferences/arch-rich-models.mddoc · 1,923 bytesreferences/arch-ship-to-learn.mddoc · 3,624 bytesreferences/arch-single-business-layer.mddoc · 2,707 bytesreferences/arch-vanilla-rails.mddoc · 2,006 bytesreferences/ctrl-controller-concerns.mddoc · 3,242 bytesreferences/ctrl-crud-only.mddoc · 2,500 bytesreferences/ctrl-model-as-resources.mddoc · 2,938 bytesreferences/ctrl-nested-resources.mddoc · 3,116 bytesreferences/ctrl-params-expect.mddoc · 2,235 bytesreferences/ctrl-thin-controllers.mddoc · 3,362 bytesreferences/db-backed-everything.mddoc · 3,142 bytesreferences/db-multi-tenancy.mddoc · 2,427 bytesreferences/db-no-foreign-keys.mddoc · 3,318 bytesreferences/db-solid-cable.mddoc · 2,940 bytesreferences/db-solid-cache.mddoc · 3,244 bytesreferences/db-solid-queue.mddoc · 3,031 bytesreferences/db-uuid-primary-keys.mddoc · 2,136 bytesreferences/model-callbacks-auxiliary.mddoc · 2,712 bytesreferences/model-concerns.mddoc · 3,191 bytesreferences/model-counter-caches.mddoc · 2,350 bytesreferences/model-delegated-type.mddoc · 2,912 bytesreferences/model-event-tracking.mddoc · 3,579 bytesreferences/model-normalizes.mddoc · 2,080 bytesreferences/model-poro-namespacing.mddoc · 3,159 bytesreferences/model-store-accessor.mddoc · 2,390 bytesreferences/model-touch-chains.mddoc · 2,440 bytesreferences/state-db-constraints.mddoc · 3,480 bytesreferences/state-enums.mddoc · 2,852 bytesreferences/state-records-over-booleans.mddoc · 3,120 bytesreferences/state-timestamps.mddoc · 2,809 bytesreferences/state-write-time.mddoc · 3,638 bytesreferences/style-async-naming.mddoc · 2,643 bytesreferences/style-bang-methods.mddoc · 1,983 bytesreferences/style-conditionals.mddoc · 2,094 bytesreferences/style-method-ordering.mddoc · 2,079 bytesreferences/style-naming-return-values.mddoc · 2,811 bytesreferences/style-positive-names.mddoc · 2,376 bytesreferences/style-visibility-modifiers.mddoc · 2,236 bytesreferences/test-behavior.mddoc · 3,425 bytesreferences/test-fixtures.mddoc · 2,947 bytesreferences/test-minitest.mddoc · 2,735 bytesreferences/test-no-damage.mddoc · 3,416 bytesreferences/test-no-system-tests.mddoc · 3,824 bytesreferences/view-fragment-caching.mddoc · 3,669 bytesreferences/view-helpers-not-partials.mddoc · 2,944 bytesreferences/view-http-caching.mddoc · 3,498 bytesreferences/view-progressive-enhancement.mddoc · 3,711 bytesreferences/view-stimulus-design.mddoc · 5,074 bytesreferences/view-stimulus-targets.mddoc · 3,286 bytesreferences/view-turbo-frames.mddoc · 2,805 bytesreferences/view-turbo-streams.mddoc · 3,841 bytes
Read excerpt
# 37signals Rails Best Practices
Comprehensive coding principles and conventions for Ruby on Rails applications, as practiced at 37signals (Basecamp, HEY, Fizzy). Contains 56 rules across 8 categories, prioritized by architectural impact. Derived from official 37signals sources: the Fizzy codebase, STYLE.md, AGENTS.md, the Rails Doctrine, DHH's "On Writing Software Well" series, and the unofficial 37signals style guide (265 Fizzy PRs).
## When to Apply
Reference these guidelines when:
- Writing new Rails controllers, models, or views
- Deciding between gems and vanilla Rails
- Modeling state and database schema
- Setting up background jobs, caching, or real-time features
- Reviewing code for 37signals-style conventions
- Refactoring toward rich domain models
- Choosing authentication or authorization approach