Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
3a9d1fb
docs: migrate documentation site from Jekyll to Zensical
pedrolamas Mar 26, 2026
45fc154
docs: update content for latest Klipper 0.13.0, Moonraker and Kalico …
pedrolamas Mar 26, 2026
e629ac9
docs: rename files to kebab-case and improve navigation
pedrolamas Mar 26, 2026
2b0b1fe
docs: set favicon
pedrolamas Mar 26, 2026
9e98bd6
docs: enable attr_list and pymdownx.keys extensions
pedrolamas Mar 27, 2026
965d69a
docs: add glossary tooltips and fix code highlighting
pedrolamas Mar 27, 2026
884c1e6
docs: standardize terminology and fix typos
pedrolamas Mar 27, 2026
d47bde2
docs: add fluidd-config section and minor fixes
pedrolamas Mar 27, 2026
6f8eacc
docs: restructure documentation with grouped features and icons
pedrolamas Mar 27, 2026
28d0c43
docs: add documentation site section to AI development guide
pedrolamas Mar 27, 2026
bb6bcc7
docs: update edit_uri to master branch and format zensical.toml
pedrolamas Mar 27, 2026
0e76ec1
docs: fix broken AFC-Klipper-Add-On repository URL
pedrolamas Mar 27, 2026
949c450
chore: update serve:docs script from Jekyll to Zensical
pedrolamas Mar 27, 2026
6dd4bdd
docs: restore Jinja2 template tags in PAUSE/RESUME macros
pedrolamas Mar 27, 2026
7c7578d
docs: fix workflow trigger branch from main to master
pedrolamas Mar 27, 2026
f54989f
docs: address PR review feedback
pedrolamas Mar 27, 2026
eb557b2
docs: address PR review feedback
pedrolamas Mar 27, 2026
0126675
docs: fix 3d → 3D capitalization in customize page
pedrolamas Mar 27, 2026
42a0dd9
docs: fix typos in PAUSE macro comments
pedrolamas Mar 27, 2026
aa98344
docs: use official GitHub Actions for Pages deployment
pedrolamas Mar 28, 2026
cdd5a5f
docs: use --clean flag for zensical build in CI
pedrolamas Mar 28, 2026
adf2a55
docs: add file titles to code blocks
pedrolamas Mar 28, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 42 additions & 0 deletions .github/workflows/docs.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
name: Deploy docs

on:
push:
branches:
- master
paths:
- 'docs/**'

jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6

- uses: actions/setup-python@v6
with:
python-version: '3.x'

- name: Install Zensical
run: pip install "zensical==0.0.29"

- name: Build docs
run: zensical build --clean
working-directory: docs

- uses: actions/upload-pages-artifact@v4
with:
path: docs/site

deploy:
needs: build
runs-on: ubuntu-latest
permissions:
pages: write
id-token: write
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
steps:
- id: deployment
uses: actions/deploy-pages@v5
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -32,3 +32,7 @@ pnpm-debug.log*
*.sw?

*.tsbuildinfo

# Zensical docs
/site/
/.venv/
79 changes: 72 additions & 7 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ Fluidd is a Vue 2.7 + TypeScript web interface for Klipper 3D printers that comm
## Architecture Overview

- **Vue 2.7 + Vuetify 2**: UI framework with Material Design components
- **Vuex Store**: 30 namespaced modules mirroring Klipper/Moonraker domains (`printer/`, `files/`, `console/`, `macros/`, `webcams/`, `mmu/`, `spoolman/`, etc.)
- **Vuex Store**: 28 namespaced modules mirroring Klipper/Moonraker domains (`printer/`, `files/`, `console/`, `macros/`, `webcams/`, `mmu/`, `spoolman/`, etc.)
- **WebSocket Communication**: Real-time JSON-RPC via custom `WebSocketClient` in `src/plugins/socketClient.ts`
- **Component Structure**: Class-style components with `vue-property-decorator`; mixins-based architecture with `StateMixin` providing common printer state access

Expand Down Expand Up @@ -49,7 +49,7 @@ export default class PrinterWidget extends Mixins(StateMixin) {
- All printer communication through `SocketActions` in `src/api/socketActions.ts` (not direct HTTP)
- Pattern: `baseEmit<T>(method, { dispatch, wait, params })`
- Use `wait` parameter for UI loading states: `wait: Waits.onPrintStart`
- Wait constants defined in `src/globals.ts` (`Waits` object, 80+ operation types)
- Wait constants defined in `src/globals.ts` (`Waits` object, ~90 operation types)
- Real-time updates handled via store mutations from socket events
- Auto-reconnect with configurable interval (`Globals.SOCKET_RETRY_DELAY`)

Expand Down Expand Up @@ -96,15 +96,15 @@ src/
│ ├── layout/ # App shell: AppBar, AppDrawer, etc. (auto-imported)
│ ├── settings/ # Settings page components
│ ├── ui/ # Reusable: AppBtn, AppDialog, AppChart (auto-imported)
│ └── widgets/ # Feature widgets: camera/, filesystem/, macros/, mmu/, etc.
│ └── widgets/ # 27 feature widget dirs: bedmesh/, camera/, console/, filesystem/, macros/, mmu/, thermals/, toolhead/, etc.
├── directives/ # Custom Vue directives (v-safe-html for DOMPurify)
├── locales/ # i18n YAML files (24 languages)
├── locales/ # i18n YAML files (23 languages)
├── mixins/ # Vue mixins (StateMixin, FilesMixin, etc.)
├── monaco/ # TextMate grammars and editor themes
├── plugins/ # Vue plugins (i18n, httpClient, socketClient, vuetify, filters)
├── router/ # Vue Router (hash mode) with auth guards
├── scss/ # Global styles and Vuetify variable overrides
├── store/ # 30 Vuex modules (printer, files, config, webcams, etc.)
├── store/ # 28 Vuex modules (printer, files, config, webcams, etc.)
├── types/ # UI-specific TypeScript types
├── typings/ # Global .d.ts declarations (Klipper, Moonraker namespaces)
├── util/ # Helper functions (30+)
Expand All @@ -115,12 +115,14 @@ src/
### Router & Authentication

- Hash-based routing (`#/path`)
- Views lazy-loaded via dynamic imports: `component: () => import('@/views/X.vue')`
- Auth guard via `defaultRouteConfig` spread pattern; `isAuthenticated()` checks `store.state.auth`
- JWT token auth with auto-refresh (axios interceptors)
- Key routes: `/`, `/console`, `/jobs`, `/tune`, `/diagnostics`, `/configure`, `/settings`
- Key routes: `/`, `/console`, `/jobs`, `/tune`, `/diagnostics`, `/timelapse`, `/history`, `/system`, `/configure`, `/settings`, `/camera/:cameraId`, `/preview`, `/login`

### Icons & Theming

- MDI icons via `@mdi/js` — mapped in `src/globals.ts` (`Icons` object, 150+ mappings)
- MDI icons via `@mdi/js` — mapped in `src/globals.ts` (`Icons` object, ~225 mappings)
- Usage: `<v-icon>{{ $globals.Icons.close }}</v-icon>`
- Vuetify theme with custom dark/light overrides in `src/scss/variables.scss`
- PWA support with service worker in `src/sw.ts` (Workbox, injectManifest strategy)
Expand Down Expand Up @@ -154,6 +156,7 @@ src/
- `I18nLocales` — locale YAML files
- `MonacoLanguageImports` — TextMate grammars
- `CameraComponents` — camera service Vue components
- Views also dynamically imported in `src/router/index.ts` via `() => import('@/views/X.vue')`

## Testing Conventions

Expand Down Expand Up @@ -186,6 +189,68 @@ src/
- `path` aliased to `path-browserify` for browser compatibility
- Strict Vuex mode enabled only in dev (`strict: import.meta.env.DEV`)

## Documentation Site

- **Zensical** (Material for MkDocs successor) — static site generator in `docs/`
- Config: `docs/zensical.toml` — nav, theme, extensions, social links
- Content: `docs/docs/` — Markdown files with YAML frontmatter
- Overrides: `docs/overrides/` — custom Jinja2 templates (header, htmltitle)
- Custom CSS: `docs/docs/stylesheets/extra.css` — Fluidd brand colors
- Glossary: `docs/includes/glossary.md` — abbreviation tooltips auto-appended to all pages
- Lint: `markdownlint --config docs/.markdownlint.json docs/docs/`
- Build: `cd docs && zensical build` (requires Python venv with zensical installed)
- Serve: `cd docs && zensical serve` or `npm run serve:docs` (localhost:8000)
- Deploy: GitHub Actions (`.github/workflows/docs.yml`) — builds on push to `master`, deploys to gh-pages with `docs.fluidd.xyz` CNAME

### Documentation Structure

```
docs/
├── docs/ # Markdown content
│ ├── index.md # Homepage
│ ├── getting-started.md # Installation (KIAUH, Docker, Manual, fluidd.xyz, FluiddPI)
│ ├── configuration.md # Fluidd Config, Klipper, Moonraker, Multiple Printers
│ ├── customize.md # Layout, themes, hiding components
│ ├── features/
│ │ ├── index.md # Features overview (section landing page)
│ │ ├── printing.md # G-code viewer, thumbnails, bed mesh, print history
│ │ ├── thermals.md # Chart, presets, sensors
│ │ ├── cameras.md
│ │ ├── console.md
│ │ ├── macros.md
│ │ ├── multi-material.md # Multiple extruders + Spoolman
│ │ ├── multiple-printers.md
│ │ ├── diagnostics.md
│ │ ├── updates.md
│ │ ├── system.md # System info + notifications
│ │ ├── authorization.md
│ │ ├── slicer-uploads.md
│ │ ├── timelapse.md
│ │ ├── localization.md
│ │ └── integrations.md # Kalico, Happy Hare, AFC, Beacon, Obico, OctoEverywhere, etc.
│ ├── development.md # Dev container, local dev, localization
│ ├── faq.md # Organized by topic (Setup, Cameras, System, Printing)
│ └── sponsors.md
├── includes/
│ └── glossary.md # Abbreviation definitions (auto-appended)
├── overrides/ # Jinja2 template overrides
├── zensical.toml # Site configuration
└── .markdownlint.json # Lint rules (MD013 and MD025 disabled)
```

### Documentation Conventions

- Frontmatter: `title` (required), `icon` (top-level pages only, Lucide icons)
- Images: `/assets/images/` path, stored in `docs/docs/assets/images/`
- Code blocks: `ini` for Klipper/Moonraker config, `bash` for shell commands, `json` for JSON
- Links: use `{.md-button}` attribute for standalone action links
- Keys: use `++key++` syntax (pymdownx.keys extension) instead of `<kbd>`
- Terminology: G-code (not gcode/Gcode), Wi-Fi (not WiFi), GitHub (not Github), Node.js (not NodeJS), SD card (not SDCard), em dash (—) not hyphen (-) for parenthetical dashes
- Glossary terms (AFC, API, CORS, JWT, MCU, MMU, MPC, PID, etc.) get automatic tooltips
- **Before committing docs changes**, always run:
- `markdownlint --config docs/.markdownlint.json docs/docs/` — must be clean
- `codespell docs/docs/` — must be clean (install via `pip install codespell`)

## Communication Style

- Be extremely concise in responses
Expand Down
5 changes: 2 additions & 3 deletions docs/.gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,2 @@
_site
.sass-cache
.jekyll-metadata
.cache/
site/
4 changes: 4 additions & 0 deletions docs/.markdownlint.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"MD013": false,
"MD025": false
}
24 changes: 0 additions & 24 deletions docs/404.html

This file was deleted.

1 change: 0 additions & 1 deletion docs/CNAME

This file was deleted.

39 changes: 0 additions & 39 deletions docs/Gemfile

This file was deleted.

Loading
Loading