from __future__ import annotations from ..components import _code_window from ..html_utils import SafeHtml, escape, trusted def _public_home_hero(*, suffix: str, demo_update_url: str) -> SafeHtml: return trusted(f"""

Dynamic DNS for home routers.

{escape(demo_update_url)}

KarlDNS gives you a generated DynDNS hostname under {escape(suffix)}. Add the private update URL to your router, or use it from a script.

Manual updates
""") def _setup_flow_section(*, create_demo: str, create_demo_command: str) -> SafeHtml: return trusted(f"""

How it works

No account needed.

Create a hostname, save the private values, register it, done.

  1. CreateRandom hostname and private links.
  2. SaveCopy the secrets while they are shown.
  3. RegisterActivate the hostname when you are ready.
  4. UpdateRouter, cron, or CNAME can use it.
{_code_window( create_demo, copy_label="update example", class_name="mt-4", copy_value=create_demo_command, )}
""") def _manual_updates_section(*, manual_demo: str) -> SafeHtml: return trusted(f"""

Update from a router or script.

Works with FRITZ!Box, curl, cron, Home Assistant, OpenWrt, pfSense, OPNsense, UniFi, MikroTik, and custom tools.

{_code_window(manual_demo, copy_label="manual update examples", class_name="manual-code text-start mt-4")}
""")