Skip to content

Domain Model

In Falcone's core domain model defines six primary entities organized in a hierarchical relationship.

Entity Hierarchy

Platform

├── Platform User (usr_<ulid>)
│   └── Platform-level operator / administrator

└── Tenant (tnt_<ulid>)

    ├── Workspace (wks_<ulid>)
    │   │
    │   ├── External Application (app_<ulid>)
    │   │   └── Client app registered for OAuth 2.0
    │   │
    │   ├── Service Account (svc_<ulid>)
    │   │   └── Machine identity for API access
    │   │
    │   └── Managed Resource (res_<ulid>)
    │       └── Database, function, bucket, topic, etc.

    └── Tenant Plan Assignment
        └── starter | growth | regulated | enterprise

Entities

Platform User

Represents a human operator of the In Falcone platform.

FieldTypeDescription
idusr_<ulid>Unique identifier
slugstringURL-safe human-readable name
emailstringContact email
rolesstring[]Platform roles (superadmin, platform_admin, etc.)
statusenumpending, active, suspended, deactivated
createdAttimestamptzCreation timestamp
updatedAttimestamptzLast modification

Roles:

  • superadmin — Full platform access
  • platform_admin — Tenant and user management
  • platform_operator — Read-only platform monitoring

Tenant

An organization or customer that owns resources on the platform.

FieldTypeDescription
idtnt_<ulid>Unique identifier
slugstringURL-safe organization name
displayNamestringHuman-readable name
planstringGovernance plan (starter, growth, regulated, enterprise)
iamContextenumrealm_per_tenant, realm_per_partition, brokered
statusenumprovisioning, active, suspended, deactivated
metadatajsonbCustom metadata
createdAttimestamptzCreation timestamp
updatedAttimestamptzLast modification

Lifecycle:

provisioning → active → suspended → deactivated
                 │                       ▲
                 └── suspended ──────────┘

                       └── active (reactivation)

When a tenant is deactivated, all child workspaces are soft-deleted.


Workspace

An isolated environment within a tenant. Each workspace gets its own:

  • PostgreSQL schema (or dedicated database)
  • MongoDB database
  • Kafka topic namespace
  • OpenWhisk namespace
  • S3 bucket path
FieldTypeDescription
idwks_<ulid>Unique identifier
tenantIdtnt_<ulid>Parent tenant
slugstringURL-safe workspace name
displayNamestringHuman-readable name
capabilitiesstring[]Enabled capabilities
deploymentProfilestringInfrastructure topology
statusenumprovisioning, active, suspended, deactivated
createdAttimestamptzCreation timestamp

Available Capabilities:

CapabilityDescription
identityKeycloak realm and client management
postgresPostgreSQL schema with RLS
mongoMongoDB database with partitioning
kafkaKafka topics for event streaming
storageS3-compatible object storage
functionsOpenWhisk serverless runtime
observabilityPrometheus metrics and dashboards
auditAudit logging and compliance

External Application

A client application registered for OAuth 2.0 access to a workspace.

FieldTypeDescription
idapp_<ulid>Unique identifier
workspaceIdwks_<ulid>Parent workspace
slugstringApplication name
redirectUrisstring[]OAuth 2.0 redirect URIs
allowedOriginsstring[]CORS allowed origins
grantTypesstring[]OAuth 2.0 grant types
statusenumactive, suspended, revoked

Keycloak client pattern: {workspaceSlug}-{applicationSlug}


Service Account

A machine identity for programmatic API access within a workspace.

FieldTypeDescription
idsvc_<ulid>Unique identifier
workspaceIdwks_<ulid>Parent workspace
slugstringService account name
scopesstring[]Granted API scopes
statusenumactive, suspended, revoked

Keycloak pattern: {workspaceSlug}-svc-{serviceAccountSlug}

Authentication: Client credentials grant → JWT with workspace-scoped claims.


Managed Resource

A provisioned resource within a workspace (database table, function, bucket, etc.).

FieldTypeDescription
idres_<ulid>Unique identifier
workspaceIdwks_<ulid>Parent workspace
kindstringResource type (postgres_table, mongo_collection, function, bucket...)
namestringResource name
statusenumprovisioning, active, deleting, deleted
metadatajsonbResource-specific configuration

Plans & Governance

Plan Hierarchy

PlanTargetMax WorkspacesDeployment Profile
StarterSmall teams3shared-starter
GrowthGrowing businesses10shared-growth
RegulatedCompliance needs25regulated-dedicated
EnterpriseLarge organizationsUnlimitedenterprise-federated

Quota Dimensions

Each plan defines soft and hard limits per dimension:

DimensionStarterGrowthRegulatedEnterprise
Workspaces31025Unlimited
PostgreSQL tables20100500Unlimited
MongoDB collections1050200Unlimited
Functions525100Unlimited
Storage (GB)550500Unlimited
API calls/month50K500K5MUnlimited

Deployment Profiles

ProfileDescription
shared-starterShared infra, minimal resources
shared-growthShared infra, moderate resources
regulated-dedicatedDedicated database, enhanced isolation
enterprise-federatedFederated identity, dedicated resources

ID Format

All entity IDs follow the pattern <prefix>_<ulid>:

EntityPrefixExample
Platform Userusr_usr_01HXXXXXXXXXXXXXXXXXX
Tenanttnt_tnt_01HXXXXXXXXXXXXXXXXXX
Workspacewks_wks_01HXXXXXXXXXXXXXXXXXX
Applicationapp_app_01HXXXXXXXXXXXXXXXXXX
Service Accountsvc_svc_01HXXXXXXXXXXXXXXXXXX
Managed Resourceres_res_01HXXXXXXXXXXXXXXXXXX

ULIDs are time-sortable, globally unique, and URL-safe.

Released under the MIT License.