Frappe BI app. Backend: Python (Frappe framework) in insights/. Frontend: Vue 3 +
frappe-ui in frontend/src2/, built with Vite.
insights/api/— whitelisted API endpoints (thin; logic lives in doctype classes)insights/insights/doctype/— doctypes; the_v3suffix on most of them is historical, not a variant marker (Insights Workbookand a few others have none)insights/workbook_templates/— shipped workbook templates (insights_workbook_templateshook, open to other apps)frontend/src2/— the whole UI, one folder per area (workbook/,query/,charts/,dashboard/,data_source/,data_store/)frontend/src2/types/— the domain types; readquery.types.tsbefore touching query logic- Query engine: operations JSON → ibis → SQL, against the source or the DuckDB data
store (
insights_data_source_v3/data_warehouse.py,ibis_utils.py) CONTEXT.md— the glossary; use its terms in code, tickets, and commits
- Bench: run
benchcommands from the bench root, not from this app directory - Sites: test against a local development site with Insights installed
- Branches:
developis the default branch; pull requests targetfrappe/insights - Frontend dev server:
cd frontend && yarn dev. Build UI on frappe-ui components and semantic tokens (text-ink-*,bg-surface-*,border-outline-*); no raw buttons or hardcoded colors - Run the bench's pre-commit hooks before committing
Markdown under docs/projects/<effort>/ — a decision map plus one ticket per
question. Effort docs are branch-scoped: they are removed when the branch merges,
and the ADR is what survives. GitHub Issues on frappe/insights is the public
queue, not this tracker. See docs/agents/issue-tracker.md.
Single-context: CONTEXT.md at the root + docs/adr/. See docs/agents/domain.md.