Self-hosted platform for standing up and running software factories on AWS: complete DevSecOps environments with secure delivery pipelines, supply-chain controls, compliance evidence and multi-tenant governance — in minutes, not months.
Support cases with a response target you can hold us to, raised by named contacts from inside the dashboard. Three levels, bought per contact, available on every tier.
urgent.A support case is a message thread with a commitment attached. It carries a
customer-quotable number, the level it was opened under, a severity you chose, and
a response_due_at computed when it was raised.
| Level | First-response target | Clock | Urgent severity | Price |
|---|---|---|---|---|
| Standard Support | 2 business days | business hours | — | $19.99 / mo per contact |
| Priority Support | next business day | business hours | — | $49.99 / mo per contact |
| Premium Support (upgrade) | 8 hours, any day | 24×7 | ✅ | $99.99 / mo per upgraded contact |
Annual is about 10× monthly, rounded like every other price. Volume pricing applies as contact counts rise. Premium is an upgrade to a Standard or Priority contact rather than a separate level, so it is bought for the specific people who need round-the-clock cover.
Support is an add-on at every tier and included in none. That is deliberate
and it is worth knowing before you plan: an organisation with no support bundle
has no contacts and raises no cases. The one exception is the unlimited tier,
which is uncapped.
supportContacts is a live cap, checked when you designate someone rather
than counted per period. Buying three Standard contacts lets three named people
raise cases; designating a fourth is refused until you add capacity.
The allowance is pooled across your account — a root organisation and its teams draw on the same number, so a team does not need its own bundle.
Designating and revoking are both audited, and a revoke records how many open cases the departing contact left behind. Removing a leaver is never blocked on their open cases — handing the cases on is better than keeping the person — so the count makes the handover a recorded fact rather than a later discovery.
Premium is a second, separate cap (supportPremiumContacts), because the
question it answers is different: who was entitled to 24×7 coverage, and when.
Upgrades and downgrades have their own audit actions for exactly that reason.
response_due_at is computed at open, from the level and the severity you chose.
The two baseline levels are read against one platform business calendar — a
single IANA timezone (SUPPORT_BUSINESS_HOURS_TZ, America/New_York by default),
configurable working days, a closing hour and a holiday list. A case raised after
the working day closes starts its clock at the next open day.
Premium does not use the calendar at all. “8 hours, any day” is plain wall-clock, through nights, weekends and holidays. That is the whole of its coverage claim, and it is the one target with no business-hours exemption.
Targets are stated in the units you experience, and they improve on a single clock: two business days, then one, then eight hours that never pause. An earlier ladder was expressed in business hours, which flattered the numbers roughly threefold — 48 business hours is six working days — so the figures above are the real ones.
The clock stops when support first replies, stamped at that moment rather than inferred later from message timestamps. A second reply cannot move it.
The reported figure is elapsed time minus the time the case spent waiting on you. A case answered in an hour, where the reply then took four days to come back, is not a four-day first response — in either direction.
You choose severity when you open the case, and it decides which target applies:
| Severity | Set by |
|---|---|
normal (default), high |
any contact, at open |
urgent |
Premium contacts only |
Severity is staff-only to change afterwards. You pick it at open; after that it is our record of what was agreed, which is what makes a later conversation about a missed target a factual one.
| Status | Means |
|---|---|
open |
raised, awaiting a first response |
awaiting_support |
back with us after your reply |
awaiting_customer |
we have replied and are waiting on you — this is the state that pauses the elapsed-time measurement |
resolved |
answered; reopenable by replying |
closed |
finished |
A case is never silently archived. resolved and closed are distinct so that
“we believe this is answered” and “this is finished” are different statements.
When a case is closed you can rate it 1–5 with an optional comment. CSAT is the one case field staff may not write, and it is deliberately not in the audit trail: your opinion of your own closed case changes no entitlement and no clock, so it belongs in the record of the case rather than the record of who did what.
A soft allowance of SUPPORT_CASE_ALLOWANCE_PER_CONTACT cases per contact per
30-day window, counted against contacts bought rather than designated — if you
paid for five, you are entitled to five contacts’ worth.
It never refuses a case. Crossing it raises a metric and flags the audit row, and anything beyond that is a conversation. “We have stopped answering you” is not a sendable message.
Operator-side; see Environment Variables for the full table.
| Variable | Default | What it does |
|---|---|---|
SUPPORT_ENABLED |
true |
Withdraws all three levels from the catalog when false. On-call paging requires it. |
SUPPORT_PREMIUM_ENABLED |
true |
Offers the 24×7 level. A deployment with no round-the-clock rota can withhold the SKU while keeping the catalog complete. |
SUPPORT_BUSINESS_HOURS_TZ |
America/New_York |
The single IANA zone the business calendar is read in. |
SUPPORT_BUSINESS_HOURS_DAYS |
1,2,3,4,5 |
Working weekdays. |
SUPPORT_BUSINESS_HOURS_END_HOUR |
17 |
When a working day closes. |
SUPPORT_BUSINESS_HOURS_HOLIDAYS |
— | Non-working dates, YYYY-MM-DD. |
SUPPORT_CASE_ALLOWANCE_PER_CONTACT |
5 |
Fair-use cases per contact per window; 0 disables the check. |
SUPPORT_CASE_ALLOWANCE_WINDOW_DAYS |
30 |
The rolling window it is counted over. |
Premium’s target runs overnight, so pair it with a pager. SUPPORT_PREMIUM_ENABLED
ships on while on-call paging ships off, which means a fresh deployment offers a
24×7 target with nothing rostered against it. That is a reasonable choice for a
vendor already on call elsewhere, and OnCallCasesBreachingUnpaged makes it a
visible one. See On-call Paging.
Metadata only — no message body ever reaches the audit trail.
support.case.open and support.case.reply (staff side only, carrying whether
that reply stopped the clock); the four workflow actions status, severity,
assign and transfer, each with both sides of the transition; the contact
entitlement actions designate, revoke, upgrade and downgrade; and
support.case.note for internal staff notes, which records that a note was
written and its length but never its text.
See Audit Events for the full list.