AECDesk
AECDesk
Notifications
You're all caught up.
Settings
Everything else
{{ mobMeLine }}
{{ timerLabel }}
{{ pageTitle }}
Notifications
You're all caught up.
{{ meName }}
{{ meTitle }}
{{ meEmail }}
{{ meAwayNote }}
Support access — you are viewing {{ actingName }}. This visit is recorded in their audit log.
Customer support — tickets raised by workspaces on AECDesk.
{{ annIcon }}
{{ annText }}
{{ sampleBarText }}
{{ trialBarTitle }} {{ trialBarBody }}
{{ dashGreeting }}
{{ dashDateLine }}
Layout
Every card is on the board.
Reset restores the layout recommended for your role.
{{ deskW.kpis.title }}
{{ deskW.deflect.title }}
Tickets avoided
{{ deflect30 }} in the last 30 days
Times someone found their own answer in the portal instead of raising a ticket — work that never reached your queue.
Doing the most work
{{ t.title }} {{ t.count }}
{{ deflectEmptyText }}
{{ deskW.sla.title }}
SLA at risk
{{ deskW.cat.title }}
Open tickets by category
{{ c.label }}
{{ c.count }}
{{ deskW.csat.title }}
CSAT this week
{{ csatPct }}{{ csatSub }}
{{ csatFoot }}
{{ deskW.coverage.title }}
Coverage & delegation
{{ covCardSub }}
{{ covEmptyText }}
{{ cv.title }}
{{ cv.sub }}
{{ cv.state }}
{{ deskW.triage.title }}
Needs triage
{{ triageCount }}
Every ticket has an owner. Nice.
{{ deskW.awaiting.title }}
{{ awaitingTitle }}
{{ awaitingCount }}
{{ awaitingEmptyText }}
{{ deskW.projopen.title }}
Open projects
{{ dashProjCount }}
No open projects.
{{ deskW.projmine.title }}
Projects assigned to me
{{ dashMyProjCount }}
Nothing assigned to you right now.
{{ deskW.reqs.title }}
Equipment requests
{{ reqsCount }} waiting
{{ reqsEmptyLabel }}
{{ r.title }}
{{ r.sub }}
{{ r.meta }}
{{ r.chipLabel }}
{{ deskW.cal.title }}
Office calendar · {{ calRangeLabel }}
{{ d.name }} {{ d.dateLabel }}
{{ l.label }}
{{ calPk.badge }}
{{ calPk.title }}
{{ calPk.when }}
Who: {{ calPk.who }}
{{ vocClientSing }}: {{ calPk.co }}
{{ calPk.notes }}
{{ calManagedNote }}
{{ ceHead }}
Title
Date
Until (optional)
Time (optional)
{{ ceWhoLabel }}
{{ ceWhoHint }}
{{ vocClientSing }}
Repeats
Details (optional)
{{ ceErr }}
{{ calMonthLabel }}
MonTueWedThuFriSatSun
{{ c.num }}
Nothing scheduled this month.
{{ m.dayLabel }}
{{ deskW.trend.title }}
Opened vs resolved · 7 days
{{ trendDeltaText }}
{{ trendOpenTotal }}opened {{ trendResTotal }}resolved
{{ trendMaxLabel }} {{ trendShapes }}
{{ tl.text }}
{{ deskW.daily.title }}
My day
{{ myDayLeft }}
{{ md.label }}
Nothing on the list. This one is just yours — nobody else on the desk sees it.
{{ deskW.moves.title }}
Onboarding & offboarding
Nobody joining or leaving right now. A ticket that reads like a new starter offers to open one.
{{ deskW.focus.title }}
Waiting on you
{{ focusCount }}
Nothing waiting on you right now. Anything you want to remember goes in My day.
{{ deskW.recvisits.title }}
Recurring visits
{{ recCardCount }}
No visit schedules yet. Add one on a client and its ticket is raised for you each period.
Answers come from your own desk
AI suggestions and drafted replies are answered from these articles and your resolved tickets — {{ kbScopeNote }} Article search and portal deflection are plain keyword retrieval and keep working with AI switched off.
Weekly advisory feed Platform owner
{{ feedSub }}
{{ feedErr }}
{{ fi.title }}
{{ fi.meta }}
{{ fi.status }}
Satisfaction — last 7 days
{{ csatPopSub }}
{{ csatPct }}positive
{{ d.label }} {{ d.value }} {{ d.pct }}
No ratings yet this week. Requesters are asked once, on the request itself, when it is resolved.
Open tickets by category
{{ catPopSub }}
{{ catPopTotal }}open
{{ d.label }} {{ d.value }} {{ d.pct }}
{{ viewTitle }}
{{ viewCount }}
{{ t.reqInitials }}
{{ t.idLabel }} {{ t.reqName }} {{ t.updatedLine }}
{{ t.subject }}
{{ t.preview }}
{{ t.slaText }}
{{ t.idLabel }}
{{ t.subject }}
{{ t.preview }}
{{ t.reqInitials }}
{{ t.reqName }}
{{ t.company }}
{{ t.asgInitials }}
{{ t.slaText }}
{{ t.updatedLine }}
Nothing here
No tickets match this view right now.
{{ selectedCount }} selected
{{ dt.device.name }}
{{ dt.reqName }} — primary user · {{ dt.device.sync }}
{{ r.k }}{{ r.v }}
Auto-synced from NinjaRMM — reassigns automatically when a new machine becomes this user's primary login.
{{ dt.company }}
{{ dt.subject }}
{{ v.initials }} {{ viewerLabel }} {{ timerLabel }}
Time logged
{{ timeTotalLabel }}
{{ te.minutes }} {{ te.billLabel }}
{{ te.typeLabel }} · {{ te.who }} · {{ te.note }}
Snippets
Canned responses for the ▾ menu. {{ snScopeNote }}
No snippets yet — add one below.
{{ snErr }}
Quick reply buttons
Up to three one-click inserts above the reply box. {{ qrScopeNote }}
{{ sl.n }}
Maximum reply length
Characters allowed in one reply. Default 32,000.
{{ qrErr }}
{{ fieldModalTitle }}
{{ fieldModalDesc }}
On this ticket
{{ c.name }}
Add someone
Everyone's already on it.
{{ m.initials }}
{{ m.from }}Internal note{{ m.time }}
{{ m.redactedNote }}
{{ m.body }}
{{ m.attCount }}
{{ mvRunText }}
{{ mvHintText }}
Research is ready — {{ aiResSummaryLine }}.
{{ kbCaptureNote }}
Reply
{{ aiBlockedLabel }} {{ aiInlineMsg }}
{{ replyCount }} / {{ replyMax }}
Reading your knowledge base…
min
{{ at.name }}
{{ at.meta }}
Internal only
{{ attBusyLabel }}
{{ attErr }}
Drafted from:
{{ aiErr }}
{{ projViewTitle }}
Planned work with a budget and a finish line. The day-to-day still happens on linked tickets — their hours roll up here automatically.
{{ sc.label }}
{{ sc.value }}
No projects yet
Create a project for planned work — an office move, a workstation refresh, a new-hire batch. Link tickets to it and their hours roll up against the budget.
{{ p.name }}
{{ p.sub }}
{{ p.managerInitials }} +{{ p.memberCount }} {{ p.dueLabel }} {{ p.statusLabel }}
{{ p.metaLabel }}
No projects in this view.
{{ projDetail.name }}
{{ projDetail.sub }}
{{ mb.initials }} {{ projDetail.dueLabel }} {{ projDetail.statusLabel }}
{{ st.label }}
{{ st.value }}
Project manager
{{ projDetail.managerInitials }}{{ projDetail.managerName }}
Not assigned
Checklist
{{ pcProgLabel }}
{{ t.label }}
{{ t.byLabel }}
Stage the work as steps — rack the server, migrate mailboxes, hand over — and tick them off as they land. Who ticked what, and when, is kept.
Linked tickets
{{ t.statusLabel }}
{{ t.subject }}
{{ t.reqName }} · {{ t.company }}
{{ t.updated }}
No tickets linked yet. Use New ticket for this project to start the work — its hours will roll up here.
{{ movesTitle }}
{{ movesSub }}
{{ movesEmptyLabel }}
{{ m.person }}{{ m.kindLabel }}
{{ m.sub }}
{{ m.dueLabel }}
{{ m.progLabel }}
{{ eqPageTitle }}
{{ eqPageSub }}
{{ equipMsg }}
Nothing in this view yet.
{{ e.catLabel }}{{ e.visLabel }}
{{ e.name }}
{{ e.desc }}
{{ e.priceLabel }}
Nothing here. New requests land in this list, on your dashboard, and in your inbox.
{{ r.client }}
{{ r.itemsLabel }}
{{ r.whenLabel }}
{{ r.statusLabel }}
Decline this request
{{ eqDecSub }}
{{ eqPk.client }}
Equipment request
{{ eqPk.statusLabel }}
{{ it.qty }} ×{{ it.name }}
{{ eqPk.note }}
{{ m.k }}{{ m.v }}
Recurring visits — {{ cd.name }}
A ticket is created on schedule so the tech has somewhere to log the visit — time entered on it bills into the contract and the timesheet like any other work.
{{ r.title }}
{{ r.sub }}
{{ r.chipLabel }}
No schedules yet. Add one for a weekly or monthly onsite visit and its ticket is raised for you each period.
Software checklist — {{ suClient }}
What gets installed and configured on a new machine here. Tick each item as you do it — who ticked it, and when, is kept. The list stays for the next machine.
{{ suProgLabel }}
{{ it.label }}
{{ it.note }}
{{ it.byLabel }}
Nothing listed yet. Add what a new machine needs here — Revit, licence seats, VPN, drive mappings.
Put a note after a dash — it shows under the item. {{ suErr }}
{{ eqEditTitle }}
Name
Description
Price ($) — blank = quoted
Category
Visible to
{{ eqErr }}
{{ tplTitle }}
{{ tplSubtitle }}
No checklists yet — add one below.
Used for {{ tplEdCount }}
Steps — one per line, in order
{{ tplErr }}
{{ mvPk.person }}
{{ mvPk.sub }}
{{ mvPk.ownerLabel }}
Every step is done — this is your record that it was handled.
{{ mvPk.notes }}
New at {{ mvPk.company }} — invite them to the portal so their tickets land under the right person from day one.
{{ mvPk.person }} still has a portal sign-in at {{ mvPk.company }}. Suspending keeps their tickets and history.
Steps{{ mvPk.progLabel }}
{{ t.label }}
{{ t.doneBy }}
{{ mvHead }}
Pick a list and it copies the steps in. You can add or remove steps on this run without changing the template.
Their name
Job title
{{ mvCompanyLabel }}
Needs to be done by
Who is running it
Checklist
From ticket # (optional)
Anything specific (optional)
{{ mvErr }}
Knowledge health
What the knowledge base is saving you, what it is missing, and what has gone stale.
{{ kbhDeflect30 }}
tickets avoided, 30 days
{{ kbhPublished }}
published articles
{{ kbhDrafts }}
waiting for review
Answered more than once, never written down
Nothing repeating yet — this fills in as tickets are resolved.
{{ g.label }}
{{ g.sub }}
Needs a look
Nothing stale — everything has been touched recently and is still rated useful.
{{ st.title }}
{{ st.why }}
Doing the most work
{{ t.title }} {{ t.count }}
{{ kbErr }}
{{ kbGapTitle }}. {{ kbGapWhy }}
{{ g.title }} {{ g.sub }}
No articles yet
Write up a fix once and every technician has it. Articles marked Public also reach the portal — fill in For the requester and they head off tickets before anyone files them. {{ kbEmptyScopeNote }}
Nothing matches that search in this scope.
{{ kbQuietLine }}
{{ kbArticle.title }}
{{ kbArticle.clientHidWhy }}
{{ kbArticle.scopeLabel }} {{ kbArticle.visLabel }} Not shown to clients {{ kbArticle.srcLabel }} {{ kbArticle.catName }} {{ kbArticle.tagLabel }} {{ kbArticle.updatedLabel }}
{{ kbArticle.draftNote }}
Symptoms

{{ p.p }}

Resolution
{{ p.n }}

{{ p.p }}

Public and published, but with no “For the requester” steps clients see nothing for it — the portal only offers steps a person wrote for them.
For the requester

{{ kbArticle.reqProseText }}

{{ p.n }}

{{ p.p }}

{{ kbArticle.reqLine }}
{{ kbArticle.reqLine }}
Cause & notes

{{ p.p }}

Sources
Published {{ kbArticle.pubDate }}
{{ sl.host }} {{ sl.rest }}
This is failing more often than it helps — {{ kbArticle.notHelpfulCount }} people said it did not solve their problem. Worth a review.
Did this work? {{ kbArticle.resolvedLabel }}
{{ kbArticle.byLine }}
{{ billFilterLabel }}
{{ ctEditHeading }}
{{ vocClientSing }}
Contract type
Status
Starts
Ends
Billing period
Notice (days)
{{ ceValueLabel }}
{{ ceRateLabel }}
After hours (% of rate)
Block hours per period
Renewal term (months)
Account manager
Service level
{{ ceSlaHint }}
PO / reference
Excluded work
Auto-renew at the end of the term
New tickets are billable by default
Notes
What changed (goes in the amendment history)
Every change is stamped with your name either way. This line adds the reason, so the renewal conversation has the story and not just the numbers.
{{ ceErr }}
{{ ct.client }}
{{ ct.type }} {{ ct.status }}
{{ ct.value }}
{{ ct.valueNote }}
{{ ct.termLine }}
{{ ct.renewLine }}
{{ ct.notes }}
{{ ct.noticeText }}
Profitability
{{ ct.marginLabel }}
{{ p.label }}
{{ p.detail }}
Block drawdown
{{ ct.blockLabel }}
{{ ct.marginNote }}
Coverage
{{ c.k }}
{{ c.v }}
Recent time
{{ a.when }}
{{ a.what }}
Logged on this client’s tickets. Time is never entered against a contract directly.
No time logged against this contract yet. It appears here when a technician logs minutes on one of {{ ct.client }}’s tickets — nothing is entered on the contract itself.
Documents
{{ cdocCount }}
{{ cdocErr }}
{{ cd.ext }}
Your role cannot see contract paperwork. Ask an admin if you need it.
{{ cdocEmptyNote }}
Amendment history
{{ h.when }}
{{ h.kindLabel }}
{{ h.what }}
{{ h.by }}
Edits, renewals and notes, newest first — the paper trail for the renewal conversation.
{{ ctCountLabel }} · {{ ctMrrLabel }} recurring. Hours and margin come from the time entries on each client’s tickets.
{{ ctErr }}
No contracts yet
A contract records what you agreed and when it ends, so the renewal date is real and every hour logged can be measured against it. Draft one from each client record, or add the first by hand.
{{ ctNeedsTitle }}
{{ c.client }}
{{ c.type }}
{{ c.terms }}
{{ c.status }}
{{ c.renewLabel }}
{{ profitHeading }}
{{ profitSub }}
{{ p.client }}
{{ p.pctLabel }}
{{ p.label }}
{{ bInvHeading }} {{ bPropDraftLabel }} {{ bInvDraftLabel }} {{ bInvOverdueLabel }}
{{ bInvSub }}
Invoice appearance
The brand colour is used on invoices and quotes, and on the emails your clients receive — the header tint, links and buttons. The footer note goes on the PDF and at the bottom of emailed invoices. Your branding logo is used automatically — upload a different one only if invoices should look different.
Brand colour
Accent colour
Lightness
Document style — applies to invoices and quotes alike
Company details — address, phone, email (shown under your name)
Footer note — payment instructions, remit-to, terms
{{ wiAppErr }}
Generate invoice
Pick the client — everything else is already known. Nothing is sent; you get a draft to check first.
Client
What lands on the draft
Their contract's fee for this period — recurring, retainer or fixed — as one line.
Every billable hour logged on their tickets that has not been invoiced yet, at the contract rate.
A due date 14 days out. Those hours lock so they can never be billed twice.
{{ wiGenErr }}
{{ i.id }}
{{ i.client }}
{{ i.date }}
{{ i.amount }}
{{ i.status }}
No proposals yet
Quote a project before it exists — create a proposal, send it like an invoice, and when the client approves it one click creates the project with the budget already set.
Import-clean line items — no accounting integration fees.
{{ tsBillable }}
billable
{{ tsNonBillable }}
non-billable
{{ tsTotal }}
logged in {{ tsDaysLabel }}
Blended technician cost
{{ costRateDesc }}
$ per hour
By technician
{{ u.name }}
{{ u.label }}
No time logged yet
Time appears here when a technician logs minutes on a reply, or records them in the Resolve dialog. Nothing is ever logged automatically.
{{ t.ticket }}
{{ t.note }}
{{ t.billLabel }}
{{ t.typeLabel }}
{{ t.dur }}
No time logged in this window yet.
AI assistant
{{ aiStatusText }}
Runs on AECDesk Intelligence — our hosted service, kept current as better models ship, at no change to your price. Your tickets are never used to train anyone's model{{ aiExcludeNote }}.
{{ aiKeyLabel }}
Only used when “use our own key” is on below. Encrypted with AES-256-GCM before it is stored, and never sent back to the browser. Save an empty field to remove it.
This server has no app_secret set, so keys cannot be encrypted — saving one is blocked until it is. Nothing is stored in the clear.
{{ aiKeyMsg }}
Monthly spend cap
AECDesk Library
{{ intelSub }}
Per-client AI
Enable the assistant client by client — a disabled client's tickets never touch the model (some CMMC contracts require this).
{{ c.name }} {{ c.note }}
The assistant is switched off — turn it on under AI assistant first.
Credits are the prepaid actions your technicians spend — one pack per technician per month, topped up any time. Every action’s price is listed below.
AI credits
Nothing runs on its own — an action is only used when someone presses a button. Buy a pack per technician, or top up when you need more.
{{ aiMsg }}
{{ aiMonthLabel }}
{{ aiLeftLabel }}
{{ aiUsedLabel }}{{ aiPctLabel }}
{{ aiTrialLabel }}
Technician packs — {{ aiMonthlyLabel }}
Give a pack to each tech who should have the AI buttons — {{ aiPerSeatLabel }}. {{ aiIncludedLabel }}.
{{ aiSeatsLabel }} bought before per-technician assignment existed. Toggle the techs below to assign them — the pack count and monthly price update automatically.
{{ p.initials }} {{ p.name }} {{ p.statusLabel }}
{{ p.usageLabel }} {{ p.poolLabel }} {{ p.usageLeft }}
Shared top-up pool
Anyone can draw from this once their own monthly actions are gone — no assignment needed.{{ aiTopupSentence }}
{{ aiPoolLabel }}{{ aiPoolLeft }}
{{ aiSuggestLabel }}
Previous months
{{ h.label }} {{ h.usedLabel }}
What each action costs
Every one of these is a button a technician presses. Nothing is charged in the background, and nothing runs just because a panel was opened.
{{ c.name }}
{{ c.what }}
{{ c.cost }}
Research costs more because it runs several live searches against vendor documentation. Suggested articles, ticket search and knowledge matching are keyword-based and always free — they keep working with AI switched off.
The assistant is switched off — turn it on under AI assistant first.
Branding
Your logo and name appear on the sign-in page {{ brandAudience }}, and in the app itself.
Logo
Square works best — PNG, JPG, WebP or SVG, under 250 KB.
Name on the sign-in page
Leave blank to use your workspace name.
{{ brandMsg }}
{{ brandErr }}
Preview
{{ brandPreviewName }}
Powered by AECDesk
{{ brandUrl }}
{{ intHelp.title }}
{{ intHelp.intro }}
{{ st.n }}
{{ st.t }}
{{ intHelp.foot }}
Your AECDesk subscription
Payment is handled by Stripe — card details never touch AECDesk. Cancelling keeps your data; the workspace is suspended, not deleted.
{{ stStatusLabel }}
Plan
{{ stPlanLabel }}
Billed for
{{ seatEach }} · {{ seatTotal }}
{{ seatMsg }}
Next
{{ stRenewLabel }}
{{ stErr }}
AI credit packs
Buy a block of AI actions any time — a one-off charge on the same card, added to this month straight away.{{ aiTopupSentence }}
{{ aiMonthLabel }} See usage per technician →
{{ aiUsedLabel }}{{ aiLeftLabel }}
{{ aiBreakdownLabel }}
A shortcut on every {{ vocClientLower }} machine
Downloads a desktop shortcut that opens your sign-in page, named {{ scName }} Support and carrying your logo — your branding if you have set it, our mark otherwise. Hand it out, or push it with your RMM.
One click — your name and logo, its own window, pinnable to the taskbar. The downloads below are for pushing to {{ vocClientLower }} machines.
Deploying it
1. Put support.ico at C:\ProgramData\AECDesk\support.ico — the shortcut looks there for its icon.
2. Copy the .url file into C:\Users\Public\Desktop so everyone on the machine gets it.
3. Both are two lines in an RMM script or a GPO file copy — set it up once per site and new machines pick it up.
Windows only draws an icon from a local file, which is why the .ico is a separate download rather than baked in. Skip step 1 and the shortcut still works — it just wears the browser's icon.
Getting started
What each part of AECDesk does and where to begin. The short version: add your {{ vocClientsLower }}, connect email, invite your team — tickets take care of themselves.
1 · Dashboard
Your morning view — key numbers, what is waiting on you, equipment requests and SLA risk. Every card can be resized, hidden, added or reordered with the layout button, per person.
2 · Tickets
Everything lands here: portal requests and email. Assign, reply, log time, attach a file, link an article. The AI tab drafts replies and suggests fixes from your own knowledge base.
3 · {{ impCompaniesLabel }}
One card per {{ vocClientLower }} — primary and backup engineer, their people, the software checklist for a new machine, and recurring visits. Invite a lead so requests arrive under the right name from day one.
4 · Projects
Planned work with a budget and a finish line. Link tickets so hours roll up automatically, and stage the work with the checklist — progress is provable afterwards.
5 · Onboarding & offboarding
Joiners and leavers, run from reusable checklists. A ticket that reads like a new starter offers to open one, and the ticket then tracks the checklist to completion.
6 · Equipment catalogue
What people can request from the portal, grouped by category and priced (or quoted). Requests land on your dashboard and in the Requests view here.
7 · Knowledge base
Write a fix once — it answers portal searches and feeds AI suggestions. Each article has two bodies: Resolution for your engineers, and For the requester — four plain steps, the only thing clients ever see. Leave it blank and the portal shows nothing for that article — it never shows a technician procedure. Resolve a ticket and it offers to turn the fix into an article. The AECDesk Library adds curated starter and advisory articles, free.
8 · Billing & time
Contracts, proposals, invoices and timesheets on an MSP desk; hours and labour cost on an in-house desk. Quotes preview the exact email before you send, and after-hours time bills at the contract premium.
9 · Calendar
Visits, meetings, time off and holidays. Recurring visits schedule themselves; time logged on a visit bills correctly.
10 · Portal
What requesters see: raise and follow requests, read public articles, request equipment. Their view is scoped to their own company — always.
11 · Settings
Ticketing rules and SLAs, business hours, sign-in and Microsoft 365, branding, users and roles, outgoing email, AI. Most switches save on their own.
12 · AI assistant
Drafted replies, summaries, triage and research — powered by AECDesk Intelligence, never trained on your tickets. Buy credits from the AI page; the Library stays free either way.
Helpdesk features
Not every team runs deadlines and surveys. Switch either off and it disappears everywhere — dashboard cards, ticket lists, and the portal — for the whole workspace.
SLA deadlines
Response/resolution targets by priority, the "SLA at risk" list, and deadline chips on tickets.
CSAT surveys
The "How did we do?" thumbs after a ticket is resolved, and the weekly satisfaction card.
{{ ftMsg }}
Business hours
SLA countdowns only run during these hours — nights, weekends and days you don't cover are paused, so deadlines reflect the time you actually promised.{{ bhPerClientNote }} Changes save on their own.
Saved
Working days
Opens
Closes
Timezone
{{ hoursTzNote }}
Auto-close resolved tickets
Resolved tickets with no further reply from the requester close on their own after the set number of days. Closing only tidies the queue — logged time and billing are untouched, and a client reply reopens the ticket. Changes save on their own.
Close afterdays of no reply
Bring your data across
Export a CSV from your current system, check the column mapping, import. You run it, your data never passes through us, and every run can be undone.
What are you importing?
Exported from
{{ impSourceNote }}
Past imports
Nothing imported yet.
{{ b.title }}
{{ b.sub }}
Undone
{{ st.n }} {{ st.label }}
Choose your file
{{ impPickHint }}
{{ impFileErr }}
{{ impFileSummary }}
Check the column mapping
{{ impMapHint }}
AECDesk fieldYour columnFirst row
{{ m.label }}{{ m.reqLabel }} {{ m.sample }}
{{ impMapErr }}
Dry run — nothing written yet
Checking your rows…
{{ impPrevCreate }}
to create
{{ impPrevUpdate }}
already here — will be updated
{{ impPrevSkip }}
skipped
{{ h.v }} Action
{{ c.v }} {{ r.action }}
{{ impPrevErrTitle }}
Row {{ e.line }} — {{ e.msg }}
Import
Importing… Complete
{{ impProgLabel }}
{{ impRunErr }}
{{ l.l }}
{{ impDoneNote }}
How your users sign in
{{ signinPageSub }}
Sign in with Microsoft
{{ m365Status }}
{{ ssoMsSub }}
{{ ssoWorksNote }}
Sign-in codes — client users only
Staff at a client can sign in with a one-time emailed code instead of a password — but only for clients whose email domains you have verified. Turn it on per client under Clients → open the client → Edit company.
{{ codeSummary }}
Two-factor authentication
A 6-digit code from an authenticator app (Microsoft Authenticator, Google Authenticator, 1Password, Authy) on top of the password. Off everywhere by default — switch it on where you want it.
{{ mfaLockNote }}
Require it for your team
{{ mfaStaffNote }}
{{ mfaCliTitle }}
{{ mfaCliNote }}
{{ mfaPerClientTitle }}
{{ mfaNoClientsMsg }}
{{ c.name }}
{{ c.countLabel }}{{ c.note }}
Who has it set up
{{ mfaCardErr }}
{{ p.initials }}
{{ p.name }}
{{ p.sub }}
{{ p.chipLabel }}
Support email address
The address clients write to. Anything sent here opens a ticket, and replies to ticket notifications land on the ticket.
Your AECDesk address — works now, no setup
{{ mboxSystem }}
Open new tickets from email
{{ mboxNewSub }}
{{ inboundLabel }} — replying to a ticket notification adds to that ticket.
Use your own address instead {{ mboxStatusLabel }}
No DNS changes needed — you just forward your address to ours. In Microsoft 365: Admin center → the mailbox → Mail → Manage email forwarding.
Forward it here
{{ mboxForwardTo }}
{{ mboxMsg }}
{{ mboxErr }}
Send replies from your domain too
Optional. Two DNS records and outgoing mail shows your address instead of ours.
{{ r.type }} {{ r.host }}
{{ r.value }}
{{ r.note }}
Outgoing email
How replies, notifications and invoices leave AECDesk. {{ mailSummaryLine }}
Server mail lands in spam at Microsoft 365 and Gmail. Add your Zoho (or Postmark) SMTP details to api/config.php so invitations arrive reliably.
Tell the requester when their ticket is resolved
One email carrying the fix you recorded, plus a link to rate it. Replying to it reopens the request.
Every email carries your logo and workspace name from Branding. Send one of each to check how it lands in your own mail client.
{{ mailMsg }}
{{ userMsg }}
Your team
{{ staffLabel }}
{{ u.initials }}
{{ u.name }}
{{ u.email }}
Disabled
Nobody on your team matches that.
Loading users… (if this stays empty, you are signed in with a role that cannot manage users)
Client contacts
{{ clientUsersLabel }}
{{ u.initials }}
{{ u.name }}
{{ u.email }}
{{ u.clientLabel }} {{ u.roleLabel }} Disabled
Role groups
Click a group to see who's in it. Change someone's group from the list above.
Roles — one per person
{{ m.initials }}{{ m.name }}
Add-ons — stack on any role
{{ m.initials }}{{ m.name }}
{{ m.initials }}{{ m.name }}
{{ portalRoleNote }}
{{ platHeading }}
Owner only
{{ platSub }}
{{ wsMsg }}
Layout
All cards are shown.
{{ deskW.renewals.title }}
Renewals & certificates
{{ rw.label }}
{{ rw.sub }}
{{ rw.value }}
{{ deskW.todo.title }}
To-do
{{ todoLeftLabel }}
{{ td.label }}
Nothing yet — your list syncs to your account.
{{ deskW.timer.title }}
Timer
{{ timerDisplay }}
{{ deskW.notes.title }}
Notes
{{ notesStatus }}
{{ deskW.revenue.title }}
Revenue snapshot
{{ rvSnapMonth }}
This month
{{ rvSnapAddon }}
AI add-on
{{ rvSnapDue }}
Past due
{{ deskW.aiusage.title }}
AI usage
{{ aiuAddon }}
Add-on revenue / mo
{{ aiuFirms }}
Firms subscribed
{{ deskW.kpis.title }}
Recurring revenue
{{ platMrr }}
{{ platArr }} annualized
Active workspaces
{{ platActive }}
{{ platTotal }} total incl. suspended
AI add-on
{{ povAi }}
{{ povAiSub }}
Support tickets
{{ povSupport }}
open in your own desk
{{ repriceTitle }}
{{ repriceWhy }}
{{ w.name }} {{ w.detail }} {{ w.change }}
{{ repriceMsg }}
{{ deskW.status.title }}
{{ stBannerText }}
PHP {{ stPhp }} · checked {{ stChecked }}
Require two-factor — every MSP's team
A floor no workspace can switch off. Off by default; each MSP can require it themselves.
Require two-factor — all client users
Applies to every client portal user in every workspace. Heavy-handed — leave off unless a contract demands it.
Public demo — demo.aecdesk.app
{{ demoTglNote }}
Visitor guide
{{ guideTglNote }}
{{ c.label }}
{{ c.note }}
External services {{ d.name }} · {{ d.label }}
Scheduled jobs {{ j.name }} · {{ j.age }}
{{ deskW.errors.title }}
Server errors · {{ stErrCountLabel }}
{{ e.kind }} {{ e.msg }}
{{ e.meta }}
No errors need review.
{{ deskW.security.title }}
Security & backups
{{ stSecFails }}
Failed logins 24h
{{ stSecThrottled }}
Throttled 24h
{{ stSecLocks }}
Lockouts 24h
{{ stBackupText }}
nightly · deploy/backup.php
{{ stHrText }}
hourly snapshot · keeps 48
{{ stNasText }}
offsite copy on the NAS
{{ stSlackText }}
incident alerts to Slack
{{ stSlackMsg }}
{{ deskW.attention.title }}
Needs attention
{{ a.text }}
All quiet — payments current, nobody over their seats, no ceilings hit.
{{ deskW.workspaces.title }}
Workspaces
{{ w.name }}
{{ w.sub }}
{{ w.mrr }}
{{ w.last }}
No active workspaces yet — create the first one.
{{ deskW.activity.title }}
Recent activity
{{ e.when }}
{{ e.detail }}
{{ e.who }}
Nothing recorded yet.
{{ deskW.email.title }}
Email & domains
Outbound  {{ povMailOut }}
From  {{ povMailFrom }}
Domain  {{ povMailDomain }}
Email-to-ticket  {{ povMailIn }}
set in the config file, serves every workspace
{{ wsViewLabel }}
{{ wsViewCount }}
Filter from the Workspaces menu on the left rail
{{ t.name }}{{ t.statusLabel }}
{{ t.hostLabel }}
{{ t.kind_label }} · {{ t.plan_label }} {{ t.cycle_label }} · {{ t.seatLabel }} · {{ t.ticketLabel }} · {{ t.mrrLabel }}
{{ t.recoveryLabel }}
{{ t.trialLabel }}
{{ t.pastDueLabel }}
{{ emptyFilterLabel }}
Demo & internal
{{ demoGroupCount }}
Ours, not customers — excluded from revenue and seat counts
{{ t.name }}{{ t.statusLabel }}Demo
{{ t.hostLabel }}
{{ t.kind_label }} · {{ t.plan_label }} {{ t.cycle_label }} · {{ t.seatLabel }} · {{ t.ticketLabel }} · {{ t.mrrLabel }}
{{ t.recoveryLabel }}
{{ t.trialLabel }}
{{ t.pastDueLabel }}
A failed payment starts a 14-day grace period, then the workspace is suspended. Closing one keeps its data for {{ purgeDays }} days so the firm can come back.
Recurring revenue
{{ platMrr }}
{{ platArr }} annualized
AI add-on
{{ pvAi }}
packs and top-ups, {{ pvMonth }}
This month
{{ pvTotal }}
plan + AI across active firms
Past due
{{ pvPastDue }}
firms with a failed payment
WorkspacePlanAI add-onTotal /moStatusAuto-send
{{ r.name }}
{{ r.sub }}
{{ r.plan }} {{ r.ai }} {{ r.total }} {{ r.statusLabel }}
Total billed monthly{{ pvTotal }}
Invoices — {{ pvMonth }}
One numbered invoice per firm: the plan charge plus the AI they bought. Stripe collects the card — this is the record you send them.
{{ pvMsg }}
{{ i.no }}
{{ i.name }}
{{ i.linesLabel }}
{{ i.total }} {{ i.statusLabel }} No billing email
None generated for {{ pvMonth }} yet.
Card payments will run through Stripe — AECDesk stores only the subscription reference, never card numbers. Emailing an invoice from here can be wired to the existing Postmark path when you want it.
Add-on revenue
{{ paiRevenue }}
{{ paiMonth }}
Our token cost
{{ paiCost }}
metered by us, live
Margin
{{ paiMargin }}
{{ paiMarginSub }}
Actions used
{{ paiUsed }}
{{ paiEnabledLabel }}
Anthropic account
Platform key {{ paiKeyLabel }} Admin key {{ paiAdminLabel }} Model {{ paiModel }} Pricing {{ paiPriceLabel }} Billed this month {{ paiBilled }} · {{ paiTokens }} tokens
Add anthropic_admin_key to the config file (Console → Admin keys) to show what Anthropic actually charged.
Who may use AI
You allow a firm below (AI on), then their admin turns the assistant on in their settings.
{{ paiMasterLabel }}
{{ paiMasterSub }}
New firms start allowed
Off is the safe default — you switch each firm on yourself.
Defaults for newly allowed firms
Applied the moment you allow a firm · per-firm overrides under Manage below.
Trial actions
Monthly ceiling
Trial actions — free actions a firm gets to taste the assistant before buying; around 20 works well, zero means they must buy first. Monthly ceiling — caps how many actions one firm can run per month, whatever they bought; our exposure limit.
WorkspaceUsageChargedOur cost
{{ w.name }}{{ w.chipLabel }}
{{ w.sub }}
{{ w.usageLabel }}
{{ w.revenue }}
{{ w.cost }}
{{ w.marginLabel }}
{{ w.name }}
AI plan controls for this firm.
Monthly ceiling
{{ w.ceilingText }}
Free actions
{{ w.grantText }}
Own API key (BYO)
{{ w.byoText }}
No workspaces yet.
Payment failed — {{ phDunningCount }}
{{ d.name }} {{ d.graceLabel }}
Failed sign-ins
{{ phFailed }}
last 7 days, all workspaces
Idle workspaces
{{ phIdle }}
no activity in 14 days
Over seat count
{{ phOverSeats }}
more technicians than seats sold
Server
PHP {{ phPhp }}
{{ phServerSub }}
External services
{{ phDepsFetched }}
{{ d.name }}
{{ d.desc }}
{{ d.label }} status ↗
Reading service status…
Server resources
{{ psvSub }}
{{ m.label }}
{{ m.value }}
{{ m.sub }}
WorkspaceTechniciansTicketsLast activity
{{ h.name }}{{ h.statusLabel }}
{{ h.sub }}
{{ h.seatLabel }}
{{ h.tickets }}
{{ h.lastLabel }}
No workspaces yet.
Audit · kept 90 days
to
Nothing recorded in this view yet.
{{ e.when }}
{{ e.action }}
{{ e.detail }}
{{ e.who }}
Every time the platform owner opens a customer workspace it is recorded here as tenant_enter.
Broadcast a notice
{{ annComposeSub }}
Live now: {{ cpText }}{{ cpAudLabel }}
Message
Audience
Tone
Show for (days)
Empty message + Save takes the banner down. Days as 0 keeps it up until you clear it.
{{ ctcName }}
Who to call at this firm. Their own clients' contacts stay in their workspace — never here.
Their staff
{{ p.name }} {{ p.email }} {{ p.roleLabel }}
No staff accounts yet.
Phone
Billing email
Timezone / hours
Notes
{{ dashGreeting }}
{{ finDateLine }}
Equipment requests
{{ reqsCount }} waiting
{{ r.title }}
{{ r.sub }}
{{ r.meta }}
{{ r.chipLabel }}
Contracts up for renewal
Nothing renews in the next 30 days.
{{ vocClients }}
{{ clientsPageSub }}
{{ clientInviteHeadline }}
{{ clientInvite }}
Valid 7 days. They set their own password — you never see it. The link is here in case you would rather send it yourself.
{{ engAsgTitle }}
{{ engAsgDesc }}
Engineer
No company matches that search.
{{ c.name }}{{ c.statusTag }}
{{ c.openLabel }} · {{ c.userLabel }}
{{ c.metaLabel }}
{{ emptyTitle }}
{{ emptySub }}
Pending invitations
{{ i.email }}
{{ i.roleLabel }} · {{ i.whereLabel }}
{{ i.statusLabel }}
{{ cd.name }}
{{ cd.statusLabel }}
{{ cd.metaLabel }}
Office
{{ cd.address }}
Main phone
{{ cd.phone }}
Contract
{{ cd.contract }}
Sign-in domains
{{ cd.domainsLabel }}
{{ cd.autoLabel }}
Users
{{ cd.peopleCountLabel }}
{{ p.initials }}
{{ p.name }}
{{ p.email }}
{{ p.roleLabel }} {{ p.statusLabel }} {{ p.ticketLabel }} No account yet View only
No contacts yet — use Invite user to add their first person.
Nobody here matches that search.
Edit client company
Changes apply everywhere — tickets, portal and billing.
Company name
Discipline
CMMC level
Office address
Main phone
Contract
SLA coverage
Sign-in domains
Auto-create users from these domains
Verified sign-ins on these domains create an end-user automatically. Free-mail domains are never matched.
{{ ecErr }}
View this demo as
{{ guideTitle }}
{{ guideText }}
{{ demoResetNote }}
{{ portalBrandLabel }}
Powered by AECDesk
{{ portalCoLabel }}
{{ pMeName }}
{{ pMeRole }}
{{ pMeCompany }}
{{ pMeEmail }}
Add desktop shortcut
{{ pbAlertTitle }} {{ pbAlertBody }}
{{ pbPlatIcon }} {{ pbPlatText }}
{{ pbWsIcon }} {{ pbWsText }}
{{ portalClosedMsg }}
{{ pReq.subject }}
{{ pReq.meta }}
{{ pReq.chipLabel }}
{{ m.initials }}
{{ m.author }}{{ m.when }}
{{ m.redactedNote }}
{{ m.body }}
{{ m.attCount }}
Add a reply
{{ at.name }}
{{ at.meta }}
{{ attErr }}
{{ attBusyLabel }}
{{ pReq.closedNote }}
{{ portalHomeTitle }}
Glad that sorted it. Nothing was raised — if it comes back, just start a request and we'll pick it up.
{{ portalErr }}
What's going on?
Before you submit — these might solve it right now:
Tell us more
How urgent is it?
{{ pPrioHint }}
{{ pf.ext }} {{ pf.name }}{{ pf.meta }}
{{ attErr }}
{{ portalReqsEmptyLabel }}
{{ r.subject }}
#{{ r.id }} — updated {{ r.updated }} ago
{{ r.byLine }}
{{ r.plainLabel }}
How did we do?
{{ r.csatDoneLabel }}
AECDesk
AECDesk
You're invited to {{ acceptInfo.workspace }}
{{ acceptInfo.email }} — joining as {{ acceptRoleLabel }}
{{ acceptSupportLabel }}
Your name
Choose a password
{{ acceptErr }}
Your password is stored only as an encrypted hash — nobody at your IT provider can read it.
{{ brandTitle }}
{{ brandTagline }}
Live demo
See the desk your firm would actually run
Two sandboxes, loaded with realistic AEC work. Click anything — nothing sends email, and both reset every night. Pick the one that matches how you support people.
No sign-up, no password — one click and you are in. Both demos let you switch between admin, engineer, finance and client end-user views while you look around.
Curious what your team's own sign-in page looks like? See the sign-in screen. Already have a workspace? Sign in at yourfirm.aecdesk.app.
{{ demoEnterTitle }}
No sign-up and no password. Everything inside is sample data, nothing sends email, and it resets nightly.
{{ demoEnterErr }}
The demo is offline right now — we're making improvements. Check back shortly.
{{ brandTitle }}
{{ brandTagline }}
Sign in to {{ wsName }}
Sign in to your workspace
You usually sign in at {{ lastWsName }} Continue →
This workspace is suspended. Contact AECDesk support to restore access.
{{ wsUnknownLabel }}
Two-factor code
Open your authenticator app and enter the current 6-digit code. A recovery code works too.
or with email
Email
Password
{{ loginMsg }}
{{ loginErr }}
Password verified — but your account lives in the {{ loginRedirName }} workspace. Sign in there:
Take me to my workspace →
Get a sign-in code
{{ codeSub }}
Work email
6-digit code
{{ codeMsg }}
{{ codeErr }}
Reset your password
Enter your email and we'll send a reset link. It works for 30 minutes.
{{ forgotMsg }}
Check your inbox — and the spam folder, just in case.
Email
{{ forgotErr }}
Find my workspace
Each firm signs in at its own address, like yourfirm.aecdesk.app. Enter your email and we'll send you yours.
{{ findMsg }}
The email lists every workspace your address belongs to.
Email
{{ findErr }}
Choose a new password
for {{ resetEmail }}
New password
Confirm new password
{{ resetErr }}
{{ resetMsg }}
This reset link is invalid, already used, or expired. Reset links last 30 minutes — request a fresh one from the sign-in page.
Help & support
Your workspace, plan and seat count come through with it, so there is no need to describe your setup — just tell us what happened. Prefer email? Write to help@aecdesk.app.
{{ helpMsg }}
What's this about?
Summary
Details
{{ helpErr }}
{{ helpMineTitle }}
{{ hm.id }} {{ hm.subject }} {{ hm.meta }} {{ hm.status }}
We reply by email — replying to that email adds to the same request.
{{ dlg.title }}
{{ dlg.message }}
New workspace
Creates an isolated workspace and its Master Admin login.
Firm name
Web address
.aecdesk.app
Their staff and their clients all sign in here. Leave blank to use the firm name.
Type of customer
Billing
Technician seats
{{ wsPriceLabel }} — everything included, unlimited client-side users.
Master Admin login
Demo sandbox
Seeds sample data, adds a "viewing as" role switcher, swallows outbound email, and resets to the sample set nightly. Use this for the demo-msp and demo-it sandboxes.
{{ wsErr }}
{{ newClientLabel }}
{{ newClientSub }}
Picked up where you left off. Cancel clears it.
{{ ncNameLabel }}
Discipline
Compliance
Office address (optional)
Main phone (optional)
Contract (optional)
{{ ncCHint }}
Sign-in domains (optional)
Auto-create users from these domains
Anyone signing in with a verified email on these domains (Microsoft SSO, or an email-verified login) gets an end-user account, no invite needed. Free-mail domains are never matched.
SLA coverage
24/7 means their SLA clock never pauses overnight or on weekends.
{{ ncInviteHeading }}
We email them the invitation, and you get the link too in case you'd rather send it yourself. They set their own password.
{{ ncErr }}
Invite someone
They choose their own password — you never handle it.
Title · optional, shown on tickets
Role
{{ invClientLabel }}
They will be able to raise and follow requests for {{ invClient }}. Only {{ itTeamRef }} can grant anything beyond that.
{{ invErr }}
{{ inviteHeadline }}
{{ inviteLink }}
Add user
They sign in at this same address with the password you set.
Role
People who only file tickets are added from {{ vocClients }}, not here.
{{ nuErr }}
↵ open · esc close · type "dark" to switch theme
AI assistant
Nothing runs until you choose it. Each one uses credits from your monthly allowance.
Matching articles from your own knowledge base is free and always on — see the Knowledge tab on the right.
Cover for someone
New tickets for their clients route to the stand-in until the end date.
Who is away
Covered by
From
Until
What it covers
{{ covNoneText }}
{{ covErr }}
Desktop notifications
Native cards from your operating system, so you see new work even when this window is behind something else. Keep a tab open — closing the browser stops them.
How desktop notifications work
A card appears in the corner of your screen when something needs you — even if AECDesk is minimised or behind another window. Click the card and the ticket opens.
Permission is per computer and per browser, so each machine asks once. Your choices about what to be told stay with your account and follow you everywhere.
Nothing appearing? Check the operating system as well as the browser — on Windows: Settings → System → Notifications, with Focus Assist / Do not disturb off. On macOS: System Settings → Notifications → your browser. A tab must stay open; closing the browser stops them.
{{ notifyAskText }}
Your browser is blocking notifications for this site. Open the padlock icon in the address bar, set Notifications to Allow, then reload.
This browser does not support desktop notifications.
Notifications
{{ notifyMasterHint }}
Tell me about
{{ n.label }}
{{ n.hint }}
{{ notifyTestMsg }}
Even when this tab is closed
{{ pushHint }}
{{ pushMsg }}
{{ attPeek.name }}
{{ attPeek.meta }}
This file opens in its own tab — nothing from an attachment is ever rendered inside AECDesk.
From the knowledge base
{{ portalArticle.title }}
Does this match?

{{ p.p }}

{{ portalArticle.paStepTitle }}
{{ portalArticle.walkCount }}

{{ portalArticle.walkCur.p }}

{{ portalArticle.paProseText }}

{{ p.n }}

{{ p.p }}

This one is a job for us.
We know this problem and how to fix it — the work needs access you will not have. Raise a request and we will pick it up from here.
{{ paThanks }}
Nothing was raised yet.
Did this solve it?
Try it from any side of the desk
Pick who you want to be. Everything here is sample data and resets nightly.
{{ plansTitle }}
{{ plansSub }}
How many of your staff need a seat?
{{ seatMinNote }} Your clients and their people are always free.
{{ seatTotal }}
{{ seatEach }}
{{ pi.t }}
{{ plansLegacyNote }}
{{ plansFoot }}
{{ plansErr }}
{{ toastText }}
What the client will receive
Nothing has been sent. Your logo and workspace name are added around this.
To: {{ wiPrevTo }}
{{ wiPrevSubject }}
{{ wiPrevBody }}
PDF{{ wiPrevAtt }}
{{ pConfTitle }}
{{ pConfBody }}
{{ pConfCopyHint }}
Request equipment
Tell us what you need and we will come back with a quote — nothing is ordered or charged from here.
{{ h.name }}
{{ h.desc }}
{{ h.priceLabel }}
{{ h.qty }}
{{ hwSummary }}
{{ it.qty }} ×{{ it.name }}
When do you need it?
Anything else we should know?
{{ hwErr }}
{{ hwSummary }}
Your earlier requests
{{ r.items }}
{{ r.meta }}
{{ r.chipLabel }}
Requests stay here as history — the status chip updates as your IT team quotes, orders and delivers.
{{ pbModalTitle }}
{{ pbModalSub }}
{{ p.title }}
Proposal {{ p.no }} · {{ p.validLabel }}
{{ p.statusLabel }}
{{ p.scope }}
{{ l.d }}{{ l.a }}
Total{{ p.totalLabel }}
Recorded under your name.
Nothing waiting on your approval.
{{ p.title }}
{{ p.no }}
{{ p.totalLabel }} {{ p.statusLabel }}
No decided proposals yet.
No invoices yet.
{{ i.no }}
{{ i.dateLabel }}
{{ i.totalLabel }} {{ i.statusLabel }}
Edit profile
{{ meInitials }}
Name
Title
Shown under your name. Leave blank to show your role ({{ meRoleName }}).
{{ profErr }}
Set your availability
Teammates see this on your avatar and in Users & roles. Clients never see it.
Note (optional)
Out from
Back on
{{ availDatesHint }}
Dates put you on the office calendar so the team can plan. They do not hand your clients to anyone — set a coverage rule for that, and their tickets route to your stand-in and back on their own.
Keyboard shortcuts
{{ r.k }}{{ r.d }}
Linear-style single-key shortcuts (g t, a, s) land with the production build.
AECDesk
AECDesk
{{ aboutVersion }}
The helpdesk built for AEC. Ticketing, time tracking, contracts, billing and an AI assistant — for the IT teams and MSPs that keep architecture, engineering and construction firms running.
·
© 2026 AECDesk. All rights reserved. AECDesk and the AECDesk logo are trademarks of AECDesk. Third-party names (Autodesk, Microsoft, NinjaOne and others) belong to their owners and appear only to identify integrations.
{{ legalTitle }}
Open in new tab
{{ legalFrame }}
New ticket
Linked to project · {{ ntProjectName }}
Subject
What is going on? (optional)
Company
Priority
AEC category
picked from the subject — change it if it's wrong
Requester — who is this for?
{{ ntBehalfNote }}
{{ ntErr }}
{{ projHeading }}
Project name
{{ vocClientSing }}
Job code
Status
Billing
Budget hours
Project manager
Hourly rate (for cost)
Target date
Team members (optional)
The manager leads and is accountable; members also see the project and show on it.
{{ peErr }}
{{ renewHeading }}
{{ renewFrom }}
Renew for
{{ renewValueLabel }}
Note for the history
{{ renewErr }}
{{ recHeading }}
What happens
{{ vocClientSing }}
Assign to
Frequency
Day of the week
Day of month
How often
Notes for the tech
{{ recHint }}
{{ reErr }}
{{ mergeHeading }}
Everything moves onto the ticket you keep — messages, time entries and tags. The others close with a pointer to it, so nothing is lost.
Keep this ticket
{{ mergeErr }}
Research
{{ aiResHeadline }}
{{ aiResStage }}
Only primary sources — vendor documentation and their own support forums. Nothing is sent to the client and nothing is saved until you choose it.
{{ aiResFailMsg }}
Nothing was charged — actions are only spent on a briefing that comes back.
The re-run did not go through — the briefing below is from your earlier run.
{{ aiResFailMsg }}
{{ aiResOnFile }}
Likely cause
{{ aiResCause }}
Try this
{{ st.n }} {{ st.text }}
Watch out
{{ aiResWatch }}
Reply you can send
{{ aiResClient }}
Drops into the composer — edit before sending.
Sources
Written from public documentation, not from your systems — check it against the versions actually in use before acting.
Log time
How long
minutes
Day worked
{{ atBackdatedHint }}
Date
From
To
{{ atWindowHint }}
Work type
Note
{{ atErr }}
Set up two-factor
Open your authenticator app — Microsoft Authenticator, Google Authenticator, 1Password, Authy — and scan this. No app on your phone? Use the setup key instead.
Open your authenticator app, choose "Add account" → "Enter a setup key by hand", and type the key below. Name it AECDesk.
Your firm requires two-factor. Finish this to sign in — it takes about a minute.
Setup key
{{ mfaSecret }}
Type is time-based, 6 digits, 30 seconds — the defaults in every app.
Code from the app
{{ mfaEnrollErr }}
Two-factor is on — save these
Each recovery code works once, in place of the app, if you lose your phone. Print them or put them in your password manager — they are not shown again.
{{ r.c }}
{{ wiPropHeading }}
{{ wiPropSub }}
What is this for
Client
Amount ($)
{{ wiPropTitleLabel }}
Line items (optional — total replaces the amount above)
Total: {{ wiPropItemsTotal }}
Scope — what's included (optional)
Recipient (optional)
{{ wiPropContactNote }}
Valid for
{{ wiPropFoot }}
{{ wiPropErr }}
{{ kbPeek.title }}
{{ kbPeek.sub }}
Symptoms

{{ p.p }}

Resolution
{{ kbPeek.walkCount }}

{{ kbPeek.walkCur.p }}

{{ p.n }}

{{ p.p }}

Cause & notes

{{ p.p }}

{{ resHeading }}
{{ resBulkNote }}
#{{ b.id }} {{ b.subject }}
What fixed it?
One line is plenty. This is what the next technician finds — and what the assistant learns the fix from.
Time spent
min
Work type
{{ resPremiumNote }}
Resolution emails are switched off for this workspace, so nothing is sent either way.
{{ resErr }}
For the requester
{{ kbReqQuickTitle }}
{{ kbReqQuickHelp }}
{{ kbReqQuickNote }}
{{ kbReqQuickErr }}
{{ kbEditor.heading }}
Title
Symptoms — what the user reports
Resolution — the steps that fix it
For the requester — optional; the only steps clients ever see
{{ kbReqHelp }}
{{ kbReqNote }}
Cause & notes — optional
Site-specific details — server names, VLANs, license hosts — belong on a {{ vocClientLower }}-scoped article, not a shared one.
Filing
{{ kbFilingSummary }}
Product
What goes wrong
Applies to
Who can read it
{{ kbVisNote }}
Tags — comma separated; this is what makes an article findable from every angle
{{ kbHint }}
{{ kbErr }}
{{ invoice.id }} {{ invoice.status }}
{{ invoice.date }}
{{ invoice.client }}
Scope
{{ invoice.scope }}
{{ l.d }}{{ l.a }}
Total{{ invoice.amount }}
{{ invoice.dueWord }} {{ invoice.dueLabel }} · sent to {{ invoice.sentTo }}
{{ wiErr }}
{{ invoice.sendBoxLabel }}
{{ invoice.revisedNote }}
{{ invoice.replacesNote }}