Which parts of the solution are low-code and which are custom code?
Our approach is code-first, low-code, rather than “black-box” low-code.
In the platform, there are two types of code: base code (reusable components and services) and auto-generated project code. Importantly, any code (base or generated) is originally written by engineers. A developer first implements a component/module/service according to our internal code style and industry standards, and it is then reviewed and tested. After that, the component is manually converted into a template suitable for the generator and for inclusion in an application template.
During the initial rollout (typically ~20–40 minutes) of a customer solution, the template code is adapted (refactored) by the generator to match the customer project (e.g., naming, prefixes, namespaces, copyright headers, etc.). As part of this process, a copy of the component/template is produced and stored in a separate, dedicated repository created for that specific customer and project. This refactored copy follows the same code standards and code style, and it is available for manual development and modifications after deployment.
Auto-generated code is available for debugging and extension (e.g., via partial classes and inheritance) and remains readable and standards-compliant.
Examples of auto-generated code (majority):
- Frontend TypeScript models generated from C# backend data models and interfaces
- Frontend localization helpers (translation variables) required for multilingual UI
- Base helper/mapping classes for common UI representations (strings, list items, etc.)
Examples of base (reusable) code:
- AuthService — authentication and authorisation
- NotificationService — notifications (email, SMS, push, in-app)
- FileService — file and image storage/management
- SyncService — reusable integration mechanisms for connecting to ERPs (incl. synchronization patterns)
Clarifications (risk reduction)
- No runtime “magic”
- Code generation happens during setup/implementation; the result is a normal codebase, not hidden logic running inside a proprietary engine.
- Maintainability
- The generated and refactored code follows a consistent code style and architecture conventions.
- Safe extension points
- We extend using standard mechanisms (partial classes, inheritance, separate extension files) so updates/regeneration do not overwrite customer-specific logic.