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:
- Display Name (
name): Human-readable application name (e.g.,Sara Money Retail). - 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. - Target Platforms (
platforms): Selection betweenAndroid & iOS,Android only, oriOS only. - Default Channels: Initialized with
stable,staging, anddev. - CLI Initialization Snippet: Once created, the modal provides a ready-to-copy
shorebird.yamlconfiguration and the correspondingtk-ota-push initcommand.
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:
| Position | Tab Name | Next.js Route | Functionality |
|---|---|---|---|
| 1 | Mission Control | /apps/[appId] | Executive summary of the app, latest release, active patch, and shorebird.yaml onboarding |
| 2 | Releases | /apps/[appId]/releases | Multi-ABI consolidated version list and release/patch creation modals |
| 3 | Insights | /apps/[appId]/insights | Patch adoption curves, installation success rates, and Circuit-Breaker health |
| 4 | Dynamic Assets | /apps/[appId]/assets | Over-the-air graphic assets and JSON configuration bundles scoped to the app |
| 5 | Keys & SDK | /apps/[appId]/catalog | digital signature public key (patch_public_key), shorebird.yaml snippet, and Store governance |
| 6 | Collaborators | /apps/[appId]/collaborators | Team members assigned to the application and RBAC permission matrix |
| 7 | Tracks | /apps/[appId]/tracks | Channel management (dev, staging, stable, custom channels) and 1-click promotion |
| 8 | Settings | /apps/[appId]/settings | Application 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:
- 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_SIGNEDpatches vsSTAGEDquarantine patches orROLLED_BACKpatches. - 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), orDEPRECATED.
- Locked Releases: Count of registered base binaries and the latest active version (e.g.,
- Guided Onboarding State (SDK Onboarding):
- When a newly created application has no releases yet, Mission Control displays a 3-step integration guide:
- Live retrieval of the digital signature public key (
GET /api/admin/v1/crypto/public-key). - Auto-generated
shorebird.yamlpre-populated withapp_id,base_url, andpatch_public_key. - 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).
- Live retrieval of the digital signature public key (
- When a newly created application has no releases yet, Mission Control displays a 3-step integration guide:
- 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.
- One-click links to the latest release detail (