Rename the workspace layout: fluksio -> app, website -> index
The repo moves to git.stroblme.de:Fluksio/app.git and its sibling to Fluksio/index.git, so every cross-repo path reference moves with it. The architecture sources the roadmap cites now live in the docs repo under architecture/, and the brand marks in the index repo's src/assets. Also replaces the placeholder README with one that reflects the actual layout. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
0c3e6081f2
commit
4aa2705d34
@@ -1,6 +1,6 @@
|
|||||||
# Design system (Fluksio)
|
# Design system (Fluksio)
|
||||||
|
|
||||||
`fluksio` (dashboard SPA + API) and `website` (marketing site) are **separate
|
`app` (dashboard SPA + API) and `index` (marketing site) are **separate
|
||||||
repos** that share one visual design. The full, canonical spec — palette,
|
repos** that share one visual design. The full, canonical spec — palette,
|
||||||
radius, elevation, motion, component map, and shell patterns — lives in the
|
radius, elevation, motion, component map, and shell patterns — lives in the
|
||||||
parent repo's [`DESIGN-GUIDELINES.md`](../DESIGN-GUIDELINES.md). Read it before
|
parent repo's [`DESIGN-GUIDELINES.md`](../DESIGN-GUIDELINES.md). Read it before
|
||||||
@@ -8,8 +8,8 @@ any UI work.
|
|||||||
|
|
||||||
## Sync rule (read before touching tokens)
|
## Sync rule (read before touching tokens)
|
||||||
|
|
||||||
The `@theme inline`, `:root`, and `.dark` blocks in `fluksio/frontend/src/index.css`
|
The `@theme inline`, `:root`, and `.dark` blocks in `app/frontend/src/index.css`
|
||||||
and `website/src/index.css` **must be kept byte-identical**, and
|
and `index/src/index.css` **must be kept byte-identical**, and
|
||||||
`frontend/src/lib/motion.ts` is duplicated verbatim. Any palette / radius /
|
`frontend/src/lib/motion.ts` is duplicated verbatim. Any palette / radius /
|
||||||
elevation / motion-token change is made in *both* repos in the same change.
|
elevation / motion-token change is made in *both* repos in the same change.
|
||||||
There is intentionally no shared npm package — the duplicated blocks are the
|
There is intentionally no shared npm package — the duplicated blocks are the
|
||||||
|
|||||||
+5
-1
@@ -15,7 +15,7 @@ Deferring because out of scope is fine, but don't mention deferring than.
|
|||||||
- CHORE/FLOW: the flow test files live in `backend/app/flow/test*.py`, inside the package
|
- CHORE/FLOW: the flow test files live in `backend/app/flow/test*.py`, inside the package
|
||||||
rather than `backend/tests/`, so `coverage run -m pytest tests/` never collects them.
|
rather than `backend/tests/`, so `coverage run -m pytest tests/` never collects them.
|
||||||
- CHORE/INFRA: port the n3xd CI workflows (pre-commit, backend tests, Playwright shards,
|
- CHORE/INFRA: port the n3xd CI workflows (pre-commit, backend tests, Playwright shards,
|
||||||
compose smoke) to `.forgejo/workflows/`. Codeberg runs Forgejo Actions and needs CI
|
compose smoke) to `.gitea/workflows/`. The Gitea instance runs Gitea Actions and needs CI
|
||||||
enabled per repository.
|
enabled per repository.
|
||||||
- FEAT/UI: `@xyflow/react` and a Monaco editor belong here once the node canvas starts.
|
- FEAT/UI: `@xyflow/react` and a Monaco editor belong here once the node canvas starts.
|
||||||
The website already demos `@xyflow/react` on its features page.
|
The website already demos `@xyflow/react` on its features page.
|
||||||
@@ -31,3 +31,7 @@ Deferring because out of scope is fine, but don't mention deferring than.
|
|||||||
|
|
||||||
- FEAT/INFRA: Redis, MQTT broker and InfluxDB compose services. Blocked on the flow engine
|
- FEAT/INFRA: Redis, MQTT broker and InfluxDB compose services. Blocked on the flow engine
|
||||||
being reachable from the API — no runtime path imports them today.
|
being reachable from the API — no runtime path imports them today.
|
||||||
|
- CHORE/INFRA: `bun install` inside the frontend Docker build intermittently fails with
|
||||||
|
"Fail extracting tarball" for several packages at once, and succeeds on a plain rebuild.
|
||||||
|
It looks like concurrent extraction under memory pressure. Pin down or retry in the
|
||||||
|
Dockerfile if it starts costing CI time.
|
||||||
|
|||||||
@@ -1,3 +1,42 @@
|
|||||||
# Fluksio Main Repository
|
# Fluksio App
|
||||||
|
|
||||||
A node based, test-driven home-automation software to built to scale.
|
The core of Fluksio: a node-based, test-driven automation software built to scale. This
|
||||||
|
repo holds the FastAPI backend, the flow engine, and the dashboard SPA. It is served on
|
||||||
|
`app.${DOMAIN}` (SPA) and `api.${DOMAIN}` (API); the marketing site lives in the sibling
|
||||||
|
`index` repo.
|
||||||
|
|
||||||
|
## Layout
|
||||||
|
|
||||||
|
```text
|
||||||
|
backend/ FastAPI + SQLModel + Alembic + Postgres
|
||||||
|
app/flow/ the flow engine (nodes, pipeline, state backends, controller)
|
||||||
|
frontend/ React 19 + TanStack Router + Tailwind 4 + shadcn/ui
|
||||||
|
docker/ compose.yml → compose.dev.yml → compose.local.yml (+ compose.traefik.yml)
|
||||||
|
scripts/ generate-client.sh, test.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
## Getting started
|
||||||
|
|
||||||
|
Normally driven from the workspace root (`make init` once, then `make dev`). Standalone:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
make install # uv sync + bun install
|
||||||
|
make dev-utils # db, adminer, proxy, mailcatcher, prestart only
|
||||||
|
make dev-backend # FastAPI on :8000, hot reload
|
||||||
|
make dev-frontend # Vite on :5173
|
||||||
|
```
|
||||||
|
|
||||||
|
```sh
|
||||||
|
make test # pytest + Playwright
|
||||||
|
make lint # ruff + mypy + biome
|
||||||
|
make generate-client # regenerate the frontend SDK from the OpenAPI schema
|
||||||
|
```
|
||||||
|
|
||||||
|
`make help` lists every target.
|
||||||
|
|
||||||
|
## Documentation
|
||||||
|
|
||||||
|
- [`ROADMAP.md`](ROADMAP.md) — strategy and feature record
|
||||||
|
- [`NOTEPAD.md`](NOTEPAD.md) — deferred work and findings
|
||||||
|
- [`DESIGN.md`](DESIGN.md) — points at the workspace root's `DESIGN-GUIDELINES.md`
|
||||||
|
- `docs/architecture/` in the sibling `docs` repo — the requirement sources
|
||||||
|
|||||||
+7
-7
@@ -1,8 +1,8 @@
|
|||||||
# Roadmap
|
# Roadmap
|
||||||
|
|
||||||
Implementation strategy and record of existing/planned features. Completed items are
|
Implementation strategy and record of existing/planned features. Completed items are
|
||||||
terse checklists — the requirement detail lives in `org/README.md` (software requirements,
|
terse checklists — the requirement detail lives in `docs/architecture/overview.md` (software requirements,
|
||||||
evaluated tooling, hardware) and `org/structure.canvas` (the four-way component split).
|
evaluated tooling, hardware) and `docs/architecture/structure.canvas` (the four-way component split).
|
||||||
Remaining tasks keep enough scope to be actionable.
|
Remaining tasks keep enough scope to be actionable.
|
||||||
|
|
||||||
Legend: `[x]` done · `[ ]` planned · sub-lists split done vs. remaining for partial items.
|
Legend: `[x]` done · `[ ]` planned · sub-lists split done vs. remaining for partial items.
|
||||||
@@ -12,7 +12,7 @@ existing flow engine reachable and persistent precedes new feature breadth.
|
|||||||
|
|
||||||
## Phase 0 — Workspace and platform
|
## Phase 0 — Workspace and platform
|
||||||
|
|
||||||
- [x] Root orchestrator repo with `fluksio`, `website`, `docs`, `org` as submodules
|
- [x] Root orchestrator repo with `app`, `index` and `docs` as submodules
|
||||||
- [x] `make init` bootstrap: secrets generation, per-stack `.env` propagation, shared
|
- [x] `make init` bootstrap: secrets generation, per-stack `.env` propagation, shared
|
||||||
`proxy` docker network
|
`proxy` docker network
|
||||||
- [x] Layered compose (`compose.yml` → `compose.dev.yml` → `compose.local.yml`) for both
|
- [x] Layered compose (`compose.yml` → `compose.dev.yml` → `compose.local.yml`) for both
|
||||||
@@ -24,7 +24,7 @@ existing flow engine reachable and persistent precedes new feature breadth.
|
|||||||
## Phase 1 — Backend: management
|
## Phase 1 — Backend: management
|
||||||
|
|
||||||
Python, optimised for development speed. Owns the graph structure, persistence and the
|
Python, optimised for development speed. Owns the graph structure, persistence and the
|
||||||
external interfaces. See `org/structure.canvas` → *Backend – Management*.
|
external interfaces. See `docs/architecture/structure.canvas` → *Backend – Management*.
|
||||||
|
|
||||||
- [x] FastAPI + SQLModel + Alembic + Postgres base with JWT auth and user management
|
- [x] FastAPI + SQLModel + Alembic + Postgres base with JWT auth and user management
|
||||||
- [x] Flow engine prototype in `backend/app/flow/`: `Node` / `Pipeline` / `StateBackend`
|
- [x] Flow engine prototype in `backend/app/flow/`: `Node` / `Pipeline` / `StateBackend`
|
||||||
@@ -51,7 +51,7 @@ external interfaces. See `org/structure.canvas` → *Backend – Management*.
|
|||||||
## Phase 2 — Backend: processing
|
## Phase 2 — Backend: processing
|
||||||
|
|
||||||
Rust, optimised for throughput. Executes nodes and distributes them across workers. See
|
Rust, optimised for throughput. Executes nodes and distributes them across workers. See
|
||||||
`org/structure.canvas` → *Backend – Processing*.
|
`docs/architecture/structure.canvas` → *Backend – Processing*.
|
||||||
|
|
||||||
- [ ] Extract node execution from the Python prototype into a Rust engine
|
- [ ] Extract node execution from the Python prototype into a Rust engine
|
||||||
- [ ] Worker distribution and load balancing across capable devices
|
- [ ] Worker distribution and load balancing across capable devices
|
||||||
@@ -60,7 +60,7 @@ Rust, optimised for throughput. Executes nodes and distributes them across worke
|
|||||||
|
|
||||||
## Phase 3 — Frontend: admin view
|
## Phase 3 — Frontend: admin view
|
||||||
|
|
||||||
React + Vite, primarily desktop but usable on mobile. See `org/structure.canvas` →
|
React + Vite, primarily desktop but usable on mobile. See `docs/architecture/structure.canvas` →
|
||||||
*Frontend – Admin View*.
|
*Frontend – Admin View*.
|
||||||
|
|
||||||
- [x] Dashboard SPA shell: TanStack Router, floating frosted sidebar, auth flows,
|
- [x] Dashboard SPA shell: TanStack Router, floating frosted sidebar, auth flows,
|
||||||
@@ -75,7 +75,7 @@ React + Vite, primarily desktop but usable on mobile. See `org/structure.canvas`
|
|||||||
|
|
||||||
## Phase 4 — Frontend: dashboard view
|
## Phase 4 — Frontend: dashboard view
|
||||||
|
|
||||||
Shares components with the admin view. See `org/structure.canvas` →
|
Shares components with the admin view. See `docs/architecture/structure.canvas` →
|
||||||
*Frontend – Dashboard View*.
|
*Frontend – Dashboard View*.
|
||||||
|
|
||||||
- [ ] User-defined dashboard layout with edit and view modes
|
- [ ] User-defined dashboard layout with edit and view modes
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import { SiCodeberg } from "react-icons/si"
|
|||||||
const socialLinks = [
|
const socialLinks = [
|
||||||
{
|
{
|
||||||
icon: SiCodeberg,
|
icon: SiCodeberg,
|
||||||
href: "https://codeberg.org/fluksio",
|
href: "https://git.stroblme.de/Fluksio",
|
||||||
label: "Codeberg",
|
label: "Codeberg",
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -72,7 +72,7 @@
|
|||||||
*
|
*
|
||||||
* `--primary` is #4a7189, not the identity blue #59849b: the latter measures
|
* `--primary` is #4a7189, not the identity blue #59849b: the latter measures
|
||||||
* 4.04:1 against white, below AA for the label sitting on a bg-primary fill.
|
* 4.04:1 against white, below AA for the label sitting on a bg-primary fill.
|
||||||
* #59849b remains the wordmark colour (org/design/fluksio-*.svg). See the root
|
* #59849b remains the wordmark colour (index/src/assets/fluksio-*.svg). See the root
|
||||||
* DESIGN-GUIDELINES.md → Colour tokens.
|
* DESIGN-GUIDELINES.md → Colour tokens.
|
||||||
*/
|
*/
|
||||||
:root {
|
:root {
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
* across the app. Mirrors the `--ease-*` / `--duration-*` timing tokens defined
|
* across the app. Mirrors the `--ease-*` / `--duration-*` timing tokens defined
|
||||||
* in `index.css`, so CSS transitions and JS animations stay in sync.
|
* in `index.css`, so CSS transitions and JS animations stay in sync.
|
||||||
*
|
*
|
||||||
* This file is duplicated verbatim in `fluksio` and `website` (the shadcn model,
|
* This file is duplicated verbatim in `app` and `index` (the shadcn model,
|
||||||
* see ../../DESIGN.md / the root DESIGN-GUIDELINES.md). Keep the two copies
|
* see ../../DESIGN.md / the root DESIGN-GUIDELINES.md). Keep the two copies
|
||||||
* identical; `make design-check` at the workspace root verifies it.
|
* identical; `make design-check` at the workspace root verifies it.
|
||||||
*
|
*
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"name": "fluksio",
|
"name": "fluksio-app",
|
||||||
"private": true,
|
"private": true,
|
||||||
"workspaces": [
|
"workspaces": [
|
||||||
"frontend"
|
"frontend"
|
||||||
|
|||||||
Reference in New Issue
Block a user