Skip to content

Technical stack

This document describes the main technologies used in Balyze and the rationale behind their selection.

The focus is on long-term suitability and architectural coherence rather than environment-specific details.


Backend framework

Laravel is used as the primary backend framework.

Reasons for this choice:

  • mature and stable ecosystem
  • strong conventions that reduce accidental complexity
  • first-class support for authentication, authorization, and testing
  • good balance between productivity and explicit architecture

Laravel provides the structural foundation of the application without imposing premature constraints.


Authorization and roles

Role and permission management is handled through Spatie Laravel Permission.

This library is used to:

  • manage roles and permissions explicitly
  • avoid custom authorization implementations
  • align with Laravel’s native authorization system

The library is treated as an infrastructure concern, not as a domain dependency.


Database

PostgreSQL is used as the primary relational database.

Reasons for this choice:

  • strong data integrity guarantees
  • excellent support for relational and structured data
  • robust transactional behavior
  • long-term scalability

PostgreSQL is well suited for domain-driven data models and historical consistency.


Caching and performance

A dedicated caching layer (e.g. Redis) is used where appropriate to support performance and scalability needs.

Caching remains an implementation concern and does not influence domain rules.


Testing

Automated tests are written using PHPUnit.

Testing focuses on:

  • domain services
  • lifecycle rules
  • authorization boundaries

Tests are considered part of the domain safety net rather than an optional add-on.


Versioning considerations

Specific version numbers are intentionally omitted from this document.

Exact versions are defined and enforced through:

  • dependency management files
  • container configurations
  • infrastructure tooling

This document describes what is used and why, not which patch version is currently deployed.