# DNS Management

Register and manage DNS hostnames for your bots

## Registered Hostnames

Hostname | Type | Target/IP | TTL | Status | Created | Actions
--- | --- | --- | --- | --- | --- | ---
Loading DNS records...

## DNS Configuration Help

### A Record

Maps a domain name to an IPv4 address. Use this to point your hostname directly to a server IP.

### AAAA Record

Maps a domain name to an IPv6 address. Similar to A record but for IPv6 connectivity.

### CNAME Record

Creates an alias from one domain to another. Useful for pointing subdomains to your main domain.

### SSL/TLS

SSL certificates are automatically provisioned for registered hostnames using Let's Encrypt.

## Register Hostname

Hostname *

Enter the full domain name you want to register

Record Type
TTL (seconds)
Target/IP Address *

Enter the IPv4 address to point to

Automatically provision SSL certificate

## Remove Hostname

Are you sure you want to remove ?

This will delete the DNS record and any associated SSL certificates. The hostname will no longer resolve.

## Edit DNS Record

function updateTargetPlaceholder() { const recordType = document.getElementById('record-type').value; const targetInput = document.getElementById('target-input'); const targetHelp = document.getElementById('target-help'); switch (recordType) { case 'A': targetInput.placeholder = '192.168.1.1'; targetHelp.textContent = 'Enter the IPv4 address to point to'; break; case 'AAAA': targetInput.placeholder = '2001:0db8:85a3:0000:0000:8a2e:0370:7334'; targetHelp.textContent = 'Enter the IPv6 address to point to'; break; case 'CNAME': targetInput.placeholder = 'target.example.com'; targetHelp.textContent = 'Enter the target domain name (without trailing dot)'; break; } } function confirmRemoveHostname(hostname) { document.getElementById('remove-hostname-name').textContent = hostname; const removeBtn = document.getElementById('confirm-remove-btn'); removeBtn.setAttribute('hx-vals', JSON.stringify({ hostname: hostname })); htmx.process(removeBtn); document.getElementById('remove-dns-modal').showModal(); } function editDnsRecord(hostname) { htmx.ajax('GET', `/api/dns/edit?hostname=${encodeURIComponent(hostname)}`, { target: '#edit-dns-form-container' }); document.getElementById('edit-dns-modal').showModal(); } function showToast(message) { const toast = document.createElement('div'); toast.textContent = message; toast.style.cssText = ` position: fixed; bottom: 24px; right: 24px; background: var(--surface); border: 1px solid var(--border); padding: 12px 20px; border-radius: 8px; box-shadow: 0 4px 12px rgba(0,0,0,0.15); z-index: 1000; `; document.body.appendChild(toast); setTimeout(() => toast.remove(), 3000); }