Platform
The Syntec One platform is the metadata-driven engine and the Base package. Entities, fields, views, and forms are defined as data and rendered by a generic engine, so most functionality is configured rather than coded. Modules live in their own repos and consume the platform through the Module SDK.
Stack
- PHP / Symfony 7.4 LTS on FrankenPHP (worker mode).
- PostgreSQL 16 (storage-driver default; a DB-portability seam is preserved).
- Everything runs in Docker — no PHP/Composer on the host.
How it fits together
Browser / Module ──HTTP──► Controllers (app/src/Controller/Api)
│
▼
API services (app/src/Api) ── OpenAPI (/api/docs)
│
▼
Engine (app/src/Engine) ── generic CRUD over metadata
│
┌────────────────┼─────────────────┐
▼ ▼ ▼
Metadata Security View / Form
(entities, fields, (RBAC, field- & (resolvers that turn
views, forms) row-level perms) metadata into UI specs)
│
▼
PostgreSQL (data + the metadata that describes it)
A request names an entity and an operation; the engine reads that entity's metadata, applies security, runs the query, and returns JSON. The same metadata drives the generated REST API, the view grids, and the forms.
Where things live (app/src)
| Directory | Responsibility |
|---|---|
Engine |
Generic CRUD over metadata (EntityRepository), query building, translations |
Metadata |
Entity/field/view/form model + Persistence/Bootstrap (schema + Base seed) |
View |
ViewResolver, filter compiler, variant/filter stores, raw-SQL views |
Form |
FormResolver (turns form components into a render spec) |
Security |
Roles, field- and record-level permission resolution, security context |
Auth |
EdDSA JWT, Argon2id passwords, login/refresh |
Api / Controller/Api |
API services and the HTTP routes (incl. OpenApi generation) |
Schema |
Physical-schema introspection/indexing into metadata |
I18n |
Language resolution and *_lng companion translations |
Audit · Email · Menu · Sql · Config |
Audit trail, mail, menu tree, named SQL, settings |
Next
- Getting started — run it locally, run the tests, bootstrap the DB.
- Concepts — entities, views, forms, security, translations, packages.
API reference: the running platform serves Swagger UI at /api/docs and the raw document at
/api/openapi.json (generated by OpenApiGenerator — every route is represented there).