An agentic product for building consolidating actionable information in a semantically zoomable interface.
- Real-time Synchronization: Changes sync instantly across all connected clients
- Persistent State: Optional server-side storage in Cloudflare Durable Objects
- Local-first Architecture: Works offline with browser localStorage
- TypeScript Support: Full type safety throughout the application
- Infrastructure as Code: Managed with Alchemy framework
- mise - for tool version management
- A Cloudflare account (for deployment)
- Git
- Clone the repository:
git clone <repository-url>
cd executive- Install mise (if not already installed):
curl https://mise.run | sh- Install project dependencies:
mise installThis will automatically:
- Install the correct version of Bun (1.2.8)
- Run
bun installto install all npm dependencies - Set up the development environment
Start both the client and server in development mode:
mise run devThis runs both:
- Client dev server at
http://localhost:5173 - Cloudflare Workers server locally
Client only:
mise run dev:clientServer only:
mise run dev:serverBuild the client:
mise run build:clientPreview the production build:
mise run preview:clientDeploy the entire infrastructure (client + server):
mise run deployThis uses Alchemy to:
- Deploy the TinyBase Durable Object synchronization server
- Deploy the Vite-built client as a Cloudflare Pages site
- Configure all necessary bindings and routes
Remove all deployed resources:
mise run destroy.
├── client/ # React frontend application
│ ├── src/
│ │ ├── App.tsx # Main application component
│ │ └── store.ts # TinyBase store configuration
│ └── package.json
├── server/ # Cloudflare Worker backend
│ ├── index.ts # WebSocket synchronization server
│ └── package.json
├── alchemy.run.ts # Infrastructure definition
├── mise.toml # Development environment configuration
└── CLAUDE.md # AI assistant instructions
The WebSocket server URL is configured in client/src/App.tsx. By default, it connects to vite.tinybase.cloud.
To use your own server:
- Update the
SERVERconstant inclient/src/App.tsx - Deploy your own server instance using
mise run deploy
Configure server-side persistence in server/index.ts by setting:
const PERSIST_TO_DURABLE_OBJECT = true; // or falseCreate a .env file in the root directory:
ALCHEMY_PASSWORD=your-secure-password
CLOUDFLARE_ACCOUNT_ID=your-account-id# Development
mise run dev # Run full stack locally
mise run dev:client # Run client only
mise run dev:server # Run server only
# Building
mise run build # Build client for production
mise run build:client # Build client
mise run preview:client # Preview production build
# Deployment
mise run deploy # Deploy to Cloudflare
mise run destroy # Destroy all resources
# Utilities
mise run fmt # Format code with Biome
mise run logs # Stream logs from deployed workers
mise run logs:server # Stream server logs only
mise run logs:client # Stream client logs onlyStream logs from deployed workers:
# All logs
mise run logs
# Server logs only
mise run logs:server
# Client logs only
mise run logs:client- Frontend: React SPA with TinyBase for state management
- State Sync: WebSocket connections to Cloudflare Durable Objects
- Persistence: Browser localStorage + optional Durable Object storage
- Infrastructure: Managed with Alchemy TypeScript framework
- Conflict Resolution: Automatic via TinyBase MergeableStore
- Fork the repository
- Create a feature branch
- Make your changes
- Run
mise run fmtto format code - Submit a pull request
This project is provided without license - use it however you want!