Repositories
The Syntec One codebase is a polyrepo: a set of small, single-purpose repositories rather than one
monorepo. They live on Bitbucket under git@bitbucket.org:syntec-it/ and resolve each other over SSH
(Composer VCS for backend, npm git-deps for frontend) — so any dev environment builds from Bitbucket
with no sibling checkouts required.
The pattern
Every functional unit (the base platform, and each module) is three repos:
| Suffix | Kind | Role |
|---|---|---|
syntec-one-<unit> |
Composer library | Importable backend — PHP/Symfony code + seed packages. |
syntec-one-<unit>-admin |
npm library | Importable frontend — Angular UI (ui/{widgets,hooks,slots,routes}.ts). |
syntec-one-<unit>-base |
Dev-env app | Installable dev environment (Docker) that mounts the two libs for authoring and pulls everything else from Bitbucket. |
A customer/install app is the build-up of the base plus the chosen modules.
Base platform
The engine every module builds on.
| Repo | Package | Purpose |
|---|---|---|
| syntec-one-core | syntec/platform-core (Composer) |
Backend engine — metadata-driven REST API, auth (EdDSA JWT + field-level RBAC), the entity / view / form / menu / hook engines, and package import/export. |
| syntec-one-admin | @syntec/one-admin (npm, ng-packagr) |
Frontend engine — the admin SPA packaged as an Angular library. Exposes provideSyntecAdmin(...), syntecAdminRoutes, and the four module-extension surfaces (widgets, hooks, slots, routes). Ships a committed dist/ git-dep. |
| syntec-one-base | — | Base authoring app; runs the base backend + SPA at :8080 / :4200. Mounts local ../syntec-one-core for authoring and syntec:package:export base. |
| syntec-one-admin-base | — | The base frontend app (module-less) at :4200 — the thin app that module/customer frontends are scaffolded from. Consumes @syntec/one-admin + @syntec/one-sdk. |
CRM module
The reference module — proves the extension framework end-to-end.
| Repo | Package | Purpose |
|---|---|---|
| syntec-one-crm | syntec/crm (Composer) |
CRM backend lib — packages/ (entities, menu, seed data) + src/. No Docker; imported into a database with package:import crm. |
| syntec-one-crm-admin | syntec-one-crm-admin (npm) |
CRM frontend lib — ships ui/{widgets,hooks,slots,routes}.ts (lead-score widget, lifecycle hooks, dashboard card + route). No Docker. |
| syntec-one-crm-base | — | CRM dev environment at :8082 / :4202 — mounts both CRM libs for authoring; imports core (Composer VCS) and the admin engine (npm git-dep) from Bitbucket. |
Shared & infrastructure
| Repo | Package | Purpose |
|---|---|---|
| syntec-one-sdk | @syntec/one-sdk (npm) |
Generated TypeScript API client (from the core OpenAPI spec). Consumed by every frontend as a git-dep; handles 401 auto-refresh. Ships a committed dist/. |
| syntec-one-docs | — | This documentation portal (MkDocs-Material). Aggregates each repo's docs/ at build time via scripts/sync-docs.sh. |
| syntec-one-redis | — | Shared local Redis service (cache / session backing) for the dev stacks. |
Branch & release model
devis the working line — all day-to-day work happens here.mainis the release line (Bitbucket's default branch).- A release ("bump minor/major") merges
dev → main. The first release cut every product repo to 0.2.0; the-adminlibraries track their own PATCH cadence (e.g.syntec-one-adminat0.1.x). - Dev installs pin
#dev/*@dev; a production install should pinmainor a version tag so it gets released — not bleeding-edge — code.
Retired / not yet built
- Retired:
syntec-one-platform(the original monorepo) — split into core / sdk / base and deleted.syntec-one-crm-platform(a migration-pilot artifact) — deleted; the CRM family is exactly crm + crm-admin + crm-base. - Planned:
syntec-one-dealership{,-admin,-base}(the second module, to prove module→module dependencies) and the customer clone-and-rename template repos.