Skip to main content

System Design and NFT

About 5 min

System Design and Non-Functional Requirements

This page compiles information typically recorded in an application card within an internal wiki: what the solution consists of, how it is deployed, what data it processes, and what requirements it imposes on operations.

Some values are provided by the customer

Metrics that depend on your installation — size, target RTO and RPO, data classification, number of users — are marked as “defined by the customer.” For each, the source of the initial data is specified.

System Design Card

CategoryDecision
Deployment ModelOn-premise or private cloud on the customer's infrastructure. Delivery — container image from the supplier's registry with a Cosign signature
Non-Production EnvironmentsA separate stand is recommended for update verification; stand licensing is agreed upon with the supplier
Operating SystemAny OS with container support. Verified on Ubuntu, Debian, RHEL-compatible, Astra Linux, ALT Linux, RED OS. Runtime environment — Docker, Podman, CRI-O, containerd
Special PlatformsNot required. Kubernetes is supported but not mandatory: a single application instance is sufficient for most installations
Database SoftwarePostgreSQL 14 or newer (16–17 recommended), UTF8 encoding, extensions vector (pgvector), pg_trgm, pgcrypto, uuid-ossp, hstore. A managed database from a provider is acceptable if the extensions are available
Object StorageAny S3-compatible storage: MinIO, SeaweedFS, provider-managed S3
EncryptionTransport — TLS at the load balancer and to external services. Data at rest — using the customer's database, storage, and disk subsystem mechanisms. Passwords for built-in accounts are stored as hashes, session tokens are signed with the HS512 algorithm using a key JWTSECRET of at least 64 characters in length
Installation SizeMinimum 12 vCPU, 24 GB RAM, 300 GB disk for the entire system; recommended configuration — 16 vCPU, 32 GB, 500 GB. Breakdown by containers — System Requirements
Application AvailabilityWeb interface via HTTPS through a corporate load balancer. No separate client is installed. There is no mobile application; the interface is adapted for tablets-optimized
AuthenticationOAuth2 / OIDC (PKCE mode recommended), Microsoft ADFS, Keycloak. Built-in login and password authentication is disabled in production. LDAP — deprecated method
AuthorizationRole model: team member rights, privilege groups, access rules for folders and wiki pages, personal access to process models. See Role Model
IntegrationsOutgoing: PostgreSQL, S3, SMTP, IdP, and if used, Redis, PlantUML, Gotenberg, ListMonk, LLM provider. Incoming: REST API with a team key. Event export to SIEM via syslog, metrics for Prometheus
Application LoggingApplication log to the container's standard output, collection — using containerization platform tools
Application MonitoringMetrics in Prometheus format at endpoint /actuator, health checks; visualization and alerts — Grafana
Performance ManagementNo separate APM agent is provided; application and database metrics are used for performance assessment
Development ToolServer-side — Kotlin and Spring Boot on Java 21, client-side — Vue 3 and TypeScript
Data StorageAll platform data — in the customer's database, files — in their object storage. There are no built-in automatic data deletion policies: the retention period is determined by the customer's regulations and is ensured by backup and manual deletion

Processed Data

Data CategoryCompositionNote
User credentialsEmail address, last name, first name, patronymic, position, interface language, avatar, creation date, and last login datePopulated from the corporate directory or by the user. Passwords are stored only when built-in authentication is enabled
Working materialsProcess models, process cards, descriptions, comments, nested filesContent is determined by the organization and may contain restricted-access information
Organizational dataDepartments, positions, employees, rolesPopulated by the organization; may contain employee personal data
Technical logsEvent timestamp, user and session identifier, request method and path, response code, client addressForwarded to the selected audit channel

The data classification is determined by the customer

The system does not define the confidentiality level: it depends on the processes you describe within it. For the application card, specify the category according to your internal methodology and list the categories of personal data subjects — typically, these are organization employees, and when describing external interactions, also counterparty representatives.

Non-Functional Requirements

RequirementValue
AvailabilityDefined by the customer. The application does not have a built-in cluster: the standard installation is a single instance, with fault tolerance provided by virtualization and backup solutions. Multiple instances require Redis
Planned UnavailabilityVersion update — stopping and starting the container, typically up to 15 minutes. Database migrations are performed at startup
RTO (Recovery Time Objective)Defined by the customer. Recovery involves deploying the container and restoring the database and object storage from backups
RPO (Recovery Point Objective)Defined by the customer and equal to the backup interval. Recommended schedule — daily full backup of the database
Number of UsersDefined by the license: named seats or concurrent sessions. See How Licenses Work
Number of OperationsDefined by the customer. Load profile — interactive work in the browser: opening and saving process models, search, reading the registry
PerformanceKey operations — opening a process model, saving changes, searching materials, building registry views. Target values are fixed during acceptance testing on the customer's infrastructure
ScalabilityVertical — by increasing application and database resources. Horizontal — by multiple application instances behind a load balancer with shared database, object storage, and Redis
CompatibilityModern Chromium-based, Firefox, and Safari browsers
LocalizationInterface in Russian and English

Maintenance and Support

RequirementValue
Planned MaintenanceUpdating the application version as releases are issued; updating and maintaining the database, object storage, and OS according to the customer's procedures
UpdateReplacing the container image with a new version and restarting it. The procedure and warnings for critical updates are in the Changelog and the Maintenance section
Condition-Based MaintenanceResponding to events: database and object storage disk space exhaustion, increased response time, health check errors, failed backups
BackupPostgreSQL database, object storage contents, configuration files, and environment variables. A daily database backup and a weekly storage backup with success verification are recommended
RecoveryRecovery and verification procedure — Maintenance
MonitoringPrometheus metrics, health checks, Grafana alerts. The recommended minimum set of alerts includes application unavailability, backup errors, and disk space exhaustion
Vendor SupportContact help@stormbpmn.com; response mode and timeframes are defined by the contract. See Technical Support
Customer ResponsibilityInfrastructure, OS and its updates, database, object storage, certificates, backups, IdP integration, and user permissions within teams

Service Accounts

The system does not require service accounts in the customer's domain. Below are the technical access credentials that must be created during deployment.

AccountTarget ResourcePermissions
Application database userPostgreSQLFull permissions on the application schema. On first startup, the ability to create extensions is required, or the extensions must be created in advance by the database administrator
Object storage access keyS3-compatible storageRead, write, and delete objects in the dedicated bucket
Email sender accountSMTP serverSending emails from the system address
Application client in IdPCorporate IdPConfidential OAuth2 client with scopes openid profile email
Container registry accountVendor registryUploading images for subsequent transfer to the internal registry
Team API keyStormBPMNExternal system access to the REST API within the scope of team permissions

Limitations

  • Licensing. The number of users is limited by the license: named seats or concurrent sessions. When seats are exhausted, new accounts transition to the "Pending activation" state.
  • Technological. PostgreSQL with the listed extensions and an S3-compatible storage are mandatory. The official PostgreSQL image does not include pgvector — a build with this extension is used.
  • Functional. The system describes and approves processes but does not execute them; the scope of the solution is listed in the functional requirements catalog.
  • Operational. There is no built-in high-availability cluster: fault tolerance is provided by the customer's infrastructure.
  • Network. The system does not initiate requests to the internet. Exceptions are enabled by the customer intentionally: an external LLM provider when using the AI module and pulling images from the vendor's registry during updates.
  • Geographical. There are no restrictions on the deployment region: all components operate within the customer's perimeter.

Related sections