fierce-opsdesk is the mobile engineering command center for Opsdesk: a read-first iOS and Android application that lets a developer open their phone and immediately understand the health, activity, security, cost, deployments, and connected services across their projects — minimizing the need to switch between tools.
The product intent is visibility, triage, and navigation, not a full developer workstation. The app reuses the existing Opsdesk backend, APIs, authentication, models, and business logic; it does not duplicate backend logic in the client, does not add Docker/container/image functionality, and prefers existing API endpoints over creating duplicate APIs. The audience is the Engineer: a developer or on-call engineer who scans a phone between meetings and at 3am and needs to know what needs attention, what changed, whether everything is healthy, what is costing money, whether there is a security problem, what happened in their projects, and where action is needed.
fierce-opsdesk is a React Native + TypeScript mobile client for iOS and Android that consumes the existing Opsdesk backend/APIs and reuses the existing Opsdesk authentication, models, business logic, React components, and design language where practical. A central API client handles authentication, retries, caching, pagination, error handling, and refresh; credentials and tokens are stored in secure platform storage; the backend remains the authority for authorization.
The app is organized around a five-tab bottom navigation — Home, Projects, Activity, Alerts, More — with Home Dashboard, Project Details, GitHub, AWS, Security, Connected Apps, Search, and Notifications as the working surfaces behind those tabs. Every card follows Summary → Detail → Original provider. Data is cached, stale data is clearly marked, independent requests are parallelized, large datasets are paginated, expensive screens are lazy-loaded, and user preferences are persisted locally.
Current delivery covers the mobile command center only. Docker/container/image functionality is explicitly excluded from the mobile app, the entire AWS console is explicitly not reproduced, and no APIs are invented that do not exist. Provider-dependent data (secret scanning, recent AWS activity, AWS security findings, recommended next actions, reconnect/disconnect, push notifications, background refresh) is surfaced only where the corresponding API access or platform capability permits.
fierce-opsdesk is a first-party mobile client. The Engineer installs the app, establishes identity once through the existing Opsdesk authentication, and from then on sees a unified read-first view of projects, GitHub, deployments and workflows, security, AWS costs, alerts, activity, and connected apps.
Delivery ownership is split deliberately:
Identity is application-owned because the Engineer must privately own and resume durable, actor-specific state (acknowledged alerts, read/unread state, notification preferences, cached views) and because provider connections and their scopes must remain bound to the correct participant. First use is anonymous: the Home entry surface is reachable without identity, and protected state remains unavailable until identity is established through Login or Sign Up. No adjacent account-management capabilities (team administration, role management, billing) are introduced.
Current scope is the mobile command center. Future scope is not committed in this document.
The authoritative reference directive identifies the existing Opsdesk repository, backend/APIs, authentication, models, business logic, React components, and design system as a content_source. The concrete inventory of that source — the enumerated API list, endpoint paths, authentication flow details, component names, and reusable type/model names — is not present in the supplied evidence and must be produced by the pre-implementation inspection defined in Section 3 (FR-40 through FR-46) and captured in the mobile API capability matrix (Provider → API → Existing endpoint → Mobile screen/card → Refresh strategy). No endpoint names, component names, or model names are invented here.
Each requirement is a distinct story point with provenance (explicit, basic_default, required_inference), lifecycle facts, and observable acceptance.
FR-01 — Mobile command center (explicit). As an Engineer, I should open the Opsdesk mobile app and immediately see the health, activity, security, cost, deployments, and connected services across my projects, so that I minimize switching between tools. Trigger: app launch. Observable result: the Home Dashboard renders priority-ordered panels. Access: protected. Failure/recovery: per-panel error with retry. Continuation: drill into any card.
FR-02 — Reuse existing backend (explicit). As an Engineer, I should see data produced by the existing Opsdesk APIs, authentication, models, and business logic, so that the mobile app stays consistent with Opsdesk. Trigger: any data request. Observable result: responses come from existing endpoints. Failure/recovery: backend errors surface with retry. Continuation: unchanged.
FR-03 — No Docker functionality (explicit). As an Engineer, I should not see Docker/container/image functionality in the mobile app. Trigger: any navigation. Observable result: no Docker/container/image surface, card, or action exists. Failure/recovery: not applicable. Continuation: unchanged.
FR-04 — No duplicated backend logic (explicit). As an Engineer, I should receive behavior computed by the backend, not reimplemented in the client. Trigger: any capability. Observable result: the client performs no business-logic duplication. Failure/recovery: not applicable. Continuation: unchanged.
FR-05 — Prefer existing endpoints (explicit). As an Engineer, I should get data through existing API endpoints rather than duplicate APIs. Trigger: any data request. Observable result: existing endpoints are used. Failure/recovery: not applicable. Continuation: unchanged.
FR-06 — Phone-optimized UI (explicit). As an Engineer, I should use a UI optimized for phone screens, touch, intermittent connectivity, and fast scanning. Trigger: any interaction. Observable result: touch targets, compact scanning layouts, and connectivity-tolerant states. Failure/recovery: cached data shown while refreshing. Continuation: unchanged.
FR-07 — Secure OAuth/token handling (explicit). As an Engineer, I should have my OAuth tokens handled securely, with no secrets or cloud credentials exposed in the client. Trigger: authentication and any provider call. Observable result: tokens stored in secure storage; no secrets in the client. Failure/recovery: expired/revoked tokens handled gracefully. Continuation: re-authenticate.
FR-08 — React Native + TypeScript (explicit). As an Engineer, I should use a React Native + TypeScript app. Trigger: app build. Observable result: the app is React Native + TypeScript. Failure/recovery: not applicable. Continuation: unchanged.
FR-09 — Reuse React components/design language (explicit). As an Engineer, I should see the existing Opsdesk design language reused where practical. Trigger: any screen. Observable result: reused components/design language where practical. Failure/recovery: not applicable. Continuation: unchanged.
FR-10 — Shared API/types/models (explicit). As an Engineer, I should benefit from shared API/types/models with the existing Opsdesk application where possible. Trigger: any data request. Observable result: shared types/models used where possible. Failure/recovery: not applicable. Continuation: unchanged.
FR-11 — Central API client (explicit). As an Engineer, I should have all API calls go through a central client with authentication, retries, caching, pagination, error handling, and refresh. Trigger: any data request. Observable result: the central client handles the request lifecycle. Failure/recovery: retries and error handling. Continuation: refresh.
FR-12 — Secure local credential/token storage (explicit). As an Engineer, I should have credentials and tokens stored in secure local storage. Trigger: identity established or refreshed. Observable result: tokens in secure storage, never in AsyncStorage/plaintext. Failure/recovery: storage failure surfaces an error. Continuation: retry.
FR-13 — Pull-to-refresh and background refresh (explicit). As an Engineer, I should pull to refresh and have background refresh where the platform permits. Trigger: pull gesture or platform background schedule. Observable result: data refreshes; the pull-to-refresh indicator resolves into a timestamp. Failure/recovery: refresh failure keeps cached data with a stale marker. Continuation: retry.
FR-14 — Dark/light mode (explicit). As an Engineer, I should use the app in dark or light mode. Trigger: system or app theme setting. Observable result: the theme switches between the graphite dark palette and the paper light palette. Failure/recovery: not applicable. Continuation: unchanged.
FR-15 — Responsive layouts (explicit). As an Engineer, I should get responsive layouts on iPhone and Android. Trigger: device and orientation. Observable result: layouts adapt. Failure/recovery: not applicable. Continuation: unchanged.
FR-16 — Deep linking (explicit). As an Engineer, I should deep link into detailed resources. Trigger: deep link. Observable result: the target detail opens. Failure/recovery: invalid or unauthorized links route to a safe surface. Continuation: navigate normally.
FR-17 — Push notifications (explicit). As an Engineer, I should receive push notifications for important alerts where supported. Trigger: meaningful event. Observable result: a push notification is delivered where the platform supports it. Failure/recovery: unsupported platforms show the state as unsupported. Continuation: open the alert.
FR-18 — Bottom navigation (explicit). As an Engineer, I should navigate with a simple bottom navigation of Home, Projects, Activity, Alerts, and More. Trigger: tab tap. Observable result: the selected tab opens. Failure/recovery: not applicable. Continuation: unchanged.
FR-19 — Home Dashboard content (explicit). As an Engineer, I should see overall system/project status, GitHub activity, open PRs, failed/recent GitHub Actions, security alerts, Dependabot/code scanning alerts, AWS cost/current spend, cost changes/trends, recent deployments, recent commits, issues requiring attention, connected application status, recent important events, and quick actions. Trigger: Home Dashboard open. Observable result: all listed panels render. Failure/recovery: per-panel retry. Continuation: drill into

One read-first view of your projects, GitHub activity, deployments, security, AWS cost, alerts, and connected apps.
Sign in to load the engineering readout for your workspace, or create an account to connect a provider.

One read-first view of your projects, GitHub activity, deployments, security, AWS cost, alerts, and connected apps.
Sign in to load the engineering readout for your workspace, or create an account to connect a provider.
No comments yet. Be the first!