{"id":50407238,"url":"https://github.com/filamind-app/filamind-flow","last_synced_at":"2026-06-12T01:01:40.513Z","repository":{"id":361499511,"uuid":"1254687820","full_name":"filamind-app/filamind-flow","owner":"filamind-app","description":"Extensible Neo-Brutalist control panel for Klipper / Moonraker — firmware flashing, input shaping, and TMC motor-driver tooling. Vue 3 + FastAPI, one widget at a time.","archived":false,"fork":false,"pushed_at":"2026-06-04T20:34:49.000Z","size":2075,"stargazers_count":2,"open_issues_count":0,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-05T07:33:37.964Z","etag":null,"topics":["3d-printer","3d-printing","control-panel","fastapi","fluidd","input-shaping","klipper","klipper-firmware","mainsail","moonraker","neobrutalism","python","stepper-motor","tailwindcss","tmc","tmc2209","typescript","vite","vue","vuejs"],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/filamind-app.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":"ROADMAP.md","authors":"AUTHORS","dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-30T22:11:08.000Z","updated_at":"2026-06-04T20:34:46.000Z","dependencies_parsed_at":"2026-06-01T03:01:11.290Z","dependency_job_id":null,"html_url":"https://github.com/filamind-app/filamind-flow","commit_stats":null,"previous_names":["filamind-app/filamind-flow"],"tags_count":126,"template":false,"template_full_name":null,"purl":"pkg:github/filamind-app/filamind-flow","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/filamind-app%2Ffilamind-flow","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/filamind-app%2Ffilamind-flow/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/filamind-app%2Ffilamind-flow/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/filamind-app%2Ffilamind-flow/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/filamind-app","download_url":"https://codeload.github.com/filamind-app/filamind-flow/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/filamind-app%2Ffilamind-flow/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33973868,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-06T02:00:07.033Z","response_time":107,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["3d-printer","3d-printing","control-panel","fastapi","fluidd","input-shaping","klipper","klipper-firmware","mainsail","moonraker","neobrutalism","python","stepper-motor","tailwindcss","tmc","tmc2209","typescript","vite","vue","vuejs"],"created_at":"2026-05-31T02:04:16.598Z","updated_at":"2026-06-12T01:01:40.463Z","avatar_url":"https://github.com/filamind-app.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n# FilaMind Flow\n\n**An extensible, Neo-Brutalist control panel for Klipper / Moonraker** — built to live\nalongside Mainsail and Fluidd and grow one widget at a time.\n\n[![CI](https://github.com/filamind-app/filamind-flow/actions/workflows/ci.yml/badge.svg)](https://github.com/filamind-app/filamind-flow/actions/workflows/ci.yml)\n[![Release](https://img.shields.io/github/v/release/filamind-app/filamind-flow?color=111111\u0026label=release\u0026sort=semver)](https://github.com/filamind-app/filamind-flow/releases/latest)\n[![License: GPLv3](https://img.shields.io/badge/License-GPLv3-111111.svg)](LICENSE)\n[![Last commit](https://img.shields.io/github/last-commit/filamind-app/filamind-flow?color=111111\u0026label=updated)](https://github.com/filamind-app/filamind-flow/commits/main)\n\n[![Klipper](https://img.shields.io/badge/Klipper-compatible-111111)](https://www.klipper3d.org)\n[![Moonraker](https://img.shields.io/badge/Moonraker-API-111111)](https://moonraker.readthedocs.io)\n[![Mainsail](https://img.shields.io/badge/Mainsail-sidebar-111111)](https://docs.mainsail.xyz)\n[![Fluidd](https://img.shields.io/badge/Fluidd-ready-111111)](https://docs.fluidd.xyz)\n\n[![Vue.js](https://img.shields.io/badge/Vue.js-3-4FC08D?logo=vuedotjs\u0026logoColor=white)](https://vuejs.org)\n[![Vite](https://img.shields.io/badge/Vite-6-646CFF?logo=vite\u0026logoColor=white)](https://vite.dev)\n[![TypeScript](https://img.shields.io/badge/TypeScript-3178C6?logo=typescript\u0026logoColor=white)](https://www.typescriptlang.org)\n[![Tailwind CSS](https://img.shields.io/badge/Tailwind_CSS-06B6D4?logo=tailwindcss\u0026logoColor=white)](https://tailwindcss.com)\n[![FastAPI](https://img.shields.io/badge/FastAPI-009688?logo=fastapi\u0026logoColor=white)](https://fastapi.tiangolo.com)\n[![Python](https://img.shields.io/badge/Python-3.10+-3776AB?logo=python\u0026logoColor=white)](https://www.python.org)\n\n[Install](#install-on-a-printer-one-line) · [Widgets](#widgets) · [Architecture](#architecture) · [Quickstart](#quickstart) · [Roadmap](ROADMAP.md) · [Contributing](CONTRIBUTING.md)\n\n\u003c/div\u003e\n\nFilaMind Flow is a standalone single-page app that talks **directly to Moonraker**\n(REST + WebSocket JSON-RPC) and is linked from the Mainsail sidebar (and reached by\nURL from Fluidd, which has no custom-link API yet) — the same integration model as\nthe rest of the ecosystem. The frontend is built once\non your machine and deployed as **static files**, so it adds virtually nothing to\nthe printer host at runtime; a small FastAPI backend handles anything that must\nrun server-side.\n\n\u003e **Status:** actively developed and **running on real hardware** (a Sovol SV08), localized in\n\u003e **7 languages** with **4 switchable themes**. **Nine widgets ship today** — Firmware Manager,\n\u003e Input Shaping, Motor Drivers, Config Editor, Macro Designer, Board Topology, Max-Flow,\n\u003e Config Templates, and the Hardware Browser. A few highlights:\n\u003e\n\u003e - **Firmware Manager** — a full Klipper firmware build \u0026 flash console: per-board\n\u003e   profiles, a live Kconfig editor, Katapult / DFU / SD-card flashing, Beacon probe\n\u003e   updates, host service control, host↔MCU update alerts, and an external-firmware\n\u003e   inspector / diff.\n\u003e - **Input Shaping** — turn a Klipper resonance capture into a ready\n\u003e   `[input_shaper]` config without the command line: the recommended shaper, an SVG\n\u003e   frequency-response chart, per-axis X/Y, an A⇄B comparison, a **measurement\n\u003e   quality grade (A–F)**, and **visual diagnostics with illustrated fixes**. Import\n\u003e   captures from the printer host or run a live test, compare CoreXY belts, detect the\n\u003e   accelerometer axes-map, hold a sustain frequency, sweep a **machine vibrations\n\u003e   profile** (smoothest speeds + resonances to avoid), and walk it all in a guided wizard.\n\u003e - **Motor Drivers** — a live inventory of every TMC stepper driver, read straight from\n\u003e   the Klipper config: per-motor run/hold current, chopper mode (SpreadCycle / StealthChop),\n\u003e   microsteps, StallGuard threshold, temperature, and a live health badge; datasheet-based\n\u003e   tuning recommendations, and a homing panel that adapts to each axis (physical switch /\n\u003e   sensorless / Z-probe) — with a built-in glossary, illustrated help, and advanced register\n\u003e   view. Works on any Klipper printer and any TMC model.\n\u003e - **Hardware Browser** — a curated database of thousands of 3D-printing components\n\u003e   (boards · drivers · motors · hosts · sensors · hotends · extruders · nozzles · fans ·\n\u003e   filament · …), deduped into **2,600+ canonical entities each with a copyable Klipper\n\u003e   config**: board pin-maps, `[tmcXXXX]` driver blocks, recommended motor `run_current`,\n\u003e   `[mcu host]` host blocks, and more — designed to become the shared data layer every other\n\u003e   widget links to.\n\u003e\n\u003e The full set is in the table below; new widgets are added under `frontend/src/widgets/`.\n\n## Widgets\n\n| Widget | What it does | Status |\n| ------ | ------------ | ------ |\n| **Firmware Manager** | Build \u0026 flash Klipper firmware on every MCU, organized into tabs (Guided / Status / Configure / Devices / External) with a guided new-board walkthrough — per-board Kconfig profiles, a live web editor, Katapult / DFU / SD-card flashing (each behind a flash-plan preview + confirm gate), Beacon probe updates, host service control, host↔MCU update alerts, and an external-firmware inspector / diff. Glossary + illustrated help + a build→flash guide. | ✅ Shipped |\n| **Input Shaping** | Turn a resonance capture into a ready `[input_shaper]` config — recommended shaper, SVG frequency-response chart, per-axis X/Y, A⇄B compare, a quality grade (A–F) with illustrated diagnostics, live tests, belt \u0026 axes-map \u0026 vibration tooling, and a guided wizard. **A complete resonance-tuning suite.** | ✅ Shipped |\n| **Config Editor** | Browse your printer's live configuration straight from Moonraker — every `.cfg` / `.conf` file, parsed into `[sections]` → parameters (value + inline comment, multi-line values intact) with the `SAVE_CONFIG` block flagged and structural problems (e.g. a duplicate section) surfaced in a validation banner. Structured and raw views, file picker, illustrated help. **Edit the raw config and save it back behind a confirm gate** — an automatic timestamped backup is taken first, writes are refused while printing, and a one-click `FIRMWARE_RESTART` applies the change. **Insert a hardware-accurate config block from the catalog** — pick a driver / motor / board and its real `[tmcXXXX]` / pin-map block (correct `run_current`, `sense_resistor`, pin names) is appended for review. **Disk-vs-live drift healer** — see which values you edited but never restarted (and any pending `SAVE_CONFIG`), with one-click \"adopt live\" per param. **Pin Doctor** — a whole-config scan that flags double-assigned pins and mains-on-logic-pin caveats before you `FIRMWARE_RESTART`. **Structured-view inline editing** — `[tmcXXXX]` register fields render with the right control and silicon-fact range (number clamped to the register mask, enum dropdown, boolean checkbox), and every `*_pin` field offers its board's named pins as type-ahead suggestions with inline flags for an off-board / reused / electronics-caveat pin; edits ride the surgical round-trip writer and the gated save. **Project view** — an `[include]` dependency tree across every file, project-wide search that jumps you to the hit, and cross-file lint (broken include, an orphan TMC driver with no matching stepper, plus override visibility for sections redefined across includes). **Inline knowledge** — each expanded section carries a plain-language blurb of what it does, and a driver section deep-links to its catalog entity in the Hardware Browser. **Backup timeline** — browse the automatic pre-save snapshots, diff any one against your current draft, and restore it for a final review behind the same save gate. **Driver value sanity** — cross-checks each TMC driver's `run_current` and `microsteps` against the driver's current ceiling and the assigned motor's rating (honest about drivers/motors it has no data for). Generic across all Klipper printers. | ✅ Shipped |\n| **Max-Flow** | Measure the highest volumetric flow (mm³/s) your hotend can sustain — ramp the extrusion flow while watching the extruder's TMC StallGuard load for the moment the gear slips. Pick a hotend to prefill, preview the exact ramp (flow → feedrate per step), then run behind a safety checklist + confirm gate; the heater is always cut at the end, the ramp stops at the first slip, and the run is refused while printing. Reports the max sustained flow + suggested slicer \"max volumetric speed\" (80 % / 90 %). Illustrated help. | ✅ Shipped (planner + gated run) |\n| **Board Topology** | An interactive **\"Machine Map\"** of your printer's control boards — a live SVG node-graph with a **Physical** view (an integrated SBC drawn *inside* the mainboard it ships on, CAN toolheads on a shared backbone, USB / UART boards as separate units) and a **Logical** view (Klipper's host→MCU command tree), edges colour-coded by bus. Click any board, SBC or MCU to inspect its **catalog record** (specs, ports, electronics caveats, config notes, copyable Klipper snippet) and **deep-link into the hardware database**. You can **confirm or override the detected board** per MCU — saved on the host and reused on every read. Illustrated help. Generic across all Klipper printers. | ✅ Shipped |\n| **Macro Designer** | An offline G-code simulator: write or paste a program and see the toolhead path drawn in 2D, the bounding box, total travel and extrusion, a time estimate, and a per-command timeline — nothing is sent to the printer. It renders the **real macro template language** (`{ … }` expressions plus `{% for %}` / `{% if %}` control flow) in a sandbox, so loops and conditionals expand the way they would on the printer. An **\"Explain this macro\"** walkthrough narrates each command in plain language with the running mode + cumulative totals, hover-synced with the path. **Import and simulate your printer's OWN installed macros** — pick a `[gcode_macro]` and its real body loads + dry-runs, with its parameters discovered into editable fields. The preview is **grounded in your printer's real build area + speed cap** — moves that leave the bed or exceed `max_velocity` are drawn in red and flagged before you run them. A **static linter** catches macro-logic foot-guns (unbalanced `SAVE`/`RESTORE_GCODE_STATE`, ends-in-relative-mode, extrude-before-home). The time estimate is **accel-aware** (a trapezoidal profile from the printer's real `max_accel`/`max_velocity`), and the path can be recoloured as a **speed or extrusion-rate heatmap**. **A/B compare** simulates a second program alongside the first and diffs them — overlaid paths, a stats delta (moves/distance/extrusion/time), and a linter diff. **Generate a START_PRINT / END_PRINT tailored to your printer** — its kinematics, build area, the leveling it actually has, and a heated bed if present — then append both to a config file behind the same confirm gate (backup first, refused while printing). Plus a built-in macro reference library you can insert from. Illustrated help. | ✅ Shipped (simulator + UI) |\n| **Hardware Browser** | A curated reference of 3D-printing hardware deduped into **2,600+ canonical entities**, each with its full spec sheet **and a copyable Klipper config**: **Boards** (380 — aggregated pin-map / ports + a copy-ready pin config), **Drivers** (55 — `[tmcXXXX]` blocks for the TMC family, honest notes for standalone parts), **Motors** (670+ — recommended `run_current` + config, incl. real OEM part ranges), **Hosts** (220 SBC / x86 — `[mcu host]`), and a generic **catalog** of 9 more categories (sensors \u0026 probes, hotends, extruders, fans / power / bed, cameras \u0026 displays, motion, nozzles, filament, electronics), plus browsable **Brands** and **MCUs**. Everything is cross-linked: open a board and jump to its manufacturer, MCU or drivers via clickable chips. Search by name / manufacturer / spec; the shared data layer other widgets link to. Illustrated help. | ✅ Shipped |\n| **Config Templates** | A library of ready-to-paste Klipper config blocks and macros — start/end sequences, pause/resume, filament load/unload, M600, `[input_shaper]`, `[bed_mesh]`, `[firmware_retraction]` and more — filterable by category, each with a one-click copy. Illustrated help. | ✅ Shipped |\n| **Motor Drivers** | A live inventory of every TMC stepper driver, read straight from the Klipper config — run/hold current, chopper mode, microsteps, StallGuard, temperature, and health, each annotated with authoritative per-model facts from a built-in capability map. Assign each axis its motor from a 200+ motor catalog, get recommended run current + driver registers from the motor's datasheet (a built-in `motor_constants` physics model), and copy-to-config or apply them live behind a confirm (reversible; refused while printing). A method-aware **🏠 homing** panel adapts to how each axis homes (physical switch / sensorless / Z-probe) — live switch state + test-home for switches, a per-model-correct StallGuard tuner for sensorless. An **⚙ advanced register editor** edits the safe subset of TMC registers live behind a server-side allowlist + clamp (raw current and protection registers blocked). Watch a live monitor (temperature / StallGuard load / faults), sync multi-motor axes, or run it all from a **🧭 Guided wizard**. Glossary + illustrated help. Generic across all printers and TMC models. | ✅ Shipped (P1–P10) |\n\nSee [ROADMAP.md](ROADMAP.md) for the phase-by-phase plan of each widget.\n\n## Install on a printer (one line)\n\nOn your Klipper / Moonraker host, run as your normal printer user (e.g. `pi` / `biqu`):\n\n```bash\ncurl -fsSL https://raw.githubusercontent.com/filamind-app/filamind-flow/main/scripts/install.sh | bash\n```\n\nIt installs the backend service, serves the (pre-built) UI via nginx on port `8090`,\nadds a **FilaMind Flow** entry to the Mainsail sidebar, and registers it with\nMoonraker's update manager for one-click updates. Re-runnable; ports are overridable\n(`FILAMIND_UI_PORT`, `FILAMIND_API_PORT`), and the sidebar-link host with\n`FILAMIND_PUBLIC_HOST` (defaults to the LAN IP — more portable than `\u003chostname\u003e.local`,\nwhich needs mDNS the client may not have). See [`scripts/install.sh`](scripts/install.sh).\n\n## Why it exists\n\n- **Extensible by construction** — every feature is a self-registering _widget_.\n  Adding one is dropping a file; the core never changes.\n- **Light on the host** — static frontend + a lean async backend. The browser\n  does the work, not the Raspberry Pi.\n- **Opinionated design** — a cohesive Neo-Brutalist system (thick ink borders,\n  hard offset shadows, high-contrast flat accents) instead of ad-hoc styling.\n\n## Architecture\n\n```\n┌────────────────────────────┐        ┌──────────────┐      ┌──────────┐\n│  FilaMind Flow (SPA)        │  REST  │              │ Unix │          │\n│  Vue 3 · Vite · TS · TW     │◄──────►│  Moonraker   │◄────►│ Klipper  │\n│                             │   WS   │   :7125      │ sock │  (MCU)   │\n│  ┌──────────────────────┐   │◄──────►│              │      │          │\n│  │ MoonrakerClient (WS) │   │        └──────────────┘      └──────────┘\n│  │ Widget registry      │   │               ▲\n│  │ Pinia printer store  │   │  REST /api    │ shares the same Moonraker\n│  └──────────────────────┘   │──────────────►┌──────────────┐\n└────────────────────────────┘                │ FastAPI      │\n        ▲ linked from sidebar                  │ backend :8000│\n   Mainsail · Fluidd                           └──────────────┘\n```\n\n- **MoonrakerClient** — one reconnecting JSON-RPC WebSocket; correlates requests,\n  fans out `notify_*` notifications, restores subscriptions after a reconnect.\n- **Widget registry** — the extensibility core; widgets declare the printer\n  objects they need and the dashboard subscribes to their union, once.\n- **Pinia store** — a single reactive mirror of Moonraker state for all widgets.\n- **FastAPI backend** — health + diagnostics, the firmware build/flash and\n  resonance-analysis services, the config / topology / max-flow services, and the\n  read-only **hardware database** (`/api/hardware/*` — canonical boards / drivers /\n  motors / hosts / catalog, each with a copyable Klipper config); the home for\n  privileged or aggregated server-side operations.\n\n## Tech stack\n\n| Layer    | Stack                                              |\n| -------- | -------------------------------------------------- |\n| Frontend | Vue 3, Vite, TypeScript, Tailwind CSS v3, Pinia, vue-i18n |\n| Backend  | FastAPI, Uvicorn, httpx, Pydantic v2               |\n| Tooling  | ESLint (flat) + Prettier, Vitest · Ruff + Mypy + Pytest |\n\n## Quickstart\n\n### Frontend\n\n```bash\ncd frontend\nnpm install\nnpm run dev          # http://localhost:5173 (proxies Moonraker + the backend)\n```\n\nPoint it at a printer by copying `.env.example` to `.env` and setting\n`VITE_MOONRAKER_HTTP_URL` / `VITE_MOONRAKER_WS_URL`.\n\n### Backend\n\n```bash\ncd backend\npython -m venv .venv \u0026\u0026 source .venv/bin/activate   # Windows: .venv\\Scripts\\Activate.ps1\npip install -r requirements-dev.txt\npython -m app        # http://localhost:8000  (docs at /docs)\n```\n\n## Project structure\n\n```\nfilamind-flow/\n├─ frontend/                 # Vue 3 + Vite + TS + Tailwind SPA\n│  └─ src/\n│     ├─ core/               # MoonrakerClient · widget registry · Pinia store · i18n\n│     ├─ components/         # App shell + dashboard (design-system driven)\n│     ├─ widgets/            # Feature widgets register here (Firmware Manager + Input Shaping + Motor Drivers ship today)\n│     ├─ locales/            # Per-language message catalogs (en bundled; others lazy)\n│     └─ assets/styles/      # Neo-Brutalist design tokens\n├─ backend/                  # FastAPI service\n│  └─ app/                   # config · api/routes · services · models\n├─ deploy/                   # systemd · nginx · Moonraker update_manager · navi.json\n├─ docs/ARCHITECTURE.md      # design + data-flow deep dive\n└─ .github/workflows/ci.yml  # lint · type-check · test · build\n```\n\n## Adding a widget\n\n```ts\n// frontend/src/widgets/index.ts\nimport { defineAsyncComponent } from 'vue'\nimport { registerWidget } from '@/core/registry'\n\nexport function registerWidgets(): void {\n  registerWidget({\n    id: 'temperature',\n    title: 'Temperatures',\n    defaultSize: { w: 2, h: 1 },\n    subscriptions: { extruder: null, heater_bed: null }, // printer objects to watch\n    component: defineAsyncComponent(() =\u003e import('./temperature/TemperatureWidget.vue')),\n  })\n}\n```\n\nInside the widget, read live data from the shared store:\n\n```ts\nimport { usePrinterStore } from '@/core/store/printer'\nconst printer = usePrinterStore()\n// printer.status.extruder?.temperature, etc.\n```\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md) for the full guide and [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md)\nfor the design rationale.\n\n## Internationalization\n\nThe UI is being made multilingual on an **offline-first, extensible** foundation (`vue-i18n` v11).\nEnglish is bundled eagerly; every other locale is a lazy chunk under `src/locales/\u003ccode\u003e/` — so\n**adding a language is dropping in a folder**, no component edits. `en` is the source of truth for\nkeys (type-checked, so a typo fails the build), and CI enforces that every locale carries exactly\nthe same key set (`npm run i18n:keydiff`); `npm run i18n:pseudo` previews text-expansion / RTL\noverflow. Arabic is wired for RTL with Western (`latn`) digits — engineers cross-reference G-code\nand datasheets in `1.7 A` form. Backend write-results follow a `{ code, params, message }` contract:\nthe API returns a stable code the UI translates (`applyResultText`), keeping the English `message` as\na fallback; raw upstream / validation errors (Moonraker, `field_policy`) intentionally stay English.\n\n\u003e **Status:** Shipped — the UI is available in **7 languages** (**en · ar · de · zh-Hans · fr · es ·\n\u003e ru**) via a header switcher; switching is instant and lazy-loaded. Arabic flips the document to RTL\n\u003e (with a Neo-Brutalist RTL layout pass). All six i18n phases — scaffolding → widgets → RTL → backend\n\u003e message codes — are complete.\n\n## Documentation\n\n| Document | What's inside |\n| -------- | ------------- |\n| [ROADMAP.md](ROADMAP.md) | Phase-by-phase plan and status for every widget |\n| [CHANGELOG.md](CHANGELOG.md) | Release history (Keep a Changelog) |\n| [CONTRIBUTING.md](CONTRIBUTING.md) | Dev workflow, conventions, widget-UX rule, release process |\n| [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md) | Design + data-flow deep dive |\n| [backend/README.md](backend/README.md) | Backend service, `/api` endpoints, `FILAMIND_*` settings |\n\n## Deployment\n\nBuild the frontend (`npm run build` → `frontend/dist/`), serve it with nginx, run\nthe backend as a systemd service, and add a sidebar link in Mainsail. Ready-to-edit\ntemplates live in [`deploy/`](deploy/).\n\n## Roadmap\n\n- [x] **Firmware Manager** widget — build \u0026 flash Klipper firmware: per-board\n      profiles, a live Kconfig editor (with downloadable build artifacts),\n      Katapult / DFU / SD-card flashing, Beacon probe updates, host service\n      control, and host↔MCU update alerts\n- [x] **Input Shaping** widget — resonance capture → `[input_shaper]` config:\n      recommended shaper, SVG frequency-response chart, per-axis X/Y, A⇄B compare,\n      a measurement **quality grade (A–F)**, **visual diagnostics with fixes**,\n      printer-host import, a live test, an accelerometer noise pre-check, a\n      CoreXY belt-tension comparison, accelerometer axes-map detection, a\n      sustain-frequency hands-on diagnostic, a machine **vibrations profile**\n      (smoothest/worst speeds, motor symmetry, motor resonance), and a guided\n      tuning wizard\n- [x] **Motor Drivers** widget (P1–P10) — live TMC driver dashboard + capability map,\n      a 200+ motor picker, datasheet-based tuning recommendations (a built-in\n      `motor_constants` physics model), gated apply / copy-to-config / autotune, a method-aware\n      homing panel (physical switch / sensorless with per-model StallGuard polarity / Z-probe),\n      an advanced register editor (server-side allowlist + clamp; raw current/protection blocked),\n      a live monitor, a guided wizard, and multi-motor synchronization; generic across\n      all Klipper printers and TMC models\n- [x] **Internationalization (i18n)** — multilingual UI on an offline-first, extensible\n      `vue-i18n` foundation (en · ar · de · zh-Hans · fr · es · ru), RTL + Arabic, and a\n      `{ code, params, message }` backend-message contract. _All six phases complete._\n- [x] **Theme system** — 4 switchable themes (Neon · Dark · Light · High-Contrast) driven by\n      CSS variables; per-theme recolor of every token with no component edits; no-flash + persisted.\n- [x] **Platform expansion** — the shared data + config-engine foundation plus **Config Editor**,\n      **Macro Designer**, **Board Topology**, **Hardware Browser + Config Templates**, and\n      **Max-Flow** (planner + gated run) all shipped. _See [ROADMAP.md](ROADMAP.md)._\n- [x] **Hardware database** — the catalog deduped into canonical, config-carrying entities\n      (boards / drivers / motors / hosts / catalog) served under `/api/hardware/*`, with O(1)\n      id lookups + cached reads (**DB-1**), and a canonical-manufacturer / first-class-MCU\n      **linking graph** (`/related` + `?expand=related`, **DB-2**).\n- [x] **Hardware DB — cross-link UI (DB-3a)** — clickable cross-link chips (board → its\n      manufacturer / MCU / drivers) + browsable **Brands** and **MCUs** tabs + in-widget\n      deep-linking.\n- [ ] **Hardware DB backbone — remaining** — shared `EntityCatalog` + faceted filters + a\n      reusable part-picker (DB-3b), images / silo convergence (DB-4). _See [ROADMAP.md](ROADMAP.md)._\n- [ ] Max-Flow: a live validation run on the printer · Motor-Drivers auto-SGT / SG4 sensorless wizard\n- [ ] Self-hosted fonts for fully offline hosts · optional auth / oneshot-token flow for secured setups\n\nSee [ROADMAP.md](ROADMAP.md) for the full phase-by-phase plan.\n\n## Credits\n\nBuilt and maintained by the **DeltaFabs team**:\n\n- abdelmonem awad — \u003ceg2@live.com\u003e\n- Ahmed bebars — \u003cAhmedbebars1@gmail.com\u003e\n\n## License\n\n[GPL-3.0-or-later](LICENSE) © 2026 DeltaFabs team. Not affiliated with the Klipper,\nMoonraker, Mainsail, or Fluidd projects.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffilamind-app%2Ffilamind-flow","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffilamind-app%2Ffilamind-flow","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffilamind-app%2Ffilamind-flow/lists"}