Looking for what changed recently (people, AI assistants and scripts)? The complete commit history is available as a short plain-text list at /commits.txt (also as JSON), with the newest 25 commits at the very top. It is the same data as the Commit History section further down this page.
Last updated: 2026-09-14
Everything on this page is public and doesn't require a Discord login — it exists so anyone (a server owner, a member, or an automated reader) can check Inkwell's actual behavior and access model without having to trust a summary. It covers the cross-server Trust Network feature, what Inkwell can technically see via Discord, who on a server's own staff can see what through the dashboard, and a full, unfiltered commit history of both repositories that make up Inkwell.
🔒 Trust Network
Trust Network is an opt-in cross-server feature — a server has to explicitly turn it on to file or look up anything. It is not enabled by default, and a server that never opts in is entirely unaffected by it.
What a report contains: the reported Discord user's ID, a category (scam, raid, harassment, cheating/exploiting, ban evasion, impersonation, doxxing, minor safety, boosting/RMT, rule violation, and several game/community-specific categories, or "other"), a free-text reason written by a moderator, and which moderator filed it. It does not reveal which server filed it to anyone looking the report up.
Who can see it: only staff of other servers that have also opted in, via a manual lookup — it is never automatic and never triggers a kick/ban/restriction on its own.
Retention — reports expire automatically after 1 year. This wasn't always true — a report used to be retained indefinitely; automatic expiry started on 2026-09-10, so this is the point going forward, not a retroactive cleanup of everything ever filed. A server can still retract its own report earlier than that at any time.
Moderation, bans, and auto-suspension
Trust Network is actively moderated, not a free-for-all — by both bot administrators directly and an automated abuse-detection system:
Manual bans: a bot administrator can ban either a specific Discord user or an entire server from the Trust Network feature itself (not from Discord, and not from using Inkwell otherwise) — for filing bad-faith or abusive reports. This is a separate, stricter list from expiring reports above; a ban does not expire on its own.
Automated suspension (no human involved): filing 5 or more reports within a short window auto-suspends the filing moderator. It escalates to suspending the entire server instead if that moderator holds Administrator, or if 3 or more distinct moderators from the same server each trip their own suspension within 24 hours. A 3rd or later incident within 180 days makes a suspension permanent — no self-service reversal at that point.
One-time self-unban button: a server gets exactly one self-service reversal, ever, for a single non-permanent automatic suspension that originated from its own moderator activity — surfaced as a button in Inkwell's own Trust Network menu, no staff request needed. It does not apply to permanent suspensions or ones a bot administrator issued directly.
Filing requires tenure — lookup does not. A server must have had Inkwell installed for 30 days (under 10 members), 14 days (under 50), or 7 days (50+ members) before it can file a report — stops a throwaway server from being spun up just to spam reports. Premium reduces this to a flat 2 days, regardless of size, since a paying customer is a weak sybil-abuse candidate — this is the only effect Premium has anywhere in this system. It has no effect on the ban/suspension rules above; a Premium server that abuses the system gets suspended exactly the same as a free one.
Rate limiting: a moderator can only file a report so quickly (a few per 5 minutes) before being rejected outright, independent of the suspension system above.
Per-server watchlist: a server can separately keep its own private list of user IDs to watch for — this is not shared with other servers and isn't part of the cross-server report system above.
📡 Discord Gateway Events
This is the exact list of Discord "intents" (categories of events Discord will send the bot) Inkwell's code requests — nothing more, nothing implied. If it's not on this list, Inkwell cannot see it, structurally, regardless of what any feature claims to do.
Intent
What it's for
Guilds
Basic server/channel/role structure — required for almost anything a bot does.
GuildMembers
Member join/leave events, role changes — powers welcome messages, auto-role, leveling, anti-raid.
GuildMessages
Knowing a message was sent in a server (not its content by itself) — needed for auto-mod, XP, starboard, etc. to trigger at all.
MessageContent
The actual text of a message — used transiently by auto-mod filters and custom-command triggers. Not stored beyond what a ticket transcript or an explicitly logged incident needs (see the Privacy Policy).
DirectMessages
Lets the bot receive a reply in a DM it started (e.g. an application submitted over DM).
GuildModeration
Discord's own ban/audit-log events — lets Inkwell log a kick/ban done via Discord's native UI, not just its own commands.
GuildInvites
Powers Invite Tracking (who invited whom) — an opt-in feature.
GuildVoiceStates
Voice channel join/leave — powers Join-to-Create and voice XP.
GuildMessageReactions
Powers reaction roles, starboard, and polls.
Notably absent: GuildPresences — Inkwell does not request and cannot see anyone's online/idle/offline status or custom activity. This is a deliberate omission, not an oversight — nothing in Inkwell's feature set needs it.
🔐 Discord Server Permissions (OAuth)
Separate from the gateway intents above (what Inkwell can see), this is what Inkwell can do once it's in a server — the permission bitfield requested by the actual invite link, hardcoded into the dashboard's own source rather than left as an opaque Discord Developer Portal setting, so this table can never quietly drift out of sync with what's really requested.
Permission
What it's for
Kick Members
/kick.
Ban Members
/ban, and reading Discord's own ban list to log a native ban.
Moderate MembersTimeout
/timeout / /untimeout.
Manage Messages
/purge, and removing a ghost-pinged message's trace where applicable.
Manage Channels
Creating a ticket/interview channel with the right permission overwrites, /slowmode, restoring channels from a Server Backup, Join-to-Create voice channels.
Manage Roles
Auto-role, sticky roles, reaction roles, temporary roles//temp-role, granting a role on ticket/application accept, restoring roles from a Server Backup, and /lockdown (editing a channel's permission overwrites is gated by Manage Roles on Discord's side, not Manage Channels, even though it's channel-scoped). Inkwell refuses to grant/manage a role that itself has Administrator or another server-management permission (see isDangerousRole — enforced in code, not just policy) — a self-service or automated flow can never hand out more power than the person configuring it intended.
Manage Server
Reading the server's invite list for Invite Tracking (an opt-in feature) — Inkwell never edits any guild-level setting with this permission.
View Audit Log
Distinguishing a kick from someone leaving on their own, and attributing a native (non-Inkwell) kick/ban/timeout to the moderator who did it, for logging.
Change Nickname
Setting Inkwell's own nickname (Branding feature) — not for changing any member's nickname.
Connect
Join-to-Create needs to see/manage voice channels; Inkwell does not actually join or listen to voice audio.
Baseline permissions needed to post anything at all, including images (canvas cards, transcripts) and reaction-based features.
Notably absent: Manage Webhooks, Manage Nicknames, Administrator. Inkwell never creates or manages Discord's own native webhooks (the custom Webhooks feature is Inkwell's own separate HTTP system, unrelated to this Discord permission), never changes another member's nickname, and never requests blanket Administrator. Manage Server is requested, but only ever used to read the invite list (see the table above) — never to edit any guild-level setting. If a server's owner grants Inkwell's role Administrator manually anyway (a common but unnecessary habit for "trusted" bots), that's a choice made outside what Inkwell itself asks for.
⚙️ Dashboard Panel Permissions
A server owner can restrict which pages and tabs of this dashboard specific staff roles are allowed to open, via the Panel Permissions page — e.g. giving a support-team role access only to Tickets and Applications, without Premium/billing, Webhooks, or moderation settings. By default (nothing configured), anyone Discord itself recognizes as having Manage Server on a server can access everything for that server on the dashboard — Panel Permissions is how an owner narrows that down, not something that has to be set up before staff can be trusted with anything.
🛡️ Security History
Any commit fixing a genuine security-relevant issue (data exposure, denial-of-service, permission bypass, access-control bug — not general bugs or UX issues) gets a Security-Fix: line in its commit message. This section is generated by scanning the same live commit history below for that tag — it isn't a separate hand-maintained page, so it can't be quietly left out of date.
9/10/2026application review actions (accept/deny/hold/interview/claim) had no explicit permission check, relying only on implicit channel visibility, so a misconfigured review channel could let a non-staff member accept applications and trigger elevated role grantsBotc0a8bdbe
9/10/2026outbound webhook delivery was vulnerable to DNS rebinding, letting a malicious target bypass the private-IP/SSRF guard and reach internal network addressesBot483a3666
📜 Commit History
The source code itself stays private (to prevent it from simply being copied), but every commit ever made to either repository that makes up Inkwell is listed below in full — subject line, author, date and how many lines it added and removed, nothing more. This is proof of real, ongoing, single-project development, not a curated highlight reel.
Lists updated 2026-10-14 08:20 UTC. Page generated 2026-10-14 08:20 UTC. If these times look old, your tool may be showing a saved copy: ask for this address again with a throwaway ending such as ?fresh=12345.
f85cfc48Ask us: a reply after the team has been quiet for 30 minutes sends the person a Discord DM again (at least 5 minutes after the last one) instead of waiting out the hourly limitSirMittens · 10/13/2026+18−4
45f207deRevert "The dashboard moves to inkwellapp.pages.dev, a shorter address people can type"SirMittens · 10/13/2026+9−9
3cf0991aThe dashboard moves to inkwellapp.pages.dev, a shorter address people can typeSirMittens · 10/13/2026+9−9
668d5b5aAsk us: team replies keep mentions as readable names and GIF links as their direct media, so the dashboard can show themSirMittens · 10/13/2026+6−1
d56bc3d9Move the message content intent application doc to the Inkwell docs folderSirMittens · 10/13/2026+0−72
496b48a4Ask us: the bot sees when the team types in a question's ticket (typing events, support server only) and remembers it for a few secondsSirMittens · 10/12/2026+59−10
0cc0543dAsk us: claiming an Ask us ticket tells the person on their dashboard (a system message, an unread notification, and who is in the chat); letting go tells them someone else will pick it upSirMittens · 10/12/2026+72−4
d0eae204Ask us retention: a daily cleanup marks questions nobody touched for 30 days solved, deletes questions 30 days after they are solved, and deletes archived Ask us transcripts after 30 days; an erased qSirMittens · 10/12/2026+95−5
bbfd5204Ask us: every dashboard question opens as an ask-us ticket (Ask here tickets are staff-only until the person joins the server); closing the ticket solves the question and marking it solved closes the SirMittens · 10/12/2026+215−58
687384c3Ask us: Chat on Discord opens a normal ticket of the ask-us type (the bot opens it once the person is in the support server, or adds the question to a ticket they already have), replies are copied botSirMittens · 10/12/2026+214−59
00306d88Ask us desk, bot side: team replies typed in Discord are copied into the dashboard conversation (with one DM an hour to say a reply is ready), and joining the support server opens a waiting private chSirMittens · 10/11/2026+238−0
c8929a2cOnboarding nudges: a first one after about a day and a second a week in for servers with nothing configured, with dashboard and docs buttons; the welcome records where it was deliveredSirMittens · 10/11/2026+138−33
82153d09Onboarding: the welcome leads with picking a log channel and mentions /doctor; servers still without a log channel after three days get one reminderSirMittens · 10/11/2026+60−1
2393caa7A single log can be switched off while a catch-all channel keeps the rest: its row holds an off marker that the log lookup honoursSirMittens · 10/11/2026+9−5
c02556fcDeploy job calls the panel's per-daemon power routeSirMittens · 10/11/2026+1−1
b3e33ac6Deploy job restarts the bot on the new panel serverSirMittens · 10/11/2026+7−7
adaa89fcAnnouncement deliveries remember the owner so they get one messageSirMittens · 10/11/2026+20−0
69885004Maintenance mode table for the web panelSirMittens · 10/11/2026+17−0
a437f6d9Pin TypeScript 5.9 in the bot's own dependencies so the panel's ts-node startup keeps working when its image ships a newer, incompatible TypeScriptSirMittens · 10/11/2026+17−2
7a1b7ce5Admin tools migration: short explicit names for the delivery indexes (MySQL's 64-character limit)SirMittens · 10/11/2026+2−2
55dd2653Admin tools groundwork: announcements, premium reward and backup-job tables (with the delivery records), a Bot announcements log event, and a database dump script with encryption and verificationSirMittens · 10/11/2026+151−1
ccc1186bSafety backups: a job queue the bot works through for every server, labelled system backups that are free to restore (owner or administrators), kept off a server's own backup count, with expirySirMittens · 10/11/2026+366−11
3856ac03Custom log messages: any log entry the bot posts can use a saved message (Premium), with each field as a placeholder; empty fields and non-link buttons are dropped; files are always attachedSirMittens · 10/10/2026+161−13
77858922Message buttons: refuse timed-out members, a short per-person cooldown, no kick/ban/timeout from a button automation, and the audit log names the messageSirMittens · 10/10/2026+73−11
ccf8d322Buttons can run an automation: new 'a button is pressed' trigger, engine entry point for one named automation, and the button handler for itSirMittens · 10/10/2026+169−9
eb248796Buttons in saved messages can give, take or toggle a role, or send a private message; the bot answers them from the button's custom idSirMittens · 10/10/2026+178−4
11433546Migration: ticket and application panels can point at a saved message (template_id)SirMittens · 10/10/2026+17−0
7a452c4dCustomisable bot messages: a ticket's first message and the application confirm, accepted and denied messages can use a saved message (Premium), with testsSirMittens · 10/10/2026+319−22
c324da24Saved messages on the bot: automations and the welcome can send oneSirMittens · 10/10/2026+311−0
1e2728e6Migration: folders for saved messages (message_folders, embed_templates.folder_id and updated_at)SirMittens · 10/10/2026+33−0
b9d64632Edit with Inkwell: clearer context-menu name and reply, help mention, and a record of messages posted from the Embeds pageSirMittens · 10/10/2026+26−6
8e724730Automated tests: application DM flow and ticket intake, routing and staff tools (npm test)SirMittens · 10/10/2026+1050−1
5f1ff0aaTicket step-by-step intake: questions asked in the ticket channel with dropdowns, optional questions, rules and a time limit; popup kept for types that fit itSirMittens · 10/10/2026+612−35
effb50adApplication questions: rules (only ask a question if earlier answers match), branching in the DM flow, adaptive progress counterSirMittens · 10/9/2026+82−7
90232ecaApplication DM flow: confirm step, in-place questions with progress, dropdown and optional (Skip) questions, per-type time limit and confirm messageSirMittens · 10/9/2026+415−59
4b063e8cApplication logs: no decision embed in channels, fold into the review message, submitted log skipped in same channel, transcript file off by defaultSirMittens · 10/9/2026+55−26
637b6ed5Tell staff in a log channel when an application is dashboard-only, with a linkSirMittens · 10/9/2026+17−1
237fa593Review channel is optional: unset types use the Application submitted log channelSirMittens · 10/9/2026+6−4
586088e7Application review channel fallback: post to the log channel (or dashboard-only) instead of telling the applicant it's misconfiguredSirMittens · 10/9/2026+53−10
572f721bDecision messages: short summary + a 'View full transcript' button instead of pasting the answersSirMittens · 10/9/2026+21−40
95dbb274Say when application answers are shortened and where the full ones areSirMittens · 10/9/2026+10−4
51468607Fix: accept/deny transcript embeds failed on answers over 1024 charactersSirMittens · 10/9/2026+25−17
0e286557Clearer command descriptions in the picker (no renames)SirMittens · 10/9/2026+14−14
0b634707Consistent permission wording and error referencesSirMittens · 10/9/2026+41−31
88d0e9f9Command visibility: guild-only contexts by default, owner-only commands registered in the support server onlySirMittens · 10/9/2026+29−4
c9dd59deScheduler: no overlapping sweeps, named failure logs, throttled alerts, restart-proof backupsSirMittens · 10/9/2026+202−84
125bce34Moderation hardening: hierarchy checks, honest ban/kick failures, acknowledge before slow work; crypto transfer codesSirMittens · 10/9/2026+117−24
17d0e581Audit follow-ups: staff checks on ticket actions, claim sync with applications, safer decisions, DM flow retries, interview numbering/exemptionsSirMittens · 10/9/2026+479−151
87353f0fAudit fixes: acknowledge accept/deny and ticket close before slow work, block duplicate pending applications, keep long applications within Discord's embed limitSirMittens · 10/9/2026+83−19
80362609Open application interview tickets through the regular ticket flowSirMittens · 10/9/2026+308−156
d9f48efdKeep application interview tickets open on accept/deny and add a Close Ticket button to the decision noticeSirMittens · 10/9/2026+19−27
e4b167d8Defer the Apply button reply so slow lookups can't expire the interactionSirMittens · 10/7/2026+11−12
b2de1f8dSend the decision transcript to the applicationReviewed log channel instead of the review channelSir Mittens · 9/24/2026+16−6
3a071ed8Exempt regex custom command triggers from Auto-Mod's duplicate-message filter by defaultSir Mittens · 9/23/2026+49−3
f079b600Remove /inkwell setup entirely — all 16 sections now live on the dashboardSir Mittens · 9/1/2026+8−555
a4db165bMove Sticky Roles, Quarantine, Sticky Messages, Nickname Rotation, and Branding config to the dashboardSir Mittens · 9/1/2026+4−502
45808ecdMove Anti-Raid, Account Risk, Birthdays, and Stat Counters config to the dashboardSir Mittens · 9/1/2026+1−341
a2438fc3Remove Leveling, Starboard, JTC, and Invites from /inkwell setupSir Mittens · 9/1/2026+1−485
59c06d0eRemove /inkwell webhooks - migrated to the dashboard's new Webhooks pageSir Mittens · 9/1/2026+0−338
d5f51d92Remove /inkwell welcome - migrated to the dashboard's new Welcome pageSir Mittens · 9/1/2026+13−357
72f40f82Replace /embed with a message context-menu "Edit Embed" + Discord-to-web handoffSir Mittens · 9/1/2026+69−728
245f5d11Remove Custom Commands from /inkwell setup - migrated to the dashboardSir Mittens · 9/1/2026+0−165
9537011bFix auto-backup restart bug, add manual 3-day cooldown, prune after every createSir Mittens · 9/1/2026+22−14
71bc13adMove backup transfer-code generation into /inkwell toolsSir Mittens · 9/1/2026+42−7
f9334795Add /inkwell tools with Server Backup create/restore/redeemSir Mittens · 9/1/2026+194−1
73798a06Move /inkwell logs and /inkwell insights to the dashboardSir Mittens · 9/1/2026+1115−2240
cd89e601Allowlist ticket_open:/app_open: in wiring check — created by dashboard now, not bot codeSir Mittens · 9/1/2026+3−1
d66c7ec0Move Quick Setup presets from the Discord onboarding message to the dashboard's Overview pageSir Mittens · 9/1/2026+5−281
17b3db28Remove /inkwell tickets, /inkwell applications, and /apps queue — fully replaced by the dashboardSir Mittens · 9/1/2026+129−3351
08f3319cAdd bot_bans table and enforce it in interactionCreate — dashboard-managed server banSir Mittens · 8/31/2026+27−1
23240ff1Revert "Fully remove /inkwell automod — exempt roles/channels also moved to the dashboard"Sir Mittens · 8/30/2026+2−75
54a92dd4Fully remove /inkwell automod — exempt roles/channels also moved to the dashboardSir Mittens · 8/30/2026+75−2
4b414d2fFully remove /inkwell automod — exempt roles/channels also moved to the dashboardSir Mittens · 8/30/2026+2−123
45a0875aTrack premium revocations in a queryable table for the dashboard's activity feedSir Mittens · 8/30/2026+21−0
8537063cMove word/regex/spam/caps/mention/invite filters and escalation config to the web dashboardSir Mittens · 8/30/2026+13−727
29a6ba9fLink the web dashboard from the welcome message and /inkwell-help, update repo URLs to the new inkwell-group namespaceSir Mittens · 8/30/2026+5−3
982b4695Remove /inkwell premium and its Discord-side menus — replaced by the web dashboardSir Mittens · 8/30/2026+2−623
d0224898Add Delete button to premium code detail panel, with confirmationSir Mittens · 8/30/2026+58−1
ce3b2bd5Self-heal stale guild membership records, log per-event handler failures by nameSir Mittens · 8/29/2026+46−2
8e3e79acSupport multiple bot owners via BOT_OWNER_IDSSir Mittens · 8/29/2026+29−10
22fef205Consolidate premium into /inkwell premium, add owner-gated revoke with confirmationSir Mittens · 8/29/2026+271−74
8e7934afFix extra blank-line gap after a ticket panel's intro descriptionSir Mittens · 8/29/2026+1−1
32749a6cAdd per-type log channel picker directly to ticket/application type setupSir Mittens · 8/29/2026+137−8
4e4b4e49Add Reorder Types to ticket and application panel setupSir Mittens · 8/29/2026+234−2
00d3e52aRequire Manage Server on interview-ticket/thread management actionsSir Mittens · 8/29/2026+25−0
61c51451Fix CombinedPropertyError crash on ticket types with no emoji setSir Mittens · 8/29/2026+9−11
4844ed79Add configurable interview ticket category and channel name prefix per application typeSir Mittens · 8/29/2026+133−2
232dbfdaToggle Open/Close Thread button label, and fix Unknown interaction crash on /suggest and /bug-reportSir Mittens · 8/29/2026+83−52
d0e62badAdd staff Approve/Deny/Close controls, on-demand threads, and an open-suggestions listSir Mittens · 8/29/2026+456−6
d3fe5117Add application transcript format setting and per-application-type log channelsSir Mittens · 8/29/2026+218−39
9764e168Enrich application review log embeds with type, reason, and HTML transcript attachmentSir Mittens · 8/29/2026+24−0
4470243dExtend server backup/restore to cover ticket types, application types, and ticket panelsSir Mittens · 8/28/2026+184−8
bced90e1Add on-demand ticket alongside threads for application interviews, with in-channel management embeds for claim/note/close and reopen supportSir Mittens · 8/28/2026+368−32
30cdd131Add Unclaim button to ticketsSir Mittens · 8/26/2026+28−0
c61c4dcaAdd permanent ticket numbers, per-guild transcript format setting, and render emoji/media in HTML transcriptsSir Mittens · 8/26/2026+210−43
0ff405bcHide already-configured log events from the Add list, only Edit/Remove show themSir Mittens · 8/26/2026+20−4
708c4b67Add RP quality-of-life features: character names, server status announcer, rules gate; flesh out moderation lookup; fix dangerous-role gap in ApplicationsSir Mittens · 8/26/2026+595−47
b8bd7ee9Confirm DB backup pipeline is live and verified end-to-endSir Mittens · 8/26/2026+3−4
90f703ebLog DB backup setup and remaining manual GitLab stepsSir Mittens · 8/26/2026+8−0
7017d072Add real member growth tracking: /serverinfo 7d delta, new stat counter typeSir Mittens · 8/26/2026+87−10
286cdaf7Note competitive comparison chart published to wikiSir Mittens · 8/26/2026+2−0
937cfd6cAdd niche QoL round: slowmode auto-decay, ghost-ping detection, mod notes, sticky roles, ticket auto-close, new-member quarantine, /doctorSir Mittens · 8/26/2026+670−6
4f115420Design pass: standardize premium upsell wording, extend brand color to tickets/level/leaderboardsSir Mittens · 8/26/2026+17−13
6ede65c3Expand premium incentives: free-tier caps, auto weekly backups, faster social alerts, bot accent color, config templatesSir Mittens · 8/26/2026+278−9
353946dcSwitch slash command deployment from guild-scoped to globalSir Mittens · 8/26/2026+10−11
f1ef5c9aAdd optional human-challenge step to Verification Gate; remove dead Back button from /inkwell logs; track remaining structural gaps in TODOSir Mittens · 8/26/2026+74−8
54029ff2Add YouTube/Twitch social media alerts, folded into /inkwell setupSir Mittens · 8/26/2026+273−0
999a8769Add filler file to test git pull on serverSir Mittens · 8/26/2026+2−0
68cb3c45Remove dev-status restart notifications; route commit-deploy announcements through the log-channel systemSir Mittens · 8/26/2026+43−151
eff3aab2Remove README, docs now live in the wikiSir Mittens · 8/26/2026+0−145
c1b2fdffRemove unused .env.example, document DB env vars in READMESir Mittens · 8/26/2026+2−4
8d29d802Add root index.js entry shim for hosts expecting it; skip commit-announce silently outside a git checkoutSir Mittens · 8/26/2026+12−0
cd92f9c0Migrate persistence layer from JSON files to MySQL (Knex)Sir Mittens · 8/25/2026+3076−856
07d12d34Rename /docs to /inkwell-help (with support server link), add automated syntax/wiring checks + CISirMittens · 8/24/2026+180−4
b655f02cAdd /inkwell roles, remove /suggest-setup (redundant with /setup)SirMittens · 8/24/2026+185−158
e540aa0eAdd /inkwell applications, rename /inkwell log to /inkwell logs, remove /ticket-panel, /modlogs, /userinfo, and simplify /ticket-historySirMittens · 8/24/2026+501−358
9844e5deWelcome banner: status panel with Enable/Disable and Edit Channel, plus removing now-redundant standalone commandsSirMittens · 8/24/2026+190−160
be388866Consolidate ticket commands under /inkwell, add /inkwell welcome, and stop auto-posting the welcome banner to the system channelSirMittens · 8/24/2026+441−187
efc580c2Add more log events, fix a lockdown logging bug, and clean up a menu embed bugSirMittens · 8/23/2026+187−14
ead31004Polish the Inkwell menu: consistent Back button label, and describe each option upfrontSirMittens · 8/23/2026+9−4
41e6557cConsolidate logging, welcome banner, and user lookup under a single /inkwell commandSirMittens · 8/23/2026+585−148
407876ffSwitch ticket type editing to a dropdown, move staff applications to DMs, fix transcript embed displaySirMittens · 8/23/2026+237−141
9448a207Replace typing an id with clickable buttons when editing ticket typesSirMittens · 8/23/2026+77−44
eb95d0aeMake error messages specific to what actually failed, not genericSirMittens · 8/23/2026+48−3
d57e153aFix ticket/application crash when questions are edited mid-submissionSirMittens · 8/23/2026+16−8
f798cadfRaise ticket/application question length from 45 to 100 charactersSirMittens · 8/23/2026+20−17
dff642bdAdd custom embed builder (/embed create/edit/template) with live preview, fields, thumbnails, and reusable templates; add /docs command linking to the wikiSirMittens · 8/23/2026+578−0
863419a7Ask us: a reply from the team is announced by a short sound (on by default, with a switch to turn it off), a count in the tab title, and the unread check runs every 30 seconds instead of every 2 minutSirMittens · 10/13/2026+109−8
9a28e08eAsk us: a question only looks and refreshes like a live chat while the team is typing or has replied in the last 10 minutes; before that and after it goes quiet it is a plain question that refreshes sSirMittens · 10/13/2026+28−6
1d62e8beRevert "The dashboard moves to inkwellapp.pages.dev, a shorter address people can type; the Pages project is now named inkwellapp"SirMittens · 10/13/2026+24−24
0015a321The dashboard moves to inkwellapp.pages.dev, a shorter address people can type; the Pages project is now named inkwellappSirMittens · 10/13/2026+24−24
e8198d7aPhone layout: the top bar's logo is sized like the sidebar's, and pages leave room at the bottom so the Ask us button doesn't cover the last controlSirMittens · 10/13/2026+4−2
ea79cfe6Phone layout: below 900px a top bar with a menu button opens the sidebar as a drawer, pages get narrower padding, tables scroll sideways and the message editor's pickers stay on screenSirMittens · 10/13/2026+65−3
91de654cAsk us: messages show custom emoji, pictures, videos and GIFs (from Discord, Tenor and Giphy only) and clickable links instead of raw codesSirMittens · 10/13/2026+44−1
79af31b9Loading: the centred spinner is drawn at the top of the page, outside every other element, so an animating card or page can't carry it off-centre; every page-level load uses the same central spot and SirMittens · 10/12/2026+24−15
1a74370eLoading reads as one continuous spinner: the start-up screen, the page and each part use the same loader, which appears in the middle of the screen at once (same spot, ring in step, no fade) when it fSirMittens · 10/12/2026+83−45
3f27155cAsk us: a conversation shows who is typing to the person, and says nobody from the team has replied yet (with the real usual wait) until someone claims or replies; open conversations refresh every fewSirMittens · 10/12/2026+83−8
4bfce602One loading mark everywhere: the Inkwell logo with a spinning gold ring, centred in the space it loads (not a lock screen); when several parts of a page load at once only one ring spins, and the next SirMittens · 10/12/2026+208−63
22428e71Admin split into Admin (maintenance, Ask us availability, banned servers, Trust Network reports) and Premium Admin (stats, servers, activity, codes); popups centre on the screen again (the page animatSirMittens · 10/12/2026+730−571
744be7afAsk us: the page states the 30-day retention rule and people can delete their own questions (open tickets are closed first)SirMittens · 10/12/2026+96−4
54c25a97Ask us button: the same gold pill with a lit, raised surface, a soft halo that breathes now and then, a shine on hover, a tipping speech bubble, and a pulsing unread badge (reduced motion respected)SirMittens · 10/12/2026+27−6
d909efe4Ask us: the dashboard no longer posts to a forum; every question is opened as a ticket by the bot, and marking a question solved tells the person its ticket closes shortlySirMittens · 10/12/2026+18−50
c9903d04Ask us: Chat on Discord no longer needs a help channel (the bot opens a ticket), wording updatedSirMittens · 10/12/2026+22−36
7527f722Ask us: a Paused setting next to Available and Away, which stops new questions (refused by the server too) while open conversations keep working, with a heartfelt default note and an optional return tSirMittens · 10/12/2026+104−29
90b17043Ask us: a heartfelt default note while the team is away and no note was writtenSirMittens · 10/12/2026+11−5
fc9c9202Ask us availability: an Away switch on the Admin page (optional return time and note, ends by itself), shown on the page, the button and the first reply, plus an automatic running-behind note when a qSirMittens · 10/12/2026+248−11
0e83f5c5Ask us limits: loose for replies in a conversation (40 an hour), tight for new questions (6 an hour), and a message that says when to try again and that nothing is lostSirMittens · 10/12/2026+49−15
679019b3Ask us button: a small button at the bottom right of every page opens a compact panel with the question form, your questions and the conversation; it says Ask us (not chat), shows how long answers takSirMittens · 10/12/2026+249−9
058259d2Ask us: send the team a question from the dashboard (Ask here, or Chat on Discord in a private thread once they join the support server), read answers on the page, honest answer times, and a team inboSirMittens · 10/11/2026+968−0
ab7a2397Quick Setup: simple cards with a medallion, a short tick-list and the exact detail behind a toggle, each with its own accent colourSirMittens · 10/11/2026+109−137
503d909bQuick Setup: cards side by side with compact Trigger/Condition/Action chips and one legend, and the section starts openSirMittens · 10/11/2026+47−51
f4c38f60Quick Setup: starting-point cards come first, in the Automations flagship look, showing each rule as Trigger/Condition/Action with what's left off and what it uses; the channel is asked for only afterSirMittens · 10/11/2026+410−226
2eab6306Log channels: warn when the bot can't post in the channel that was just chosenSirMittens · 10/11/2026+82−2
2e30c78dAdmins can use the Admin page: server bans, premium grants and codes, and maintenance mode (the Users page stays owner-only)SirMittens · 10/11/2026+30−29
417cd7c8Let the log channels page's off marker through the channel id checkSirMittens · 10/11/2026+19−0
e167ffe5Log channels: with a catch-all, an unset log says it uses the default channel, and a single log can be switched offSirMittens · 10/11/2026+23−8
96e0b261Try smart placement for the dashboard functionsSirMittens · 10/11/2026+4−0
12aa4c2dMaintenance screen offers team sign in and sign outSirMittens · 10/11/2026+23−3
56b0b5c2Dashboard reads the VM database through the new Hyperdrive configSirMittens · 10/11/2026+1−1
e734a258Move announcement templates: say new home, mention the dashboard maintenance screen, soften the data promiseSirMittens · 10/11/2026+5−5
307c218aMaintenance countdown banner: clock, big digits, red and pulsing in the last minute; preview buttons for the countdown and the last-minute lookSirMittens · 10/11/2026+55−12
438e46e7Announcements: an owner of several servers gets one DM naming them all; their other servers are marked skippedSirMittens · 10/11/2026+95−19
f4bd73afWeb panel maintenance mode: owner switch on the Admin page with a 2/5/10/15 minute countdown (or an emergency start), a real server-side lock that lets the team through, a full-page screen with unsaveSirMittens · 10/11/2026+663−5
7e5052cdRemove the three one-at-a-time staff lookups that the combined query replacedSirMittens · 10/11/2026+0−16
1a26978dFewer database round trips on the code every request runs: who you are on login (7 queries to 1), the Premium feature check (2 to 1), the panel-access check (up to 8 to 1, compared with the old logic SirMittens · 10/11/2026+369−64
d0c02ab0Premium reward batches of 15 servers, so a slow database round trip can't push a request past Cloudflare's time limitSirMittens · 10/11/2026+3−1
99452c28Announcement templates for the move: a heartfelt migration notice (downtime, safety backup, premium compensation) and a back-online-after-the-move thank-youSirMittens · 10/11/2026+27−1
9d2be1beAnnouncement templates: 13 starters with the Inkwell logo, banner and footer icon, and the outline colour (and ready-made pictures) follow the level: red for critical, amber for important, blue for inSirMittens · 10/11/2026+141−42
86a98577Announcements page for the bot's owners and admins: announcements to server owners and log channels (templates, simple editor, test first, typed confirmation, batched sending), bulk premium reward, saSirMittens · 10/11/2026+2069−16
e7161cedCustom log messages: a Message control on every log on the Log Channels page, placeholders and standard design per log, dashboard-posted application logs follow itSirMittens · 10/10/2026+511−52
9330142bButton automations: say what the picked automation does, link to make a new one, warn before deleting or switching off one that buttons use, and say when the list can't be loadedSirMittens · 10/10/2026+269−21
12fd9f3dButton safety: role buttons limited to roles below the author's highest role (owner and admins exempt), no kick/ban/timeout in button automations, neutral example reasons in previewsSirMittens · 10/10/2026+123−12
95e6e279Commit feed and trust page show lines added and removed per commit (plain text, JSON and the page)SirMittens · 10/10/2026+48−17
2a751828Message editor colours: a visible named colour popup (14 colours), ready-made banners and icons in every colour plus a droplets banner style, and ready-made pictures follow the message colour unless pSirMittens · 10/10/2026+329−30
04b8beb2Buttons can run an automation: 'A button is pressed' trigger on the Automations page, automation picker on a button, checked when saving or postingSirMittens · 10/10/2026+80−24
b9e7d66bButtons that do something: pick what a button does (link, give/take/toggle a role, private message) and its colour in the editor; posted ones come back into the live editor; risky roles are refused whSirMittens · 10/10/2026+378−19
074ec824Ticket and application panels can use a saved message: type buttons added under it, {types} fills the list of types, deleted message falls back to the standard panel, with testsSirMittens · 10/10/2026+314−44
9cca9532Messages step for tickets and applications: pick your own design for the bot's built-in messages (Premium), start from the standard one, accept/deny DM uses it, link into the editor, with testsSirMittens · 10/10/2026+900−19
9b0b9b84Welcome and Automations pick a saved message; the old embed editor is goneSirMittens · 10/10/2026+466−122
fa4ea1c5Commit lists: every no-cache header, fixed times instead of relative ones, and how to get a fresh copySirMittens · 10/10/2026+40−20
11c77d47Saved messages: folders, search, sorting; the list loads short summariesSirMittens · 10/10/2026+816−121
43417e3cPlain commit list for AI assistants and scripts: /commits.txt, /commits.json, /llms.txtSirMittens · 10/10/2026+213−1
fbd25c99Applications and tickets: honest step count, dependent-rule warnings, public versus staff channel pictureSirMittens · 10/10/2026+220−31
b38ddcfbTrust page: refresh commit lists cheaply, say when they were updated, never cache the pageSirMittens · 10/10/2026+193−56
4b8f83fbEdit a posted message with the new editor, and make it easy to findSirMittens · 10/10/2026+866−134
55858d3aEmbeds: server banner by default, Blank canvas, tooltips no longer clippedSirMittens · 10/10/2026+132−13
690bd28bBlocks panel: side-by-side blocks are one group with a bracket and chainsSirMittens · 10/10/2026+331−25
fa204247Embeds: every template ships with four pictures, ready-made pictures read friendly, edit cues and hover hintsSirMittens · 10/10/2026+167−56
d461790eApplication review: stuck rows hidden, Remove from list, names instead of mentionsSirMittens · 10/10/2026+204−12
96353484Embeds: Blocks panel beside the preview; swap the Blank and What's new emojiSirMittens · 10/10/2026+51−47
17a3c7d0Message editor rework: dotted slots, blocks panel, formatting, new templates, no info iconsSirMittens · 10/10/2026+1005−451
186775e3Message editor: simpler, and every Discord embed optionSirMittens · 10/10/2026+495−391
aa438e99Embeds page rebuilt in the Applications/Tickets style; smarter Insert chipsSirMittens · 10/10/2026+597−222
1a2c0242Messages: shared message engine and visual editor, Embeds page rebuilt on itSirMittens · 10/10/2026+1089−63
3bb8872bApplications edit screen: same step-by-step layout with an Overview first as ticketsSirMittens · 10/10/2026+233−154
7e2f22d3Edit screen save bar: match the card colour, run to its edges and actually stick to the screenSirMittens · 10/10/2026+6−3
1af51439Tickets edit screen: step-by-step layout with an Overview first, info notes instead of helper paragraphs, Back/Next and a save bar with unsaved-changes markerSirMittens · 10/10/2026+351−142
00c58572Make the post-the-button step's route visible to the api-wiring checkSirMittens · 10/10/2026+3−1
fc6d8407Automated tests: API and logic tests, application decision tests, and browser-simulation tests for the Applications and Tickets pages (npm test, npm run test:ui)SirMittens · 10/10/2026+2110−1
f5ec7a47Tickets: visible switch to turn the popup off under the questions (edit form and walkthrough), emoji on the how-members-answer lineSirMittens · 10/10/2026+29−16
2cedcc19Tickets: routing by answer, close reason, auto-close and reminder settings, saved replies (editor and API)SirMittens · 10/10/2026+545−22
445b7d9bTickets: explicit warning and save-time confirmation when a form outgrows the popupSirMittens · 10/10/2026+53−4
8884d70dTickets: question editor with dropdowns, optional questions and rules; popup or step-by-step status line and preview; unfinished-ticket timeout; question limits and Premium row; API validationSirMittens · 10/10/2026+364−87
b90ebdc3Friendlier message when the dashboard needs a refresh after an updateSirMittens · 10/10/2026+6−3
df53368bReload once automatically when a page file is missing after a new deploy, instead of showing 'Something broke'SirMittens · 10/10/2026+45−2
fbea804dTickets page redo (part 1): health check, template walkthrough with variants, Post ticket button, basic vs more optionsSirMittens · 10/10/2026+639−138
76206358Application question limits: up to 100 defined, free plan limits questions asked per applicant (20) instead of total, editor counter and tip, Premium page updatedSirMittens · 10/10/2026+215−25
723288beNew application templates: grouped picker with variants (staff by role, creator, join with how-they-found-you, ban appeal agree/disagree, partnership) using dropdowns and rulesSirMittens · 10/10/2026+301−80
b9d97ad3Trust page: don't cache a failed commit-history fetch; keep showing the last good listSirMittens · 10/9/2026+9−2
518d1910Application question rules: Rules block in the question editor (several rules, match all/any, earlier questions only), checks and warnings, preview path picker, API validationSirMittens · 10/9/2026+256−6
9f6d9ef6Application question editor (box per question, dropdowns, optional, help text, reorder), applicant preview, time limit and confirm message settings; API validation for the new question formatSirMittens · 10/9/2026+544−75
2acdfb14New application walkthrough: say where the advanced options are, and add Create and open all optionsSirMittens · 10/9/2026+32−9
cac13c59Applications page redo (part 1): Review/Setup tabs, setup health check, template-based new application walkthrough, Post Apply button action, basic vs more options on the type formSirMittens · 10/9/2026+635−156
849171b7Remove the Tickets Transcript Format setting: the bot never read itSirMittens · 10/9/2026+1−31
5b96f0edApplication decisions: DM only, fold into review message, Decision Logs settings and notesSirMittens · 10/9/2026+80−29
71f7eae5Application transcript page fills the screen instead of a small scrolling frameSirMittens · 10/9/2026+15−1
7f03b382Application review channel is optional; Logs page explains it is the defaultSirMittens · 10/9/2026+5−5
238ad91cDecide: skip Discord steps cleanly for applications with no review messageSirMittens · 10/9/2026+4−3
f6754fbaDashboard approve/deny: same short decision message with a transcript button; remove the retired Transcript Format setting from ApplicationsSirMittens · 10/9/2026+8−47
4baec327Split App.jsx into per-page lazy modules; unsaved-changes warning; Insights clusters; Settings group in the sidebarSirMittens · 10/9/2026+11279−10997
a4cfc695Navigation: Ticket & App History and Roles join Community; 'Automation' group renamed ToolsSirMittens · 10/9/2026+15−15
4fc6aeafFix Guide page crash + make Commands section and per-command entries collapsibleSir Mittens · 9/2/2026+78−35
256012f0Add owner-only command list to Admin page, exclude it from the public GuideSir Mittens · 9/2/2026+137−37
269f2f0bOnboarding pass: explain what Branding and Config Templates actually doSir Mittens · 9/2/2026+7−1
48306f8cAdd Guide page: live auto-generated command list + FAQSir Mittens · 9/2/2026+162−0
e4702bc1Add Social Media Alerts to Server Setup (was dropped, never migrated)Sir Mittens · 9/2/2026+202−0
e113406aDisable Ko-fi donate buttons alongside PayPal until account issues are sortedSir Mittens · 9/2/2026+20−6
54b7e785Disable PayPal buy buttons until account verification/card issues are sortedSir Mittens · 9/2/2026+18−2
64088c98Fix Overview layout: push donate button to the right edge, let Quick Setup cards fill the row instead of leaving an empty columnSir Mittens · 9/1/2026+2−2
0f4e650fFix premium trend sparkline day-boundary bug found in code auditSir Mittens · 9/1/2026+19−11
73300695Document the random-variant response syntax on the Custom Commands formSir Mittens · 9/1/2026+4−0
1acd93dcAdd ticket type ping-on-open toggle and role picker to the dashboard's ticket type formSir Mittens · 9/1/2026+25−2
343b1afaFix ticket panel edit dropping the channel field, allowing repost to a new channel from EditSir Mittens · 9/1/2026+27−9
e403bd0cSurface PayPal's specific error detail (issue code + description) instead of just its generic top-level messageSir Mittens · 9/1/2026+3−1
9aebac16Move donate card to very top of Overview; drive Quick Setup off the shared server picker instead of its own dropdownSir Mittens · 9/1/2026+22−35
f7dc1d0fEnforce ticket question limits (5 free / 25 premium) and bump 3-month pricing to $12Sir Mittens · 9/1/2026+27−5
09548841Enforce free-tier limits, add pricing, and finish the remaining tweaks batchSir Mittens · 9/1/2026+587−33
7906bf8dCapitalize and strip digits from the Welcome back display name (sidebar avatar/name still shows the raw username)Sir Mittens · 9/1/2026+7−1
d475a12fAdd Ticket History/Post Panel and Application Post Panel/Review — full parity with the remaining Discord staff-management featuresSir Mittens · 8/31/2026+1173−0
cabfa5c9Add Tickets and Applications config pages, reusing the roles/channels endpoints Auto-Mod already establishedSir Mittens · 8/31/2026+1085−16
ec05761aFix crash-to-blank-page bug: guard every fetched array against non-array error responses, add a top-level ErrorBoundarySir Mittens · 8/31/2026+53−9
6500138bSplit Premium into a page identical for everyone, move admin power to a new Owner-only Admin pageSir Mittens · 8/31/2026+291−101
b8bc5bdfHide premium code, label, usage count, and creator from non-owner activity feedSir Mittens · 8/30/2026+12−8
a884819fAdd Exempt Roles/Channels to the Auto-Mod page — completes the move off DiscordSir Mittens · 8/30/2026+98−0
51c39efeRedesign Premium page to match the mockup: stat row, global admin server table, activity feed, revoke modalSir Mittens · 8/30/2026+604−31
08565b36Use bot icon as favicon, filter out servers Inkwell isn't actually in, collapsible Auto-Mod sections with Other Filters firstSir Mittens · 8/30/2026+63−44