From a7d0ac15ee52b6b0c32ed09f3378a032f85c2820 Mon Sep 17 00:00:00 2001 From: MDietermann Date: Fri, 28 Aug 2026 09:19:36 +0200 Subject: [PATCH 1/3] chore: Tailwind und die npm-Toolchain entfernen Die App hat nie eine Tailwind-Utility benutzt - saemtliche Klassen im Code sind eigene (btn, files-bar, empty-state, ...), und den Reset liefert base.css selbst. Damit standen package.json, node_modules und ein Build-Schritt fuer eine Stylesheet-Datei, die nichts beigetragen hat. Aufgefallen ist es, weil der letzte Commit ungefragt zwoelf Zeilen in assets/tailwind.css mitbrachte: Der Generator scannt auch docs/ und erzeugte Utilities fuer Woerter, die er in Prosa fand. Die npm-Abhaengigkeit war ohnehin wirkungslos - Dioxus 0.7 bringt Tailwind selbst mit (erzeugt wurde 4.1.5, nicht die in package.json deklarierte 4.3.3). Ohne die Eingabedatei tailwind.css im Projektwurzelverzeichnis erzeugt dx nichts mehr; verifiziert durch einen vollstaendigen Build. Das --dn-Praefix der Tokens bleibt: Es war urspruenglich Schutz vor Tailwinds eigenen :root-Variablen, taugt aber weiterhin als Namensraum. README auf den tatsaechlichen Projektstand gebracht - er beschrieb noch die Dioxus-Vorlage mit einer einzelnen main.rs. --- .gitignore | 3 --- README.md | 61 +++++++++++++++---------------------------- assets/css/tokens.css | 6 ++--- package-lock.json | 18 ------------- package.json | 5 ---- src/main.rs | 4 --- tailwind.css | 1 - 7 files changed, 24 insertions(+), 74 deletions(-) delete mode 100644 package-lock.json delete mode 100644 package.json delete mode 100644 tailwind.css diff --git a/.gitignore b/.gitignore index 1102c98..58e98cf 100644 --- a/.gitignore +++ b/.gitignore @@ -9,8 +9,5 @@ # Dioxus build output /dist -# Node (tailwind toolchain) -node_modules/ - # IDE /.idea diff --git a/README.md b/README.md index 321bbb9..167dc80 100644 --- a/README.md +++ b/README.md @@ -1,51 +1,32 @@ -# Development +# DioNotes Client -Your new bare-bones project includes minimal organization with a single `main.rs` file and a few assets. +Lokale Markdown-Notizen-App auf Basis von [Dioxus 0.7](https://dioxuslabs.com/learn/0.7), Desktop. -``` -project/ -├─ assets/ # Any assets that are used by the app should be placed here -├─ src/ -│ ├─ main.rs # main.rs is the entry point to your application and currently contains all components for the app -├─ Cargo.toml # The Cargo.toml file defines the dependencies and feature flags for your project -``` - -### Automatic Tailwind (Dioxus 0.7+) - -As of Dioxus 0.7, there no longer is a need to manually install tailwind. Simply `dx serve` and you're good to go! - -Automatic tailwind is supported by checking for a file called `tailwind.css` in your app's manifest directory (next to Cargo.toml). To customize the file, use the dioxus.toml: - -```toml -[application] -tailwind_input = "my.css" -tailwind_output = "assets/out.css" # also customize the location of the out file! -``` - -### Tailwind Manual Install - -To use tailwind plugins or manually customize tailwind, you can can install the Tailwind CLI and use it directly. - -### Tailwind -1. Install npm: https://docs.npmjs.com/downloading-and-installing-node-js-and-npm -2. Install the Tailwind CSS CLI: https://tailwindcss.com/docs/installation/tailwind-cli -3. Run the following command in the root of the project to start the Tailwind CSS compiler: +## Entwicklung ```bash -npx @tailwindcss/cli -i ./input.css -o ./assets/tailwind.css --watch +dx serve # Desktop-App starten (Standard-Plattform) +dx serve --platform web # im Browser +cargo test # Tests ``` -### Serving Your App +## Aufbau -Run the following command in the root of your project to start developing with the default platform: - -```bash -dx serve +``` +assets/css/ Design-System: tokens → base → layout → components, + in dieser Reihenfolge in main.rs verlinkt +src/route.rs alle Routen in einem Routable-Enum +src/workspace.rs +src/components/ wiederverwendbare Bausteine (CustomLink, CustomButton, …) +src/views/ die Bildschirme: Selector und Editor +docs/ Konventionen für Agenten, Rechercheergebnisse ``` -To run for a different platform, use the `--platform platform` flag. E.g. -```bash -dx serve --platform desktop -``` +Es gibt **kein** Tailwind und keine npm-Toolchain — das Styling liegt vollständig in +`assets/css/` und arbeitet mit den `--dn-*`-Tokens. +## Wo die Entscheidungen liegen +Fachbegriffe stehen in [`CONTEXT.md`](CONTEXT.md). Entscheidungen werden im +Issue-Tracker geführt statt in `docs/adr/`; eine Wayfinder-Map indexiert pro Vorhaben, +welche Entscheidung wo begründet ist. Siehe [`docs/agents/`](docs/agents/). diff --git a/assets/css/tokens.css b/assets/css/tokens.css index 5bd305e..c6aee55 100644 --- a/assets/css/tokens.css +++ b/assets/css/tokens.css @@ -4,9 +4,9 @@ Palette: Catppuccin Mocha, matching the editor's Theme::CATPPUCCIN_MOCHA so the editor pane and the app chrome are the same surface. - All tokens are prefixed --dn-. Tailwind v4 publishes its own --font-*, - --text-*, --radius-* and --leading-* on :root and tree-shakes that set as - utilities come and go, so an unprefixed token would collide silently. + All tokens are prefixed --dn- to keep them in one namespace. The prefix was + originally defence against Tailwind v4, which publishes its own --font-*, + --text-* and --radius-* on :root; Tailwind is gone, the convention stays. ========================================================================== */ :root { diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index 3bab248..0000000 --- a/package-lock.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "dionotes-client", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "dependencies": { - "tailwindcss": "^4.3.3" - } - }, - "node_modules/tailwindcss": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.3.3.tgz", - "integrity": "sha512-gOhV3P7ufE62QDGg1zVaTgCR+EtPv92k2nIhVcVKcLmxT1sUBsQGhnZj175j+MqRt4zLF7ic+sCYjfhxMxj7YQ==", - "license": "MIT" - } - } -} diff --git a/package.json b/package.json deleted file mode 100644 index 8c765ec..0000000 --- a/package.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "dependencies": { - "tailwindcss": "^4.3.3" - } -} diff --git a/src/main.rs b/src/main.rs index 7e18e53..a071f46 100644 --- a/src/main.rs +++ b/src/main.rs @@ -13,7 +13,6 @@ const FAVICON: Asset = asset!("/assets/favicon.ico"); // Linked individually rather than via @import in a single entry file: asset!() // only emits files it is given by name, so an @import chain would 404 at runtime. // Order matters — tokens, then baseline, then layout, then components. -const TAILWIND_CSS: Asset = asset!("/assets/tailwind.css"); const TOKENS_CSS: Asset = asset!("/assets/css/tokens.css"); const BASE_CSS: Asset = asset!("/assets/css/base.css"); const LAYOUT_CSS: Asset = asset!("/assets/css/layout.css"); @@ -32,9 +31,6 @@ fn App() -> Element { rsx! { document::Link { rel: "icon", href: FAVICON } - // Tailwind first: its preflight lives in @layer base, our unlayered - // rules win the cascade regardless, but this keeps source order honest. - document::Link { rel: "stylesheet", href: TAILWIND_CSS } document::Link { rel: "stylesheet", href: TOKENS_CSS } document::Link { rel: "stylesheet", href: BASE_CSS } document::Link { rel: "stylesheet", href: LAYOUT_CSS } diff --git a/tailwind.css b/tailwind.css deleted file mode 100644 index f1d8c73..0000000 --- a/tailwind.css +++ /dev/null @@ -1 +0,0 @@ -@import "tailwindcss"; From ea902b9d7e2b7a5a54491301dbb619e5ba2f37bf Mon Sep 17 00:00:00 2001 From: MDietermann Date: Fri, 28 Aug 2026 09:21:02 +0200 Subject: [PATCH 2/3] chore: generierte assets/tailwind.css aus dem Repo nehmen Nachtrag zum Tailwind-Rauswurf: dx legt die Datei bei jedem vollen Build neu an - auch nachdem die Eingabedatei geloescht wurde und main.rs sie nicht mehr verlinkt. Offenbar aus einem eigenen Cache; ein Schalter dagegen war nicht zu finden. Statt dagegen anzukaempfen wandert sie in die .gitignore. Sie ist ein lokales Nebenprodukt ohne Leser, und so taucht sie nicht bei jedem Build als vermeintliche Aenderung auf. --- .gitignore | 4 + assets/tailwind.css | 275 -------------------------------------------- 2 files changed, 4 insertions(+), 275 deletions(-) delete mode 100644 assets/tailwind.css diff --git a/.gitignore b/.gitignore index 58e98cf..af67aa9 100644 --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,7 @@ # IDE /.idea + +# dx erzeugt diese Datei bei jedem vollen Build neu, auch ohne Eingabedatei +# und ohne dass sie noch verlinkt waere. Lokales Nebenprodukt, kein Quellcode. +assets/tailwind.css diff --git a/assets/tailwind.css b/assets/tailwind.css deleted file mode 100644 index 5651d50..0000000 --- a/assets/tailwind.css +++ /dev/null @@ -1,275 +0,0 @@ -/*! tailwindcss v4.1.5 | MIT License | https://tailwindcss.com */ -@layer properties; -@layer theme, base, components, utilities; -@layer theme { - :root, :host { - --font-sans: ui-sans-serif, system-ui, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', - 'Noto Color Emoji'; - --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', - monospace; - --text-xs: 0.75rem; - --text-sm: 0.875rem; - --text-base: 1rem; - --text-lg: 1.125rem; - --text-xl: 1.25rem; - --leading-tight: 1.25; - --leading-normal: 1.5; - --radius-sm: 0.25rem; - --radius-lg: 0.5rem; - --default-transition-duration: 150ms; - --default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); - --default-font-family: var(--font-sans); - --default-mono-font-family: var(--font-mono); - } -} -@layer base { - *, ::after, ::before, ::backdrop, ::file-selector-button { - box-sizing: border-box; - margin: 0; - padding: 0; - border: 0 solid; - } - html, :host { - line-height: 1.5; - -webkit-text-size-adjust: 100%; - tab-size: 4; - font-family: var(--default-font-family, ui-sans-serif, system-ui, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'); - font-feature-settings: var(--default-font-feature-settings, normal); - font-variation-settings: var(--default-font-variation-settings, normal); - -webkit-tap-highlight-color: transparent; - } - hr { - height: 0; - color: inherit; - border-top-width: 1px; - } - abbr:where([title]) { - -webkit-text-decoration: underline dotted; - text-decoration: underline dotted; - } - h1, h2, h3, h4, h5, h6 { - font-size: inherit; - font-weight: inherit; - } - a { - color: inherit; - -webkit-text-decoration: inherit; - text-decoration: inherit; - } - b, strong { - font-weight: bolder; - } - code, kbd, samp, pre { - font-family: var(--default-mono-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace); - font-feature-settings: var(--default-mono-font-feature-settings, normal); - font-variation-settings: var(--default-mono-font-variation-settings, normal); - font-size: 1em; - } - small { - font-size: 80%; - } - sub, sup { - font-size: 75%; - line-height: 0; - position: relative; - vertical-align: baseline; - } - sub { - bottom: -0.25em; - } - sup { - top: -0.5em; - } - table { - text-indent: 0; - border-color: inherit; - border-collapse: collapse; - } - :-moz-focusring { - outline: auto; - } - progress { - vertical-align: baseline; - } - summary { - display: list-item; - } - ol, ul, menu { - list-style: none; - } - img, svg, video, canvas, audio, iframe, embed, object { - display: block; - vertical-align: middle; - } - img, video { - max-width: 100%; - height: auto; - } - button, input, select, optgroup, textarea, ::file-selector-button { - font: inherit; - font-feature-settings: inherit; - font-variation-settings: inherit; - letter-spacing: inherit; - color: inherit; - border-radius: 0; - background-color: transparent; - opacity: 1; - } - :where(select:is([multiple], [size])) optgroup { - font-weight: bolder; - } - :where(select:is([multiple], [size])) optgroup option { - padding-inline-start: 20px; - } - ::file-selector-button { - margin-inline-end: 4px; - } - ::placeholder { - opacity: 1; - } - @supports (not (-webkit-appearance: -apple-pay-button)) or (contain-intrinsic-size: 1px) { - ::placeholder { - color: currentcolor; - @supports (color: color-mix(in lab, red, red)) { - color: color-mix(in oklab, currentcolor 50%, transparent); - } - } - } - textarea { - resize: vertical; - } - ::-webkit-search-decoration { - -webkit-appearance: none; - } - ::-webkit-date-and-time-value { - min-height: 1lh; - text-align: inherit; - } - ::-webkit-datetime-edit { - display: inline-flex; - } - ::-webkit-datetime-edit-fields-wrapper { - padding: 0; - } - ::-webkit-datetime-edit, ::-webkit-datetime-edit-year-field, ::-webkit-datetime-edit-month-field, ::-webkit-datetime-edit-day-field, ::-webkit-datetime-edit-hour-field, ::-webkit-datetime-edit-minute-field, ::-webkit-datetime-edit-second-field, ::-webkit-datetime-edit-millisecond-field, ::-webkit-datetime-edit-meridiem-field { - padding-block: 0; - } - :-moz-ui-invalid { - box-shadow: none; - } - button, input:where([type='button'], [type='reset'], [type='submit']), ::file-selector-button { - appearance: button; - } - ::-webkit-inner-spin-button, ::-webkit-outer-spin-button { - height: auto; - } - [hidden]:where(:not([hidden='until-found'])) { - display: none !important; - } -} -@layer utilities { - .visible { - visibility: visible; - } - .relative { - position: relative; - } - .static { - position: static; - } - .container { - width: 100%; - @media (width >= 40rem) { - max-width: 40rem; - } - @media (width >= 48rem) { - max-width: 48rem; - } - @media (width >= 64rem) { - max-width: 64rem; - } - @media (width >= 80rem) { - max-width: 80rem; - } - @media (width >= 96rem) { - max-width: 96rem; - } - } - .flex { - display: flex; - } - .table { - display: table; - } - .border-collapse { - border-collapse: collapse; - } - .transform { - transform: var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,); - } - .resize { - resize: both; - } - .border { - border-style: var(--tw-border-style); - border-width: 1px; - } - .text-wrap { - text-wrap: wrap; - } - .underline { - text-decoration-line: underline; - } - .outline { - outline-style: var(--tw-outline-style); - outline-width: 1px; - } - .transition { - transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to, opacity, box-shadow, transform, translate, scale, rotate, filter, -webkit-backdrop-filter, backdrop-filter, display, visibility, content-visibility, overlay, pointer-events; - transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); - transition-duration: var(--tw-duration, var(--default-transition-duration)); - } -} -@property --tw-rotate-x { - syntax: "*"; - inherits: false; -} -@property --tw-rotate-y { - syntax: "*"; - inherits: false; -} -@property --tw-rotate-z { - syntax: "*"; - inherits: false; -} -@property --tw-skew-x { - syntax: "*"; - inherits: false; -} -@property --tw-skew-y { - syntax: "*"; - inherits: false; -} -@property --tw-border-style { - syntax: "*"; - inherits: false; - initial-value: solid; -} -@property --tw-outline-style { - syntax: "*"; - inherits: false; - initial-value: solid; -} -@layer properties { - @supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))) { - *, ::before, ::after, ::backdrop { - --tw-rotate-x: initial; - --tw-rotate-y: initial; - --tw-rotate-z: initial; - --tw-skew-x: initial; - --tw-skew-y: initial; - --tw-border-style: solid; - --tw-outline-style: solid; - } - } -} From 50ffab02528a612890e97fb8f26bc75b42fd1ac8 Mon Sep 17 00:00:00 2001 From: MDietermann Date: Fri, 28 Aug 2026 09:24:00 +0200 Subject: [PATCH 3/3] docs: Branch- und PR-Workflow im Tracker-Doc festhalten Ab jetzt laufen Aenderungen ueber eigene Branches und Pull Requests statt direkt auf main, damit die logische Trennung sichtbar bleibt. Das gehoert neben die tea-Kommandos, sonst kennt es nur die Sitzung, in der es vereinbart wurde. Festgehalten ist auch die Faustregel fuer den Zuschnitt: Wenn die Commit-Nachricht "und ausserdem" braucht, sind es zwei Branches. Und dass das Mergen dem Menschen gehoert, nicht der Umsetzung. --- docs/agents/issue-tracker.md | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/docs/agents/issue-tracker.md b/docs/agents/issue-tracker.md index 7420ba4..c809bdb 100644 --- a/docs/agents/issue-tracker.md +++ b/docs/agents/issue-tracker.md @@ -61,6 +61,27 @@ Create a Gitea issue. Run `tea issues ` plus `tea comments ls `. +## Branch- und PR-Workflow + +Änderungen werden **nicht direkt auf `main`** committet, sondern auf einem eigenen Branch +pro logischer Einheit — `feat/`, `fix/`, `refactor/`, `chore/`, `docs/`. Eine Einheit ist, +was man in einem Satz begründen kann; wenn die Commit-Nachricht „und außerdem" braucht, +sind es zwei Branches. + +Zurück nach `main` geht es über einen **Pull Request in Gitea**, nicht per lokalem Merge: + +```bash +git push -u origin +tea pulls create --title "..." --description "..." +``` + +`--description` nimmt wie bei Issues nur eine Zeichenkette; für längere Texte eine Datei +schreiben und mit `$(cat datei)` übergeben. Bezieht sich der PR auf ein Ticket, gehört +`Closes #` in die Beschreibung, damit Gitea es beim Mergen schließt. + +Gemergt wird in der Weboberfläche — das Mergen ist eine Entscheidung des Menschen, nicht +Teil der Umsetzung. + ## Wayfinding operations Used by `/wayfinder`. The **map** is a single issue with **child** issues as tickets.