Admin Console (Administrator Console)

Users with the administrator role find an Administration section in the sidebar (the address /dashboard/admin).


1. How the administrator role works

  • First registration: The very first user who registers in a freshly installed database is automatically promoted to main administrator.
  • Locking the gate: The automatic promotion happens only once – after that it is locked permanently. Further administrators can be appointed only from the command line (CLI/RPC) or from the administration, and only an existing administrator can change the role.

2. Promoting and demoting an administrator (CLI / RPC)

In the production Docker container:

# Promote a user to Administrator
docker compose exec app bin/tymeslot rpc 'Tymeslot.Release.promote_admin("user@yourdomain.com")'

# Remove administrator rights
docker compose exec app bin/tymeslot rpc 'Tymeslot.Release.demote_admin("user@yourdomain.com")'

When running from a local development environment:

mix tymeslot.promote_admin user@yourdomain.com
mix tymeslot.demote_admin user@yourdomain.com

3. Administration features

Application settings

The settings are divided into tabs:

  • General: Allowing registration, the maximum size of background images and videos, payments for meetings, the recipient of notifications for administrators and an information banner (a message at the top of the application, the sign-in pages or the booking pages, with translations and a custom color).
  • General – Booking attachments: Settings for the attachments a booker can add on the booking page for meeting types where the host has switched them on:
    • Allowed file types: csv, docx, jpeg, jpg, md, ods, odt, pdf, png, pptx, svg, txt, webp, xlsx, zip (SVG is off by default). When you deselect every type, attachments are switched off for the whole installation.
    • Max size per file: 10 MB by default, at most 100 MB.
    • Max files per booking: 3 by default, at most 10.
    • The content of each file is checked against its type, so a renamed file is refused. Files are not scanned by an antivirus.
  • Authentication: Password authentication and signing in via Google, GitHub, Microsoft and generic OIDC; bot protection separately for registration and for bookings (off / Google reCAPTCHA v3 / Cloudflare Turnstile).
  • Email: Email branding – logo, brand name and color.
  • Localization: The fallback language of the dashboard and the booking page, chosen from all supported languages (English, Czech, German, French, Italian, Ukrainian, Polish and Brazilian Portuguese).
  • Audit log: The retention period of events (90 days by default) and the tracked categories.
  • In LockMyCal Cloud, additionally Plans – the limits of connected calendars for the individual plans.

Error tracking

LockMyCal stores unexpected errors, process crashes and failed background jobs in the application's database – nothing is sent to third parties. The feature is on by default and is switched off with the ERROR_TRACKING_ENABLED variable (Environment Variables).

  • What is stored: the error's type, message and stack trace and the context it happened in (the user, the request, the action in the interface or the background job). Credentials, tokens, cookies and email addresses are redacted before anything is written, and the cancel and reschedule links are masked in stored paths.
  • How long: an error that doesn't recur for 30 days is marked resolved, and 30 days after that it is deleted together with its occurrences. For an error that keeps happening, the newest 50 occurrences older than 30 days are kept and at most 1000 within 30 days; at most 10 occurrences of one error are stored per minute.
  • Email alerts: when ADMIN_ALERTS_ENABLED is on and ADMIN_ALERT_EMAIL is set, the administrator gets an email about a new or returning error. New errors that arrive in quick succession are rolled into one message per hour, and info-severity alerts come in a daily digest at 07:00 UTC. The subject has the form “[SEVERITY] LockMyCal: …” (named after the instance's APP_NAME).
  • After it is switched off, errors are still logged but no longer stored or reported; what was stored earlier is deleted on the schedule above.

Users

A list of all registered users with search and pagination (20 / 50 / 100 rows), the country according to the Stripe account and actions:

  • Promote / demote the administrator role.
  • Disable / enable the account: A disabled user is immediately signed out of all sessions and can't sign in even via Google, GitHub or OIDC.
  • Delete the account together with all its data.

Audit log

Records of sign-ins, sessions, account lockouts, password changes, account deletions, administrator actions and payments. They can be filtered by type or whole category, user and date; the listing is paginated.