Skip to main content

Projects, Applications, and Mission Control

In TkushPatch, each mobile application is uniquely identified by its app_id (typically matching the Android/iOS bundle identifier, e.g., com.sara.money or com.entreprise.agent) and strictly isolated within an organization (tenant_id).


1. Creating a Project (CreateProjectModal)​

A project can be registered in two complementary ways:

A. From the Web Console (CreateProjectModal.tsx)​

Accessible via the New Application button on /apps or from the ProjectSwitcher dropdown in the top header:

  1. Display Name (name): Human-readable application name (e.g., Sara Money Retail).
  2. Technical Identifier (appId): Unique package-style identifier (e.g., com.sara.money). An auto-slug helper suggests an identifier as you type the display name.
  3. Target Platforms (platforms): Selection between Android & iOS, Android only, or iOS only.
  4. Default Channels: Initialized with stable, staging, and dev.
  5. CLI Initialization Snippet: Once created, the modal provides a ready-to-copy shorebird.yaml configuration and the corresponding tk-ota-push init command.

B. Automatic Discovery from the CLI (ProjectContext.tsx)​

When a developer publishes an initial release directly via tk-ota-push release android or POST /api/admin/v1/releases, ProjectContext automatically detects the new appId when polling GET /api/admin/v1/releases?tenant_id=... and merges it into the console's project registry with an Auto-discovered badge.


2. Applications Catalog (/apps)​

The /apps page (src/app/apps/page.tsx) provides a portfolio view of all mobile applications in the organization:

  • Application Cards: Each card displays the project name, its monospace appId, platform badges (ANDROID, IOS), total locked base releases, active OTA patches (APPROVED_AND_SIGNED), and latest production version.
  • Portfolio KPIs: Total managed applications, total releases, and total active patches across the tenant.
  • Instant Filtering: Search bar filtering by display name or appId.
  • Direct Navigation: Clicking any card opens that application's Mission Control (/apps/[appId]).

3. Contextual Application Tabs (AppTabs)​

Whenever an operator navigates under /apps/[appId]/*, the AppTabs component (src/components/layout/AppTabs.tsx) renders below the main header, providing 8 application-scoped tabs:

PositionTab NameNext.js RouteFunctionality
1Mission Control/apps/[appId]Executive summary of the app, latest release, active patch, and shorebird.yaml onboarding
2Releases/apps/[appId]/releasesMulti-ABI consolidated version list and release/patch creation modals
3Insights/apps/[appId]/insightsPatch adoption curves, installation success rates, and Circuit-Breaker health
4Dynamic Assets/apps/[appId]/assetsOver-the-air graphic assets and JSON configuration bundles scoped to the app
5Keys & SDK/apps/[appId]/catalogdigital signature public key (patch_public_key), shorebird.yaml snippet, and Store governance
6Collaborators/apps/[appId]/collaboratorsTeam members assigned to the application and RBAC permission matrix
7Tracks/apps/[appId]/tracksChannel management (dev, staging, stable, custom channels) and 1-click promotion
8Settings/apps/[appId]/settingsApplication display name update, specific quotas, and local registry removal

4. Mission Control (/apps/[appId])​

The /apps/[appId] page (src/app/apps/[appId]/page.tsx) serves as the operational command center for a specific mobile application:

  1. Application KPI Cards:
    • Locked Releases: Count of registered base binaries and the latest active version (e.g., 3.28.5+99).
    • Deployed OTA Patches: Count of APPROVED_AND_SIGNED patches vs STAGED quarantine patches or ROLLED_BACK patches.
    • Architecture Coverage (ABI): Displays covered CPU architectures (aarch64, arm, x86_64).
    • Store & Security Status: Indicates whether the latest release is LIVE_ON_STORE, IN_STORE_REVIEW (Store Review Shield active), or DEPRECATED.
  2. Guided Onboarding State (SDK Onboarding):
    • When a newly created application has no releases yet, Mission Control displays a 3-step integration guide:
      1. Live retrieval of the digital signature public key (GET /api/admin/v1/crypto/public-key).
      2. Auto-generated shorebird.yaml pre-populated with app_id, base_url, and patch_public_key.
      3. Ready-to-run CLI commands to lock the first base release (tk-ota-push release android) and push the first patch (tk-ota-push patch android).
  3. Recent Activity and Quick Actions:
    • One-click links to the latest release detail (/apps/[appId]/releases/[version]), deployment tracks (/apps/[appId]/tracks), and Four-Eyes approvals.