{ "views": [ { "id": "view_overview", "client_requirement": "client_is_nothing+", "items": [ { "type": "auth_wrapper", "client_requirement": "client_is_nothing=", "items": [ { "type": "auth_card", "items": [ { "type": "h1", "text": "Routlin Dashboard" }, { "type": "p", "text": "Log in to monitor and manage your network." }, { "type": "spacer" }, { "type": "button_primary", "action": "/view/view_log_in", "text": "Log In" } ] } ] }, { "type": "page_header", "client_requirement": "client_is_viewer+", "items": [ { "type": "h1", "text": "Overview" }, { "type": "p", "text": "Current network status at a glance." } ] }, { "type": "stat_card_grid", "client_requirement": "client_is_viewer+", "items": [ { "type": "stat_card", "label": "DHCP Leases", "value": "%STAT_LEASE_COUNT%", "sub": "active leases", "variant": "accent" }, { "type": "stat_card", "label": "Queries Blocked", "value": "%STAT_BLOCKED_TODAY%", "sub": "since midnight", "variant": "warning" }, { "type": "stat_card", "label": "Public IP", "value": "%STAT_PUBLIC_IP%", "sub": "%STAT_DDNS_HOSTNAME%" } ] }, { "type": "card", "label": "Network", "client_requirement": "client_is_viewer+", "items": [ { "type": "grid", "rows": [ { "cells": [ { "type": "grid_label", "text": "WAN Interface" }, { "type": "grid_value", "text": "%GENERAL_WAN_INTERFACE%" } ] }, { "cells": [ { "type": "grid_label", "text": "VLANs" }, { "type": "grid_value", "text": "%OVERVIEW_VLAN_NAMES%" } ] }, { "cells": [ { "type": "grid_label", "text": "Firewall" }, { "type": "grid_value", "text": "%STAT_NFTABLES_STATUS%" } ] }, { "cells": [ { "type": "grid_label", "text": "System Uptime" }, { "type": "grid_value", "text": "%STAT_UPTIME%" } ] } ] } ] }, { "type": "card", "label": "DNS Blocking", "client_requirement": "client_is_viewer+", "items": [ { "type": "grid", "rows": [ { "cells": [ { "type": "grid_label", "text": "Blocked Domains" }, { "type": "grid_value", "text": "%STAT_BLOCKED_DOMAINS%" } ] }, { "cells": [ { "type": "grid_label", "text": "Active Blocklists" }, { "type": "grid_value", "text": "%STAT_BLOCKLIST_COUNT% lists" } ] }, { "cells": [ { "type": "grid_label", "text": "Last Refreshed" }, { "type": "grid_value", "text": "%STAT_BL_LAST_UPDATE%" } ] }, { "cells": [ { "type": "grid_label", "text": "Active IP Bans" }, { "type": "grid_value", "text": "%STAT_BANNED_IP_COUNT% rules" } ] } ] } ] }, { "type": "card", "label": "DNS Caching", "client_requirement": "client_is_viewer+", "items": [ { "type": "grid", "rows": [ { "cells": [ { "type": "grid_label", "text": "Total Queries" }, { "type": "grid_value", "text": "%DNS_STAT_QUERIES%" } ] }, { "cells": [ { "type": "grid_label", "text": "Cache Hits" }, { "type": "grid_value", "text": "%DNS_STAT_HITS% (%DNS_STAT_HIT_RATE% hit rate)" } ] }, { "cells": [ { "type": "grid_label", "text": "Forwarded" }, { "type": "grid_value", "text": "%DNS_STAT_FORWARDED%" } ] }, { "cells": [ { "type": "grid_label", "text": "Cache Capacity" }, { "type": "grid_value", "text": "%DNS_CACHE_SIZE% entries" } ] }, { "cells": [ { "type": "grid_label", "text": "Authoritative Answers" }, { "type": "grid_value", "text": "%DNS_STAT_AUTH%" } ] }, { "cells": [ { "type": "grid_label", "text": "TCP Connections Peak" }, { "type": "grid_value", "text": "%DNS_STAT_TCP_PEAK%" } ] }, { "cells": [ { "type": "grid_label", "text": "DNS Providers" }, { "type": "grid_value", "text": "%OVERVIEW_UPSTREAM_SERVERS%" } ] } ] } ] } ] }, { "id": "view_ddns", "client_requirement": "client_is_viewer+", "items": [ { "type": "page_header", "items": [ { "type": "h1", "text": "DDNS" }, { "type": "p", "text": "Dynamic DNS provider status and last known IP update." } ] }, { "type": "stat_card_grid", "items": [ { "type": "stat_card", "label": "Current Public IP", "value": "%STAT_PUBLIC_IP%", "sub": "" }, { "type": "stat_card", "label": "Check Interval", "value": "%DDNS_TIMER_INTERVAL%", "sub": "next in %STAT_DDNS_NEXT_INTERVAL%" }, { "type": "stat_card", "label": "Providers", "value": "%STAT_DDNS_PROVIDER_COUNT%", "sub": "configured" } ] }, { "type": "table", "datasource": "config:ddns_providers", "empty_message": "No DDNS providers configured.", "columns": [ { "label": "Description", "field": "description" }, { "label": "Provider", "field": "provider" }, { "label": "Hostname(s)", "field": "hostnames", "render": "tag_list" }, { "label": "Status", "field": "enabled", "render": "badge_enabled_disabled" }, { "label": "Credentials", "field": "credentials" } ], "row_actions": [ { "client_requirement": "client_is_administrator+", "action": "/action/edit_ddns_provider", "method": "inline_edit", "text": "Edit", "class": "btn-ghost btn-sm", "fields": [ { "col": "description", "input_type": "text" }, { "col": "provider", "input_type": "select", "options": "%DDNS_PROVIDER_OPTIONS%" }, { "col": "hostnames", "input_type": "textarea" }, { "col": "enabled", "input_type": "checkbox" }, { "col": "credentials", "input_type": "credentials" } ] }, { "client_requirement": "client_is_administrator+", "action": "/action/delete_ddns_provider", "method": "post", "text": "Delete", "class": "btn-danger btn-sm" } ] }, { "type": "card", "label": "Add DDNS Account", "client_requirement": "client_is_administrator+", "items": [ { "type": "form", "action": "/action/add_ddns_provider", "method": "post", "items": [ { "type": "field", "label": "Description", "name": "description", "input_type": "text", "placeholder": "e.g. My DuckDNS Account" }, { "type": "field", "label": "Provider", "name": "provider", "input_type": "select", "options": "%DDNS_PROVIDER_OPTIONS%" }, { "type": "field", "label": "Hostnames (one per line)", "name": "hostnames", "input_type": "textarea", "placeholder": "e.g. myhome.duckdns.org" }, { "type": "credential_fields", "provider_select": "provider" }, { "type": "button_row", "items": [ { "type": "button_primary", "action": "/action/add_ddns_provider", "method": "post", "text": "Add Provider" }, { "type": "button_cancel", "text": "Cancel" } ] } ] } ] }, { "type": "card", "label": "DDNS Log", "client_requirement": "client_is_administrator+", "items": [ { "type": "button_row", "items": [ { "type": "button_danger", "action": "/action/clear_ddns_log", "method": "post", "text": "Clear Log" } ] }, { "type": "pre_block", "text": "%DDNS_LOG_TAIL%" } ] } ] }, { "id": "view_general", "client_requirement": "client_is_viewer+", "items": [ { "type": "page_header", "items": [ { "type": "h1", "text": "General Settings" }, { "type": "p", "text": "Core network and logging configuration from core.json." } ] }, { "type": "card", "label": "Logging", "client_requirement": "client_is_administrator+", "items": [ { "type": "form", "action": "/action/general_cardlogging_save", "method": "post", "items": [ { "type": "field", "label": "Max Log Size (KB)", "name": "log_max_kb", "input_type": "number", "value": "%GENERAL_LOG_MAX_KB%", "min": 64, "hint": "Log is cleared and restarted when it exceeds this size." }, { "type": "field", "label": "Errors Only", "name": "log_errors_only", "input_type": "checkbox", "value": "%GENERAL_LOG_ERRORS_ONLY%", "hint": "Only write error-level messages to the log." }, { "type": "field", "label": "Log DNS Queries", "name": "dnsmasq_log_queries", "input_type": "checkbox", "value": "%GENERAL_DNSMASQ_LOG_QUERIES%", "hint": "Log every DNS query. High volume \u2014 enable for debugging only." }, { "type": "button_row", "items": [ { "type": "button_primary", "action": "/action/general_cardlogging_save", "method": "post", "text": "Save" }, { "type": "button_cancel", "text": "Cancel" } ] } ] } ] }, { "type": "card", "label": "Pending Changes", "client_requirement": "client_is_administrator+", "items": [ { "type": "form", "action": "/action/general_cardpendingchanges_save", "method": "post", "items": [ { "type": "field", "label": "Apply on Save", "name": "apply_on_save", "input_type": "checkbox", "value": "%GENERAL_APPLY_ON_SAVE%", "hint": "When enabled, saved changes are queued immediately. When disabled, changes accumulate here until you click Apply Now." }, { "type": "button_row", "items": [ { "type": "button_primary", "action": "/action/general_cardpendingchanges_save", "method": "post", "text": "Save" }, { "type": "button_cancel", "text": "Cancel" } ] } ] }, { "type": "raw_html", "html": "%PENDING_CHANGES_HTML%" } ] } ] }, { "id": "view_network_interfaces", "client_requirement": "client_is_administrator+", "items": [ { "type": "page_header", "items": [ { "type": "h1", "text": "Network Interfaces" }, { "type": "p", "text": "WAN/LAN interface assignments and per-interface settings." } ] }, { "type": "card", "label": "Network Interfaces", "client_requirement": "client_is_administrator+", "items": [ { "type": "form", "action": "/action/networkinterfaces_cardnetworkinterface_save", "method": "post", "items": [ { "type": "field", "label": "WAN Interface", "name": "wan_interface", "input_type": "interface_picker", "value": "%GENERAL_WAN_INTERFACE%", "data": "%NETWORK_INTERFACE_DATA_JSON%" }, { "type": "field", "label": "LAN Interface", "name": "lan_interface", "input_type": "interface_picker", "value": "%GENERAL_LAN_INTERFACE%", "data": "%NETWORK_INTERFACE_DATA_JSON%" }, { "type": "button_row", "items": [ { "type": "button_primary", "action": "/action/networkinterfaces_cardnetworkinterface_save", "method": "post", "text": "Save" }, { "type": "button_cancel", "text": "Cancel" } ] } ] } ] }, { "type": "card", "id": "iface-config-card", "label": "Interface Configuration", "hidden": true, "client_requirement": "client_is_administrator+", "items": [ { "type": "form", "action": "/action/networkinterfaces_cardinterfaceconfiguration_apply", "method": "post", "items": [ { "type": "hidden", "name": "original_mtu", "value": "" }, { "type": "hidden", "name": "original_mac", "value": "" }, { "type": "field_row", "cols": 3, "items": [ { "type": "field", "label": "Interface", "name": "iface", "input_type": "text", "readonly": true, "value": "" }, { "type": "field", "label": "MTU", "name": "mtu", "input_type": "select", "value": "", "options": [ { "label": "576", "value": "576" }, { "label": "1280", "value": "1280" }, { "label": "1492", "value": "1492" }, { "label": "1500", "value": "1500" }, { "label": "4096", "value": "4096" }, { "label": "9000", "value": "9000" } ] }, { "type": "field", "label": "MAC Address", "name": "mac", "input_type": "text", "validate": "mac", "value": "" } ] }, { "type": "button_row", "items": [ { "type": "button_primary", "action": "/action/networkinterfaces_cardinterfaceconfiguration_apply", "method": "post", "text": "Apply" }, { "type": "button_secondary", "action": "#", "text": "Cancel", "class": "iface-config-cancel" } ] } ] } ] } ] }, { "id": "view_upstream_dns", "client_requirement": "client_is_administrator+", "items": [ { "type": "page_header", "items": [ { "type": "h1", "text": "Upstream DNS" }, { "type": "p", "text": "Upstream resolvers and caching behaviour for dnsmasq." } ] }, { "type": "card", "label": "Upstream DNS", "client_requirement": "client_is_administrator+", "items": [ { "type": "form", "action": "/action/upstreamdns_cardupstreamdns_save", "method": "post", "items": [ { "type": "field", "label": "Strict Order", "name": "strict_order", "input_type": "checkbox", "value": "%DNS_STRICT_ORDER%", "hint": "Query DNS providers in list order rather than in parallel." }, { "type": "field", "label": "Cache Size", "name": "cache_size", "input_type": "number", "value": "%DNS_CACHE_SIZE%", "min": 0, "hint": "Max DNS responses to cache per instance. Set to 0 to disable caching." }, { "type": "editable_list", "label": "DNS Providers", "name": "upstream_servers", "item_placeholder": "e.g. 1.1.1.1", "add_label": "Add Provider", "validate": "ip", "hint": "DNS resolvers queried for external hostnames. Supports IPv4 and IPv6.", "items": "%DNS_UPSTREAM_SERVERS_JSON%" }, { "type": "button_row", "items": [ { "type": "button_primary", "action": "/action/upstreamdns_cardupstreamdns_save", "method": "post", "text": "Save" }, { "type": "button_cancel", "text": "Cancel" } ] } ] } ] } ] }, { "id": "view_banned_ips", "client_requirement": "client_is_viewer+", "items": [ { "type": "page_header", "items": [ { "type": "h1", "text": "Banned IPs" }, { "type": "p", "text": "IPs and ranges blocked in both directions at the nftables firewall." } ] }, { "type": "info_bar", "variant": "info", "text": "Supports single IPs, CIDR (94.130.0.0/16), wildcards (94.130.*.*), and ranges (94.130.52.1-20). IPv4 and IPv6 are both supported." }, { "type": "table", "datasource": "config:banned_ips", "empty_message": "No IP bans configured.", "columns": [ { "label": "Description", "field": "description" }, { "label": "IP / Range", "field": "ip", "class": "col-mono" }, { "label": "Status", "field": "enabled", "render": "badge_enabled_disabled" } ], "row_actions": [ { "client_requirement": "client_is_administrator+", "action": "/action/edit_banned_ip", "method": "inline_edit", "text": "Edit", "class": "btn-ghost btn-sm", "fields": [ { "col": "description", "input_type": "text" }, { "col": "ip", "input_type": "text" }, { "col": "enabled", "input_type": "checkbox" } ] }, { "client_requirement": "client_is_administrator+", "action": "/action/delete_banned_ip", "method": "post", "text": "Delete", "class": "btn-danger btn-sm" } ] }, { "type": "card", "id": "add-form", "label": "Add Banned IP", "client_requirement": "client_is_administrator+", "items": [ { "type": "form", "action": "/action/add_banned_ip", "method": "post", "items": [ { "type": "field", "label": "Description", "name": "description", "input_type": "text", "placeholder": "e.g. Bad actor", "hint": "Optional label for this entry." }, { "type": "field", "label": "IP / Range", "name": "ip", "input_type": "text", "placeholder": "e.g. 1.2.3.4 or 1.2.3.0/24" }, { "type": "button_row", "items": [ { "type": "button_primary", "action": "/action/add_banned_ip", "method": "post", "text": "Add Banned IP" }, { "type": "button_cancel", "text": "Cancel" } ] } ] } ] } ] }, { "id": "view_host_overrides", "client_requirement": "client_is_viewer+", "items": [ { "type": "page_header", "items": [ { "type": "h1", "text": "Host Overrides" }, { "type": "p", "text": "Force a hostname to resolve to a specific internal IP." } ] }, { "type": "table", "datasource": "config:host_overrides", "empty_message": "No host overrides configured.", "columns": [ { "label": "Description", "field": "description" }, { "label": "Hostname", "field": "host", "class": "col-mono" }, { "label": "Resolves To", "field": "ip", "class": "col-mono" }, { "label": "Status", "field": "enabled", "render": "badge_enabled_disabled" } ], "row_actions": [ { "client_requirement": "client_is_administrator+", "action": "/action/edit_host_override", "method": "inline_edit", "text": "Edit", "class": "btn-ghost btn-sm", "fields": [ { "col": "description", "input_type": "text" }, { "col": "host", "input_type": "text", "validate": "domainname" }, { "col": "ip", "input_type": "text", "validate": "ip" }, { "col": "enabled", "input_type": "checkbox" } ] }, { "client_requirement": "client_is_administrator+", "action": "/action/delete_host_override", "method": "post", "text": "Delete", "class": "btn-danger btn-sm" } ] }, { "type": "card", "id": "add-form", "label": "Add Host Override", "client_requirement": "client_is_administrator+", "items": [ { "type": "form", "action": "/action/add_host_override", "method": "post", "items": [ { "type": "field", "label": "Description", "name": "description", "input_type": "text", "placeholder": "e.g. Local server" }, { "type": "field", "label": "Hostname", "name": "host", "input_type": "text", "validate": "domainname", "placeholder": "e.g. server.home.local" }, { "type": "field", "label": "Resolves To", "name": "ip", "input_type": "text", "validate": "ip", "placeholder": "e.g. 192.168.1.100" }, { "type": "button_row", "items": [ { "type": "button_primary", "action": "/action/add_host_override", "method": "post", "text": "Add Host Override" }, { "type": "button_cancel", "text": "Cancel" } ] } ] } ] } ] }, { "id": "view_dns_server", "client_requirement": "client_is_viewer+", "items": [ { "type": "page_header", "items": [ { "type": "h1", "text": "DNS Blocklists" }, { "type": "p", "text": "DNS level blocking via dnsmasq." } ] }, { "type": "table", "datasource": "config:blocklists", "empty_message": "No blocklists configured.", "columns": [ { "label": "Name", "field": "name" }, { "label": "Description", "field": "description" }, { "label": "Format", "field": "format", "class": "col-mono" }, { "label": "Source URL", "field": "url", "class": "col-mono" } ], "row_actions": [ { "client_requirement": "client_is_administrator+", "action": "/action/dnsblocklists_tableblocklist_rowedit", "method": "inline_edit", "text": "Edit", "class": "btn-ghost btn-sm", "fields": [ { "col": "name", "input_type": "text", "validate": "dashname" }, { "col": "description", "input_type": "text" }, { "col": "format", "input_type": "select", "options": "%BLOCKLIST_FORMAT_OPTIONS%" }, { "col": "url", "input_type": "text", "validate": "url" } ] }, { "client_requirement": "client_is_administrator+", "action": "/action/dnsblocklists_tableblocklists_rowdelete", "method": "post", "text": "Delete", "class": "btn-danger btn-sm" } ] }, { "type": "card", "id": "add-form", "label": "Add Blocklist", "client_requirement": "client_is_administrator+", "items": [ { "type": "form", "action": "/action/dnsblocklists_cardaddblocklist_add", "method": "post", "items": [ { "type": "field", "label": "Name", "name": "name", "input_type": "text", "validate": "dashname", "placeholder": "e.g. steven-black" }, { "type": "field", "label": "Description", "name": "description", "input_type": "text", "placeholder": "e.g. Steven Black (ads, malware, trackers)" }, { "type": "field", "label": "Format", "name": "format", "input_type": "select", "options": "%BLOCKLIST_FORMAT_OPTIONS%" }, { "type": "field", "label": "Source URL", "name": "url", "input_type": "text", "validate": "url", "placeholder": "https://..." }, { "type": "button_row", "items": [ { "type": "button_primary", "action": "/action/dnsblocklists_cardaddblocklist_add", "method": "post", "text": "Add Blocklist" }, { "type": "button_cancel", "text": "Cancel" } ] } ] } ] }, { "type": "card", "label": "Blocklist Refresh", "client_requirement": "client_is_administrator+", "items": [ { "type": "raw_html", "html": "%BLOCKLIST_STATS_HTML%" }, { "type": "raw_html", "html": "