Internal review · low fidelity

sexton.ai — review wireframes

Every screen in the product drawn as a structure-only wireframe, so the conversation is about what each screen does and what is missing — not about colour, type or polish. Read the annotations beside each frame; they are the review prompts.

21 product screens 6 coming-soon stubs 87 routes 13 policies 18 migrations source: c3e910f
01

At a glance

What exists today. “Built” means a real, persisted, tested workflow. “Stub” is a labelled placeholder with no fake data behind it.

Screen inventoryrail · screen · state
Rail areaScreenStateWhat it does
GroundsOverview (Map)builtLeaflet map, plot pins, operator-drawn section polygons, today's services, open work orders, map editing panel
GroundsPlotsbuiltSearchable grave/niche/crypt inventory, filtered by section
GroundsPlot detailbuiltEdit one inventory record; burial history, documents, activity
GroundsUpkeepbuiltWork orders: create, filter, assign contractor, complete, attach files
GroundsWork order detailbuiltEdit, complete with notes, contractor card, documents
GroundsContractorsbuiltContact directory reused by burials and work orders
GroundsStonesstubMonument workflow — field list agreed, schema not built
GroundsTrainingstubDeferred until a compliance need exists
BurialsNewbuiltIntake: decedent, plot, service time, funeral director, optional permit
BurialsIn progressbuiltActive services, checklist, permit filing, documents, print summary
BurialsCompletebuiltSortable, filterable burial register
BurialsArchivebuiltSame register beyond the archive window
BurialsService summarybuiltAuthorised printable page for the morning of a service
RecordsLog bookbuiltStaff-authored notes; append-only activity trail below
RecordsCatalogbuiltSearch the seeded public CT cemetery index and claim a record
RecordsRegulationsbuiltVersioned, audience-scoped cemetery rules
CommunityBoardbuiltThreads with families/vendors/staff; internal notes; read state
CommunityThreadbuiltTimeline, participants, staff reply or recorded external message
CommunityFAQbuiltVersioned answers plus a 10-question starter set
SettingsMembersbuiltInvite, change role, remove workspace members
—Alerts bellbuiltPer-recipient alerts derived from real records
—Internal adminbuiltSource review, catalog edit/merge, workspace switching
—Helper (assistant)stubBlocked on a policy decision; no open-ended cost approved
  1. Six “coming soon” items sit in the primary navigation. Honest, but it makes the product read as unfinished. Do they belong in the rail at all before they exist?
  2. Nothing is faked. No sample cemetery, no invented plots or burials, no sample conversations. A new sexton starts from an empty desk by design.
  3. Alerts are derived, never authored. They clear themselves when the underlying problem goes away.
02

The shell

Every signed-in screen shares one frame: top bar, grouped left rail, working stage, and an optional right-hand community board.

App shell — authenticated layoutDashboardShell.vue · NavigationRail.vue
☰ Menu sexton.ai Grounds › Map Oak Hill Memorial ▾ 🔔 2 HM
Grounds
Map
Plots
Upkeep
Contractors
Stones · soon
Training · soon
Burials
New
In progress
Complete
Archive
Records
Log book
Catalog
Regulations
Community
Board
FAQ
Settings
Members
Helper · soon
View header
Section title
One line explaining what this screen is for
Primary actionSecondary
Working stage
Threads
  1. Five rail groups, one open at a time, auto-opening to whichever group the current screen belongs to. Do staff navigate by group or by memory of position?
  2. Cemetery switcher re-resolves the whole session against the cemeteries the user is actually authorised for. It is not a cosmetic label change — worth confirming that is obvious.
  3. Responsive behaviour: at ≤1200px the community board becomes a slide-over; at ≤920px the rail becomes an off-canvas drawer. Machine-tested for overflow, but never walked through on a real phone by a real sexton.
  4. The right-hand board appears on every authenticated page. Useful, or noise on screens that have nothing to do with conversations?
03

Grounds

Where the physical work lives: the map, the plot inventory, work orders, and the people you call.

Grounds › Overview (Map)/app/map
The busiest screen in the product: five different jobs share one surface.
Oak Hill Memorial
A private operational view of the grounds. Add real sections and plots as you walk the cemetery.
Edit mapLog new burial
Map section: AllPlot status: All
—
Plots
—
Available
—
Open work
—
Overdue
—
Upcoming
Operational map only — staff-entered, not surveyed boundaries. Pin = plot or section; dashed area = operator-drawn section boundary.
Today's board
Sat, Sep 12
Upcoming services
permit filednext: vault set
Open work orders
Sections at a glance
A · 42 plots · 12 availableB · 30 plots · 2 overdueWest lawn · 18 plots
Keyboard-reachable strip: plot counts, availability, open/overdue work per section; links to the filtered plot list.
Work orders
WorkPriorityDueStatus
Hedge line along Section B3OverdueOpen
Reset leaning marker, lot 142FriIn progress
  1. Five jobs, one surface: today's services, open work, section summary, the plot map, and the editing panel. Does this need splitting, or just a firmer visual hierarchy?
  2. Map editing panel slides in beside the map with a widget picker: Cemetery location, Section marker, Place a plot. Only the chosen widget renders.
  3. Two creation modals (Create a section, Create a plot) open from inside those widgets and reuse the same form component as the Plots page — added specifically so staff do not page-hop mid-task.
  4. Section boundaries are drawn by clicking points, then saved with the new section. No coordinates are typed.
  5. Address lookup is a button press, server-side and cached, so staff do not have to pan and zoom from a national map to find the cemetery.
Grounds › Plots/app/plots
Plots
Every row is a real private inventory record for this cemetery.
Search name or plotSection: All
PlotLatest burialStatusNotes
A-09Eleanor WalshOccupiedMarker reset 2024
A-10—Available—
B-01—ReservedFamily holds until spring
Add a plot or space
Section ▾Lot codePlot/space codeStatus ▾
Add plot or space
  1. Server-side search, filter and pagination — a cemetery with thousands of plots does not ship them all to the browser.
  2. Rows open the detail view. Is the whole row clickable enough of an affordance for a non-technical user?
Grounds › Plot detail/app/plots/{space}
A-09
Update the private inventory record and review its burial history. Map location: 41.500001, −72.700001
Place on mapBack to plots
Inventory record
Section ▾Lot codePlot/space codeType ▾Status ▾
Private notes — marker condition, access notes, maintenance follow-up
Save plot details
Plot documents
File a document
Burial history
Eleanor Walsh
Sep 12, 10:00 · Completed
Permit CT-2026-0144 · Town clerk
Plot activity
  1. Sensitive status changes ask twice. Moving between reserved and occupied requires an explicit confirmation, server-checked — not just a client dialog.
  2. Documents, burial history and activity all live on the record rather than in a separate archive view.
Grounds › Upkeep/app/upkeep
Upkeep
Work orders, maintenance schedules, and contractor assignments.
Open 4Active 2
Status ▾Category ▾Priority ▾✕ Grounds✕ Overdue
WorkCategoryContractorDueStatus
Hedge line along Section BGroundsGreen MeridianOverdueOpenComplete
Reset leaning markerMonument—FriIn progressComplete
  1. Dismissible filter tags plus a filtered count, so a user can always see what is being hidden from them.
  2. Completion is available from the list as well as the detail page — a yard crew should not have to open a record to close it.
Grounds › Work order detail/app/work-orders/{id}
Hedge line along Section B
Description · created by Helen Marsh
Priority 3Due Fri
Edit work order
Title
Category ▾Status ▾Priority ▾
Section ▾Plot ▾Contractor ▾Assignee ▾
Save
Contractor
Green Meridian Landscaping
555-0144 · yard@example.com
Location
Section B · Lot 14
Complete this work order
Completion notes
Mark complete
Documents
Photo — finished hedge2.1 MB
File a document on this work order
Type ▾Choose file
Save to archive
  1. One page for edit, complete, contractor and files. The crew works from a phone in the yard — is this the right density for that?
  2. Assignee is a workspace member; contractor is a directory contact. Two different kinds of “who”.
Grounds › Contractors/app/contractors
Contractors
People and firms you call when the yard crew cannot cover the work. These records also become funeral-home choices on a burial.
NameTypeWorkPhoneEmail
Hale Funeral HomeFuneral homeServices, vault555-0162hale@example.com
Green MeridianContractorHedges, trees555-0144yard@example.com
Add a contact / Edit contact
NameType ▾OrganizationWork or specialty
PhoneEmail
Private notes
Add contact
  1. Clicking a row loads it into the form for editing. Does that read as “edit” without an explicit edit button?
  2. This one table feeds three other screens — burial funeral director, work-order contractor, and the directory itself.
Grounds › Stones (stub)/app/stones
Stones & monuments
Labelled placeholder. No marker-proof cards are faked.
Planned scope
  1. The field list is already agreed with the team: type, material, style, extras, ownership, family stones, status flag, and a staged work log (order → proof → fabrication → install → complete). Only the schema is missing.
Grounds › Training (stub)/app/training
Training
Deferred — no compliance workflow has been approved.
Planned scope
  1. Flagged only so the decision is explicit. Nothing is blocked on it.
04

Burials

The operational core: take in a service, run it, close it, and keep the register.

Burials › New/app/burial-new
Log a new burial
Select an unoccupied plot, add the service details, and the work moves onto the active board.
Service
Deceased namePlot or space ▾
Service date and timeFuneral director (optional) ▾
Only unoccupied plots are offered. The funeral-director list comes from Contractors; if it is empty the form says so rather than hiding the field.
Permit — entirely optional
Type ▾ReferenceIssuing authorityIssued on
A burial still saves with no permit, and it can be filed later from In progress.
Notes
Permit notes
Yard notes — vault set Friday, check tent location
Add to In progress
  1. The permit never blocks a service. A deliberate decision: paperwork delays must not stop a burial. Is that obvious from the screen?
  2. Is intake long enough to be a problem when a director is standing at the desk? Only the first four fields are actually required.
Burials › In progress/app/burials-progress
In progress
Planned services stay here until staff close the cemetery record.
Eleanor Walsh · A-09
Sat, Sep 12, 10:00 AM · Hale Funeral Home
Permit CT-2026-0144 · Town clerk · pending
Yard notes: vault set Friday
File permitPrint summaryMark complete
Service checklist
☑ Confirm grave open☐ Vault delivered☐ Tent placement+ Add step
Burial documents
File a document
  1. The checklist is per-service, not a fixed template — each burial carries its own next actions.
  2. Three ways out of this card (file permit, print, complete). Too many equally-weighted buttons, or correctly flat?
  3. Overdue services should probably shout. Today a late service looks the same as one three weeks out.
Burials › Complete and Archive/app/burials-complete · /app/burials-archive
Complete
Recently completed services. Archive is the same register beyond the archive window (default 12 months).
Sort: Service date ▾Section ▾1–25 of 214
DeceasedPlotServiceFuneral homePermit
Eleanor WalshA-09Sep 12, 2026Hale Funeral HomeCT-2026-0144
Robert DoyleA-11Aug 30, 2026Hale Funeral HomeCT-2026-0121
Margaret ChenB-04Jul 02, 2026——
‹ PreviousPage 1 of 9Next ›
  1. Complete and Archive are the same screen with a date window. Is the naming clear enough for a sexton looking for an old record?
  2. This is the closest thing to a searchable burial register the product has. Should it be promoted out of the Burials group?
Printable service-day summary/app/burials/{id}/summary
Service day — Eleanor Walsh
Saturday, September 12, 2026 · 10:00 AM
PlotA-09 · Section A
Funeral directorHale Funeral Home · 555-0162
PermitCT-2026-0144 · Town clerk
Files2 attached
Yard notes
No public URL — same workspace and cemetery authorisation as the burial itself.
  1. A paper substitute for the morning of a service. Does anyone actually print it, or would a phone view be better?
05

Records

The paper trail: what staff wrote down, what the cemetery's own rules say, and the public catalog the workspace draws from.

Records › Log book/app/logbook
Log book
Staff-authored notes for the cemetery day, with the automatic activity trail below for audit history.
Add a log entry
What happened today…Occurred atAdd entry
Staff log
Helen Marsh · Sep 12, 3:10 PM
Helen Marsh · Sep 11, 8:40 AM
Automatic activity trail
WhenEntryBy
Sep 12 10:04Completed burial for Eleanor WalshHelen Marsh
Sep 12 09:12Saved permit CT-2026-0144Helen Marsh
Sep 11 16:22Added plot A-10Helen Marsh
  1. A typed entry cannot be corrected. Typos are permanent. Editing needs an audit history, which is designed but not built. Small gap, daily annoyance.
  2. Two different things share one screen: staff prose and a system audit trail. Is that the right pairing?
Records › Catalog/app/catalog
Find a Connecticut cemetery.
Search the seeded public catalog, review the source evidence, then connect the cemetery to your private workspace.
Search catalogSearch
3 matching records
Oak Hill Memorial Cemetery
Hale #1234 · historic preservation · location confidence 62%
104 source linksView evidenceConnect to workspace
Old North Burying Ground
CemeteryRegistry.US · public directory
  1. “Connect to workspace” does less than it sounds like. It only creates the authorisation link — no plots, sections or burials appear. Correct behaviour, but the screen does not say so, and a new sexton will expect a filled-in cemetery.
  2. Source evidence is stored carefully (Hale, state, directory, confidence) but the screen does not clearly separate “a historical source says this” from “a sexton confirmed this”. That distinction is a core promise of the product.
Records › Regulations/app/regulations
Regulations
Cemetery rules and policies, readable aloud.
Write a regulation
TitleAudience ▾Status ▾
Effective fromEffective untilSource document
Body — plain language, read aloud
Publish v1
Winter decorationsv3 · family · published
Effective Nov 1 – Mar 15 · change notes: moved removal date
  1. Every edit increments the version and records change notes. No sample policy copy ships as real rules — the page opens empty.
06

Community

Conversations with families, vendors and staff, plus the shared FAQ.

Community › Board/app/community
Board
Threads with families, vendors, and staff for this cemetery. External contacts are recorded here; they do not log in.
Open a thread
SubjectCategory ▾Audience: With external contact ▾
External contact ▾Link to plot / burial ▾
First message
Open thread
Staff only swaps the contact picker for a workspace-member picker and keeps the thread internal.
Category ▾Status ▾Scope: All / Staff only / With contacts ▾☐ Unread only
Headstone repair questionExternal contact
Family · awaiting staff · 3 messages · Helen, Hale Funeral Home
“Can we add an inscription to the existing stone?”
Winter scheduleStaff only
Open · 2 messages · Helen, Marcus
  1. Two audiences in one list. Staff-only and external threads share the board with a filter. Does that risk an internal note being mistaken for a family-visible one?
  2. External parties never log in. Their messages are recorded by staff. That is a fundamental constraint worth stating on the screen.
Community › Thread/app/community/threads/{id}
Headstone repair questionExternal contact
Family · about A-09 · opened Sep 10 by Helen · awaiting staff
CloseArchive
From family (external)
Internal note · staff only
Reply from Helen
Participants
Helen Marsh (staff) · Family contact
Add to the thread
Workspace member or contact ▾
Add participant
Reply
Write a reply…or record a message from an external contact ▾Send
Staff reply → awaiting external. Recording a contact message → awaiting staff. Internal notes never change status.
  1. Status changes itself with no on-screen explanation. Replying silently flips the thread. That rule needs to be visible, or staff will find the state arbitrary.
  2. Internal notes are visually distinct (dashed border, staff-only label) and excluded from unread counts.
  3. Nothing is ever deleted — close then archive, history retained.
Community › FAQ/app/faq
FAQ
Plain-language answers staff can use with families and contacts.
Start with 10 draft answers
Creates reviewable drafts only when the FAQ is empty. Never auto-published.
Add 10 starters
Write a FAQ answer
QuestionAudience ▾Status ▾
Answer
Save
How do I find a grave?
v1 · family · published
  1. Ten starter questions are drafts, never published automatically. A human reviews before anything is family-facing.
07

Settings

Settings › Members/app/members
Members
Manage who can access this workspace.
Invite a member
EmailRole ▾Invite
NameEmailRole
Helen Marshhelen@…Owner ▾
Marcus Reedmarcus@…Editor ▾Remove
Roles: owner · admin · manager · editor · viewer. Viewer is read-only everywhere.
  1. Five roles is a lot to explain to a cemetery office. Does a two-person cemetery ever need more than owner and staff?
  2. Role is changed inline in the table while removing a member is a separate button. Different risk, similar presentation.
08

Public & onboarding

What someone sees before they ever reach a cemetery desk.

Public landing/
Hero
Cemetery work, in one quiet place.
sexton.ai is the desk for plots, burials, stones, and family notes.
Sign inSee the desk
Three things a sexton should never hunt for
“A Saturday at Oak Hill” walkthrough
Illustrative tour using the same sample cemetery as the signed-in desk.
  1. Does the landing page promise stones and a Helper? Neither exists yet.
Sign in/login
Staff sign in
Work email
Password · Show
☐ Remember this desk
Sign in to the desk
The working desk
Sample sign-in
email · password
  1. A published test account is shown on the page. Intentional for the beta. It must be switched off before public launch.
Cemetery setup/app/setup
Add your first cemetery.
Or “Add another cemetery” when one already exists.
Search the catalog
Cemetery name or townSearch
Claim an existing record, or create a private cemetery instead.
Create a private cemetery instead
Cemetery nameState ▾
Create
  1. Two paths on one screen: claim something that exists, or create something new. Which does a sexton pick when they are not sure?
09

Internal admin

Operator-only tooling for curating the public catalog and managing workspaces. Worth deciding how much of this should exist inside the product at all.

Admin › Source review/admin
Admin source review.
Staged datasets, recent import runs, and a record browser.
Staged datasets
2,941
Hale records
1,086
Registry.US
—
Deep / NRHP
Recent runs
import run · 2,941 staged · 0 rejected
Source record browser
Filter recordsBulk acceptBulk reject
Admin › Source record detail/admin/source-records/{id}
Oak Hill Memorial Cemetery
Hale Collection · record 1234
Cemetery links
Candidate match · confidence 74%
Accept linkReject link
Connect to catalog / create catalog record
Existing cemetery ▾
Import run
Hale Collection · staged Sep 8
Source payload
Admin › Catalog edit & merge/admin/catalog
Oak Hill Memorial Cemetery
Primary fields · aliases · external links · locations · 104 linked source records
Potential duplicates
Oak Hill Cem.similarity 0.91
Merge into primaryKeep separate
Admin › Workspaces/admin/workspaces
Workspaces
Internal operator view of every tenant workspace.
WorkspaceCemeteriesMembers
Helen Marsh's workspace14Switch
Review prompt: internal admin currently lives in the same app as the client product. Should it move behind a separate staff tool?
10

Shared parts

The reusable building blocks. Anything not on this list is bespoke to a single screen, and duplication shows up here first.

Shell parts5 components
DashboardShellTop bar + rail + stage + board on every page
NavigationRailGrouped accordion with coming-soon badges
CemeterySwitcherSwitch cemetery, re-resolve authorisation
NotificationMenuAlert bell, unread badge, read/dismiss
UserMenuProfile, logout
Design-system parts7 components
AppTableConsistent data tables · Upkeep, archive, admin
StatusLabelWord + colour status, never colour alone
EmptyState“Nothing here yet” with an action
FormFieldLabel + control + error binding
StatusCard / ContactCardStat and contact cards
ViewHeaderEyebrow + title + lead + actions
NavIconRail icons, always paired with a visible label
Documents & grounds parts6 components
DocumentUploadFormUpload to cemetery / plot / burial / contact / work order
DocumentListList with authorised download links
DocumentArchiveControllerOne upload path for every attachment type
GroundsMapPins, polygons, draft drawing, placement mode
SectionCreateFormCreate a section + optional boundary · used in both places
SpaceCreateFormCreate a plot · used in both places
Scaffolding leftoversLaravel Breeze defaults
PrimaryButton · TextInput · InputError · InputLabel
Modal · Dropdown · DropdownLink · Checkbox
NavLink · ResponsiveNavLink · DangerButton · SecondaryButton
Two generations coexist. Some of these are likely unused now that the product has its own design system. Cosmetic cleanup, low risk.
11

How work flows

Burial lifecycle New burialdecedent · plot · time In progressactive service Completeclosed record Archivebeyond the window createfinishage out attaches to the active service — never blocks it Permit (optional)file now or later Service checkliststored next actions Documentsscans & photos Print summarymorning of service
A permit delay must never stop a burial. The four supporting items hang off the active service, not the workflow rail.
Community thread lifecycle Open Awaiting staff Awaiting external Closed contact writes staff replies contact replies close Archivedhistory kept Staff-only threads stay Open, and internal notes never change status or count as unread. internal thread
Status is driven by real activity, not a dropdown. The rule is invisible on screen — see the thread wireframe above.
Alert generation Upcoming burial services Unfiled burial permits Outstanding burial tasks Overdue work orders Work orders due soon Threads awaiting staff Staff-only direct messages Notificationsync serviceruns per page load Alert bellper-recipient
Alerts are derived from real records and clear themselves when the underlying condition goes away. They are never authored by hand.
12

Architecture

Runtime architecture public internet Sexton staff — Vue 3 + Inertiaone SPA, no separate router Cloudflare · DNS, TLS, WAF Traefik · Coolify reverse proxy Docker container · PHP 8.3.36 (security-patched image) nginxstatic assets Laravel 13 · PHP-FPM23 controllers · 13 policies · 12 services PostgreSQL 16private, no public port Private storage volumedocuments · S3 switch OpenStreetMapgeocode, on click Every operational row is scoped to a workspace + cemetery pair by policy, with composite keys enforced in the database.
Deliberately boring and self-hosted: one container, one database, one private volume, and a single outbound dependency.
Deployment pipeline — current behaviour git push mainnew code on GitHub Coolify receives itdeploy event recorded Build pack = pinned Docker imageimage tag fixed to the patched PHP build Container restarts on the SAME imagerecord says “finished”, code is old Real path to ship a changebuild a NEW patched image → verify → deploy deliberately A side effect of the emergency PHP security patch applied on 2026-10-22: the app moved off the vulnerable build pack onto a fixed image. The security win is real and must be kept. The cost: a merged change can look shipped and not be live. This is the highest-risk item in the review.
Anyone reading deploy history will believe a change is live when it is not. Needs a repeatable build-and-deploy step and a check that the running image matches the intended commit.