Project Structure

Interactive file explorer for the Luna monorepo. Click any file to see what it does.

Click a file or folder to read its description. Folders expand and collapse on click. The tree opens with the main backend and frontend directories pre-expanded.

â–ŧ📂Luna/
â–ŧ📂backend/
🐍main.py
🐍config.py
â–ļ📁middleware/
â–ŧ📂routers/
🐍admin.py
🐍channels.py
🐍chat.py
🐍luna.py
🐍system.py
🐍memory.py
🐍voice.py
🐍vision.py
🐍agent.py
🐍spotify.py
🐍calendar.py
🐍state.py
â–ŧ📂services/
🐍llm.py
🐍channel_bridge.py
🐍memory_manager.py
🐍personality.py
🐍fact_extractor.py
🐍tool_registry.py
🐍app_launcher.py
🐍web_tools.py
🐍scheduler.py
🐍vision.py
🐍spotify.py
🐍workspace.py
â–ļ📁dashboard/
â–ļ📁processes/
â–ļ📁models/
â–ŧ📂frontend/
â–ŧ📂src/
📘App.tsx
📘main.tsx
🎨index.css
â–ļ📁api/
â–ļ📁components/
â–ļ📁hooks/
â–ļ📁store/
â–ļ📁types/
📘vite.config.ts
📜tailwind.config.js
📋tsconfig.json
â–ļ📁electron/
â–ļ📁cli/
â–ļ📁scripts/
â–ļ📁docs-site/
â–ļ📁data/
🔑.env
🔑.env.personal.example
🔑.env.business.example
âš™ī¸compose.yml
âš™ī¸compose.gpu.yml
âš™ī¸compose.cloud.yml
âš™ī¸compose.business.yml
📋package.json
đŸ–ŧarchitecture.svg
← click a file to see its description

Tip: data/ is gitignored — never commit it. backend/ is Python,frontend/ is TypeScript.

Key entry points

When adding new functionality, these are the files to start with:

FileWhat to do here
backend/main.pyMount new FastAPI routers.
backend/config.pyAdd new .env settings as typed fields.
backend/services/tool_registry.pyRegister new tools with a default permission mode.
backend/services/llm.pyAdd a new LLM provider streaming generator.
backend/processes/registry.pyRegister new background workers.
frontend/src/App.tsxAdd new top-level view modes.
frontend/src/store/index.tsAdd new global state slices and actions.
electron/main.jsAdd native menus, IPC handlers, or OS integrations.
cli/luna.mjsAdd new developer CLI subcommands.
â„šī¸
Where new code belongs

Routes go in backend/routers/. Business logic goes in backend/services/. Routers should be thin — validate input, call a service, return the result. Never put complex logic directly in a router.