From 00c483c2a2eba46ac374375341be8b9a022470e6 Mon Sep 17 00:00:00 2001 From: Christian Manivong Date: Sun, 28 Jun 2026 09:58:47 +0200 Subject: [PATCH] docs: initial product docs and design reference MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Establishes the documentation foundation for the netOrk website: - CLAUDE.md — tech stack (React 18/Vite/Tailwind), design rules, tone of voice, and file structure guidance for the implementation instance - docs/PRODUCT.md — one-liner, elevator pitch, target audience, value props, full feature list, driver table, architecture summary - docs/DESIGN.md — exact Tailwind classes for colors, typography, spacing, and all reusable component patterns (cards, buttons, screenshot frames, badges, nav) lifted directly from the product UI - docs/PAGES.md — page-by-page content plan with route, purpose, section structure, and draft copy for every page No code yet — that follows in a separate instance. Co-Authored-By: Claude Sonnet 4.6 --- .gitignore | 1 + CLAUDE.md | 93 +++++++++++++ docs/DESIGN.md | 261 +++++++++++++++++++++++++++++++++++++ docs/PAGES.md | 339 ++++++++++++++++++++++++++++++++++++++++++++++++ docs/PRODUCT.md | 173 ++++++++++++++++++++++++ 5 files changed, 867 insertions(+) create mode 100644 .gitignore create mode 100644 CLAUDE.md create mode 100644 docs/DESIGN.md create mode 100644 docs/PAGES.md create mode 100644 docs/PRODUCT.md diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..6d9fae0 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +node_modules/\ndist/\n.env\n.env.local\n*.local\n.DS_Store diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..82d2f11 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,93 @@ +# CLAUDE.md — netork-website + +This is the official marketing website for **netOrk**, a self-hosted Network +Orchestration Platform. The goal is a fast, visually striking single-page (or +multi-page) site that communicates what netOrk does, who it is for, and how to +get started. + +--- + +## Project Purpose + +Potential users land here and need to answer three questions in under 10 seconds: +1. What is this? +2. Is it for me? +3. How do I try it? + +Everything on the site should serve those three questions. + +--- + +## Content & Design Source of Truth + +All product content (features, copy, page structure) is in `docs/`: + +| File | Purpose | +|---|---| +| `docs/PRODUCT.md` | Product description, target audience, value propositions, feature list | +| `docs/DESIGN.md` | Visual identity — exact Tailwind colors, typography, component patterns | +| `docs/PAGES.md` | Page-by-page content plan with section headings and copy drafts | + +**Read these files before writing any code or copy.** They are the source of +truth. The design file in particular defines exact class names — use them. + +--- + +## Tech Stack + +Mirror the netOrk UI exactly so the design language carries over: + +| Layer | Choice | +|---|---| +| Framework | React 18 + TypeScript | +| Build | Vite | +| Styling | Tailwind CSS v3 | +| Routing | React Router v6 (or static if single page) | +| Icons | Heroicons (inline SVG, same as netOrk UI) | +| Animation | Tailwind transitions only — no GSAP, Framer, etc. | + +**No external component libraries.** Build everything from Tailwind primitives, +exactly as netOrk's `ui/src/components/ui.tsx` does. + +--- + +## Design Rules (summary — full detail in docs/DESIGN.md) + +- **Dark theme only.** Background `bg-slate-950`. Cards `bg-slate-900`. +- **Accent color:** `sky-500` / `sky-600` for CTAs, links, highlights. +- **No light mode toggle.** Ever. +- Font stack: system default (Tailwind sans). No Google Fonts. +- All interactive elements use `transition-colors` — no layout shifts. +- Screenshots/mockups of the actual app use a `border border-slate-700 rounded-xl + overflow-hidden` wrapper to frame them against the dark background. + +--- + +## File Naming + +``` +netork-website/ +├── CLAUDE.md ← this file +├── docs/ +│ ├── PRODUCT.md +│ ├── DESIGN.md +│ └── PAGES.md +├── public/ +│ └── screenshots/ ← actual app screenshots go here +├── src/ +│ ├── components/ +│ ├── pages/ +│ └── main.tsx +├── index.html +├── package.json +└── tailwind.config.js +``` + +--- + +## Tone of Voice + +- Direct and technical — audience is engineers, not executives. +- No marketing fluff ("revolutionize", "empower", "seamless"). +- Show, don't tell — a screenshot or code block beats three sentences of prose. +- German is fine for internal docs; the website copy is in **English**. diff --git a/docs/DESIGN.md b/docs/DESIGN.md new file mode 100644 index 0000000..1cc2cba --- /dev/null +++ b/docs/DESIGN.md @@ -0,0 +1,261 @@ +# netOrk — Visual Identity & Design System + +This document defines the visual identity of netOrk and must be followed +exactly when building the website. The goal is zero visual discontinuity +between the product UI and the marketing site. + +--- + +## Core Principle + +**The website looks like a dark-mode dev tool, not a SaaS landing page.** +No gradients, no floating orbs, no animated hero blobs. The aesthetic is +deliberate, minimal, and technical — consistent with the product itself. + +--- + +## Color Palette + +All colors are Tailwind CSS v3 classes. Do not use hex values directly — +always use Tailwind class names to stay consistent. + +### Backgrounds + +| Layer | Class | Usage | +|---|---|---| +| Page / outermost | `bg-slate-950` | Body, full-bleed sections | +| Card / panel | `bg-slate-900` | Content cards, code blocks, feature boxes | +| Elevated element | `bg-slate-800` | Hover states, dropdowns, table rows on hover | +| Border | `border-slate-700` | Between sections, card outlines | +| Subtle border | `border-slate-800` | Inside cards, dividers | + +### Text + +| Role | Class | +|---|---| +| Primary | `text-slate-100` | +| Secondary / muted | `text-slate-400` | +| Tertiary / placeholder | `text-slate-500` | +| Accent (interactive) | `text-sky-400` | +| Danger | `text-red-400` | + +### Accent (Interactive / CTA) + +| State | Class | +|---|---| +| Default button | `bg-sky-600 text-white` | +| Hover | `hover:bg-sky-500` | +| Link / inline | `text-sky-400 hover:text-sky-300` | +| Active indicator | `text-sky-400` | +| Focus ring | `focus:ring-sky-500` | + +### Semantic Colors + +| Meaning | Color | +|---|---| +| Success / active | `text-green-400`, `bg-green-500/20` | +| Warning / caution | `text-yellow-400`, `bg-yellow-500/20` | +| Danger / error | `text-red-400`, `bg-red-500/20` | +| Info / neutral | `text-blue-400`, `bg-blue-500/20` | + +### Status Badge Pattern + +```tsx +// Active / online + + active + + +// Offline + + offline + + +// Warning + + warning + +``` + +--- + +## Typography + +Font stack: Tailwind default sans-serif (`font-sans`). **No Google Fonts.** +The product uses system fonts; the website must match. + +| Element | Classes | +|---|---| +| Hero heading | `text-4xl md:text-6xl font-bold text-slate-100 leading-tight` | +| Section heading | `text-2xl md:text-3xl font-bold text-slate-100` | +| Subsection heading | `text-xl font-semibold text-slate-200` | +| Body text | `text-base text-slate-400 leading-relaxed` | +| Small / label | `text-sm text-slate-400` | +| Tiny / tag | `text-xs font-medium text-slate-500` | +| Code / monospace | `font-mono text-sky-400` | +| Accent text | `text-sky-400` | + +--- + +## Spacing & Layout + +- Max content width: `max-w-7xl mx-auto px-6` +- Section padding: `py-24` (desktop), `py-16` (mobile) +- Card padding: `p-6` +- Gap between grid items: `gap-6` or `gap-8` +- All layouts are mobile-first; use `md:` and `lg:` breakpoints. + +--- + +## Components + +### Primary CTA Button + +```tsx + + Get started + +``` + +### Secondary / Ghost Button + +```tsx + + See all features + +``` + +### Feature Card + +```tsx +
+
+ {/* Heroicon SVG, className="h-5 w-5 text-sky-400" */} +
+

Feature name

+

+ Description of the feature in one to three sentences. +

+
+``` + +### Screenshot Frame + +App screenshots must be wrapped in this frame to integrate naturally +against the dark background: + +```tsx +
+ Device inventory +
+``` + +Optionally add a browser chrome header above the image: + +```tsx +
+ + + + netork.local +
+``` + +### Code Block + +```tsx +
+  {`bash scripts/deploy.sh 192.168.1.1`}
+
+``` + +### Driver / Integration Badge + +```tsx + + OpenWRT + +``` + +### Section Divider + +```tsx +
+``` + +--- + +## Navigation + +- Sticky top nav: `sticky top-0 z-10 bg-slate-900/80 backdrop-blur + border-b border-slate-800` +- Logo: left-aligned. Product name in `font-semibold text-slate-100`, + optionally prefixed with a small icon. +- Nav links: `text-sm text-slate-400 hover:text-slate-100 transition-colors` +- Active link: `text-slate-100` +- CTA in nav: small primary button `px-4 py-1.5 text-sm` + +--- + +## Animations & Transitions + +- **Hover states:** always `transition-colors` (not `transition-all`). +- **No JavaScript animations** on initial page load — no entrance animations, + no scroll-triggered reveals via IntersectionObserver. +- Scroll behavior: `scroll-smooth` on `` for anchor links. +- No parallax, no floating elements, no auto-playing videos. + +--- + +## Logo / Wordmark + +The netOrk wordmark uses the following convention in the product: +- Lowercase `n`, uppercase `O`: **netOrk** +- Monospace context: `font-mono text-sky-400` +- Heading context: `font-bold text-slate-100` with `Ork` potentially in + `text-sky-400` if desired for emphasis + +--- + +## Iconography + +Use Heroicons (inline SVG). Sizes: +- Feature card icons: `h-5 w-5` +- Nav / button icons: `h-4 w-4` +- Hero / large decorative: `h-8 w-8` or `h-10 w-10` + +All icons: `text-sky-400` in feature contexts, `text-slate-400` in +secondary/muted contexts. + +--- + +## tailwind.config.js + +No custom theme extensions needed. The default Tailwind v3 slate + sky +palette covers everything. The config only needs content paths: + +```js +/** @type {import('tailwindcss').Config} */ +export default { + content: ['./index.html', './src/**/*.{js,ts,jsx,tsx}'], + theme: { + extend: {}, + }, + plugins: [], +} +``` diff --git a/docs/PAGES.md b/docs/PAGES.md new file mode 100644 index 0000000..c7128f9 --- /dev/null +++ b/docs/PAGES.md @@ -0,0 +1,339 @@ +# netOrk Website — Page Structure & Content Plan + +This document defines every page of the website: its purpose, section +structure, and draft copy. Use this as the brief for implementation. + +--- + +## Page Overview + +| Route | Page | Priority | +|---|---|---| +| `/` | Landing (Home) | P0 — build first | +| `/features` | Full feature list | P1 | +| `/drivers` | Supported devices | P1 | +| `/docs/getting-started` | Installation guide | P1 | +| `/docs/architecture` | Technical overview | P2 | +| `/plugins` | Plugin system | P2 | + +--- + +## `/` — Landing Page + +### Section 1 — Hero + +**Purpose:** Answer "what is this?" in 5 seconds. + +**Layout:** Full-width, centered. Heading + subheading + two CTAs + hero +screenshot below. + +**Heading:** +``` +Network orchestration +for heterogeneous infrastructure. +``` +(`text-slate-100` for first line, second line in `text-sky-400` or keep +both `text-slate-100` — designer decides.) + +**Subheading:** +``` +netOrk discovers, monitors, and manages your routers, switches, access +points, firewalls, and servers from a single UI — regardless of vendor. +No SaaS dependency. Runs on your infrastructure. +``` + +**CTAs:** +- Primary: `Get started →` → `/docs/getting-started` +- Secondary: `View features` → `/features` + +**Hero visual:** Full-width screenshot of the device inventory page +(dark UI visible, framed with the browser chrome component from DESIGN.md). + +--- + +### Section 2 — Problem Statement + +**Purpose:** Make the pain relatable. + +**Layout:** Single centered paragraph or short 3-column stat row. + +**Copy:** +``` +Managing a mixed network means juggling a different admin UI for every +vendor — one for OPNsense, one for HP ProCurve, one for OpenWRT, one for +Proxmox. Config changes happen directly on devices with no audit trail. +You find out something drifted when it breaks. +``` + +--- + +### Section 3 — Core Capabilities (3-up) + +**Purpose:** Communicate the three main things netOrk does. + +**Layout:** 3 columns, each with icon + heading + 2–3 sentences. + +**Card 1 — Discover & Inventory** +- Icon: `MagnifyingGlassIcon` +- Heading: `Discover everything on your network` +- Copy: `ICMP sweep, SNMP scan, and HTTP probing find devices before you + add them. Fingerprinting identifies vendor and platform automatically. + Adopt results into your inventory with a single click.` + +**Card 2 — Monitor & Alert** +- Icon: `ChartBarIcon` or `SignalIcon` +- Heading: `Poll device state continuously` +- Copy: `Every device is polled on a configurable interval via NAPALM. + Interface status, ARP tables, DHCP leases, VLAN membership, Docker + containers, and SNMP health metrics — all in one place.` + +**Card 3 — Configure & Enforce** +- Icon: `WrenchScrewdriverIcon` +- Heading: `Detect drift. Fix it.` +- Copy: `Define desired state in netOrk. On every poll, device config is + compared against it. Drifted devices get a warning; a one-click fix + stream applies the correction and shows you live SSH output.` + +--- + +### Section 4 — Driver Grid + +**Purpose:** Show breadth of vendor support. + +**Layout:** Centered heading + wrapping badge grid. + +**Heading:** `Works with your hardware` + +**Subheading:** +``` +netOrk ships with custom NAPALM drivers for 11 device types, plus all +built-in NAPALM drivers. New drivers follow a documented registration +pattern. +``` + +**Badge list** (see `docs/PRODUCT.md` — driver table): +OpenWRT, OPNsense, Proxmox VE, Linux, HP ProCurve / Aruba, TP-Link Jetstream, +Netgear, Fritz!Box, Zyxel, OpenMediaVault, Sonos, +Cisco IOS, Arista EOS, Juniper JunOS + +Each badge uses the `Driver / Integration Badge` component from DESIGN.md. + +--- + +### Section 5 — Screenshot Walkthrough (alternating) + +**Purpose:** Show the UI concretely. Three alternating image + text rows. + +**Row 1 — Left text, right screenshot** +- Heading: `Device detail at a glance` +- Copy: `Hostname, IP, vendor, OS version, last poll time, and active + warnings on one card. Tabbed detail view for interfaces, LLDP neighbors, + ARP table, VLAN membership, packages, services, and scheduled jobs.` +- Screenshot: DeviceDetailPage + +**Row 2 — Right text, left screenshot** +- Heading: `Intent-based VLAN and SSID management` +- Copy: `Define VLAN names and SSID settings once. netOrk compares them + against every polled device and pushes corrections automatically via + UCI (OpenWRT) or the device's native API.` +- Screenshot: VlansPage or WirelessPage + +**Row 3 — Left text, right screenshot** +- Heading: `Security visibility per device` +- Copy: `Wazuh agent status, CVE counts by severity, and recent alerts + — all linked to the device record. One-click agent install if the + agent is missing. Graylog syslog forwarding status with auto-fix.` +- Screenshot: SecurityTab inside DeviceDetailPage + +--- + +### Section 6 — Plugin System (brief) + +**Purpose:** Signal extensibility without going deep. + +**Layout:** Dark card, left-aligned. + +**Heading:** `Built to extend` + +**Copy:** +``` +Integrations (Wazuh, Graylog, CrowdSec, apt-cacher-ng) are plugins +that register into the plugin system — they can be enabled or disabled +per deployment without code changes. Adding a new integration follows +a documented pattern with a hook bus, typed metadata, and a plugin +registry. +``` + +**CTA:** `Plugin system docs →` → `/plugins` + +--- + +### Section 7 — Deployment (quick) + +**Purpose:** Answer "how do I run this?" without going into detail. + +**Layout:** Code block + short description. + +**Heading:** `Self-hosted. One command.` + +**Copy:** +``` +netOrk runs in Docker Compose. Five containers: API, two worker pools, +a Beat scheduler, and an nginx UI server. No external dependencies beyond +Redis and PostgreSQL. +``` + +**Code block:** +```bash +# Clone + configure +git clone https://gitea.example.com/netork/netork.git +cp .env.example .env +# edit .env (DB URL, Redis password, secret key) + +# Deploy +bash scripts/deploy.sh 192.168.1.10 +``` + +--- + +### Section 8 — CTA Footer + +**Layout:** Centered, full-width dark section. + +**Heading:** `Start managing your network.` + +**CTA:** `Read the docs →` → `/docs/getting-started` + +--- + +## `/features` — Full Feature List + +**Purpose:** Comprehensive reference for people who want to evaluate in depth. + +**Layout:** Vertical list of expandable sections (or just long-scroll with +sticky section nav). One section per capability area. + +**Sections** (map directly to feature list in `docs/PRODUCT.md`): +1. Device Management +2. Discovery +3. Supported Drivers (full table) +4. Networking & Inventory +5. Configuration Management & Drift +6. Scheduled Operations +7. Monitoring & Health +8. Security Integrations +9. DNS Management +10. Access Control (RBAC) +11. NetBox Sync +12. Developer Experience + +Each section: `text-xl font-semibold text-slate-200` heading + +feature items as a clean list with `text-slate-400` body. + +--- + +## `/drivers` — Supported Devices + +**Purpose:** One-page reference for "does netOrk support my device?" + +**Layout:** Full table + short description per driver. + +**Table columns:** Driver name | Device type | Capabilities | Status + +**Capabilities** — checkmarks or tags for: +- `get_facts` `get_interfaces` `get_lldp` `get_vlans` `get_ssids` + `get_health_metrics` `get_docker` `scheduled_reboot` `config_push` + +**Status:** `stable` / `beta` / `community` as a badge. + +--- + +## `/docs/getting-started` — Installation + +**Purpose:** Get someone from zero to a running instance. + +**Sections:** + +1. **Prerequisites** + - Docker + Docker Compose + - A PostgreSQL instance (or use the bundled profile) + - Redis + - A Linux host reachable by SSH from the server + +2. **Quick start** + ```bash + git clone ... + cp .env.example .env + # Edit .env + bash scripts/deploy.sh + ``` + +3. **First run** + - Navigate to `http://` + - Complete the setup wizard (creates admin user) + - Add your first device + +4. **Adding a device** + - Fill in hostname/IP, driver, and credentials + - Click Poll to verify connectivity + - Set a poll interval for continuous monitoring + +5. **Next steps** + - Configure NetBox sync + - Set up Wazuh integration + - Enable scheduled reboots for OpenWRT APs + +--- + +## `/docs/architecture` — Technical Overview + +**Purpose:** Give engineers the mental model before they look at code. + +**Content:** Essentially the one-paragraph summary from `docs/PRODUCT.md` +expanded into a readable overview with the architecture diagram (ASCII or SVG). + +**Sections:** +1. Overview (request → FastAPI → DB / Celery worker) +2. Driver system (NAPALM + custom drivers + registry) +3. Task queues (which queue does what) +4. Plugin system (register → hook bus → router mount) +5. Data model (UUID PKs, JSONB snapshots, intent-vs-state) + +--- + +## `/plugins` — Plugin System + +**Purpose:** Explain extensibility to potential contributors. + +**Sections:** +1. What is a plugin? (metadata, router, tasks, hooks) +2. Built-in plugins (Wazuh, Graylog, CrowdSec, apt-cacher) +3. Writing a plugin (step-by-step with code snippets) +4. Hook bus (fire / call / transform) +5. Plugin registry and enable/disable + +--- + +## Global Layout + +### Navigation (all pages) + +``` +[ netOrk ] Features Drivers Docs ▾ Plugins [ Get started ] +``` + +`Docs` is a dropdown: Getting Started / Architecture + +### Footer + +``` +netOrk — self-hosted network orchestration + +Links: Resources: Legal: +Features Getting Started MIT License +Drivers Architecture Privacy (none collected) +Plugins Changelog +``` + +Footer background: `bg-slate-900 border-t border-slate-800` +Footer text: `text-sm text-slate-500` diff --git a/docs/PRODUCT.md b/docs/PRODUCT.md new file mode 100644 index 0000000..95428ba --- /dev/null +++ b/docs/PRODUCT.md @@ -0,0 +1,173 @@ +# netOrk — Product Description + +## One-liner + +**netOrk is a self-hosted network orchestration platform that discovers, +monitors, and manages heterogeneous network infrastructure from a single UI.** + +## Elevator Pitch (3 sentences) + +netOrk connects to your routers, switches, access points, firewalls, and servers +via NAPALM and custom vendor drivers — regardless of manufacturer. It continuously +polls device state, detects configuration drift, and lets you push corrections in +one click. All findings are synced to NetBox as the source of truth, and security +integrations with Wazuh and Graylog give you visibility across the full stack. + +--- + +## Target Audience + +**Primary:** Network engineers and IT administrators managing small to medium +heterogeneous environments (10–500 devices) — mixed vendor, mixed OS. + +**Secondary:** Serious homelab operators who run "prosumer" or enterprise-grade +hardware and want operational visibility beyond what consumer dashboards offer. + +**Pain points this solves:** +- Multiple vendor-specific management UIs open at once +- No single view of "what's running where" +- Config changes made directly on devices — nobody knows what changed +- Manual SSH into every device to check interface status or VLAN membership +- Security tooling (Wazuh agents, syslog) not consistently deployed + +--- + +## Value Propositions + +1. **One UI for everything** — OpenWRT APs, OPNsense firewalls, HP ProCurve + switches, Proxmox hosts, Linux servers, Fritz!Boxes, NAS devices, and more, + all managed in one place. + +2. **Intent-based configuration** — Define desired state in netOrk (VLAN names, + SSID settings, AP radio profiles). netOrk pushes the config to devices and + corrects drift automatically or on demand. + +3. **Automatic drift detection** — Every poll compares device config against the + DB. Drifted devices get a warning; a one-click fix stream applies the + correction via SSH/UCI/REST and shows live output. + +4. **Scheduled automation** — Automatic reboots for OpenWRT APs (GTK key rotation + workaround), scheduled config fixes, package updates — all with time windows + and per-site concurrency limits. + +5. **Security visibility** — Wazuh agent tracking with CVE counts and alert history + per device. Graylog syslog forwarding status and auto-fix. CrowdSec org-level + threat summary per device. + +6. **Deep NetBox integration** — Devices, interfaces, IP addresses, prefixes, + VLANs synced to NetBox automatically. netOrk uses NetBox as the canonical + documentation target. + +7. **Plugin system** — Integrations (Wazuh, Graylog, CrowdSec, apt-cacher-ng) + are plugins that can be enabled/disabled per deployment. Adding a new + integration follows a documented pattern. + +8. **Self-hosted, no SaaS** — Runs in Docker Compose. Your data stays on your + infrastructure. No telemetry, no cloud dependency. + +--- + +## Feature List + +### Device Management +- CRUD for devices with credential profiles and SSH key management +- Per-device poll intervals (minutes) or manual-only +- Status tracking: planned / staged / active / decommissioning / offline / disabled +- Vendor/model/OS auto-populated from NAPALM `get_facts()` +- Site assignment with FK to structured Site records +- AP Profile assignment for grouped OpenWRT config + +### Discovery +- ICMP ping sweep, SNMP scan, HTTP/HTTPS probing +- Device fingerprinting: vendor + platform confidence scoring +- FQDN resolution (reverse DNS) +- Manual adoption from scan results (no auto-create to avoid inventory noise) + +### Supported Device Drivers +Custom NAPALM drivers for all of the following: + +| Driver | Device type | +|---|---| +| `openwrt` | OpenWRT access points | +| `opnsense` | OPNsense firewalls | +| `proxmox` | Proxmox VE hypervisors | +| `linux` | Generic Linux servers | +| `procurve` | HP ProCurve / Aruba switches | +| `tplink_jetstream` | TP-Link Jetstream managed switches | +| `netgear` | Netgear switches | +| `fritzbox` | AVM Fritz!Box routers | +| `zyxel` | Zyxel switches | +| `openmediavault` | OpenMediaVault NAS | +| `sonos` | Sonos speakers | + +Plus all built-in NAPALM drivers: Cisco IOS/IOS-XE/NX-OS, Arista EOS, Juniper JunOS. + +### Networking & Inventory +- Interface browser with IPv4/IPv6 addresses, MAC, speed, MTU +- LLDP neighbor discovery and topology graph +- ARP table and DHCP lease browser per device +- Subnet browser with interface-to-subnet assignments +- VLAN list grouped by site; per-VLAN device membership view +- SSID management with push to OpenWRT APs via UCI + +### Configuration Management +- Config drift detection: desired state (DB) vs device state (poll snapshot) +- One-click drift fix stream with live SSH output in the browser +- UCI-based config push for OpenWRT (VLAN names, SSID settings, radio config) +- AP profile system: country code, HT/VHT mode, 802.11r, NTP, syslog, SSH port + +### Scheduled Operations +- Scheduled reboots for OpenWRT APs with per-site concurrency lock +- Failback cron script written to device for netOrk-unreachable scenarios +- Scheduled config drift fixes with time-window enforcement +- Package update scheduling and one-click apply + +### Monitoring & Health +- SNMP health metrics (CPU, memory, interface counters) via `get_health_metrics()` +- Per-device warning system with severity levels (error / warning / info) +- Docker container and image status (Proxmox/Linux) +- Service status and start/stop/restart (systemd) +- VM/container list with OS device cross-linking (Proxmox) + +### Security Integrations (plugins) +- **Wazuh** — agent enrollment tracking, vulnerability counts (by severity), + recent alert history, CIS benchmark scores, one-click agent install fix stream +- **Graylog** — rsyslog forwarding status per device, one-click fix to write rule +- **CrowdSec** — org-level decisions, remediation metrics, top attack scenarios + +### DNS +- DNS zone management with authoritative device assignment +- Forward record provisioning (A records from device interfaces) +- PTR record provisioning to reverse zones +- Pending job queue for zone changes when device is unreachable + +### Access Control +- JWT authentication with remember-me (localStorage) or session-only (sessionStorage) +- RBAC with four built-in roles: viewer / operator / engineer / administrator +- Custom roles with any permission combination +- Full audit log of all orchestration actions + +### NetBox Sync +- Pushes vendor, model, OS version, status to NetBox dcim.devices +- Syncs interfaces, IP addresses, prefixes, VLANs +- VM interfaces and disks for Proxmox hosts + +### Developer / Operator Experience +- OpenAPI / Swagger at `/docs` +- Plugin system: new integrations follow a documented pattern +- Celery task queue with dedicated queues per workload type +- Docker Compose deployment (single command) +- Alembic migrations run automatically on deploy + +--- + +## Architecture in One Paragraph + +netOrk runs as five Docker containers: a FastAPI API server, two Celery worker +pools (general + poll), a Celery Beat scheduler, and an nginx UI server. Redis +is the broker. PostgreSQL stores all state. Device communication is always +blocking I/O executed in Celery workers — FastAPI request handlers are +async-only for DB and quick operations. Custom NAPALM drivers live in `vendor/` +as editable packages and self-register via `@register_driver`. The plugin system +(`netork/plugins/`) provides a hook bus, a plugin registry with enable/disable +state in the DB, and a documented pattern for adding integrations.