Launcher App

Features & Capabilities

Launcher App - Features & Capabilities Report

Template Version: 1.0.0 Generated: 2026-01-22 Package: @epicdm/flowstate-app-launcher App ID: launcher


Table of Contents

  1. Overview
  2. App Identity
  3. Feature Categories
  4. Capabilities
  5. Data Models
  6. Integration Points
  7. Commands & Keybindings
  8. Architecture Summary

Overview

Purpose

The Launcher App serves as the central navigation hub and home screen for FlowState. It provides a visual dashboard for discovering and accessing all registered applications, displaying server status, and managing organization/workspace context.

Target Users

User TypeDescriptionPrimary Use Cases
All UsersAnyone using FlowStateNavigate between apps, discover features
AdministratorsSystem administratorsMonitor server status, manage org context
New UsersFirst-time FlowState usersLearn available applications

Value Proposition

  • Single Entry Point: One dashboard to access all FlowState apps
  • Dynamic Discovery: Apps automatically appear when registered
  • Context Awareness: Always shows current org, workspace, and server status
  • Cross-Platform: Consistent experience across Electron, Web, and Mobile

App Identity

PropertyValue
IDlauncher
Display NameLauncher
Package Name@epicdm/flowstate-app-launcher
Version1.0.0
Categorycore
Iconrocket
Color#A855F7
Base Path/
PermissionsNone required

Entry Points

Entry PointPathDescription
Main Exportsrc/index.tsPrimary package export
App Componentsrc/LauncherApp.tsxMain React component
Typessrc/types.tsTypeScript type definitions

Feature Categories

Category 1: Application Navigation

Core app discovery and navigation

Feature: App Grid Display

PropertyDetails
IDapp-grid
StatusImplemented
PriorityHigh

Description: Displays all registered FlowState applications in a responsive grid layout with visual cards showing app icon, name, and description.

User Story: As a user, I want to see all available apps so that I can quickly navigate to the one I need.

Acceptance Criteria:

  • [x] Display apps in responsive grid layout
  • [x] Show app icon with branded color
  • [x] Show app name and description
  • [x] Hover effects for interactivity
  • [x] Click to navigate to app route

Implementation:

ComponentPathPurpose
LauncherAppsrc/LauncherApp.tsxMain launcher component
AppCardsrc/LauncherApp.tsxIndividual app card

Routes:

  • / - Launcher dashboard

Feature: Dynamic App Discovery

PropertyDetails
IDapp-discovery
StatusImplemented
PriorityHigh

Description: Automatically discovers and displays apps from their registered manifests using the useRegisteredApps hook from the framework.

User Story: As a developer, I want apps to automatically appear in the launcher so that I don't need to manually configure the launcher for each new app.

Acceptance Criteria:

  • [x] Load apps from registered manifests
  • [x] Convert icon names to Lucide components
  • [x] Support custom apps via props
  • [x] Fallback to Box icon for unknown icons

Implementation:

ComponentPathPurpose
useManifestAppssrc/LauncherApp.tsxHook to load manifest apps
getIconComponentsrc/LauncherApp.tsxConvert icon name to component

Category 2: Context Management

Organization and workspace awareness

Feature: Status Bar

PropertyDetails
IDstatus-bar
StatusImplemented
PriorityMedium

Description: Displays current system status including connection mode, active server count, and current organization.

User Story: As a user, I want to see my current context so that I know which organization and environment I'm working in.

Acceptance Criteria:

  • [x] Show connection mode (local/remote)
  • [x] Show active server count
  • [x] Show current organization name
  • [x] Styled status bar at top of dashboard

Implementation:

ComponentPathPurpose
Status Barsrc/LauncherApp.tsxInline status display

Feature: Organization/Workspace Selection

PropertyDetails
IDorg-workspace-selector
StatusImplemented
PriorityHigh

Description: Provides organization and workspace selector for switching context, using the OrgWorkspaceSelector component from the framework.

User Story: As a user, I want to switch between organizations and workspaces so that I can access different contexts.

Acceptance Criteria:

  • [x] Display current organization
  • [x] Allow organization switching
  • [x] Allow workspace switching
  • [x] Persist selection

Implementation:

ComponentPathPurpose
OrgWorkspaceSelector@epicdm/flowstate-app-frameworkSelector component

Category 3: Platform Support

Cross-platform compatibility

Feature: Multi-Platform Support

PropertyDetails
IDmulti-platform
StatusImplemented
PriorityHigh

Description: The launcher works across multiple platforms including Electron (desktop), Web (Next.js), and React Native (with navigation adapter).

User Story: As a user, I want the launcher to work the same way regardless of platform so that I have a consistent experience.

Acceptance Criteria:

  • [x] Works in Electron desktop app
  • [x] Works in Next.js web app
  • [x] Compatible with React Native (requires navigation adapter)
  • [x] Uses react-router-dom for navigation

Implementation:

ComponentPathPurpose
LauncherAppsrc/LauncherApp.tsxPlatform-agnostic component

Capabilities

Core Capabilities

CapabilityDescriptionImplementation
App DiscoveryLoad apps from manifestsuseRegisteredApps hook
NavigationRoute to selected appsreact-router-dom navigate
Context DisplayShow org/workspace/server statusFramework context hooks
Icon ResolutionConvert icon names to componentsLucide icon library

Technical Capabilities

CapabilityStatusNotes
Responsive GridYesCSS Grid with auto-fill
Hover EffectsYesTransform and shadow
Custom AppsYesVia props override
Keyboard ShortcutsYesGlobal keybindings

Data Models

Types

AppDefinition

interface AppDefinition {
  id: string;
  name: string;
  description: string;
  icon: LucideIcon;
  route: string;
  color: string;
  category: 'technical' | 'business';
  requiresServer: boolean;
}

LauncherAppProps

interface LauncherAppProps {
  /** Apps to display. If not provided, uses useRegisteredApps() from manifests */
  apps?: AppDefinition[];
  onAppSelect?: (appId: string) => void;
}

Data Flow

App Manifests (flowstate.json) --> useRegisteredApps() --> useManifestApps() --> LauncherApp
                                                                                      |
                                                                                      v
                                                                                  AppCard Grid
                                                                                      |
                                                                                      v
                                                                        User Click --> navigate()

Integration Points

Internal Integrations

IntegrationPackagePurpose
FlowState Framework@epicdm/flowstate-app-frameworkContext providers, app registry
Lucide Iconslucide-reactApp icons
React Routerreact-router-domNavigation

Framework Hooks Used

HookPurpose
useNavigateNavigate to app routes
useServerConfigContextGet server mode and count
useOrgWorkspaceGet current organization
useRegisteredAppsGet registered app manifests

Framework Components Used

ComponentPurpose
OrgWorkspaceSelectorOrganization/workspace switcher

Commands & Keybindings

Registered Commands

Command IDTitleCategory
launcher.showAllShow All AppsNavigation
launcher.openAppOpen App...Navigation
launcher.goHomeGo to HomeNavigation
launcher.goBackGo BackNavigation
launcher.goForwardGo ForwardNavigation

Keybindings

CommandWindows/LinuxmacOSContext
Show All AppsCtrl+Shift+ACmd+Shift+AGlobal
Go to HomeCtrl+Shift+HCmd+Shift+HGlobal
Go BackAlt+LeftCmd+[Global
Go ForwardAlt+RightCmd+]Global

Architecture Summary

Directory Structure

src/
├── index.ts           # Package exports
├── LauncherApp.tsx    # Main component with AppCard
└── types.ts           # TypeScript type definitions

Key Architectural Patterns

PatternUsageExample
CompositionProps-based app overrideapps prop for custom apps
HooksFramework integrationuseRegisteredApps, useOrgWorkspace
Component ColocationCard component inlineAppCard in same file
Dynamic ImportIcon resolutionRuntime Lucide icon lookup

Component Hierarchy

LauncherApp
├── Status Bar (inline)
├── Header (inline)
├── OrgWorkspaceSelector (from framework)
└── App Grid
    └── AppCard (multiple)
        └── Lucide Icon (dynamic)

Build Configuration

ToolPurpose
tsupBundle TypeScript to ESM/CJS
ViteDevelopment server for demo
TypeScriptType checking
VitestTesting

Quality & Compliance

Test Coverage

Test TypeLocationStatus
Unit Testssrc/__tests__/Pending
Component Tests-Pending

Accessibility

RequirementStatusNotes
Keyboard NavigationPartialClick handlers, needs keyboard support
Screen ReaderPartialNeeds aria labels
Focus ManagementPendingTab navigation needed

Appendix

DocumentLocationPurpose
READMEREADME.mdBasic usage documentation
Manifestflowstate.jsonApp registration configuration
Framework Docs@epicdm/flowstate-app-frameworkFramework documentation

Version History

VersionDateAuthorChanges
1.0.02026-01-22ClaudeInitial documentation
Previous
Getting Started