Data we collect
How ControlDeck stores and uses information across the dashboard and Discord bot.
Transparency
Identity & sessions
-
Sign-inDiscord account basicsWhen you log in with Discord (scopes: identify, guilds, guilds.members.read) we store your Discord ID, username, and avatar hash in your session. Actions you take record your ID and name for accountability.
-
GuildsServer snapshot & permissionsWe fetch your guild list (ID, name, icon, owner flag, permissions, whether the bot is installed) and keep it in your session. The database stores guild ID/name/icon/owner ID/bot presence so the panel stays in sync, and your role IDs for a guild are cached in your session for up to five minutes to check access.
-
TokensSession-only OAuth dataDiscord access and refresh tokens stay in your session to read guild membership; they are not written to the database. Your selected guild ID and recent member role lookups also live in the session.
-
PreferencesCookies & local storageWe set the session cookie "appy_session" to keep you signed in and store your theme preference in the
controldeck_themecookie pluscontroldeck-themelocalStorage key. No advertising or tracking cookies are added.
Server configuration & forms
-
Guild dataMetadata for your serversFor each guild we store its ID, name, icon, whether the bot is present, and (when applicable) the owner’s Discord ID, plus timestamps to keep the panel aligned with Discord.
-
SettingsBot & reviewer configurationPer guild we keep channel IDs for logging, apply, and application deliveries, the stored apply message ID, and admin/reviewer role IDs. Bot tasks (such as posting an apply message) are queued with the guild ID and related payload.
-
FormsForm definitionsWe store form names, descriptions, active state, reviewer requirements, question text with options/order/required flags, DM templates for welcome/accept/reject messages, cooldown and inactivity settings, decision role mappings, and who created the form.
-
SelectionsRemembering choicesWhen a user picks a specific form from the apply dropdown, we store their Discord ID, guild ID, and chosen form in the selection table so the bot can reuse it.
Applications & moderation
-
ApplicantsApplication lifecycleWhen someone applies we record their Discord ID and username, the form/guild IDs, status, start and completion times, and total duration. Session records track which question they are on, and each answer stores the question ID, the text they sent or option they chose, timestamps for asked/answered, and response time in seconds.
-
ReviewsStaff actionsReviewer votes, tags, and private notes include the reviewer’s Discord ID and name, the decision or note text, and timestamps. Tag definitions are stored per guild and mapped to each application.
-
RestrictionsBans & cooldownsRestriction entries track Discord user IDs, ban flags, reasons, optional expiry times, cooldown seconds, and which staff member set them. Application events record accepted/rejected outcomes, and queued bot tasks keep payloads (such as channel IDs) to deliver messages.
-
NotificationsWhat we send outIf enabled, we post application summaries and logs to your chosen Discord channels (IDs stored in settings) and DM applicants using the templates you configure. Those messages include IDs, names, decisions, and durations relevant to the application.
Logging, limits, and retention
-
AuditAction trailAudit entries capture the actor’s Discord ID and name, guild ID, action name, target type/ID, optional metadata JSON, and timestamp. The IP address column exists but is not populated by this app.
-
Rate limitsAbuse protectionWeb POST limits store SHA-256 hashes of keys derived from your IP (and, for some actions like voting, your user ID); raw IPs are not saved in the database. The Discord bot uses in-memory per-user limits for interactions and DMs.
-
ErrorsOperational loggingApplication errors are written to
storage/logs/app.logwith timestamps and stack traces that may reference IDs or form names involved in the failure. Host-level access logs (outside this app) may record request IPs. -
RetentionControl of your dataData stays until you remove it in the dashboard. Deleting forms, questions, applications, or restrictions deletes their related records via database cascading. Logging out clears OAuth tokens and session data; clearing browser storage removes the theme preference.
Quick facts
- Session cookie: appy_session
- Theme keys:
controldeck_theme(cookie) andcontroldeck-theme(localStorage). - OAuth scopes: identify, guilds, guilds.members.read.
- Bot intents: Guilds, DirectMessages, and MessageContent to deliver and read application DMs.
- Data control: Delete items in the panel (or remove the bot) to stop collection for a guild.