feat: initial website implementation
React 18 + TypeScript + Vite + Tailwind CSS website for netOrk. Built by a parallel instance based on the product docs. Pages: Home (landing), Features, Drivers, Getting Started Components: Nav, Footer Assets: public/logo.png (1024x1024 RGBA) Docker: multi-stage Dockerfile (node:20 builder + nginx:alpine) Compose: netork-website service on proxy-net (Zoraxy integration) docs/DESIGN.md: Logo Assets section added (PNG only, SVG removed); wordmark pattern and <head> references documented. .gitignore: fixed (was literal \n, now proper newlines); excludes node_modules/, dist/, memory/. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 4.6
parent
00c483c2a2
commit
efa01b5f41
@@ -0,0 +1,160 @@
|
||||
function Section({ title, items }: { title: string; items: string[] }) {
|
||||
return (
|
||||
<div>
|
||||
<h2 className="text-xl font-semibold text-slate-200 mb-4 pb-2 border-b border-slate-800">
|
||||
{title}
|
||||
</h2>
|
||||
<ul className="space-y-2">
|
||||
{items.map((item) => (
|
||||
<li key={item} className="flex items-start gap-2 text-sm text-slate-400 leading-relaxed">
|
||||
<span className="mt-1 h-1.5 w-1.5 shrink-0 rounded-full bg-sky-500" />
|
||||
{item}
|
||||
</li>
|
||||
))}
|
||||
</ul>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
const SECTIONS = [
|
||||
{
|
||||
title: 'Device Management',
|
||||
items: [
|
||||
'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',
|
||||
],
|
||||
},
|
||||
{
|
||||
title: 'Discovery',
|
||||
items: [
|
||||
'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',
|
||||
],
|
||||
},
|
||||
{
|
||||
title: 'Supported Drivers',
|
||||
items: [
|
||||
'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',
|
||||
],
|
||||
},
|
||||
{
|
||||
title: 'Networking & Inventory',
|
||||
items: [
|
||||
'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',
|
||||
],
|
||||
},
|
||||
{
|
||||
title: 'Configuration Management & Drift',
|
||||
items: [
|
||||
'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',
|
||||
],
|
||||
},
|
||||
{
|
||||
title: 'Scheduled Operations',
|
||||
items: [
|
||||
'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',
|
||||
],
|
||||
},
|
||||
{
|
||||
title: 'Monitoring & Health',
|
||||
items: [
|
||||
'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)',
|
||||
],
|
||||
},
|
||||
{
|
||||
title: 'Security Integrations',
|
||||
items: [
|
||||
'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',
|
||||
],
|
||||
},
|
||||
{
|
||||
title: 'DNS Management',
|
||||
items: [
|
||||
'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',
|
||||
],
|
||||
},
|
||||
{
|
||||
title: 'Access Control (RBAC)',
|
||||
items: [
|
||||
'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',
|
||||
],
|
||||
},
|
||||
{
|
||||
title: 'NetBox Sync',
|
||||
items: [
|
||||
'Pushes vendor, model, OS version, status to NetBox dcim.devices',
|
||||
'Syncs interfaces, IP addresses, prefixes, VLANs',
|
||||
'VM interfaces and disks for Proxmox hosts',
|
||||
],
|
||||
},
|
||||
{
|
||||
title: 'Developer Experience',
|
||||
items: [
|
||||
'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',
|
||||
],
|
||||
},
|
||||
]
|
||||
|
||||
export default function Features() {
|
||||
return (
|
||||
<div className="py-16 md:py-24">
|
||||
<div className="max-w-7xl mx-auto px-6">
|
||||
<div className="mb-16">
|
||||
<h1 className="text-4xl md:text-5xl font-bold text-slate-100 mb-4">Features</h1>
|
||||
<p className="text-base text-slate-400 leading-relaxed max-w-xl">
|
||||
Complete reference for all netOrk capabilities.
|
||||
</p>
|
||||
</div>
|
||||
<div className="grid md:grid-cols-2 gap-12">
|
||||
{SECTIONS.map((s) => (
|
||||
<Section key={s.title} title={s.title} items={s.items} />
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
Reference in New Issue
Block a user