Skip to content
EntryLayer Operational data entry for Snowflake

Architecture

EntryLayer is designed to stay close to governed Snowflake data instead of copying source rows into a vendor-hosted stack first. The app turns Snowflake-backed rows into project workspaces, forms, workflow, review, and audit history while keeping Snowflake as the main data and governance boundary.

Customer Snowflake account
Installed EntryLayer Native App
SPCS service
api container -> business logic, SQL API dispatch, source metadata, Cortex orchestration
web container -> React app, form builder, record workspace, admin surfaces
Application-state schema
Hybrid Tables -> projects, drafts, submissions, memberships, audit, billing state
Customer-owned databases
tables/views/semantic views -> source records and source metadata
caller rights grants -> Snowflake-enforced access boundary
Snowflake services
Cortex -> supported AI-assisted form/rule generation
Marketplace -> seat-oriented billing events
ComponentTechnologyPurpose
API containerFastAPIBusiness logic, auth context, SQL API RPC dispatch, source access, AI orchestration.
Web containerReact + TypeScriptProject workspace, form builder, submission detail, admin settings.
Application storageSnowflake Hybrid TablesProjects, form versions, submissions, memberships, permissions, audit history, billing ledger.
Source dataCustomer Snowflake objectsTables, views, and semantic views that projects can use as source objects.
AI surfaceSnowflake CortexForm generation and rule assistance within Snowflake-native boundaries.
ComputeSnowpark Container ServicesRuns the API and web containers in the installed app.

What EntryLayer owns vs what the customer owns

Section titled “What EntryLayer owns vs what the customer owns”
AreaOwner/control pointNotes
Installed app objectsEntryLayer app packageCreated during install or upgrade through the Native App setup script.
Application stateStored by EntryLayer in the customer Snowflake accountLives in Hybrid Tables inside the installed app namespace.
Source databases and schemasCustomerEntryLayer can only use what the customer grants.
Source row governanceSnowflake/customer policiesRow access, masking, and object grants are enforced by Snowflake.
App users and seatsCustomer admin through UI or SQL APISeat type controls product capability, not automatic record visibility.
Project accessEntryLayer project permissionsDetermines can_read, can_edit, can_manage, and related project permissions.
  1. A customer installs the Native App and grants required app permissions.
  2. An admin configures EntryLayer seats, source access, and project access.
  3. Builders create projects from Snowflake tables, views, semantic views, or empty forms.
  4. Source-connected projects use metadata to build form layout and field definitions.
  5. Users work records through the web app; virtual source rows materialize only when workflow or local state is needed.
  6. App-managed state, audit history, and workflow data stay in Hybrid Tables.

EntryLayer uses Snowflake governance instead of replacing it with an app-local substitute.

Governance layerWhat it controls
Snowflake object grantsWhich source databases, schemas, tables, views, or semantic views the app can describe or query.
Restricted Caller RightsLets source access run with the signed-in user’s Snowflake privileges where supported.
Row access policiesWhich source rows are visible to the signed-in user.
Masking policiesWhich source values are visible or masked for the signed-in user.
EntryLayer project permissionsWhich app records, fields, and management surfaces a user can use.

EntryLayer avoids copying every source row into app-managed storage up front.

StrategyWhy it matters
Virtual submissionsSource rows can appear in work queues before app submissions exist.
Materialization on needLocal submission state is created only when workflow or local edit state is required.
Combined API payloadsMain pages can load project context, permissions, and form metadata efficiently.
Hybrid TablesApp state and audit records stay close to the Snowflake runtime.