# Satellite App

## What Is a Satellite App?

A Satellite App on the BDB Platform is a lightweight, purpose-built application generated against the platform's SDK APIs. It extends the BDB Platform — the parent system — by exposing a narrow, opinionated experience for a specific user task, role, or operational context, while sourcing all of its data and intelligence from the platform itself.

{% hint style="info" icon="bullseye-arrow" %}
**Conceptually:** A Satellite App is to the BDB Platform what a moon is to a planet — it exists to support and enhance the parent's utility, not to replace it. Its value lies in the gravitational link to the parent: governed data, governed identity, and governed semantics.
{% endhint %}

## Why Satellite Apps

* [x] **Governed by Default:** Authentication, tenant scoping, connector entitlements, and Catalog access policies are inherited directly from the parent. Satellite Apps cannot reach beyond what the platform allows.
* [x] **Semantically Anchored:** Apps consume Semantic Objects — governed JSON definitions mapping physical tables to business names, derived measures, and governed actions — rather than raw schemas.
* [x] **GenAI-Native:** Optional Data Agents derive their behaviour from the active connector and authorised tables, allowing embedded LLM features to operate inside the user's data entitlements.
* [x] **Rapid Time-to-Production:** A working Satellite App can be generated within hours rather than weeks, since the AI assistant handles SDK plumbing, authentication, and entitlement enforcement under the guidance of platform-provided skills.

## The BDB Build Model

Satellite Apps on BDB are built through an AI-assisted, SDK-driven workflow. The platform exposes the BDB Platform SDK as the exclusive integration surface, and a GenAI coding assistant inside VS Code (Claude Code, Cursor, or Codex) translates an application requirement specification into a working Satellite App that consumes the SDK directly.

The resulting application:

* [x] Authenticates against the platform via the two-step Login flow.
* [x] Is scoped to a tenant (workspace), and the connectors are entitled to that tenant.
* [x] Consumes governed datasets, semantic definitions, and dashboard data through SDK calls.
* [x] Optionally carries a platform-defined Data Agent (LLM-backed assist) into the runtime, scoped to the connector and tables the agent is authorised to access.

{% hint style="info" %}
**Note:** A Satellite App is not built from scratch. It is composed by combining the platform's SDK APIs with a GenAI assistant inside VS Code. The developer's contribution is the requirement specification and the iterative refinement; the assistant generates the code that consumes the APIs.
{% endhint %}

## Core Concepts and Terminology

The following terms appear repeatedly in the SDK, the platform UI, and throughout this guide.

<table data-header-hidden><thead><tr><th width="178" valign="top"></th><th valign="top"></th></tr></thead><tbody><tr><td valign="top"><strong>Term</strong></td><td valign="top"><strong>Definition</strong></td></tr><tr><td valign="top">Space (workspace)</td><td valign="top">A logical tenant. Identified by a numeric BDB_SPACEKEY. Connectors, semantic models, and data agents are scoped to a space.</td></tr><tr><td valign="top">Customer key</td><td valign="top">The internal identifier for a tenant returned during the first step of authentication. The user picks a tenant by name; the key is internal.</td></tr><tr><td valign="top">Auth token</td><td valign="top">A short-lived bearer credential returned after authenticateUser. Sent on every subsequent request as the authtoken header.</td></tr><tr><td valign="top">Connector</td><td valign="top">A configured connection to an external data source (PostgreSQL, ClickHouse, MySQL, etc.). Identified internally by dataSourceID, externally by dataSourceName.</td></tr><tr><td valign="top">Semantic Object</td><td valign="top">A JSON document describing a business entity: which tables to join, which columns to expose, which measures to compute, and which actions are allowed.</td></tr><tr><td valign="top">definitionQuery</td><td valign="top">The SQL SELECT at the heart of a semantic object. Defines the row-level shape the object presents.</td></tr><tr><td valign="top">Attribute</td><td valign="top">A column in the definitionQuery, mapped to a business name and metadata (data type, PII rules, synonyms, etc.).</td></tr><tr><td valign="top">Derived measure</td><td valign="top">A SQL expression plus an aggregation function (SUM/COUNT/AVG/…) that the platform applies at runtime to produce a KPI.</td></tr><tr><td valign="top">Derived dimension</td><td valign="top">A SQL CASE expression that buckets rows into segments — risk bands, geography, tenure groups.</td></tr><tr><td valign="top">Action</td><td valign="top">A governed write-back operation (INSERT / UPDATE / soft-delete) attached to a semantic object. Carries preConditions, role policy, and audit columns.</td></tr><tr><td valign="top">Service</td><td valign="top">A parameterised SELECT exposed by a semantic object — used for drill-down lookups.</td></tr><tr><td valign="top">Data Agent (assist)</td><td valign="top">An LLM-backed conversational agent scoped to a connector and tables. Answers natural-language questions and returns SQL plus chart-ready data.</td></tr><tr><td valign="top">Sandbox storage</td><td valign="top">The platform-managed file area used to persist user uploads. Identified by BDB_WORKSPACEKEY.</td></tr><tr><td valign="top">CORS proxy</td><td valign="top">A small server-side relay sitting in front of the platform. Required for browser apps because BDB endpoints are not directly callable from a different origin.</td></tr></tbody></table>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.bdb.ai/bdb-user-documentation/platform-modules/11.0/satellite-app.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
