Objective
- Let teams choose which columns appear on Attik’s six default (prebuilt) worklists in Tools → Work — the same column flexibility custom worklists already have — without changing what records each list includes.
- Reduce the workaround of recreating a default queue as a custom worklist just to get the right columns (called out explicitly for Open Quotes, including the on hold status view).
- Improve scan speed for operational queues (quote follow-up, on-hold triage, unpaid jobs, etc.) by surfacing the fields each team cares about on the row.
Background
- Custom worklists (Mongo
worklistdocuments) support saved column configuration viavisibleColumns,riGroupFields, andcrGroupFieldsonworklistSchema, configured inNewWorklistDrawer.tsxand rendered throughWorklistResolver.tsxwithWorklistTableHeader,SingleJobsBar,SingleQuoteBar, andSingleEventBar. - Default prebuilt worklists are not Mongo documents. They are hardcoded in
WorklistMenu.tsx(DEFAULT_WORKLISTS: quotes, published, agreements, unconfirmed, paid, invoices) and routed in[[...type]]/page.tsxto dedicated task-check components (QuoteList,IsPublished,AgreementsNeeded,UnconfirmedOrders,JobsNotPaid,InvoicesDue). - Those default components do not persist or expose column configuration. Row components (
SingleJobsBar,SingleQuoteBar) already acceptvisibleColumns, but defaults never pass them — they fall back to catalog defaults incolumnConfig.tsviagetEffectiveVisibleColumns. - A
WorklistColumnsButton.tsxcomponent exists for in-view column toggling on custom worklists but is not wired to any page today; column changes on custom worklists are currently set at create/edit time inNewWorklistDrawer.tsx. - On the June 16 implementation call, users said default quote and on-hold quote views still need column selection similar to custom worklists, while keeping built-in list criteria locked.
- “On hold” is not a separate default worklist route — it is the Open Quotes worklist (
/work/quotes) filtered tostatus=on_holdviaHardcodedFiltersBar/WorklistFiltersBar. - ATT-1639 (Done) shipped customizable columns for custom worklists only; this work closes the gap for prebuilt defaults.
- No attachments, linked documents, or inline media on this ticket.
Product Decisions
Locked
- Criteria stay locked — Default worklist inclusion logic (API params, status filters, date windows, grouping rules) must not become user-editable. Only which columns display on each row is in scope.
- Prefer configuring defaults over duplicating — Teams should be able to tune columns on the built-in lists instead of being forced to recreate equivalent custom worklists.
- Primary user pain (June 16 call) — Open Quotes (all status tabs, especially on hold) is the highest-priority default surface; other defaults are in scope unless explicitly deferred.
Open
- v1 surface scope — Ship column config for all six default worklists at once, or quotes-first (including on-hold filter) with inspection defaults in a follow-up?
- Persistence model — Store column prefs per company per default-worklist key (shared by all staff), per user, or another model? Custom worklists store config on the worklist document (
_companyId-scoped). - Column editing UX — In-view column picker (wire up
WorklistColumnsButtonor equivalent on the list toolbar) vs admin/settings-only vs both? Custom worklists today only expose column pickers in the create/edit drawer. - Grouped default layouts — Jobs Not Paid and Open Invoices render via
GroupedClientJobsBar(client-grouped), not the single-row grid used byWorklistResolver. Should column configuration apply to grouped rows, or only to single-row defaults (Unconfirmed Orders,Not Published,Agreements Not Signed,Open Quotes)? - Required-info and contact columns — Should defaults support the same
grp_ri/grp_crgroup columns and individualri_*/cr_*keys as custom worklists, or a static-catalog-only subset for v1? - Relationship to ATT-1938 — ATT-1938 covers distinct required-info columns with blank-state visibility. Should this issue depend on or ship after ATT-1938, or ship with today’s grouped/stacked RI display and upgrade when ATT-1938 lands?
- Table header parity — Custom worklists show
WorklistTableHeaderabove rows; most defaults do not. Is a sticky column header row required for defaults when optional columns are enabled?
Scope
Frontend (attik-frontend)
- Default worklist entry points —
WorklistMenu.tsxkeys and routes;src/app/tools/work/[[...type]]/page.tsxdispatches toQuoteList,IsPublished,AgreementsNeeded,UnconfirmedOrders,JobsNotPaid,InvoicesDue. - Row rendering —
SingleJobsBar.tsx,SingleQuoteBar.tsx, and groupedGroupedClientJobsBar.tsxalready partially supportvisibleColumns; defaults must load saved prefs and pass them through (plusWorklistTableHeaderif product requires header parity). - Column catalog — Reuse
src/util/worklist/columnConfig.tsentity types (inspections,quotes); map each default worklist to the correct entity type (all inspection-based defaults →inspections; Open Quotes →quotes). - Existing column UI —
NewWorklistDrawer.tsxcolumn picker pattern and/or unusedWorklistColumnsButton.tsxare likely reuse points; product decision needed on which surface to expose for defaults. - Filters unchanged —
HardcodedFiltersBar.tsx/WorklistFiltersBar.tsx(including quote status tabs like on hold) stay as-is; this work is column display only.
Backend (attik-backend)
- No persistence today for default-worklist column prefs (grep shows no
defaultWorklistpreference model). A new schema/route (e.g. company-scoped prefs keyed by default worklist id) or extension of an existing settings document is likely needed — exact shape is an engineering choice once persistence model (Open #2) is locked. worklistSchema.tsvisibleColumns/riGroupFields/crGroupFieldsfields define the column shape custom worklists use; defaults should store compatible column key arrays if reusing the same rendering path.
Out of scope (unless product expands Open decisions)
- Changing default worklist criteria, sort, limits, or filters.
- ATT-1513 exclude/hide on default worklists (separate backlog issue).
- ATT-1938 distinct per-field required-info columns with blank cells (adjacent; dependency TBD).
- Converting default worklists into editable Mongo
worklistdocuments.
References
- ATT-1639 — Custom worklist columns (Done)
- ATT-1938 — Required-info as distinct worklist columns (Triage, adjacent)
- ATT-1513 — Exclude on default worklists (Backlog, adjacent)
- Frontend:
attik-frontend/src/app/tools/work/WorklistMenu.tsx,attik-frontend/src/util/worklist/columnConfig.ts,attik-frontend/src/components/task-check/WorklistResolver.tsx - Backend:
attik-backend/src/models/worklistSchema.ts