Code of Conduct & Engineering Standards
This document defines both:
- Our Community Code of Conduct
- Our Engineering & Coding Standards
It applies to all contributors, maintainers, reviewers, and collaborators across all repositories and environments.
Part 1: Community Code of Conduct
Our Pledge
We pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, religion, or sexual identity and orientation.
We commit to fostering an open, inclusive, respectful, and professional environment.
Expected Behavior
Examples of behavior that contribute to a positive environment:
- Demonstrating empathy and kindness
- Respecting differing opinions and viewpoints
- Giving and gracefully accepting constructive feedback
- Taking responsibility for mistakes and learning from them
- Prioritizing the long-term health of the team and project
- Writing clear, maintainable, and documented code
- Reviewing code objectively, not personally
Unacceptable Behavior
The following are not tolerated:
- Harassment or discrimination of any kind
- Sexualized language or imagery
- Trolling, personal attacks, or derogatory comments
- Publishing private information without permission
- Aggressive or hostile communication
- Repeated architectural violations after review feedback
- Intentionally introducing insecure or unstable code
Enforcement Responsibilities
Project maintainers are responsible for:
- Clarifying and enforcing these standards
- Taking fair and appropriate corrective action
- Removing contributions that violate this code
- Communicating moderation decisions when appropriate
Reporting Violations
Report unacceptable behavior to:
All reports will be handled confidentially and fairly.
Enforcement Ladder
- Correction -- Private warning and clarification
- Warning -- Formal notice with consequences
- Temporary Ban -- Restricted participation
- Permanent Ban -- Removal from the project
Part 2: Engineering Standards (Laravel 12)
Core Engineering Principles
We build software that is:
- Readable
- Scalable
- Secure
- Testable
- Production-ready
We follow:
- Thin Controllers, Fat Services
- Strict typing everywhere
- No business logic in Blade
- DRY (Don't Repeat Yourself)
- Small, focused methods
- Descriptive naming
- Always validate input
- Always eager load relationships
- Write code for the next developer
Project Structure
app/ ├── Actions/ ├── Services/ ├── Repositories/ ├── DTOs/ ├── Enums/ ├── Policies/ ├── Http/ │ ├── Controllers/ │ ├── Requests/ │ ├── Resources/
Rules:
- One class per file
- Namespace must match folder structure
- No business logic inside Controllers
PHP Standards
- Follow PSR-12
- Follow PSR-4 autoloading
- Use Laravel Pint
- Run before commit:
<!-- -->
./vendor/bin/pint
Strict Types
Every PHP file must start with:
declare(strict_types=1);
All methods must define:
- Parameter types
- Return types
Example:
public function create(array $data): User
Naming Conventions
Classes:
- PascalCase
- Singular
- Example: UserController, OrderService
Methods:
- camelCase
- Verb-based
- Example: createUser(), processPayment()
Variables:
- camelCase
- Meaningful names
- Avoid: $data, $val, $temp
Controller Rules
Controllers must:
- Handle only HTTP concerns
- Delegate logic to Services or Actions
- Use Form Requests for validation
Never:
User::create($request->all());
Always:
$this->userService->create($request->validated());
Validation Rules
- Always use Form Requests
- Never validate inside controllers
- Never trust user input
Generate:
php artisan make:request StoreUserRequest
Eloquent Standards
- Always define $fillable
- Always define relationships
- Always eager load relationships
- Avoid N+1 queries
Example:
User::with('orders')->paginate();
API Standards
- Use API Resources
- Use correct HTTP status codes
- Never return raw models
- Version APIs when required
Example:
return new UserResource($user);
Logging & Error Handling
- Use structured logging
- Avoid generic logs
- Create custom exceptions
- Handle exceptions centrally
Example:
Log::info('User created', ['user_id' => $user->id]);
Security Rules (Mandatory)
- Use $fillable
- Never use $request->all()
- Use Policies & Gates
- Escape Blade output
- Use HTTPS in production
- No secrets in code
- No hardcoded credentials
Testing Standards
Required:
- Feature tests for endpoints
- Unit tests for services
- Use factories
- Use DB transactions in tests
Minimum requirement:
- Critical business logic must be tested
Git & Branching Rules
Branch naming:
- feature/short-description
- fix/short-description
- refactor/short-description
Rules:
- No direct push to main
- PR required for merge
- At least one approval required
- Resolve conflicts before review
Pull Request Checklist
Before creating PR:
- Code formatted with Pint
- No debug code (dd, dump)
- No commented dead code
- Tests written (if required)
- No N+1 issues
- No hardcoded values
Definition of Done
A task is complete when:
- Code follows standards
- Tests pass
- Code reviewed and approved
- No linting errors
- No security risks introduced
- Proper documentation added
Prohibited Practices
The following are NOT allowed:
- Business logic in Blade
- Fat controllers
- Using $request->all()
- Unvalidated input
- Hardcoded credentials
- Ignoring N+1 issues
- Committing unformatted code
- Bypassing code review
Continuous Improvement
This document is a living standard.
Team members are encouraged to:
- Suggest improvements
- Propose architectural refinements
- Raise scalability concerns early
- Share performance optimizations
We optimize for long-term maintainability over short-term speed.