2026In developmentIndependent project
End-to-End Credit Management Platform
Cover the full credit lifecycle, from admission and evaluation to credits and portfolio tracking, on a modular base that grows in phases.
- Role
- Full-stack development
- Technologies
- Laravel · PHP · React · MySQL · Modular monolith
- Modular business domains
- 9
- Tests guarding the boundaries between modules
- 110
- Access scopes: user, role and branch
- 3
Operational context
Nine business domains with their own rules, evaluation that differs by client type, and access scoped by user, role and branch.
Solution delivered
A modular monolith: each domain is a module with its own layers, completed module by module, and every dependency between modules is declared in a test.
System architecture
The flow shows how responsibilities are separated from the HTTP entry point through persistence. The yellow layer holds the business rules.
Select a layer to see what it depends on.
The Domain layer knows nothing about HTTP, the database, Auth or Eloquent. Between modules, the way in is each module’s Application layer, with its public Queries, Actions and DTOs; the exceptions, such as the authenticated user, are bounded by tests.
Depends on Application
Validates input with requests and delegates to a use case, without persisting data or resolving services by hand.
Depends on Domain, Infrastructure
Coordinates each use case and persists through Infrastructure. It is the way in for other modules, with its public Queries, Actions and DTOs.
Depends on no other layer
No HTTP, DB, Auth or Eloquent: the other layers depend on it, never the other way around.
Depends on Domain
Eloquent, optimized queries and adapters. It knows the domain; the domain does not know it.
Verifiable evidence
- All 152 API routes frozen in a contract test that pins the method, URI, controller and middleware of each one.
- 110 architecture tests: the credit-flow modules form no cycles and import no other module’s infrastructure, no raw query touches another module’s tables, and every new dependency between modules has to be declared.
- Authorization at three levels: JWT session, granular per-action permission and branch scope.
- Domain layer free of HTTP, DB, Auth and Eloquent; the Http layer neither persists data nor resolves services by hand.
// RouteContractTest.php['GET', 'api/v1/business-process', BusinessProcessController@index, ['jwt', 'permission:process.list']],['PATCH', 'api/v1/business-process/{id}', BusinessProcessController@update, ['jwt', 'permission:process.edit']],// ModuleDependencyBoundaryTest.phptest_credit_flow_module_dependency_graph_is_acyclic test_cross_module_dependency_inventory_stays_fixed // ControllerHttpBoundaryTest.phptest_http_layer_does_not_execute_unallowlisted_persistence_operations test_http_layer_does_not_use_the_service_locator // TableOwnershipBoundaryTest.phptest_ninguna_consulta_cruda_toca_una_tabla_de_otro_owner test_la_lista_de_excepciones_sigue_vacia Outcome
The project turns scattered operational rules into a traceable, tested, and maintainable system.
Need to solve a similar process?
Let’s discuss the workflow, rules, and architecture your system needs.
Get in touch