- Use
mix formatfor consistent code formatting - Maximum line length: 98 characters
- Use spaces around operators
- Module names:
PascalCase - Function names:
snake_case - Variable names:
snake_case - Constants:
UPPERCASE_WITH_UNDERSCORES
- Use
@moduledocfor module documentation - Use
@docfor function documentation - Include examples in documentation
- Test file naming:
*_test.exs - Use descriptive test names
- Follow "Arrange-Act-Assert" pattern
lib/
├── realtime_server/ # Business logic
│ ├── accounts/ # User management
│ ├── comments/ # Comment context
│ └── firebase/ # Firebase integration
└── realtime_server_web/ # Web layer
├── channels/ # WebSocket channels
├── controllers/ # REST controllers
└── views/ # JSON views
- One module per file
- Group related modules in directories
- Keep files focused and small