This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
SoulFireClient is a React/TypeScript + Tauri frontend for the SoulFire server. It runs on web, desktop (Windows/macOS/Linux), and mobile (Android/iOS) via Tauri 2.
pnpm install # Install dependencies
pnpm dev # Start Vite dev server (web only, port 1420)
pnpm dev-tauri # Start Tauri dev mode (desktop app with hot reload)
pnpm build # Build web bundle
pnpm build-tauri # Build Tauri desktop app
pnpm typecheck # TypeScript type checking
pnpm check # Run Biome linter
pnpm fix # Run Biome with auto-fix
pnpm generate-proto # Regenerate TypeScript from .proto files (requires protoc)
pnpm generate-routes # Regenerate TanStack Router route tree- Frontend: React 19, TypeScript, Tailwind CSS 4
- Desktop: Tauri 2 (Rust backend, requires nightly toolchain)
- Routing: TanStack Router (file-based in
src/routes/) - State: Zustand for editor state, TanStack Query for server state
- API: gRPC-Web via
@protobuf-ts(protos inprotos/, generated tosrc/generated/) - UI: shadcn/ui components, Radix primitives, Lucide icons
src/routes/- File-based routing._dashboard.tsxis authenticated layout,_dashboard/user/for admin pages,_dashboard/instance/$instance/for instance-scoped pagessrc/components/script-editor/- Visual node-based script editor built on React Flowsrc/lib/web-rpc.ts- gRPC transport setup and auth token managementsrc/lib/script-service.ts- Query options and proto↔JS conversion utilitiessrc/stores/- Zustand stores (currently just script editor state)src/generated/- Auto-generated protobuf types (do not edit manually)src-tauri/- Rust Tauri backend code
Use @/* to import from src/ (e.g., import { Button } from '@/components/ui/button')
- Biome handles formatting and linting
- Pre-commit hook runs lint-staged with Biome
- Ignored directories:
src/components/ui/,src/components/data-table/,src/generated/
When modifying gRPC API:
- Update
.protofiles inprotos/ - Run
pnpm generate-proto - Conversion utilities in
src/lib/script-service.tsmay need updates
The app supports a demo mode (no server connection) using fallback data from src/demo-data.ts. Check getTransport() returning null for demo detection.