Skip to main content

Multi-View Rendering

If the data model is flexible — records plus typed field values — then nothing forces a Project to look like a table any more than it forces a Contact to look like a card. The same underlying records can be sliced, grouped, and rendered in whatever shape best suits the user looking at them. ClickUp and Monday proved the pattern; we apply it to a trades CRM.

The five view types

Every record type ships with at least one default view of each shape. Tenants and individual users save their own variants on top.

Table
Bulk edits · scanning many records at once · spreadsheet-style exports
Best for: Operations admin, bookkeeper
Kanban
Pipeline stages · status flow · dragging records between buckets
Best for: Dispatcher, sales pipeline
Gantt
Time-blocked schedules · dependencies · resource utilization
Best for: Project manager, multi-day installs
Card
Visual scanning · photo-heavy records · field reference
Best for: Tech browsing job site cards
Knowledge
Long-form documentation · SOPs · linked record reference
Best for: Training, customer-facing playbooks

What a view actually is

A view is a row in the views table. It's nothing more than a saved configuration that the rendering layer reads to decide how to display the underlying records.

views · the saved-display table

ColumnTypePurpose
idTEXT PKView UUID
nameTEXTHuman-readable label · "Overdue Roof Jobs"
record_typeTEXTWhich entity this view filters · Project / Contact / Invoice / custom
view_typeTEXTtable · kanban · gantt · card · knowledge
filtersJSONArray of {field_id, op, value} predicates ANDed together
sortJSONArray of {field_id, direction} clauses applied in order
group_byTEXT NULLField used to bucket records · used by kanban (columns) and gantt (swimlanes)
visible_fieldsJSONOrdered list of field_ids to render and column widths
configJSONView-type-specific knobs · row height, card art field, gantt zoom level, knowledge layout
scopeTEXTprivate (user-only) · team (shared) · system (default)
owner_user_idTEXT FKWho created the view · used for permission checks on edits

Mockup · Table view

The familiar spreadsheet, with sticky headers, click-to-edit cells, multi-select, and bulk operations. Best for bookkeepers paying invoices in batch or admins fixing a hundred records after an import.

Projects · Table View
+ Filter↕ Sort≡ Group
ProjectCustomerTechStatusQuotedMargin
Roof Replacement · 445 MapleSarah GarciaJake TorresOn Site$12,80034%
Gutter Install · 220 OakMarcus PatelCarlos ReyesComplete$3,40042%
Deck · 310 Willow WayGreg FosterSam RiveraScheduled$8,40038%
Siding · 88 RiversideLinda NguyenUnassignedOverdue$22,00016%
Roof Repair · 114 BirchTom AlvarezMaria DiazEn Route$3,60049%

Mockup · Kanban view

Same records, grouped by group_by = status. Each column is a status enum value; each card is one record. Dragging a card to a different column writes a set_field change for status. Best for dispatchers managing flow and sales pipelines.

Projects · Kanban · grouped by Status

Scheduled2
Deck · 310 Willow
Greg Foster
Sam R.
Estimate · 77 Cedar
Amy Chen
Jake T.
En Route2
Roof Repair · 445 Maple
Sarah Garcia
Tony B.
Roof Insp · 114 Birch
Tom Alvarez
Maria D.
On Site1
Gutter · 220 Oak
Marcus Patel
Carlos R.
Complete3
Siding · 142 Pine
Bob Jenkins
Jake T.
Window · 84 Elm
Linda Park
Sam R.
Gutter · 22 Aspen
Greg Foster
Carlos R.

Mockup · Gantt view

Time-blocked schedule, one row per resource (tech or crew), time on the X-axis. Bars are projects placed at their scheduled start through expected end. Dependencies (waiting on permit, waiting on materials) draw as arrows between bars.

Projects · Gantt · this week · grouped by Tech

MonTueWedThuFriSatSun
Jake Torres
Roof · 445 Maple
Inspect · 77 Cedar
Tear-off · 22 Pine
Carlos Reyes
Gutter · 220 Oak
Deck · 310 Willow
Sam Rivera
Permit pickup
Siding · 88 Riverside
Maria Diaz
Roof Insp · 114 Birch
Roof Repair · 445
Tony Bianchi
Emergency leak · 22 Aspen

Mockup · Card view

The most visual layout. Each record renders as a card with a hero image (job photo, signature, before/after) plus a few headline fields. Best for techs flipping through job sites in the field, or owners showing the work portfolio to a prospect.

Recent Jobs · Card View

Roof Replacement
445 Maple St
Complete
Gutter Install
220 Oak Ave
On Site
Deck Build
310 Willow Way
Scheduled
Siding Repair
88 Riverside Dr
Overdue

Mockup · Knowledge view

The least obvious one, and possibly the most powerful. Records render as long-form documents with linked references to other records. Useful for tenant-defined SOPs, training material, customer-facing service playbooks, and after-action reports — turning the CRM into a wiki that's always tied to live data.

SOP · Standard Roof Inspection
How to inspect a residential roof in under 90 minutes

Every inspection starts with a chimney check. Walk the perimeter before climbing. Use the Standard Inspection Form to capture findings — its fields auto-populate into the customer's record. Reference the Material Identification Guide when in doubt about shingle type.

Linked records
Form · Standard InspectionGuide · Material IDChecklist · SafetyTemplate · Estimate Output

Records linked here are live. If the inspection form changes, this page reflects it without anyone editing the SOP. New techs onboard against this view; experienced techs reference it when they hit edge cases.


How saving and sharing works

Views are first-class records — they live in the same per-tenant D1 as everything else, they sync over the same protocol, and they obey the same RBAC rules. Three scopes determine who can see and edit each view:

Private
Only the owning user can see or edit. Used for personal saved searches and ad-hoc setups. Survives across devices via sync.
Team
Visible to everyone in the team subject to record-level RBAC. Anyone with the appropriate edit permission on the view can change it. Default for views created by Admins.
System
Ship as defaults with the platform and with industry-specific field bundles. Can be cloned but not edited in place — protects the "sensible default" path.

Switching views is free

Because every view is just a different render of the same underlying records, switching from Table to Kanban to Gantt is instantaneous and stateless. There's no copy of data per view, no risk of one view being out of date relative to another, no separate permission model. The dispatcher's Kanban and the bookkeeper's Table are looking at the same database rows; they just see them through different lenses.

The same pattern applies to dashboards: an Owner who wants to see a kanban of overdue invoices grouped by aging bucket can do it. So can a bookkeeper who wants a gantt of upcoming AR commitments. The data model doesn't care; the rendering layer composes the right shape at request time.

This is the payoff of every earlier architecture decision. A flexible record model lets fields differ per tenant. Per-tenant D1s make queries fast. The sync protocol keeps everyone consistent. Teams + RBAC controls what each viewer is allowed to see. The view system is the last piece — the surface that turns it all into something a human actually looks at.


Industry-specific default views

Every industry template ships with views pre-configured. A roofer onboarding the system doesn't start from a blank canvas — they start with a working pipeline, a working schedule, and a working invoice board, and customize from there.

Industry templatePre-configured views
RoofingKanban (sales pipeline by stage) · Gantt (tear-off + install schedule) · Table (warranty register) · Card (job portfolio) · Knowledge (material spec sheets)
HVACKanban (service tickets by status) · Gantt (maintenance contracts) · Table (refrigerant inventory) · Card (equipment register with photos) · Knowledge (model service guides)
PlumbingKanban (active calls by urgency) · Gantt (rough-in / finish phases) · Table (permit register) · Card (recurring service customers)
Pool & SpaKanban (service routes by day) · Gantt (chemistry schedule) · Table (chemistry test results) · Card (pool reference photos)
Solar InstallKanban (sales · permits · install · interconnect) · Gantt (multi-phase install) · Table (permit / inspector tracker) · Knowledge (system spec sheets)

That's the architecture loop closed. A new tenant signs up, gets a per-tenant D1 with a pre-loaded schema and pre-loaded views, and is operational on day one. From there they customize — adding fields, building views, defining roles — without ever touching code, schema migrations, or vendor support.