My App
DNS Panel

DNS Panel

A Next.js panel for managing a Technitium DNS Server, with per-zone permissions, passkey login, and an audit log.

DNS Panel is a Next.js 16 panel for managing a Technitium DNS Server. Multiple panel users share a single central Technitium API token, while per-zone access control happens inside the panel itself.

What it does

  • Sign in via passkey (WebAuthn) or password. Passkeys are registered per user inside the panel; a password login is also available.
  • User management. Create panel users and toggle each user's role between admin and user, with guards against self-demotion and removing the last admin.
  • Per-zone permissions as a 4-level ladder: nonevieweditfull (view / edit / delete).
  • Zones & records viewed and edited through the Technitium API. Record names are entered relativetest instead of test.example.com, @ for the zone apex.
  • Audit log of all security-relevant actions, plus a DNS query log.
  • Bilingual (German / English), switchable per user.

How access works

Communication with Technitium runs through one central, non-expiring API token. The panel does not give each user their own Technitium credentials. Instead, per-zone access control lives in the panel's database (the zone_permissions table):

  • Admins see all zones, manage users, toggle roles, and set the zone permission per user.
  • Users only see the zones they are authorized for; records can be viewed, added, changed, or deleted depending on their permission level.

Tech stack

  • Next.js 16 (App Router), React 19, TypeScript, Tailwind CSS
  • Drizzle ORM + PostgreSQL (users, passkeys, permissions, audit log)
  • @simplewebauthn/server for passkey registration and login, bcryptjs for password hashing

In this section

On this page