TinkerSet
Desktop/web application for exploring and organizing files through configurable rules and LLM assistance. React+Tauri UI with FastAPI backend for processing and action execution.
Overview
Monorepo combining a React UI (with state managed by Zustand) packaged for desktop with Tauri and a Python FastAPI backend. Allows defining JSON 'jobs' that can be previewed or executed on the file system, and offers natural language prompt interpretation via multiple LLM providers. Includes CLI, HTTP routes, and modular filter and action engines.
Architecture
Folder structure: frontend contains the UI (React + TypeScript + Vite) and Tauri wrapper (src-tauri/). app hosts the FastAPI backend with services/ (llm_service, processor, action_engine, filter_engine), models/ (Job), and cli.py. The app exposes endpoints (e.g. /preview, /execute, /ai/interpret) that the UI or CLI can call; Tauri provides IPC integration for the desktop executable. Centralized configuration in config.py that loads .env. LLM integrations support groq, ollama and openai and are encapsulated in services/llm_service.py.
Key Technical Decisions
Monorepo to keep frontend (Tauri) and backend (FastAPI) together and facilitate local testing
Tauri + React to offer desktop experience and web development with the same codebase
FastAPI + Pydantic for validation and fast, typed HTTP endpoints
Service-based architecture (services/) to separate llm_service, processor, action_engine and filter_engine
CLI (cli.py) for offline workflows and reproducible tests
Centralize .env loading in config.py for consistency across environments
Enforce typing in frontend (avoid any, use unknown and error helper) for greater safety
Consistent naming standard for LLM providers
Challenges
Secret management in .env (risk of exposing API keys if committed) — requires policies and CI secrets
Tauri adds multi-platform build complexity (Rust toolchain and native dependencies on Windows)
Testing LLM integrations may require external keys or emulation systems for CI
No persistent database in core: in-memory/JSON file operations and jobs require care for concurrency and recovery
Development dependencies (Black, Ruff, pre-commit, pytest) increase local footprint and complicate reproducibility without CI
Trade-offs
Monorepo facilitates UI-backend sync but can increase repository size
Tauri offers native APIs and desktop packaging at the cost of more complex builds and native dependencies
Supporting multiple LLM providers increases flexibility but adds code complexity and credential management overhead
No relational database simplifies initial design but limits audit trails/rollback and makes consistency harder if execution fails
Rewriting frontend errors to use unknown and error helper improves type safety but requires extensive component changes