Launcher App
Features & Capabilities
Launcher App - Features & Capabilities Report
Template Version: 1.0.0 Generated: 2026-01-22 Package:
@epicdm/flowstate-app-launcherApp ID:launcher
Table of Contents
- Overview
- App Identity
- Feature Categories
- Capabilities
- Data Models
- Integration Points
- Commands & Keybindings
- 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 Type | Description | Primary Use Cases |
|---|---|---|
| All Users | Anyone using FlowState | Navigate between apps, discover features |
| Administrators | System administrators | Monitor server status, manage org context |
| New Users | First-time FlowState users | Learn 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
| Property | Value |
|---|---|
| ID | launcher |
| Display Name | Launcher |
| Package Name | @epicdm/flowstate-app-launcher |
| Version | 1.0.0 |
| Category | core |
| Icon | rocket |
| Color | #A855F7 |
| Base Path | / |
| Permissions | None required |
Entry Points
| Entry Point | Path | Description |
|---|---|---|
| Main Export | src/index.ts | Primary package export |
| App Component | src/LauncherApp.tsx | Main React component |
| Types | src/types.ts | TypeScript type definitions |
Feature Categories
Category 1: Application Navigation
Core app discovery and navigation
Feature: App Grid Display
| Property | Details |
|---|---|
| ID | app-grid |
| Status | Implemented |
| Priority | High |
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:
| Component | Path | Purpose |
|---|---|---|
| LauncherApp | src/LauncherApp.tsx | Main launcher component |
| AppCard | src/LauncherApp.tsx | Individual app card |
Routes:
/- Launcher dashboard
Feature: Dynamic App Discovery
| Property | Details |
|---|---|
| ID | app-discovery |
| Status | Implemented |
| Priority | High |
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:
| Component | Path | Purpose |
|---|---|---|
| useManifestApps | src/LauncherApp.tsx | Hook to load manifest apps |
| getIconComponent | src/LauncherApp.tsx | Convert icon name to component |
Category 2: Context Management
Organization and workspace awareness
Feature: Status Bar
| Property | Details |
|---|---|
| ID | status-bar |
| Status | Implemented |
| Priority | Medium |
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:
| Component | Path | Purpose |
|---|---|---|
| Status Bar | src/LauncherApp.tsx | Inline status display |
Feature: Organization/Workspace Selection
| Property | Details |
|---|---|
| ID | org-workspace-selector |
| Status | Implemented |
| Priority | High |
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:
| Component | Path | Purpose |
|---|---|---|
| OrgWorkspaceSelector | @epicdm/flowstate-app-framework | Selector component |
Category 3: Platform Support
Cross-platform compatibility
Feature: Multi-Platform Support
| Property | Details |
|---|---|
| ID | multi-platform |
| Status | Implemented |
| Priority | High |
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:
| Component | Path | Purpose |
|---|---|---|
| LauncherApp | src/LauncherApp.tsx | Platform-agnostic component |
Capabilities
Core Capabilities
| Capability | Description | Implementation |
|---|---|---|
| App Discovery | Load apps from manifests | useRegisteredApps hook |
| Navigation | Route to selected apps | react-router-dom navigate |
| Context Display | Show org/workspace/server status | Framework context hooks |
| Icon Resolution | Convert icon names to components | Lucide icon library |
Technical Capabilities
| Capability | Status | Notes |
|---|---|---|
| Responsive Grid | Yes | CSS Grid with auto-fill |
| Hover Effects | Yes | Transform and shadow |
| Custom Apps | Yes | Via props override |
| Keyboard Shortcuts | Yes | Global 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
| Integration | Package | Purpose |
|---|---|---|
| FlowState Framework | @epicdm/flowstate-app-framework | Context providers, app registry |
| Lucide Icons | lucide-react | App icons |
| React Router | react-router-dom | Navigation |
Framework Hooks Used
| Hook | Purpose |
|---|---|
useNavigate | Navigate to app routes |
useServerConfigContext | Get server mode and count |
useOrgWorkspace | Get current organization |
useRegisteredApps | Get registered app manifests |
Framework Components Used
| Component | Purpose |
|---|---|
OrgWorkspaceSelector | Organization/workspace switcher |
Commands & Keybindings
Registered Commands
| Command ID | Title | Category |
|---|---|---|
launcher.showAll | Show All Apps | Navigation |
launcher.openApp | Open App... | Navigation |
launcher.goHome | Go to Home | Navigation |
launcher.goBack | Go Back | Navigation |
launcher.goForward | Go Forward | Navigation |
Keybindings
| Command | Windows/Linux | macOS | Context |
|---|---|---|---|
| Show All Apps | Ctrl+Shift+A | Cmd+Shift+A | Global |
| Go to Home | Ctrl+Shift+H | Cmd+Shift+H | Global |
| Go Back | Alt+Left | Cmd+[ | Global |
| Go Forward | Alt+Right | Cmd+] | Global |
Architecture Summary
Directory Structure
src/
├── index.ts # Package exports
├── LauncherApp.tsx # Main component with AppCard
└── types.ts # TypeScript type definitions
Key Architectural Patterns
| Pattern | Usage | Example |
|---|---|---|
| Composition | Props-based app override | apps prop for custom apps |
| Hooks | Framework integration | useRegisteredApps, useOrgWorkspace |
| Component Colocation | Card component inline | AppCard in same file |
| Dynamic Import | Icon resolution | Runtime Lucide icon lookup |
Component Hierarchy
LauncherApp
├── Status Bar (inline)
├── Header (inline)
├── OrgWorkspaceSelector (from framework)
└── App Grid
└── AppCard (multiple)
└── Lucide Icon (dynamic)
Build Configuration
| Tool | Purpose |
|---|---|
| tsup | Bundle TypeScript to ESM/CJS |
| Vite | Development server for demo |
| TypeScript | Type checking |
| Vitest | Testing |
Quality & Compliance
Test Coverage
| Test Type | Location | Status |
|---|---|---|
| Unit Tests | src/__tests__/ | Pending |
| Component Tests | - | Pending |
Accessibility
| Requirement | Status | Notes |
|---|---|---|
| Keyboard Navigation | Partial | Click handlers, needs keyboard support |
| Screen Reader | Partial | Needs aria labels |
| Focus Management | Pending | Tab navigation needed |
Appendix
Related Documentation
| Document | Location | Purpose |
|---|---|---|
| README | README.md | Basic usage documentation |
| Manifest | flowstate.json | App registration configuration |
| Framework Docs | @epicdm/flowstate-app-framework | Framework documentation |
Version History
| Version | Date | Author | Changes |
|---|---|---|---|
| 1.0.0 | 2026-01-22 | Claude | Initial documentation |