OpenMFA gitea.milesward.dev/mward4/openmfa:latest https://gitea.milesward.dev/mward4/-/packages/container/openmfa bridge sh false https://gitea.milesward.dev/mward4/OpenMFA/issues https://gitea.milesward.dev/mward4/OpenMFA Self-hosted TOTP authenticator with live delivery to Discord, Slack or Telegram. Add accounts by uploading a QR code, scanning with the camera, pasting an otpauth:// link, or importing a Google Authenticator export (one export QR carries many accounts; you get a checklist, and duplicates are detected). The web UI lists every account behind its service mark, the way Google or Microsoft Authenticator does. Codes stay covered until you reveal one, and Settings -> Log records every reveal and sign-in with who and from where. (In bridge networking the address is Docker's gateway; use a reverse proxy or host/br0 networking to see real LAN addresses.) The distinctive part: each account keeps ONE message in your chosen channel, rewritten in place every time the code rolls. Three accounts means three live tiles that keep themselves current. Codes are posted as copyable text; on Discord a rendered WebP tile is attached as well. Pick the platform during first-run setup or later in Settings. Discord needs only a webhook URL. Slack needs a bot token (its webhooks can't edit messages). Telegram needs a bot token, and the app detects your chat ID for you. SECURITY NOTE: anyone who can read that channel can read these codes, which is most of the point of a second factor. Use a private channel only you are in, and treat the webhook URL or bot token as a secret. TOTP secrets are encrypted at rest with XChaCha20-Poly1305. Tools:Utilities Security: http://[IP]:[PORT:8720]/ https://gitea.milesward.dev/mward4/OpenMFA/raw/branch/main/docs/brand/icon-256.png One of: a Discord incoming-webhook URL; a Slack app with the chat:write bot scope plus a channel ID; or a Telegram bot token from @BotFather. All can be added after install from Settings → Delivery. 8720 /mnt/user/appdata/openmfa info,openmfa=info