One widget, four mission types
The Skydio Autonomy Widget is a React interface for drone mission controls. As a frontend consultant, I built its component architecture and Storybook documentation, implementing Skydio's Rivit design language. The delivered widget supports Waypoint, RTD, Orbit, and Tracking mission types.
The widget was designed as a "UI microservice" with minimal coupling to Skydio's control systems and layouts for mobile and desktop. The linked Storybook lets reviewers inspect the components, their props, and interactive examples.
In this case study
Actions come from configuration
I put each action's icon, label, tooltip, and variant in a shared configuration. Controls read that configuration to render mission actions:
// AutonomyWidget.configs.ts
const ACTION_CONFIGS = {
pause: {
icon: PauseIcon,
label: 'Pause',
tooltip: 'Pause current mission',
variant: 'secondary'
},
orbit: {
icon: OrbitIcon,
label: 'Orbit',
tooltip: 'Enable orbit mode',
variant: 'primary'
},
// ... 15+ mission actions
} as const
// Usage: Automatic UI generation
<IconButton {...ACTION_CONFIGS[action]} />Mission state and controls
A React Context provider manages mission type, timer, and action states. Remote state synchronization, event subscription hooks for analytics telemetry, and runtime config injection connect the widget to the surrounding application.
- Dynamic Timer: Circular countdown ring with animated icon transitions
- OrbitSlider: Dual progress indicators with chevron controls
- IconButton: Shared component with icons, tooltips, and labels
- StatusMessage: Expandable area for mission updates
- Tooltip System: Custom tooltips with ARIA support
Reviewing component states
I documented the components in Storybook with prop tables and usage examples for product and engineering teams. The stories include:
- Storybook with Vite integration
- Accessibility addon (@storybook/addon-a11y) for automated accessibility checks
- Theme switching addon for light/dark mode validation
- Component Docs tabs with prop tables and usage examples
A component system the team can extend
Figma-exported SVG icons became React components, and Figma Variables mapped to the Tailwind config. Tailwind CSS layouts provide compact mobile controls and an expanded desktop mode with full action sets.
Component imports and build setup
Component exports
// Clean imports via barrel pattern
import {
AutonomyWidget,
IconButton,
OrbitSlider
} from '@/components'
// Instead of deep imports
import AutonomyWidget from '@/components/AutonomyWidget'
import IconButton from '@/components/IconButton'Build setup
- Vite for fast builds and HMR
- pnpm workspace management
- ESLint configuration for code quality
- TypeScript strict mode for type safety
- Deployed via Vercel for Storybook hosting
Handoff through Storybook
I delivered the configurable widget system, responsive components, and Storybook documentation, and trained product and engineering teams on component patterns and adoption workflows.
Project notes
Delivered
React widget system for autonomous drone mission controls
Storybook
Interactive component documentation with accessibility testing
Config-Driven
Declarative action configuration and runtime state integration