A modern widget-based dashboard builder with AI-powered widget generation, visual pipelines, and real-time collaboration features.
- Widget Canvas - Drag, drop, resize, and rotate widgets on an infinite canvas
- 50+ Built-in Widgets - Pipeline tools, debug utilities, farming sim, editors, and more
- AI Widget Generator - Generate custom widgets using natural language prompts
- Visual Pipelines - Connect widgets to create data flows and automation
- Multi-Canvas Support - Create and manage multiple dashboards
- Responsive Design - Works on desktop, tablet, and mobile devices
- Theming - 4 built-in themes (default, cyberpunk, minimal, cozy)
- Node.js 18+
- npm or pnpm
# Clone the repository
git clone https://github.com/hkcm91/StickerNestV2.git
cd StickerNestV2
# Install dependencies
npm install
# Start development server
npm run devOpen http://localhost:5173 in your browser.
Create a .env file in the project root:
# Required for AI features
VITE_REPLICATE_API_TOKEN=your_replicate_token
# Optional - Supabase for cloud storage and auth
VITE_SUPABASE_URL=your_supabase_url
VITE_SUPABASE_ANON_KEY=your_supabase_anon_key
# Optional - AI Provider API Keys (for proxy)
VITE_OPENAI_API_KEY=your_openai_key
VITE_ANTHROPIC_API_KEY=your_anthropic_keyLocal Dev Mode: If Supabase is not configured, the app runs in local dev mode with localStorage persistence and a demo user.
- View Mode - Interact with widgets normally
- Edit Mode - Drag, resize, rotate, and arrange widgets
- Connect Mode - Create pipelines by connecting widget inputs/outputs
- Click the Library tab or the + button on mobile
- Browse widget categories (AI Tools, Pipeline, Debug, etc.)
- Click a widget to view details, then "Add to Canvas"
- Or use checkboxes for multi-select and "Add All to Canvas"
- Switch to Connect Mode
- Click a widget's output port and drag to another widget's input port
- Data will flow automatically when the source widget emits events
- Use the Pipeline Visualizer widget to debug connections
- Click Save to save the current canvas to localStorage (and Supabase if configured)
- Click Load to browse and restore saved dashboards
- Export/Import JSON for backup and sharing
StickerNestV2/
├── src/
│ ├── ai/ # AI widget generation system
│ ├── components/ # React UI components
│ ├── contexts/ # React contexts (Auth, etc.)
│ ├── hooks/ # Custom React hooks
│ ├── layouts/ # Page layouts
│ ├── pipelines/ # Visual pipeline editor
│ ├── runtime/ # Widget runtime and sandbox
│ ├── services/ # API clients and services
│ ├── state/ # Zustand stores
│ ├── types/ # TypeScript type definitions
│ └── widget-lab/ # Widget development tools
├── public/
│ └── test-widgets/ # Built-in widget bundles
├── supabase/
│ └── schema.sql # Database schema
└── docs/ # Documentation
Widgets are HTML/JS bundles that run in sandboxed iframes. See WIDGET-DEVELOPMENT.md for the full guide.
my-widget/
├── manifest.json # Widget metadata and I/O definitions
└── index.html # Widget entry point
{
"id": "my-widget",
"name": "My Widget",
"version": "1.0.0",
"kind": "2d",
"entry": "index.html",
"capabilities": {
"draggable": true,
"resizable": true
},
"outputs": {
"data": {
"type": "object",
"description": "Output data"
}
}
}Widgets communicate with the host via postMessage:
// Emit output to connected widgets
window.parent.postMessage({
type: 'widget:emit',
payload: { type: 'data', payload: { value: 123 } }
}, '*');
// Listen for input from connected widgets
window.addEventListener('message', (e) => {
if (e.data.type === 'widget:event') {
console.log('Received:', e.data.payload);
}
});
// Signal widget is ready
window.parent.postMessage({ type: 'widget:ready' }, '*');To enable cloud features, set up Supabase:
- Create a new project at supabase.com
- Run the schema from
supabase/schema.sqlin the SQL Editor - Create storage buckets:
UserWidgetsandSystemWidgets - Enable authentication providers (Email, Google, GitHub)
- Add your project URL and anon key to
.env
npm run dev # Start development server
npm run build # Build for production
npm run preview # Preview production build
npm run test # Run Playwright tests
npm run test:ui # Run tests with UI
npm run lint # Run ESLint- Frontend: React 18, TypeScript, Vite
- State: Zustand
- Styling: CSS-in-JS, CSS Variables
- Backend: Supabase (PostgreSQL, Auth, Storage)
- AI: OpenAI, Anthropic Claude, Replicate
- Testing: Playwright
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
MIT License - see LICENSE for details.
- Widget sandbox architecture inspired by Figma and Notion
- AI integration powered by Replicate, OpenAI, and Anthropic