From be72fa60ac9a13f15b453c3eb5cb6c86d9767883 Mon Sep 17 00:00:00 2001 From: StasonJatham Date: Wed, 20 May 2026 19:42:00 +0200 Subject: [PATCH] Polish UI toward Ollama style --- router_dyndns/ddns.py | 73 +++++++++++++++++++++++++++++++++---------- 1 file changed, 56 insertions(+), 17 deletions(-) diff --git a/router_dyndns/ddns.py b/router_dyndns/ddns.py index ea65936..89fe939 100644 --- a/router_dyndns/ddns.py +++ b/router_dyndns/ddns.py @@ -642,6 +642,7 @@ def _render_public_home( challenge: dict[str, str | None] | None = None, ) -> str: suffix = html.escape(settings.hostname_suffix or "your DynDNS domain") + demo_update_url = html.escape(f"{settings.public_base_url.rstrip('/')}/u/?myip=") created_html = _credentials_panel(service, created_account) message_html = _message_band(message) if message and not challenge else "" challenge_html = _custom_domain_flow(service, challenge, message) @@ -652,24 +653,33 @@ def _render_public_home( {_top_nav()}
-

FRITZ!Box compatible

-

DynDNS without signups.

-

Create a secure hostname under {suffix}. Use it directly, or point your own subdomain at it with a CNAME.

+ +

Dynamic DNS for FRITZ!Box and any router

+

The simplest way to keep a home IP updated.

+
+ {demo_update_url} +
+

Generate one secret update URL under {suffix}. Paste it into your router, script it with curl, or point your own subdomain at it with a CNAME.

{message_html} {created_html}
-
-
-
-

Free DynDNS hostname

-

Create your DynDNS target

-

Generate a random hostname, paste the update URL into your router, and keep the private status page. Your own DNS name can point to this hostname with a CNAME.

+
+
+
+

Create in one step

+

No account. No login.

+

The generated URL is the secret. FRITZ!Box replaces <ipaddr> and calls it when your public IP changes.

+
+
+
+

Update from anything that can send GET.

+

Use FRITZ!Box placeholders, curl, cron, Home Assistant, OpenWrt, pfSense, OPNsense, UniFi, MikroTik, or your own automation.

+
+
+ # explicit IPv4 + curl -sS 'https://ddns.example.net/u/<secret>?myip=203.0.113.10' + # source IP fallback + curl -sS 'https://ddns.example.net/u/<secret>' +
+
+
{challenge_html}