VECREAL · BRAND VISUAL MOCKUPS · WORKING DRAFT v3 · 2026-04-30

Visual Direction

Cleaned and rebuilt around the locked direction: bookend wordmark (V styled like monogram + dot at end), V. monogram with tighter+bigger dot, three full-dashboard UI direction studies, deprecated explorations moved to bottom.

Bookend wordmark with styled V LOCKED

Final direction. The V is rendered as a brand-mark element (refined wider stance + softened point), inline with the typography, in clay. "ecreal" follows in Inter Semibold primary text color. The XL dot closes the wordmark in clay. The wordmark reads as one unit while the V and dot both function as brand-color elements.

XL · HERO
ecreal.
64px · INTER 600 · TRACKING -0.05em · DOT 1em
XL · ON DARK
ecreal.
CLAY-BRIGHT V + DOT FOR DARK CONTRAST
LG · MARKETING HERO
ecreal.
48px
MD · HEADER
ecreal.
32px
SM · SIDEBAR
ecreal.
22px
Why this direction

The wordmark is the only place where the V is rendered as a custom SVG brand mark instead of a typeset letter. By styling the V as a refined wider-stance geometry inline with "ecreal" typeset in Inter Semibold, the wordmark reads as one continuous word while the V and dot both function as brand-color anchors. The result: a distinctive but quiet brand presence — not a logo bolted onto text, but a typographic system where the brand color appears at two points (V at the start, dot at the end) in a way that reinforces "this is a wordmark" rather than "this is decoration around a name."

Clay Light (#A05847) is the locked accent for white surfaces — warm and lifted, retaining construction-materials earthiness without the heaviness of deeper Clay variants. Clay Bright (#C68070) on dark surfaces preserves legibility while keeping the same warmth. Clay Dark (#7A3D32) stays in the palette as a deeper accent for high-emphasis brand moments only — it's not the default.

Refinement of exact letterform proportions and kerning belongs to a real designer pass for v1+. The current geometry holds at every locked size (96 to 18px) and works in both light and dark themes via a single token swap.


V. — refined wider stance + tight bigger dot LOCKED

V monogram with dot positioned tight to V, sized for visibility. Both elements colored clay. Used wherever the wordmark is too long: favicon, app icon, mobile nav, social avatar, splash screens.

PRIMARY · TIGHT
TIGHTER · TOUCHING V
CONTAINED · APP ICON
DARK · CLAY-BRIGHT
V. monogram at context-relevant sizes
From favicon (16px) to app icon (64px) — V. holds at every scale.
16 PX · FAVICON
32 PX
64 PX · APP ICON
128 PX · LARGE APP ICON
Why this direction

The monogram uses the same V geometry as the wordmark — identical SVG path, identical dot color. Scale and proportion are the only differences. This is what makes the brand cohesive across surfaces: the favicon at 16px and the marketing wordmark at 96px are clearly the same mark, just at different presence levels.

The dot is rendered as a separate <circle> (not text) to keep it precisely aligned with the V at every render size. The contained app-icon variant uses an inverted color treatment (clay background, soft-white V + dot) for OS app-icon contexts where the icon must work against any wallpaper.

For favicon / app-icon use cases, the contained variant is preferred. For inline UI use (sidebar mark, mobile nav, social avatar), the open variant on transparent background is preferred.


How V. and the bookend wordmark relate

The brand mark is a system. V. monogram for tight contexts. Full bookend wordmark for marketing and branded surfaces. Same V geometry, same dot, different scales of presence.

ecreal.
Why this direction

One mark, two presentations. The monogram is the tight context expression — favicon, mobile, app icon, social avatar — where space won't fit the wordmark. The wordmark is the full presence expression — marketing surfaces, document headers, dashboard branding — where Vecreal needs to be named explicitly.

The V geometry, dot color, and dot proportion (∼32% of V height) are shared by reference: the monogram uses the same SVG path as the wordmark's .bk-v. Update the path in one place and both surfaces inherit the change.

Selection rule: use the wordmark whenever there is room for it to read at ≥ 18px. Below that — or in dense UI contexts where text would compete — use the monogram.


Palette

B2B software palette with warm-grounded character. Clay accent system (Clay Light primary on white, Clay Bright primary on dark) — distinct from Procore (orange), Bluebeam (blue), and the standard tech-startup blue/teal/purple.

Backgrounds & Surfaces
Mostly white with subtle warmth. Production tool, not editorial publication.
App
#FAFAF8
Primary body / app background.
Card
#FFFFFF
Card surfaces, elevated panels.
Soft
#F4F4F1
Sidebars, secondary panels.
Hover
#EFEFEC
Hover states.
Text Hierarchy
Warm-tinted near-blacks. Avoid cold blue-tinted black.
Text Primary
#1F1D1A
Headings, body emphasis.
Text Secondary
#5A5550
Body, descriptions.
Text Tertiary
#918A82
Meta, timestamps, muted.
Border
#E8E6E0
Dividers, subtle borders.
Signature Accent — Clay
Four shades. Clay Light is the locked primary for light-surface brand moments (wordmark, references, chrome). Clay Bright is the locked dark-surface accent. Clay Dark and Clay (deepest) are available for high-emphasis or hover states. Used sparingly across all surfaces.
Clay
#7A3D32
Deep brand accent. High-emphasis moments. Was previous primary.
Clay Dark
#5C2D26
Deepest. Hover/active states for Clay-family colors.
Clay Light
#A05847
LOCKED PRIMARY (light surfaces). Wordmark, references, chrome.
Clay Bright
#C68070
LOCKED PRIMARY (dark surfaces). Wordmark, references, chrome.
Semantic UI Colors · locked
Functional product UI states. Locked values match component implementations across the system.
Success / Live
#5DA17D
Live indicator, confidence high, success states, on-track schedule.
Warning · light surface
#A87A2E
Flagged status / aging / medium priority on light backgrounds.
Warning · dark surface
#d4a960
Same role as warning-light, brighter for dark surface contrast.
Error / Overdue
#c95151
Overdue, blocked, high priority, error states, sync failures.
Info
#5A6878
Muted slate. Info banners, neutral status, secondary system messages.
Success-dark
#4a8a68
Darker green for confidence-bar gradient stops.
Error-dark
#B53D3D
Saturated red for high-emphasis error contexts. Sparing use.
Forest LEGACY
#4A6B3F
Was original success. Kept for reference; superseded by #5DA17D system-wide.
Why this direction

Warm near-blacks and warm near-whites instead of cool blue-grays. Construction is a tactile industry — concrete, wood, drywall, steel. The palette grounds the brand in those materials without literally referencing them.

Clay is the singular brand accent. Used sparingly on the wordmark, citations, references, and key chrome moments. The semantic palette (success, warning, error, info) handles functional UI state, distinct from the brand. This separation is intentional — clay is a brand mark, not a status indicator.

Backgrounds are mostly white with subtle warmth (#FAFAF8) rather than pure white. Production tool, not editorial publication.


Inter + JetBrains Mono

Single-family system. Inter handles display, headings, body, UI. JetBrains Mono for technical contexts (timestamps, citations, IDs, keyboard shortcuts).

DISPLAY · INTER
700 · 44/1.1 · -0.03em
Institutional intelligence for construction GCs.
.headline-display
H1 · INTER
600 · 32/1.2 · -0.02em
The corporate brain that compounds across every project.
.heading-h1
H2 · INTER
600 · 22/1.3
Cross-source intelligence with audit-grade citations
.heading-h2
BODY · INTER
400 · 16/1.6
Vecreal reads every email, captures every meeting, watches every drawing revision, knows your firm's policies, and tells PMs what they need to know before they ask.
.body
SMALL · INTER
400 · 13/1.5
Cited from RFI-2024-0312 · Spec section 09 30 13 · Last reviewed by J. Pham
.text-small
MONO · JETBRAINS
500 · 12px
PROJECT-2026-04-30 · CITATION-#0042 · CONFIDENCE-0.94
.text-mono
Why this direction

Two families, no exceptions. Inter for narrative content (headings, body, UI labels), JetBrains Mono for technical metadata (citations, IDs, timestamps, code). This split makes the technical layer visually distinct without needing a color or weight cue — the typeface itself signals "this is data, not prose."

Both fonts are free, well-supported, and load quickly via Google Fonts. Inter is the de-facto standard for B2B SaaS (Stripe, Linear, Vercel, Notion); JetBrains Mono is widely respected in technical contexts. Choosing them prioritizes familiarity and craft over novelty.

Letter-spacing tightens at display sizes (-0.03em) and loosens at mono (+0.04em) — an old typographic rule that keeps each context comfortable to read.


Design tokens: the scale beneath everything

Formalized + locked into :root CSS variables. All locked colors, spacing, radii, motion, and shadow values now live as design tokens at the top of the file. Components reference var(--token) instead of hardcoded values, so future updates are one-line changes. Reference Stripe / Linear / Atlassian Polaris for the patterns; tuned for Vecreal's density and brand voice.

Spacing scale · 4px base
--sp-0 0px No spacing (reset)
--sp-1 2px Hairline (icon adjustment, micro-padding)
--sp-2 4px Tight (between adjacent inline elements)
--sp-3 6px Compact button gap, inline pill spacing
--sp-4 8px Action row inner padding, button gap
--sp-5 10px Section header padding, row spacing
--sp-6 12px Card-to-row gap, button padding-x medium
--sp-7 14px Card padding (compact), action row padding-x
--sp-8 16px Card padding (standard), card-to-card gap
--sp-9 20px Title-to-content gap, card padding (loose)
--sp-10 24px Section inner spacing, page padding-x
--sp-11 32px Subsection separation
--sp-12 40px Section-to-section gap (tight)
--sp-13 56px Section padding-y, hero block top
--sp-14 80px Page header padding, large breathing
Border-radius scale
--r-1 3px Small chips, count badges
--r-2 4px Reference pills, inline citations, small buttons
--r-3 5px Buttons, project pills, topbar pills
--r-4 6px Action card (tight), input fields
--r-5 7px Card surfaces (current locked baseline)
--r-6 8px Frames, large cards, swatches
--r-7 10px Modal containers, status pills (rounded)
--r-full 50% Avatars, status dots, circular buttons
Motion tokens · durations + easing
--motion-instant 0ms No transition (state change is immediate)
--motion-fast 120ms Hover states, focus rings, button press feedback
--motion-medium 180ms Tooltips, dropdowns, popovers appear/disappear
--motion-slow 240ms Modals open/close, side panels slide-in
--motion-page 320ms Route transitions, full-page state changes
--ease-out cubic-bezier(0.2, 0.8, 0.2, 1) Default — entering/appearing
--ease-in cubic-bezier(0.4, 0, 0.6, 0.4) Exiting/disappearing
--ease-in-out cubic-bezier(0.4, 0, 0.2, 1) State-to-state transitions
--ease-spring cubic-bezier(0.16, 1, 0.3, 1) Subtle "snappy" feel for affirmative actions
Responsive breakpoints
--bp-mobile < 640px Phone — single-column, sidebar collapsed to drawer
--bp-tablet 640–1024px Tablet — sidebar collapsible, two-column where possible
--bp-desktop 1024–1440px Standard desktop — full sidebar, primary work surface (PM daily use)
--bp-wide 1440–1920px Wide desktop — sidebar + main + optional inspector panel
--bp-ultra > 1920px Ultra-wide / 4K — max content width capped at 1920, side gutters auto
Focus state · rendered example
PRIMARY (focused) SECONDARY (focused)
Focus ring spec: outline: 2px solid rgba(160, 88, 71, 0.5); outline-offset: 2px; — clay-tinted ring at 50% opacity, 2px gap from element. Visible against any surface, never overlaps the element's own border. Applied via :focus-visible only (not on click, only on keyboard navigation). Stripe / Linear / GitHub all use this pattern.
Why this direction

Tokens are the system's contract with engineering. Every spacing, radius, duration, and shadow value lives in :root as a CSS variable; components consume var(--token). A future repaint of, say, "all 8px gaps to 6px" is a single-line change.

The 4px base (with a 2px hairline at sp-1) snaps everything to a clean rhythm. Stripe, Linear, and Atlassian Polaris all use this scale — it's the de-facto standard for B2B density.

Motion is intentionally restrained: 4 durations, 2 easings. No bounce. Vecreal is professional infrastructure, not a consumer app.


Icon system · first 42 icons

Stroke-based icons on 14×14 viewBox, stroke-width 1.4, stroke-linecap round, stroke-linejoin round. Single layer, no fill (except when filling is the icon's purpose, e.g., status dots). Inherit color via stroke="currentColor". Reference: Lucide / Tabler / Phosphor — geometric, calm, technical without being cold. This is a starting set; the full Vecreal icon library will grow as product surfaces stabilize.

DARK SURFACE · 44 icons
search
close
plus
minus
check
ellipsis
chevron-up
chevron-down
chevron-left
chevron-right
arrow-up
arrow-down
arrow-right
external
edit
trash
download
upload
share
link
copy
eye
eye-off
lock
user
users
mail
calendar
clock
bell
settings
menu
filter
sort
document
folder
image
info
alert
check-circle
x-circle
building
drawing
rfi
LIGHT SURFACE · 44 icons
search
close
plus
minus
check
ellipsis
chevron-up
chevron-down
chevron-left
chevron-right
arrow-up
arrow-down
arrow-right
external
edit
trash
download
upload
share
link
copy
eye
eye-off
lock
user
users
mail
calendar
clock
bell
settings
menu
filter
sort
document
folder
image
info
alert
check-circle
x-circle
building
drawing
rfi
Sizing rules:

11×11px — inline within text or buttons (e.g., search button, citation chevron)
13×13px — sidebar nav items
14×14px — default, used in icon-only buttons (28×28 button with 14px icon)
16×16px — toolbar buttons, action menus
18×18px — icon grids, prominent actions
20×20px — empty / error / loading state icons (in icon-tile container)

Stroke weight scaling: 1.4 at default 14px viewBox. Scales proportionally — at 18px, effective stroke is 1.8 (still visually 1.4 relative to icon size). Consistent visual weight across sizes.

What's coming: Construction-specific icons (drawing-revision, addendum, submittal-log, change-order, daily-report, schedule, photo, walkdown), status icons (overdue, blocked, awaiting-response, escalated), and brand-flavored icons (V monogram in icon weight). The current 42 covers UI chrome.
Why this direction

Stroke-based on a 14×14 viewBox. The 1.4 stroke-width reads consistent across all sizes (14, 16, 18, 20px) without requiring optical adjustments per size. Single-layer paths keep the SVG output small enough that inlining 42 icons doesn't bloat HTML.

Lucide / Tabler / Phosphor are the reference set — clean geometric shapes, calm visual presence. The first 42 cover navigation, status, action, communication, file, and time. The library grows as new product surfaces require it — we don't pre-build icons for use cases that haven't shipped yet.

Color inheritance via currentColor means engineering can drop an icon next to any text and have it adopt the surrounding color — no per-icon variants required.


Disciplined Premium

Reference: Linear, Vercel Dashboard, Stripe. Sharp 4-6px radius. High-contrast borders. Tight spacing. Mono prominent in metadata. Restrained accent (almost monochrome). Black primary CTA. Premium-technical signal.

ecreal.
Greenline Tower · Phase 3
UPDATED 14M AGO
Today's brief
2026-04-30 · 6 ITEMS FLAGGED
FLAGGED → DRAWING_REVISION
Mech room layout conflict surfaced in Addendum 14
Addendum 14 reroutes chilled water lines through mech room ceiling. M-301 r3 shows existing ductwork in same location. Likely affects plumbing + HVAC sub scope.
refs · M-301 Add.14 RFI-0142
CONF
0.86
3 SOURCES
OPEN_ACTIONS · 12
Submittal review · Greenline Drywall 09 30 132D
RFI draft · Mech ceiling conflictTODAY
CO pricing scrub · VCR-00423D
Meeting minutes · OAC weeklyYEST
Direction 1 read: Sharpest of the three. Black primary CTA, black active nav state, mono-heavy metadata. Almost monochrome — clay only used in citation pill (subtle bg) and brand mark. Reads as engineered, premium, sophisticated. Could feel slightly cold to construction execs but signals "this is a serious technical product." Closest to Linear/Vercel.
Why this direction

Reference set: Linear, Vercel Dashboard, Stripe. These products are the gold standard for B2B power tools — tight density, high-contrast borders, restrained accent, mono prominent in metadata. The look telegraphs "this is professional infrastructure" without needing to say it.

Sharp radii (4–6px) keep the surface feeling precise. Soft pillowy 12–16px radii read as consumer; we're building for the operator. Black primary CTA keeps the visual hierarchy on actions, not on the brand — clay stays the brand moment.

This direction is the locked default. Section 16 below shows it applied to both dark and light surfaces with the same component vocabulary.


Locked baselines: V1+V3 merged (surface depth + power density)

Locked & polished. Inter throughout (JetBrains Mono on technical citation IDs and numerics with tabular figures), 16px card padding, 8px radii, soft off-white #f7f8f8 (warm cream) for primary text on dark, scarce clay. Component refinements (Direction A applied): status-dot eyebrow with colored "FLAGGED" + muted type label fixes the eyebrow/title hierarchy; chevron-prefixed mono reference pills; compact 70px confidence track with paired "HIGH · 0.86" at consistent size; priority-coded action rows with monospace days + assignee initials; sidebar with outline icons + count badge; topbar with live indicator + project breadcrumb (no ⌘K hint). Two baselines below — dark and light with the dark sidebar as brand anchor.

Stream 1 · Dark mode · V1+V3 merged
V1 surface depth (gradient cards + inset highlight + soft shadow) + V3 density (13px card padding, 8px row padding, 6px radii, hover state visible on RFI draft row) + V1 title block (22px title + mono date pill + amber flagged pill). Editorial spacing (V2) dropped — the platform will surface a lot of information, so loose breathing wastes scan area. Open Actions header refined: dot dropped (collided with priority dots in rows), header strip given a subtle elevated background (rgba 2.2% white), label promoted to primary text (#f7f8f8) with bold uppercase, count "12" placed in a small amber chip, "3 due this week" mono subtitle right-aligned.
DARK WORKING BASELINE · V1+V3 MERGED
ecreal
Project
Today's Brief 6
Action Register
Project State
Documents
Drawings
Greenline Tower / Phase 3
Live · updated 14m ago
Today's brief
Wed Apr 30
6 flagged
Flagged / Drawing revision
Mech room layout conflict surfaced in Addendum 14
Addendum 14 reroutes chilled water lines through mech room ceiling. M-301 r3 shows existing ductwork in same location.
Refs M-301 Add.14 RFI-0142
Confidence
Open actions 12 3 due this week
Submittal review / Greenline Drywall 09 30 13
2d AS
RFI draft / Mech ceiling conflict
today AS
CO pricing scrub / VCR-0042
3d JM
Stream 2 · Light mode (with dark sidebar) · V1+V3 merged
Same V1+V3 merge applied to light surfaces. Cards get a subtle gradient (#FFFFFF → #FBFAF7) with a 0.6 white inset highlight and a soft warm shadow, so they feel like printed paper sitting on the parchment background. Same density and component logic as dark. Open Actions header uses rgba 1.8% black for the elevated strip (mirrors the rgba 2.2% white treatment on dark).
LIGHT WORKING BASELINE · V1+V3 MERGED
ecreal
Project
Today's Brief 6
Action Register
Project State
Documents
Drawings
Greenline Tower / Phase 3
Live · updated 14m ago
Today's brief
Wed Apr 30
6 flagged
Flagged / Drawing revision
Mech room layout conflict surfaced in Addendum 14
Addendum 14 reroutes chilled water lines through mech room ceiling. M-301 r3 shows existing ductwork in same location.
Refs M-301 Add.14 RFI-0142
Confidence
Open actions 12 3 due this week
Submittal review / Greenline Drywall 09 30 13
2d AS
RFI draft / Mech ceiling conflict
today AS
CO pricing scrub / VCR-0042
3d JM
Why this direction

Two streams is the operating principle: dark sidebar always as the brand anchor, with the main canvas swapping between dark and light depending on theme. The dark sidebar carries Vecreal's identity across both themes — it's the consistent visual moment regardless of which theme the user prefers for their main canvas.

This baseline merges the strongest elements of two earlier explorations: V1's surface depth (clear card boundaries, off-white #f7f8f8 text on dark) and V3's power density (16px card padding, 8px radii, tight component spacing). V2 (editorial) was rejected and archived.

Component refinements applied (Direction A): status-dot eyebrow + colored label + muted type, chevron-prefixed reference pills, 70px confidence track with paired "HIGH · 0.86", priority-coded action rows, outline sidebar icons + count badges, live indicator in topbar.


Component patterns: buttons, citations, modals, popovers, live cues, trends, states

Reusable patterns that compose into product UI. Each component shown on dark and light surfaces with the locked styling applied. These are design-system-level definitions — the actual product UI will compose these into specific surfaces (Brief, Action Register, Drafts, Project State, etc.) with iteration.

21.1 · Buttons
Six button types in three sizes. The locked CTA pattern (black bubble + soft white + clay "+") is the primary. All others derive consistent styling: 5px border-radius, Inter 500 weight, -0.005em letter-spacing on labels.
Dark surface
PRIMARY (locked CTA pattern)
SECONDARY (outlined)
DANGER (irreversible)
GHOST (low-weight)
ICON (28×28)
LOADING / DISABLED
Light surface
PRIMARY (same on both surfaces)
SECONDARY (outlined)
DANGER
GHOST
ICON
LOADING / DISABLED
21.2 · Inline citations + sources drilldown
Every factual claim in body text becomes a clickable inline pill (small chevron + mono ID, vertical-aligned to baseline). Below the body, the "Synthesized from N sources" row replaces the old REFS pills. Click the chevron to expand the full audit trail organized by source type: drawings, addendums, RFIs, emails, meetings. The chip count signals depth (22 sources, not just 3). Audit-grade transparency, executable from the surface.
Flagged / Drawing revision
Mech room layout conflict surfaced in Addendum 14
Addendum 14 reroutes chilled water lines through mech room ceiling. Add.14 shows existing ductwork in same location per M-301 r3. Owner has not yet acknowledged the conflict per the response thread on RFI-0142.
Synthesized from 22 sources
Drawings M-301 r3 M-301 r2 M-302 M-401 Addendums Add.14 Add.13 RFIs RFI-0142 RFI-0138 RFI-0119 Emails 14 messages from MEP coordination thread · Apr 24–30 Meetings MEP review · Apr 28, 14:00
Flagged / Drawing revision
Mech room layout conflict surfaced in Addendum 14
Addendum 14 reroutes chilled water lines through mech room ceiling. Add.14 shows existing ductwork in same location per M-301 r3. Owner has not yet acknowledged the conflict per the response thread on RFI-0142.
Synthesized from 22 sources
Drawings M-301 r3 M-301 r2 M-302 M-401 Addendums Add.14 Add.13 RFIs RFI-0142 RFI-0138 RFI-0119 Emails 14 messages from MEP coordination thread · Apr 24–30 Meetings MEP review · Apr 28, 14:00
21.3 · Modal popup
Click any item in a list (brief, action, document) to open in a modal that fills ~78% of the screen with the underlying page faded + blurred. Doesn't navigate away. Three regions: header (eyebrow status + close button), body (item details, drafts, sources), footer (right-aligned actions). Backdrop click + ESC close the modal. Modal surface uses the same gradient + inset highlight + soft shadow as cards but with a stronger drop-shadow (0 16px 48px) for elevation.
Today's brief
Mech room layout conflict surfaced in Addendum 14
Open actions
Flagged / Drawing revision
Mech room layout conflict surfaced in Addendum 14
Addendum 14 reroutes chilled water lines through mech room ceiling. M-301 r3 shows existing ductwork in same location. Owner has not yet acknowledged the conflict per the RFI thread.
Suggested response · RFI draft
RFI: Please confirm whether the chilled water reroute in Addendum 14 supersedes the ductwork shown on M-301 r3. If yes, please provide updated mech room layout with revised clearances. If no, please advise on coordination approach for the conflict at column line G-7.
Today's brief
Mech room layout conflict surfaced in Addendum 14
Open actions
Flagged / Drawing revision
Mech room layout conflict surfaced in Addendum 14
Addendum 14 reroutes chilled water lines through mech room ceiling. M-301 r3 shows existing ductwork in same location. Owner has not yet acknowledged the conflict per the RFI thread.
Suggested response · RFI draft
RFI: Please confirm whether the chilled water reroute in Addendum 14 supersedes the ductwork shown on M-301 r3. If yes, please provide updated mech room layout with revised clearances. If no, please advise on coordination approach for the conflict at column line G-7.
21.4 · Confidence reasoning popover
Hover over the confidence bar to reveal the agent's reasoning. Popover shows: descriptor + numeric value, prose summary of why the agent picked this confidence, factor breakdown (+ supporting / ~ uncertain / − contradicting), and what would push confidence higher. Audit-grade transparency without cluttering the resting state.
Card meta-row context
Confidence
Confidence reasoning HIGH · 0.86
3 of 4 sources agree on the conflict. M-301 r3 and Add.14 directly contradict. RFI-0142 acknowledges the issue. The 14% uncertainty is from the meeting transcript being partial.
+M-301 r3 confirms layout conflict
+Add.14 introduces explicit conflict
+RFI-0142 raises similar issue
~MEP review meeting transcript partial (one speaker missing)
Last verified 14m ago · would reach 1.0 if MEP transcript completes
Card meta-row context
Confidence
Confidence reasoning HIGH · 0.86
3 of 4 sources agree on the conflict. M-301 r3 and Add.14 directly contradict. RFI-0142 acknowledges the issue. The 14% uncertainty is from the meeting transcript being partial.
+M-301 r3 confirms layout conflict
+Add.14 introduces explicit conflict
+RFI-0142 raises similar issue
~MEP review meeting transcript partial (one speaker missing)
Last verified 14m ago · would reach 1.0 if MEP transcript completes
21.5 · Live state cues
The system is alive. Five states with motion: resting (subtle 1.6s pulse on the green dot signals "alive"), synthesizing (amber dot + indeterminate progress shimmer), just-updated (green pulse with fresher tone), stale (gray dot, no motion), error (red dot, no motion). The pulse uses two synchronized animations — expanding box-shadow halo + scaling/opacity dot — for an organic heartbeat read.
Dark surface
Live · updated 14m ago RESTING (subtle pulse, indicates "alive")
Synthesizing 4 new sources…
SYNTHESIZING (active work)
Just now · 2 new flags JUST UPDATED (fresh data)
Last sync 4 hours ago STALE (no recent activity)
Sync failed · Procore timeout ERROR (sync failure)
Live (chrome version with halo)
Light surface
Live · updated 14m ago RESTING
Synthesizing 4 new sources…
SYNTHESIZING
Just now · 2 new flags JUST UPDATED
Last sync 4 hours ago STALE
Sync failed · Procore timeout ERROR
Live (chrome version with halo)
21.6 · Trend & change indicators
Subtle pills for status (NEW, UPDATED, AGING, OVERDUE) using the semantic color system. Numeric trend deltas (↑+3 / ↓−1.8d vs prior period) for cross-time comparison. Just-now pulse for live activity. Use sparingly — one indicator per item, not a stack.
Dark surface
New First time today NEW BADGE
Updated 6h ago UPDATED (recent change)
Aging 3 days open AGING (no progress)
Overdue 2 days late OVERDUE
12 RFIs open +3 vs last week
8.2 days avg response −1.8d vs last week
RFI-0142 received a response just now
Light surface
New First time today NEW BADGE
Updated 6h ago UPDATED
Aging 3 days open AGING
Overdue 2 days late OVERDUE
12 RFIs open +3 vs last week
8.2 days avg response −1.8d vs last week
RFI-0142 received a response just now
21.7 · Empty / loading / error / first-run states
Four primary non-content states. Each uses the same card surface treatment as resting cards (gradient + inset highlight + soft shadow) so they feel like part of the system, not error pages. Centered icon-in-rounded-tile + title + body + (where appropriate) CTA. Loading uses a skeleton with the synthesizing-shimmer track to signal "actively reading sources" rather than "waiting".
Dark surface
No briefs yet
Your project is being synced. Briefs appear once Vecreal has read enough sources to flag what matters.
EMPTY (first run, post-setup)
Synthesizing brief…
LOADING (skeleton + synth indicator)
Connect Procore to begin
Vecreal needs read access to your Procore project to start synthesizing. Setup takes about 90 seconds.
FIRST RUN (pre-setup)
Couldn't reach Procore
4 hours since last successful sync. Token may have expired. Reconnect to resume live briefing.
ERROR (sync failure)
Light surface
No briefs yet
Your project is being synced. Briefs appear once Vecreal has read enough sources to flag what matters.
EMPTY (first run, post-setup)
Synthesizing brief…
LOADING (skeleton + synth indicator)
Connect Procore to begin
Vecreal needs read access to your Procore project to start synthesizing. Setup takes about 90 seconds.
FIRST RUN (pre-setup)
Couldn't reach Procore
4 hours since last successful sync. Token may have expired. Reconnect to resume live briefing.
ERROR (sync failure)
Why this direction

Section 21 is the canonical component catalog — the locked base patterns. Subsequent sections (24, 25, 26, 27, 28) extend these baselines with additional variants and use cases.

Every component shown on both dark and light surfaces. The locked styling applied here is what every product surface composes from. New surfaces must compose existing components; new components require an explicit catalog update.

This catalog plus Sections 22 (Foundations) and 23 (Iconography) form the "raw material" layer. Everything in the product is built from this vocabulary.


Button library: segmented, split, badge, loading-success, inline chips

Six new patterns building on the locked Section 21.1 button system. References: Stripe (segmented + split), GitHub (badge counts), Linear (inline chips for AI suggestions), Anthropic Claude (Accept/Edit/Reject), Cursor (action chips on AI content). Goal: complete library before product UI begins, so PMs see consistent button affordances across every surface.

DARK SURFACE
SEGMENTED CONTROL (date range, view toggle)
SPLIT BUTTON (primary action + dropdown)
BUTTON + COUNT BADGE
LOADING → SUCCESS TRANSITION
INLINE ACTION CHIPS (on AI-drafted content)
Share project link
ICON BUTTON + TOOLTIP (after 600ms hover)
LIGHT SURFACE
SEGMENTED CONTROL (date range, view toggle)
SPLIT BUTTON (primary action + dropdown)
BUTTON + COUNT BADGE
LOADING → SUCCESS TRANSITION
INLINE ACTION CHIPS (on AI-drafted content)
Share project link
ICON BUTTON + TOOLTIP (after 600ms hover)
Where each pattern lives:

Segmented control: time-range filters in Project State, view-mode toggles (List / Kanban / Gantt), priority filters
Split button: when an action has variants ("Send RFI" with options Send, Save Draft, Send Later, Schedule). Avoids cluttering the chrome with multiple buttons.
Badge count: nav items with counts (Drafts • 3, Action Register • 12), filter pills with active count
Loading-success: any async action (Send RFI, Approve Submittal, Sync Now). Transitions: idle → loading (spinner + opacity 0.85) → success (green check, hold 1.4s) → idle. Prevents double-submit and confirms completion.
Inline action chips: on AI-drafted content where the PM decides to accept, edit, or reject the draft. Familiar from Cursor / Claude Artifacts.
Icon + tooltip: chrome controls where space is tight and the icon alone is ambiguous. Tooltip appears after 600ms hover, dismisses on mouse-leave or focus-loss.
Why this direction

The button system extends the locked Section 21.1 base with six common B2B patterns. Each pattern fits a specific role: segmented for view toggles, split for "primary + variants," badge for "count of pending," loading-success for action confirmation, inline chips for AI/cited content actions.

Black solid for the primary CTA, not clay. This keeps the visual hierarchy on actions and the brand on chrome. Clay is reserved for moments where Vecreal is identifying itself (wordmark, citations, sources) — never on the action surface.

The icon-in-CTA rule (clay-bright icon + soft white text on dark primary) is the one place clay appears on an action. It's a deliberate brand moment within the action layer.


Form controls: inputs, selects, checkboxes, toggles, sliders, dates, files

Form library for any data-entry surface (RFI/submittal creation, settings, filters, drafts). Inputs use 5px radius, 1px borders, clay-tinted focus rings (3px, 18% opacity). Helper text below the input, error state with red icon + message. Multi-select uses chips inside the field. Date picker uses a calendar popover with selected date in clay, today in clay-tinted bg. References: Stripe Dashboard form patterns, Linear filters, Notion property fields.

DARK SURFACE
Keep concise — describes the question being asked
Keep concise — describes the question being asked
Auto-generated when RFI is created
Email format unrecognized
188/500
OpenIn review
April 2026
S
M
T
W
T
F
S
Checkboxes
Radio group
Toggles
0.75
File upload · states
Drop files here or click to upload
PDF, DWG, JPG, PNG · up to 50MB each
Drop to upload
M-301-r3.dwg
2.4 MB · uploading 64%
M-301-r3.dwg
2.4 MB · uploaded
LIGHT SURFACE
Keep concise — describes the question being asked
Keep concise — describes the question being asked
Auto-generated when RFI is created
Email format unrecognized
188/500
OpenIn review
April 2026
S
M
T
W
T
F
S
Checkboxes
Radio group
Toggles
0.75
File upload · states
Drop files here or click to upload
PDF, DWG, JPG, PNG · up to 50MB each
Drop to upload
M-301-r3.dwg
2.4 MB · uploading 64%
M-301-r3.dwg
2.4 MB · uploaded
Why this direction

Forms are the spine of any data-entry surface (RFI/submittal creation, settings, filters, drafts). The library covers every common control with locked sizing, focus state, and error patterns — so PMs experience consistent affordances across every form they touch.

Focus state uses a 3px clay-tinted ring at 18% opacity. Heavier than the button focus ring (2px / 45%) because forms are read more carefully — the ring needs to clearly mark which field has focus when the user is mid-flow.

Validation on blur, errors inline. Validating on every keystroke creates noisy UX during normal typing. Inline errors keep the user in context vs. a toast that requires re-reading.


Data tables: sortable, filterable, selectable, paginated

For Action Register, RFI Log, Submittal Log, Document Library, Subcontractor Registry. Sticky header with sort indicators, filter pill row above, multi-select via checkbox column, row-hover reveals action buttons (view/edit/more), pagination at bottom. The active sort column gets a clay-tinted arrow; the active page in pagination uses clay-tinted bg.

DARK SURFACE
Status: Open, In review Priority: High 5 of 142 RFIs
ID
Title
Status
Created
Due Priority Owner
RFI-0142 Mech room layout conflict
Open
Apr 30 2d High AS
RFI-0141 Slab on grade thickness
Closed
Apr 28 Low JM
RFI-0140 Curtain wall anchor spacing
In review
Apr 27 4d Med AS
RFI-0139 Stair tread material
In review
Apr 26 5d Med RC
RFI-0138 Roof drain location
Closed
Apr 24 Low JM
Showing 1–5 of 142
LIGHT SURFACE
Status: Open, In review Priority: High 5 of 142 RFIs
ID
Title
Status
Created
Due Priority Owner
RFI-0142 Mech room layout conflict
Open
Apr 30 2d High AS
RFI-0141 Slab on grade thickness
Closed
Apr 28 Low JM
RFI-0140 Curtain wall anchor spacing
In review
Apr 27 4d Med AS
RFI-0139 Stair tread material
In review
Apr 26 5d Med RC
RFI-0138 Roof drain location
Closed
Apr 24 Low JM
Showing 1–5 of 142
Why this direction

Construction data is dense — RFI logs run hundreds of rows, cost rolls span 20+ columns. The table system has to handle that density without becoming an eye chart. Mono header + sans body + right-aligned numbers + 1px row dividers do most of that work.

Sticky header on scroll. Users lose context fast in long tables — the column headers must stay visible while scrolling row 200 of 800.

Filter pills are outlined clay (not filled). Filled clay would over-color the surface; outlined keeps the table dominant while still showing "you have filters applied."


Action · stat · info · link · summary

All cards share the same surface treatment (gradient + inset highlight + soft shadow), border-radius (7px), padding (16px). They differ in internal structure: action card has a primary CTA at the bottom; stat card has a large numeric value + trend + sparkline; info card is passive disclosure with no action; link card is fully clickable with a chevron affordance; summary card has bullet content + secondary actions. References: Stripe (stat cards), Linear (action cards), Mercury (info cards), Notion (link cards).

DARK SURFACE
Action card · primary CTA
Action required
RFI-0142 needs your review
Owner has issued a response. Review and approve before continuing the mech room reroute.
Stat card · metric + trend + sparkline
Open RFIs
12 +3 vs 14d
Info card · passive disclosure
System info
Procore sync schedule changed
Real-time webhooks now active. Previously synced every 15 minutes; now within 30 seconds of change.
Summary card · bullets + secondary actions
Greenline Tower · Phase 3 · week summary
Strong week, one risk emerged
  • 3 RFIs closed, 4 new opened
  • Submittals on track for Phase 3 procurement
  • Mech room conflict surfaced — needs decision by May 8
LIGHT SURFACE
Action card · primary CTA
Action required
RFI-0142 needs your review
Owner has issued a response. Review and approve before continuing the mech room reroute.
Stat card · metric + trend + sparkline
Open RFIs
12 +3 vs 14d
Info card · passive disclosure
System info
Procore sync schedule changed
Real-time webhooks now active. Previously synced every 15 minutes; now within 30 seconds of change.
Summary card · bullets + secondary actions
Greenline Tower · Phase 3 · week summary
Strong week, one risk emerged
  • 3 RFIs closed, 4 new opened
  • Submittals on track for Phase 3 procurement
  • Mech room conflict surfaced — needs decision by May 8
Why this direction

One surface treatment, five internal structures. The shared treatment (gradient + inset highlight + soft shadow + 7px radius + 16px padding) keeps cards visually cohesive across the dashboard. The internal structure tells the user what kind of action the card affords.

Action ends with a CTA. Stat is a metric + trend. Info is passive disclosure (no action). Link is fully clickable with chevron. Summary is bullet content + secondary actions. Pick by intent, not by visual preference.



Modal · popovers · tooltips · dropdowns · context menus

The locked centered modal gets two additions (hyperlinked title + full-screen expand button). Plus four new overlay patterns: hover popover (smaller than a modal, attached to a target), email/meeting source popover (inline citation expansion with verbatim content), confirmation modal (destructive actions), dropdown menu, right-click context menu. References: Linear (issue popovers, context menus), Stripe (transaction popovers), GitHub (PR comment popovers + dropdowns), Anthropic Claude (citation hover).

Centered modal (locked) + new additions: hyperlinked title + full-screen expand

Today's brief
Mech room layout conflict surfaced in Addendum 14
Flagged / Drawing revision
VCR-BRIEF-2026-04-30-007 · Click title to open in dedicated view
Addendum 14 reroutes chilled water lines through mech room ceiling. M-301 r3 shows existing ductwork in same location. Owner has not yet acknowledged the conflict.
Suggested response · RFI draft
RFI: Please confirm whether the chilled water reroute in Add.14 supersedes ductwork on M-301 r3.

Inline citation source popovers — verbatim content

CITATION CLICK → SOURCE POPOVER WITH VERBATIM CONTENT

Click the email or meeting line in citations — instead of an agent summary, the popover shows actual verbatim content. The PM trusts the source because it's real, not synthesized.

Email thread · 14 messages Apr 24–30
RE: Mech room coordination · Greenline Tower Phase 3
Aaron Schmidt · Mech Sub Apr 30, 09:14
"Confirmed: existing ducts on M-301 r3 at column G-7 conflict with new chilled water routing in Add.14. Need clarification on which takes priority before we order materials."
Maria Rodriguez · PM Apr 29, 17:32
"Looping in MEP coordinator. Scheduling review for tomorrow afternoon. Aaron, please bring updated as-builts."
Tom Kowalski · Owner Rep Apr 28, 14:05
"Addendum 14 supersedes drawing; please proceed with reroute. Will issue formal direction by EOW."
+ 11 more messages
Meeting transcript Apr 28, 14:00 · 47m
MEP Coordination Review
5 attendees · Aaron, Maria, Tom, Jin, Rebecca
14:08 Aaron
"The conflict is at column G-7. We have 24-inch supply ducts there per the existing M-301, and the addendum is asking for chilled water lines through the same volume."
14:16 Tom (Owner)
"Addendum 14 takes priority. We need to issue an RFI to confirm clearance after reroute and have the design team respond before procurement deadline."
14:32 Maria (PM)
"I'll draft RFI-0142 today and send for review by EOD. Let's plan to have a response within 48 hours of issue."
+ full transcript (47m)

Hover popover (small overlay attached to target)

DARK SURFACE · HOVER POPOVER

The Mech room conflict involves M-301 r3 and addendum revisions.

Drawing source 14m ago
M-301 Mechanical Plan, Level 3
Revision 3 · uploaded Apr 28 · sheet 1 of 4
"Existing 24" supply ductwork at column G-7 conflicts with new chilled water reroute per Add.14."
LIGHT SURFACE · HOVER POPOVER

The Mech room conflict involves M-301 r3 and addendum revisions.

Drawing source 14m ago
M-301 Mechanical Plan, Level 3
Revision 3 · uploaded Apr 28 · sheet 1 of 4
"Existing 24" supply ductwork at column G-7 conflicts with new chilled water reroute per Add.14."

Confirmation modal (destructive actions)

Brief draft
Discard this draft?
You'll lose 4 paragraphs of edits. This action can't be undone.

Dropdown menu (button-triggered)

DARK SURFACE · DROPDOWN MENU
Item actions
LIGHT SURFACE · DROPDOWN MENU
Item actions

Right-click context menu (row-level)

RIGHT-CLICK CONTEXT MENU

Hover any brief, action, or document row, then right-click to surface the same actions a dropdown menu would.

Why this direction

Five overlay patterns covering the full disclosure spectrum: modal (focused decision), popover (inline source disclosure), tooltip (brief hint), dropdown (selectable menu), context menu (right-click). Each has a distinct role and rules — mixing them collapses the affordance vocabulary.

The modal gets two new affordances: a hyperlinked title (jumps to the full source/route) and a full-screen expand button (opens the modal contents as a dedicated route). This matches Linear and Stripe modal patterns.

Source citation popovers are the Vecreal-specific pattern — clicking an inline citation opens a popover with the verbatim source text. This is what makes "show your work" visible at the surface level.


Identity initials · filter chips · tags

Avatars show initials only — Vecreal is a passive capture tool synthesizing on the user's behalf, not a collaborative space. No online/away/offline statuses (we don't track presence). No user photos (we don't collect them). The avatar marks who something is attributed to (assignee, RFI author, document uploader) without performing presence theater. Avatar groups stack with proper z-index layering + 2px surface-colored ring around each circle so the overlap is visible. Chips: filter (selected/unselected with optional status dot), removable (active filters with x), with avatar inside (assignee/mention picker).

DARK SURFACE
Avatars · sizes (24, 28, 32, 40, 56) · initials only
AS AS AS AS AS
Avatar group (with overflow chip) · proper z-index layering
ASMRTKJP+5
Chips
All Open In review Closed FILTER CHIPS
Status: Open Priority: High Owner: Maria REMOVABLE CHIPS (active filters)
ASAaron Schmidt ASMaria Rodriguez CHIPS WITH AVATAR (mention picker)
LIGHT SURFACE
Avatars · sizes (24, 28, 32, 40, 56) · initials only
AS AS AS AS AS
Avatar group (with overflow chip) · proper z-index layering
ASMRTKJP+5
Chips
All Open In review Closed FILTER CHIPS
Status: Open Priority: High Owner: Maria REMOVABLE CHIPS (active filters)
ASAaron Schmidt ASMaria Rodriguez CHIPS WITH AVATAR (mention picker)
Why this direction

Avatars show initials only, no photos, no presence indicators. Vecreal is a passive synthesis tool, not a collaboration space — we don't track presence and we don't collect user photos. The avatar marks who something is attributed to (assignee, RFI author, document uploader) without performing presence theater.

Avatar groups stack with z-index layering + 2px surface-colored ring around each circle so the overlap is visible without colors bleeding through. Stack max 4 visible; show +N for the rest.

Chips have three roles: filter (selected/unselected toggle), removable (dismissable filter pill), assignee picker (with embedded avatar). Their visual differences signal their behavior.



Relative · absolute · ranges · aging

When to use which: relative time (full prose like "14 minutes ago") for human-friendly contexts — brief headers, activity feeds, last-updated indicators. Compact mono ("14m ago", "3d", "Apr 30") for chrome / dense data — topbar, action rows, table cells. Absolute time ("April 30, 2026 · 14:23 EST") for formal contexts — archived audit trails, cited timestamps in citations modals, reports. Date ranges with em-dashes for periods. Aging colors communicate urgency: green "today/just now", neutral "ago", amber "aging", red "overdue".

DARK SURFACE · DATE/TIME DISPLAY PATTERNS
Relative time
just now 14 minutes ago 2 hours ago yesterday 3 days ago last week 3 weeks ago 2 months ago
Compact mono · chrome contexts
14m ago 2h ago 3d 2w 3mo Apr 30 Wed Apr 30 Apr 30 14:23
Absolute time · for archival / formal contexts
April 30, 2026 Wednesday, April 30, 2026 Apr 30, 2026 · 14:23 EST 2026-04-30T14:23:00−05:00
Date ranges
Apr 24 — Apr 30 April 24 — 30, 2026 Apr 24–30 · 7 days Last 14 days · Apr 17 — Apr 30
Aging / status (color-coded)
Created today Updated 6h ago Aging 4 days Overdue 2 days Due in 3 days Due today
LIGHT SURFACE · DATE/TIME DISPLAY PATTERNS
Relative time
just now 14 minutes ago 2 hours ago yesterday 3 days ago last week 3 weeks ago 2 months ago
Compact mono · chrome contexts
14m ago 2h ago 3d 2w 3mo Apr 30 Wed Apr 30 Apr 30 14:23
Absolute time · for archival / formal contexts
April 30, 2026 Wednesday, April 30, 2026 Apr 30, 2026 · 14:23 EST 2026-04-30T14:23:00−05:00
Date ranges
Apr 24 — Apr 30 April 24 — 30, 2026 Apr 24–30 · 7 days Last 14 days · Apr 17 — Apr 30
Aging / status (color-coded)
Created today Updated 6h ago Aging 4 days Overdue 2 days Due in 3 days Due today
Why this direction

Time is shown three ways depending on context. Relative prose ("14 minutes ago") for human-friendly contexts where the user just needs to know roughly when. Compact mono ("14m ago") for chrome and tables where space is tight and density matters. Absolute formal ("April 30, 2026 · 14:23 EST") for audit trails and citations where exact time is the record.

Aging colors signal urgency without requiring a separate badge: green for fresh, neutral for older, amber for aging, red for overdue. The color encoding lets the user scan a column of dates and see priority instantly.


Steppers · wizards · progress

For onboarding flows (connect Procore → index docs → sync emails → generate first brief), draft creation wizards (RFI / submittal / change order), and any multi-screen process. Horizontal stepper shows discrete steps with done (green check) / active (clay-tinted ring with number) / pending (neutral with number) states. Linear progress wizard shows continuous progress with current step + percent. Both share the same color logic so the flow reads consistently regardless of variant.

DARK SURFACE · HORIZONTAL STEPPER
Connect Procore
Index documents
3Sync emails
4Generate first brief
Linear progress wizard
Setup · step 3 of 4 75%
Connecting Outlook for email capture. We'll index 30 days of recent emails, then continue with future syncs in real time.
LIGHT SURFACE · HORIZONTAL STEPPER
Connect Procore
Index documents
3Sync emails
4Generate first brief
Linear progress wizard
Setup · step 3 of 4 75%
Connecting Outlook for email capture. We'll index 30 days of recent emails, then continue with future syncs in real time.
Why this direction

Multi-step flows fall into two visual patterns. Horizontal stepper when steps are discrete and named (Connect → Index → Sync → Generate) — the user sees the whole journey upfront. Linear progress wizard when steps are sequential but the count or names matter less — just "Step 3 of 7, 42% complete."

Both share the same color logic for state: green check for done, clay-tinted ring for active, neutral number for pending. Consistent semantics across variants prevent confusion when a flow uses both within a deeper subprocess.


Folder rows · file rows · list view

For Document Library, Drawings folder, Submittal Log, Photo Gallery, anywhere we surface files. Folder rows show category + count + chevron, like Linear's project list. File rows are tabular: icon + name + type + size + modified + owner + ellipsis menu, like Stripe's Files surface or Notion's file blocks. Mono numerics for sizes, mono dates, type extensions in tracked uppercase mono. Ellipsis menu opens the dropdown menu pattern from Section 25.

DARK SURFACE · FOLDER ROWS
FILE ROWS · LIST VIEW
Name Type Size Modified Owner
M-301 r3 Mechanical Plan, Level 3 DWG 2.4 MB Apr 28 Aaron Schmidt
Addendum 14 — Mech reroute PDF 480 KB Apr 27 Tom Kowalski
Site walkdown 04-26-2026 JPG 8.1 MB Apr 26 Maria Rodriguez
RFI-0142 draft response DOCX 124 KB Apr 30 You
LIGHT SURFACE · FOLDER ROWS
FILE ROWS · LIST VIEW
Name Type Size Modified Owner
M-301 r3 Mechanical Plan, Level 3 DWG 2.4 MB Apr 28 Aaron Schmidt
Addendum 14 — Mech reroute PDF 480 KB Apr 27 Tom Kowalski
Site walkdown 04-26-2026 JPG 8.1 MB Apr 26 Maria Rodriguez
RFI-0142 draft response DOCX 124 KB Apr 30 You
Why this direction

File patterns are the spine of Document Library, Drawings, Submittal Log, and Photo Gallery surfaces. Folder rows are minimal: name + count + chevron. File rows are tabular with consistent metadata columns: type icon + name + extension + size + modified + owner + actions menu.

Mono everywhere there are numerics or codes — size, date, type extension — so columns align cleanly even across row sizes. The kebab/ellipsis menu uses the dropdown overlay pattern from Section 25.


Toasts · banners · inline validation

Toasts: transient (5s auto-dismiss), top-right corner, 3px colored left border + matching icon. Banners: persistent, top of page or surface, with optional CTA (e.g., "Reconnect" on error). Inline validation: below input field, red icon + text for errors, green check + text for success. Variants: success (green), info (slate), warning (amber), error (red). Surface error sync failures at the global banner level (per your earlier note), not per-component.

DARK SURFACE
Toasts (transient, top-right)
RFI sent
RFI-0142 issued to owner rep at 14:23.
Brief updated
4 new sources synthesized into today’s brief.
Sync delayed
Procore last synced 4 hours ago.
Send failed
Connection timeout. Click to retry.
Banners (top of page, persistent)
Procore is currently in maintenance
Read-only mode until 21:00 EST. New documents and RFIs will queue and sync after maintenance.
Sync delayed for over 4 hours
Procore last synced at 10:14. Briefs may not reflect the latest project state.
Cannot reach Procore — sync paused
Token may have expired. Reconnect Procore to resume live briefing.
All projects synced successfully
14 documents, 3 RFIs, and 2 submittals indexed in the last sync.
Inline form validation (success / error)
Verified owner contact
Email format unrecognized
LIGHT SURFACE
Toasts (transient, top-right)
RFI sent
RFI-0142 issued to owner rep at 14:23.
Brief updated
4 new sources synthesized into today’s brief.
Sync delayed
Procore last synced 4 hours ago.
Send failed
Connection timeout. Click to retry.
Banners (top of page, persistent)
Procore is currently in maintenance
Read-only mode until 21:00 EST. New documents and RFIs will queue and sync after maintenance.
Sync delayed for over 4 hours
Procore last synced at 10:14. Briefs may not reflect the latest project state.
Cannot reach Procore — sync paused
Token may have expired. Reconnect Procore to resume live briefing.
All projects synced successfully
14 documents, 3 RFIs, and 2 submittals indexed in the last sync.
Inline form validation (success / error)
Verified owner contact
Email format unrecognized
Why this direction

Three feedback patterns: toasts (transient, low-stakes), banners (persistent, requires attention), inline validation (field-level, contextual). They have distinct lifecycles and shouldn't be interchangeable.

Sync failures use the global banner level (top of surface) rather than per-component error states — one banner explains "Procore sync paused" once, instead of every card showing a stale-data warning.

Toasts auto-dismiss in 5s. Banners persist until the user dismisses or the underlying state resolves.


Bell · badge · panel · mark-all-read

Bell icon in topbar with unread count badge (clay-tinted, ring-shadowed for visibility on any surface). Click opens a notification panel: header with count + "Mark all read" + settings icon, scrollable list with unread items highlighted (subtle clay-tinted background + bold title + leading dot), each notification has type icon + title + preview + relative timestamp, footer "View all notifications" links to a full-page view. References: GitHub (notification panel), Linear (inbox), Stripe (alerts).

DARK SURFACE
3
Notification bell with unread count badge (in topbar)
Notification panel (opens from bell click)
Notifications
3 unread · 14 total
RFI-0142 received owner response
Tom Kowalski responded: "Addendum 14 supersedes drawing"
14m ago
Addendum 14 added to project
Owner uploaded mech room reroute addendum
2h ago
New email from MEP coordinator
Aaron: "Procurement deadline May 8 — need direction"
yesterday
M-301 revised to r3
Mech room ductwork updated by Jin Park
yesterday
Submittal SUB-0089 approved
Greenline Drywall 09 30 13 approved by owner
2 days ago
LIGHT SURFACE
3
Notification bell with unread count badge (in topbar)
Notification panel (opens from bell click)
Notifications
3 unread · 14 total
RFI-0142 received owner response
Tom Kowalski responded: "Addendum 14 supersedes drawing"
14m ago
Addendum 14 added to project
Owner uploaded mech room reroute addendum
2h ago
New email from MEP coordinator
Aaron: "Procurement deadline May 8 — need direction"
yesterday
M-301 revised to r3
Mech room ductwork updated by Jin Park
yesterday
Submittal SUB-0089 approved
Greenline Drywall 09 30 13 approved by owner
2 days ago
Why this direction

Notifications surface async events: a teammate left a comment, a sync completed, a draft is ready for review. The bell + badge in the topbar is the persistent affordance; the panel opens as a popover-style surface with grouped, scannable list rows.

Unread items get a subtle clay-tinted background + bold title + leading dot. Read items fade to neutral. Mark-all-read clears the visual emphasis but keeps history accessible — we never delete notification history without explicit user action.


No data · first-time empty · filtered to nothing

Three distinct empty-state contexts with different recovery affordances. Critical for inbox-style surfaces (intake, dialogues, work orders) which start empty — and for filtered tables where the result set may be zero.

Variant A · First-time empty (zero state)
Light surface
No briefs yet.
Vecreal generates briefs from your project sources. Connect Procore to get your first synthesized brief.
Dark surface
No briefs yet.
Vecreal generates briefs from your project sources. Connect Procore to get your first synthesized brief.
Variant B · No data yet (sources connected, nothing to synthesize)
Light surface
Watching for activity.
3 sources connected · last sync 2m ago
Briefs appear when relevant activity happens on the project — new RFIs, returned submittals, schedule changes, decisions needing PM input.
Dark surface
Watching for activity.
3 sources connected · last sync 2m ago
Briefs appear when relevant activity happens on the project — new RFIs, returned submittals, schedule changes, decisions needing PM input.
Variant C · Filtered to nothing (active filters yield no results)
Light surface
Filters: Blocked Drywall 24h
No matches with current filters.
142 briefs total. Try widening the date range or clearing trade filters.
Dark surface
Filters: Blocked Drywall 24h
No matches with current filters.
142 briefs total. Try widening the date range or clearing trade filters.
Why this direction

An empty state is not a single thing. First-time empty (zero state) is hopeful — the system has never had data, the user just arrived. The copy explains what the surface is for and offers a path to first value. No-data-yet is a steady-state — sources are connected, the system is watching, but nothing has triggered yet. The copy reassures the user that the system is working. Filtered-to-nothing is a recovery scenario — the user has narrowed too far. The copy points back to clearing filters.

Microcopy carries most of the weight. The first-time state is the one place we use a soft brand moment (the small clay V badge in the icon). Variants B and C use neutral stroke icons — they're recurring states, not landing moments.

Construction PMs use these surfaces under time pressure on real projects. Empty states must answer two questions instantly: why is this empty, and what do I do next?


404 · 500 · network failure

Three error contexts with distinct recovery paths. Construction PMs work in the field on poor connectivity; offline / network-failure UX is operational, not theoretical.

Variant A · 404 · route not found
Light surface · clay-light #A05847
404
That brief doesn't exist here.
It may have been merged, deleted, or you have a stale link. URL was /briefs/0142.
Dark surface · clay-bright #C68070
404
That brief doesn't exist here.
It may have been merged, deleted, or you have a stale link. URL was /briefs/0142.
Variant B · 500 · server error
Light surface
Something went wrong on our side.
Synthesis engine returned an error. Our team has been notified. Keep working from source systems if blocking.
req_2k4hq72b9f · 2026-05-02 14:23
Dark surface
Something went wrong on our side.
Synthesis engine returned an error. Our team has been notified. Keep working from source systems if blocking.
req_2k4hq72b9f · 2026-05-02 14:23
Variant C · Network failure (offline / poor connectivity)
As inline banner · for partial-failure states
Light surface
Offline. Showing last sync from 14m ago.
Reconnecting automatically. Actions may queue.
Dark surface
Offline. Showing last sync from 14m ago.
Reconnecting automatically. Actions may queue.
As full-page · for total-loss states
Light surface
Can't reach Vecreal.
You may be offline or on a job-site network with limited connectivity. Vecreal resumes automatically when the connection returns.
last sync: 14m ago
Dark surface
Can't reach Vecreal.
You may be offline or on a job-site network with limited connectivity. Vecreal resumes automatically when the connection returns.
last sync: 14m ago
Why this direction

Each error has a different recovery path. 404 is "the thing you asked for isn't here" — the user navigates back. 500 is "our side broke" — the user retries or works in the source system. Network failure is "the connection is the problem" — the user waits or moves to offline-capable tools.

Microcopy is calm and specific. We own the failure ("on our side") rather than apologize. We tell the user what failed, when we last had good data, and how to keep working. Construction PMs don't have time for "Oops!"

The network-failure pattern has two presentations. Inline banner when partial data is still usable (showing last sync, allowing actions to queue). Full-page when nothing useful is reachable. Choose by severity, not by aesthetic preference.

Coordination layer principle in error UX: when Vecreal fails, the user's data is still in Procore / BIM 360 / their email. Every error variant offers a fallback to the source system — the user doesn't lose access to their own data when our layer hiccups.


Skeleton · full-page boot · initial data

Three loading contexts with distinct visual treatments. Section 26 covers streaming and phased progress for in-flight work; this section covers the moments before any content renders — cold app boot, route changes, and post-authentication first sync.

Variant A · Skeleton screen (data loading after route render)
Light surface
Dark surface
Variant B · Full-page loading (initial app boot)
Light surface
ecreal
Loading workspace
Dark surface
ecreal
Loading workspace
Variant C · Initial data loading (post-auth, pre-dashboard — first sync)
Light surface
Setting up your workspace
2 of 4 steps
Connected to Procore
Indexed 1,247 documents
Synthesizing 248 emails 132 / 248
Generating first brief
Dark surface
Setting up your workspace
2 of 4 steps
Connected to Procore
Indexed 1,247 documents
Synthesizing 248 emails 132 / 248
Generating first brief
Why this direction

Three loading contexts, three visual treatments. Skeleton when the surface has rendered but data is in flight — the user sees layout-as-placeholder so the eventual content has no jarring shift. Full-page boot only for cold app start — the only place we surface the wordmark in a loading context (it's the "Vecreal is starting" brand moment). Initial data loading shows named steps because the user just connected sources and wants to see specifically what's happening ("indexed 1,247 documents").

Skeletons mirror the final layout precisely — widths, heights, gaps. This is what makes the transition from skeleton to content feel cohesive instead of jarring. A generic gray rectangle skeleton is decoration; a skeleton that matches the eventual stat-card grid is preparation.

No spinners. The streaming-dot pattern from Section 26 covers cases where work is happening; the named-step pattern in Variant C covers progress. Spinners say "something is loading" without saying what — we always say what.


Multi-row selection · floating action bar

When a user selects multiple rows in a table (Action Register, RFI Log, Submittal Log), a contextual toolbar appears above the table with the actions that can be applied to the selection. Replaces the standard filter bar while selection is active.

Light surface
3selected
RFI
Subject
Sub
Returned
Days
RFI-0142
Slab penetration coordination — L14
Stack mech.
2026-04-29
3
RFI-0141
Drywall ceiling height — corridor 14C
Capital int.
7
RFI-0140
Window glazing G-04 spec clarification
Pinnacle gl.
2026-04-22
10
RFI-0139
Steel detail revision — column C-7
Northgate steel
2026-04-25
7
Dark surface
3selected
RFI
Subject
Sub
Returned
Days
RFI-0142
Slab penetration coordination — L14
Stack mech.
2026-04-29
3
RFI-0141
Drywall ceiling height — corridor 14C
Capital int.
7
RFI-0140
Window glazing G-04 spec clarification
Pinnacle gl.
2026-04-22
10
RFI-0139
Steel detail revision — column C-7
Northgate steel
2026-04-25
7
Why this direction

The toolbar replaces the filter bar (vs. floating below it or appearing as a separate strip) because the user is now in "act on these" mode, not "refine these" mode. One control surface at a time keeps the visual hierarchy clear.

Clay-soft background with a clay border makes the toolbar feel like an active brand moment without overpowering the table. The selected count badge in solid clay anchors the user's attention. Action buttons stay neutral (secondary style) because the brand emphasis is on selection, not on each individual action.

Destructive actions (Dismiss, Delete) are grouped to the right with a separator and use the error color in outline form — not filled, because filled red competes too aggressively with the selection-clay focus.


Rich filter UI · right-edge slide-in

Section 30 (Tables) covers filter pills above the table. The drawer is the rich filter surface that opens when the user wants to refine on multiple categories at once — date ranges, multi-trade selection, custom sort, advanced filters. Slides in from the right edge.

Light surface
RFI log
Filter & sort
3 active · affects 142 rows
Status
Open 142 Blocked 8 In review 23 Closed 312
Trade
Date opened
Sort by
Dark surface
RFI log
Filter & sort
3 active · affects 142 rows
Status
Open 142 Blocked 8 In review 23 Closed 312
Trade
Date opened
Sort by
Why this direction

Filter pills (Section 30) are the lightweight path: one or two filters, applied directly. The drawer is the heavy path: many filters, multiple categories, custom date range. They're complementary — the user picks the affordance that matches their intent.

The live count subtitle ("3 active · affects 142 rows") is the most important detail. It updates as the user toggles filters so the consequence is visible before they Apply. No commit-then-discover.

Filters do not auto-apply on every change. The user composes their filter set, sees the count update, then Apply commits. This is how Stripe, Linear, and Notion handle filter drawers — consistent with B2B power-tool conventions.


File drop · reorder · kanban

Three drag-and-drop contexts with distinct visual affordances and drop-target signals. Each must have a non-DnD alternative for keyboard + screen-reader + touch users — DnD is a speed-up, not the contract.

Variant A · File drop zone (idle + active states)
Light surface
Idle
Drop files or click to upload
PDF, DWG, DXF, JPG · max 50 MB each
Active · file dragging over
Drop to upload
3 files ready
Dark surface
Idle
Drop files or click to upload
PDF, DWG, DXF, JPG · max 50 MB each
Active · file dragging over
Drop to upload
3 files ready
Variant B · Reorder list rows (sidebar nav, action priority, etc.)
Light surface
Dragging · row 3 → new position above row 2
Today's brief
default landing
Project state
dashboard view
Drafts
pending decisions
Action register
queue management
Dark surface
Dragging · row 3 → new position above row 2
Today's brief
default landing
Project state
dashboard view
Drafts
pending decisions
Action register
queue management
Variant C · Kanban card move (between status columns)
Light surface
Kanban · dragging RFI-0142 from In Review to Approved
Open · 4
RFI-0145
Conduit reroute
RFI-0144
Anchor spec
RFI-0143
Window jamb
In review · 2
RFI-0141
Drywall ceiling
RFI-0142
Slab penetration
Approved · drop here
RFI-0142
Slab penetration
RFI-0138
Steel detail
Dark surface
Kanban · dragging RFI-0142 from In Review to Approved
Open · 4
RFI-0145
Conduit reroute
RFI-0144
Anchor spec
RFI-0143
Window jamb
In review · 2
RFI-0141
Drywall ceiling
RFI-0142
Slab penetration
Approved · drop here
RFI-0142
Slab penetration
RFI-0138
Steel detail
Why this direction

Three DnD contexts, three visual languages. File drop is the simplest — idle dashed border becomes clay dashed border on dragenter. Reorder needs a grip handle (so user knows which element is draggable) and a clear drop indicator line. Kanban uses the entire column as the drop target with clay-soft tinting and a clay header label.

The ghost (the floating dragged element) gets a slight rotation (-0.5 to -1 degree) and shadow-3. This is the standard convention from Trello, Linear, Notion — the rotation signals "this is in motion."

Every DnD operation has a non-gesture path. Keyboard reorder via Space + arrow keys. Touch via long-press. Tap-menu > "Move to In Review." The DnD is a speed-up for power users, not a barrier for everyone else.


Quarter-ring · dash-ring · bars · shimmer wave · terminal cursor

Five small loading indicators that fill specific gaps not covered by Section 26 (streaming dots, pulse) or Section 53 (skeleton, named-step). Each lives at 14–18px and pairs with a text caption — we never run silent. Color treatment follows the locked clay rule: clay-light on light surfaces, clay-bright on dark.

Variant A · Quarter-ring · button-level inline loading
Light surface
idle
loading
Dark surface
idle
loading
Variant B · Dash-ring · topbar sync indicator
Light surface
ecreal
GREENLINE TOWER · PHASE 3
Syncing 3 sources
Same indicator works at 14px in topbar, 12px in inline metadata, 18px in card headers.
Dark surface
ecreal
GREENLINE TOWER · PHASE 3
Syncing 3 sources
Same indicator works at 14px in topbar, 12px in inline metadata, 18px in card headers.
Variant C · Bars · analyzing / processing state
Light surface
Analyzing 12 emails
3 of 12 · ~14s remaining
Bars echo our sparkline visual language — same family as Section 27 trends.
Dark surface
Analyzing 12 emails
3 of 12 · ~14s remaining
Bars echo our sparkline visual language — same family as Section 27 trends.
Variant D · Text shimmer wave · streaming brief output
Light surface
Synthesizing brief…

RFI-0142 returned with revised structural specs that affect three open submittals.

Stack mech. confirmed the new spec is acceptable; Capital interiors needs 24h to repackage SUB-041 and SUB-043 before

Shimmer applies only to the actively-streaming line; settled text stays static.
Dark surface
Synthesizing brief…

RFI-0142 returned with revised structural specs that affect three open submittals.

Stack mech. confirmed the new spec is acceptable; Capital interiors needs 24h to repackage SUB-041 and SUB-043 before

Shimmer applies only to the actively-streaming line; settled text stays static.
Variant E · Terminal cursor · technical surfaces (log streaming)
Light surface
14:32:18 APPROVED CO-0042 · R. Kapoor
14:18:04 EDITED spec 09 30 13 · L. Chen
11:02:47 DISMISSED RFI-0138 · J. Tao
14:34:02 SYNTHESIZING brief from 8 sources
Terminal surface always dark, regardless of page theme — matches log/code convention.
Dark surface
14:32:18 APPROVED CO-0042 · R. Kapoor
14:18:04 EDITED spec 09 30 13 · L. Chen
11:02:47 DISMISSED RFI-0138 · J. Tao
14:34:02 SYNTHESIZING brief from 8 sources
Terminal surface always dark, regardless of page theme — matches log/code convention.
Why this direction

The locked rule from Section 53 stands — no generic spinners, always say what's loading. These five additions don't replace that; they fill specific micro-gaps where the existing patterns are too heavy or too verbose. Quarter-ring is a button-level inline loader (skeleton can't live inside a button). Dash-ring is for ongoing chrome state like topbar sync (pulse-dot says "live", not "actively pulling"). Bars is for "analyzing" states unique to Vecreal (synthesis across sources). Shimmer is for streaming LLM-style output. Terminal cursor is for technical surfaces only.

Each loader is paired with a text caption. The caption is the contract; the loader is the visual reinforcement. Bars + "Analyzing 12 emails" tells the user both that Vecreal is busy AND what specifically. The same bars without a caption would violate the locked rule.

Color application follows the locked clay treatment exactly: clay-light on light, clay-bright on dark, status colors only when the operation has known semantic state (e.g., warning amber for slow sync, error red for failed retry). No fills — all loaders are stroke-based or wireframe, matching how clay shows up everywhere else in the system (outlined chips, accent borders, never solid clay backgrounds).

Motion specs are continuous loops outside the named --motion-* tokens (which describe transitions, not loops). All within Section 22's "no bounce" rule. Reduced-motion mode disables every animation and shows a static fallback at the same size.

Streaming · phased progress · flash · counter · activity feed

Five new patterns building on Section 21.5. Each communicates "the system is doing something" without animation noise. References: Anthropic Claude (streaming dots), Vercel deployments (phased progress with checkmarks), Stripe / Mercury (highlight flash on row update, smooth number counter), Linear / Slack (vertical activity timeline with pulsing newest entry).

DARK SURFACE
Drafting RFI response STREAMING (Anthropic-style)
Phased progress (Vercel-style)
Reading 14 source documents2.1s
Synthesizing across 3 RFIs1.4s
Verifying against drawing revisionsin progress
Drafting RFI response
Brief ready for review
LIGHT SURFACE
Drafting RFI response STREAMING (Anthropic-style)
Phased progress (Vercel-style)
Reading 14 source documents2.1s
Synthesizing across 3 RFIs1.4s
Verifying against drawing revisionsin progress
Drafting RFI response
Brief ready for review
DARK SURFACE · HIGHLIGHT FLASH ON UPDATE
RFI-0142 received a response · from Tom Kowalski
just now
Submittal review · Greenline Drywall 09 30 13
2d
CO pricing scrub · VCR-0042
3d
When a row updates (new event, status change, etc.), the row gets a subtle amber background flash that decays over 800ms back to default. Draws the eye to the change without animation noise. Stripe + Mercury pattern.
LIGHT SURFACE · HIGHLIGHT FLASH ON UPDATE
RFI-0142 received a response · from Tom Kowalski
just now
Submittal review · Greenline Drywall 09 30 13
2d
CO pricing scrub · VCR-0042
3d
When a row updates (new event, status change, etc.), the row gets a subtle amber background flash that decays over 800ms back to default. Draws the eye to the change without animation noise. Stripe + Mercury pattern.
DARK SURFACE · NUMBER COUNTER ANIMATION
12
Open RFIs
11 → 12 (counts up smoothly over 600ms)
$2,847,290
Pending CO value
$2,841,022 → $2,847,290
When a count or amount changes (incoming RFI, new CO submitted), the number animates from old value to new over 600ms with cubic-bezier ease-out. Tabular-nums prevents layout shift. Stripe Dashboard pattern.
LIGHT SURFACE · NUMBER COUNTER ANIMATION
12
Open RFIs
11 → 12 (counts up smoothly over 600ms)
$2,847,290
Pending CO value
$2,841,022 → $2,847,290
When a count or amount changes (incoming RFI, new CO submitted), the number animates from old value to new over 600ms with cubic-bezier ease-out. Tabular-nums prevents layout shift. Stripe Dashboard pattern.
ACTIVITY FEED PULSE
RFI-0142 received owner response
"Addendum 14 supersedes drawing; please proceed with reroute."
just now
Submittal SUB-0089 entered review
14m ago
Brief generated for Apr 30
2h ago
Vertical timeline with pulsing dot at the top (most recent) decaying through older entries. The connecting line fades as you go down the feed. Recent activity reads as "this is happening now"; older entries read as history. Linear / Slack pattern.
Why this direction

The system communicates "this is happening right now" through five quiet signals: streaming dots (work in progress), phased progress (multi-step task with checkmarks), flash (a row just updated), animated counter (number changed), activity feed (vertical timeline of changes).

Each pattern is restrained on purpose. The pulse is meaningful when it correlates with real activity. If everything pulses, nothing reads as live — pulse loses signal.

All animations honor prefers-reduced-motion — the dot remains static when reduced motion is requested.



Click email or meeting in popover → full thread / transcript modal

Connects to Section 25 hover popovers. The small popover shows preview snippets; clicking any email or meeting opens the full content in a centered modal. Verbatim content throughout — no agent rewriting. Each modal has a footer "Quote in brief" CTA so the PM can pull a specific message or transcript moment back into the brief as a citation.

Full email thread modal (opens from email popover click)

Email thread 7 messages · Apr 24–30 · 4 participants
RE: Mech room coordination · Greenline Tower Phase 3
Aaron Schmidt Mech Sub
Apr 30, 09:14
“Confirmed: existing ducts on M-301 r3 at column G-7 conflict with new chilled water routing in Add.14. Need clarification on which takes priority before we order materials. Suggest we get owner direction in writing this week.”
Maria Rodriguez PM
Apr 29, 17:32
“Looping in MEP coordinator. Scheduling review for tomorrow afternoon. Aaron, please bring updated as-builts.”
Tom Kowalski Owner Rep
Apr 28, 14:05
“Addendum 14 supersedes drawing; please proceed with reroute. Will issue formal direction by EOW. Owner has confirmed reroute is acceptable per design intent meeting last week.”
Jin Park MEP Engineer
Apr 27, 11:22
“Reviewed Add.14 vs M-301 r3 again. Conflict is real, not a misread. The chilled water reroute as specified will require either ductwork modification or a different routing path. Recommend we coordinate with structural before final decision — column line G-7 has tight clearance constraints.”
Aaron Schmidt Mech Sub
Apr 26, 09:48
“I am ordering the chilled water lines in 2 weeks. If we need a reroute, I need to know by next Friday or we will be on backorder.”
Maria Rodriguez PM
Apr 25, 16:10
“Started a thread to coordinate. Aaron, Tom, Jin — can we have a quick call this week? Greenline timeline depends on this.”
Aaron Schmidt Mech Sub
Apr 24, 14:33
“FYI — reviewing Addendum 14 today. Looks like there may be a coordination issue with M-301. Will follow up tomorrow.”
Cited from VCR-BRIEF-2026-04-30-007

Full meeting transcript modal

Meeting transcript Apr 28, 14:00 · 47m · 5 attendees
MEP Coordination Review · Greenline Tower Phase 3
Aaron Schmidt · Maria Rodriguez · Tom Kowalski · Jin Park · Rebecca Chen
14:08 Aaron Mech Sub
The conflict is at column G-7. We have 24-inch supply ducts there per the existing M-301, and the addendum is asking for chilled water lines through the same volume.
14:10 Maria PM
How tight is the clearance currently?
14:11 Aaron Mech Sub
Maybe 4 inches on the side and 6 above. Tight already, before any reroute.
14:14 Jin MEP Engineer
I reviewed Add.14 in detail this morning. The reroute as drawn would require us to either modify the duct path through the corridor, or come down through the wall section adjacent — which gets us into structural territory.
14:16 Tom Owner Rep
Addendum 14 takes priority. We need to issue an RFI to confirm clearance after reroute and have the design team respond before procurement deadline.
14:18 Aaron Mech Sub
Procurement deadline for the chilled water lines is May 8. After that we are on backorder.
14:20 Maria PM
OK. Plan: I will draft RFI-0142 today, send for review by EOD. Tom, can you commit to a 48-hour response window once it is issued?
14:22 Tom Owner Rep
I can route to design same-day. Cannot guarantee 48 hours but I will push for it.
14:25 Jin MEP Engineer
I will provide updated routing options as part of the RFI. Three viable paths I can think of, two cleaner than the third.
14:28 Maria PM
Great. Aaron, hold off on procurement until we have direction. If we slip past the 8th, we slip the schedule.
14:30 Aaron Mech Sub
Understood. I will get on the phone with the supplier tomorrow about extending the deadline.
14:32 Maria PM
I will draft RFI-0142 today and send for review by EOD. Plan to have a response within 48 hours of issue.
Cited from VCR-BRIEF-2026-04-30-007

Split button: dropdown open state (was missing)

SPLIT BUTTON · OPEN STATE
RFI options
Two locked system rules from this round:

1. Icon-in-CTA rule: Primary CTAs use black bubble (#1F1D1A) + soft-white text (#f7f8f8) + clay-bright icon (#C68070). Applies to any leading icon in primary CTA: +, send arrow, save check, share, etc. The clay icon is the brand signature accent moment — the eye lands there first, then reads the text. Trailing icons (dropdown caret in split buttons) follow same rule but at 85% opacity since they're secondary affordances. Rule holds on both light and dark surfaces (the bubble is dark in both modes).

2. Status colors vs trend colors: Same hue can mean different things in different contexts.
· Status colors describe what state something is in: amber (#A87A2E light / #d4a960 dark) = flagged; red (#c95151) = overdue / blocked; green (#5DA17D) = healthy / approved.
· Trend colors describe direction relative to good/bad: red = worsening (e.g., open RFIs going up); green = improving (e.g., avg response time going down); clay neutral = informational (no judgment about direction).
· The two systems should never conflict on the same surface for the same data point. A flagged item's status pill is amber; the sparkline of flagged-item count trending up could be red (worsening) or clay neutral (informational), but never amber (would conflict with status reading).
Why this direction

Citations work in two layers. The popover (Section 25) shows a snippet preview; clicking any source in the popover opens the full source modal with verbatim content — whole email thread or full meeting transcript — no agent rewriting.

This is the "show your work" principle in action: the user can drill from a synthesized claim → popover preview → full source — and trust each layer.

Each modal has a footer "Quote in brief" CTA so the PM can pull a specific message or transcript moment back into the brief as a citation. Vecreal augments the workflow without owning the source data.


Architectural reference map — navigate complex citation graphs visually

When a brief item references many sources across multiple categories, a flat list becomes hard to navigate. The reference tree visualizes the citation graph: central node (the item being investigated) connected to category nodes (Drawings / Emails / Meetings / Related RFIs / Addendums) which expand to show their items. All nodes are opaque (lines never bleed through). Lines terminate cleanly at node edges. Tree is fully expanded by default; click a category chevron to collapse. Click an item leaf to open in source (drawing → Procore, email → thread modal, meeting → transcript modal). Cross-references between items (e.g., an email citing a drawing) shown as dashed green connections. Coordination layer principle: Vecreal does not host or render the source content — we synthesize and navigate, the source-of-truth lives in Procore / Outlook / etc.

References tree Synthesized for RFI-0142 · Mech room conflict
D Drawings 4 items M-301 r3 Mech Plan L3 · Apr 28 M-301 r2 Mech Plan L3 · Apr 14 M-302 Mech Sections · Apr 14 M-401 Mech Schedule · Apr 14 E Emails 14 messages Confirmed conflict at G-7 Aaron Schmidt · Apr 30 Looping in MEP coordinator Maria Rodriguez · Apr 29 Add.14 supersedes drawing Tom Kowalski · Apr 28 View 1 more M Meetings 1 selected MEP Coordination Review Apr 28, 14:00 · 47m R Related RFIs 3 items RFI-0138 Duct routing Closed · Apr 22 RFI-0119 Mech clearance Closed · Apr 14 RFI-0140 Pipe support Open · Apr 27 A Addendums 2 items Add.14 Mech reroute Apr 27 · superseding Add.13 Owner direction Apr 21 · clarification RFI-0142 · OPEN Mech room layout conflict cites
Interactions Click category → expand / collapse Click item → opens in source (Procore / Outlook / transcript) · · · cross-reference between items
References tree Synthesized for RFI-0142 · Mech room conflict
D Drawings 4 items M-301 r3 Mech Plan L3 · Apr 28 M-301 r2 Mech Plan L3 · Apr 14 M-302 Mech Sections · Apr 14 M-401 Mech Schedule · Apr 14 E Emails 14 messages Confirmed conflict at G-7 Aaron Schmidt · Apr 30 Looping in MEP coordinator Maria Rodriguez · Apr 29 Add.14 supersedes drawing Tom Kowalski · Apr 28 View 1 more M Meetings 1 selected MEP Coordination Review Apr 28, 14:00 · 47m R Related RFIs 3 items RFI-0138 Duct routing Closed · Apr 22 RFI-0119 Mech clearance Closed · Apr 14 RFI-0140 Pipe support Open · Apr 27 A Addendums 2 items Add.14 Mech reroute Apr 27 · superseding Add.13 Owner direction Apr 21 · clarification RFI-0142 · OPEN Mech room layout conflict cites
Interactions Click category → expand / collapse Click item → opens in source (Procore / Outlook / transcript) · · · cross-reference between items

Horizontal layout · better for widescreen monitors

Most PMs work on horizontal monitors. The original vertical layout (above) puts the central node on the left and stacks categories down the right side — better for narrow / portrait screens. The horizontal layout below puts the central node at the top and spreads categories horizontally with items extending downward as columns. Same data, same interaction model, different orientation. Either pattern locked — use whichever fits the surface.

Reference tree · horizontal layout Branches top-down · categories spread horizontally
RFI-0142 · OPEN Mech room layout conflict D Drawings 4 items M-301 r3 Mech Plan L3 · Apr 28 M-301 r2 Mech Plan L3 · Apr 14 M-302 Mech Sections · Apr 14 M-401 Mech Schedule · Apr 14 E Emails 14 messages Confirmed conflict at G-7 A. Schmidt · Apr 30 Looping in MEP coord M. Rodriguez · Apr 29 Add.14 supersedes drawing T. Kowalski · Apr 28 M Meetings 1 selected MEP Coordination Review Apr 28, 14:00 · 47m R Related RFIs 3 items RFI-0138 Duct routing Closed · Apr 22 RFI-0119 Mech clearance Closed · Apr 14 RFI-0140 Pipe support Open · Apr 27 A Addendums 2 items Add.14 Mech reroute Apr 27 · superseding Add.13 Owner direction Apr 21 · clarification
Interactions Click category → collapse / expand Click item → opens in source Best for wide screens (PM laptops, monitors)
Reference tree · horizontal layout Branches top-down · categories spread horizontally
RFI-0142 · OPEN Mech room layout conflict D Drawings 4 items M-301 r3 Mech Plan L3 · Apr 28 M-301 r2 Mech Plan L3 · Apr 14 M-302 Mech Sections · Apr 14 M-401 Mech Schedule · Apr 14 E Emails 14 messages Confirmed conflict at G-7 A. Schmidt · Apr 30 Looping in MEP coord M. Rodriguez · Apr 29 Add.14 supersedes drawing T. Kowalski · Apr 28 M Meetings 1 selected MEP Coordination Review Apr 28, 14:00 · 47m R Related RFIs 3 items RFI-0138 Duct routing Closed · Apr 22 RFI-0119 Mech clearance Closed · Apr 14 RFI-0140 Pipe support Open · Apr 27 A Addendums 2 items Add.14 Mech reroute Apr 27 · superseding Add.13 Owner direction Apr 21 · clarification
Interactions Click category → collapse / expand Click item → opens in source Best for wide screens (PM laptops, monitors)
Open product question: on long lists (e.g., 14 emails), the tree shows the first few + a dashed "View N more" placeholder. Clicking that could either (a) expand inline to show all items as more leaves, or (b) open a sidebar / modal with the full list. Probably (a) for short overflow (under 10) and (b) when a category gets unwieldy — final call during product UI work.
Why this direction

When a brief item references many sources across multiple categories, a flat citation list becomes hard to navigate. The tree visualizes the graph: central node (the item being investigated) connected to category nodes (Drawings, Emails, Meetings, RFIs, Addendums) which expand to show their items.

All nodes are opaque. Lines never bleed through. This was a real bug we caught in iteration — transparent nodes broke legibility when graph density increased.

Two layouts are locked: vertical tree (portrait monitors, dialog views) and horizontal flow (widescreen default, reads left-to-right). Most PM monitors are widescreen, so horizontal is the default in dashboard contexts.

Coordination layer: Vecreal does not host or render source content. We synthesize and navigate; source-of-truth lives in Procore / Outlook / etc. Click an item leaf → opens in source.


Threaded discussions · generic pattern

Generic threaded-discussion pattern (saved for future use — the current product is passive synthesis without multi-party collaboration). Could apply to internal team comments on briefs, RFI back-and-forth when multi-party support arrives, document review discussions, or annotation-attached conversations. Top-level comment with full avatar (28px) + name + role + timestamp + body + actions (Reply / Pin / More). Nested replies indented with a vertical thread line in subtle border color, smaller avatars (24px) and tighter typography. Quoted snippets get a clay left-border + italic muted text for the quote + author attribution. Reactions (emoji + count) and inline file attachments shown as chips under the reply body. Compose-reply input always visible at the bottom of the thread with attach + cancel + send buttons. Send button uses locked icon-in-CTA pattern (clay icon + soft white text on black bubble).

Discussion 5 RFI-0142 · thread
AS
Aaron Schmidt Mech sub 2h ago
Confirmed: existing ducts on M-301 r3 at column G-7 conflict with new chilled water routing in Add.14. Need clarification on which takes priority before we order materials.
TK
Tom Kowalski Owner rep 1h ago
Addendum 14 supersedes drawing; please proceed with reroute. Will issue formal direction by EOW.
JP
Jin Park MEP engineer 42m ago
Tom Kowalski wrote:
"Addendum 14 supersedes drawing; please proceed with reroute."
Three viable rerouting paths I can think of, two cleaner than the third. Will provide as part of the RFI response.
👍 3 M-301-options.dwg
YO
Reply to thread...
Discussion 5 RFI-0142 · thread
AS
Aaron Schmidt Mech sub 2h ago
Confirmed: existing ducts on M-301 r3 at column G-7 conflict with new chilled water routing in Add.14. Need clarification on which takes priority before we order materials.
TK
Tom Kowalski Owner rep 1h ago
Addendum 14 supersedes drawing; please proceed with reroute. Will issue formal direction by EOW.
JP
Jin Park MEP engineer 42m ago
Tom Kowalski wrote:
"Addendum 14 supersedes drawing; please proceed with reroute."
Three viable rerouting paths I can think of, two cleaner than the third. Will provide as part of the RFI response.
👍 3 M-301-options.dwg
YO
Reply to thread...
Why this direction

Saved for future use. The current product is passive synthesis without multi-party collaboration — we don't track presence and don't host conversations. But the pattern is documented now so it's ready when collaborative features arrive: internal team comments on briefs, RFI back-and-forth, document review discussions.

One level of nesting only. Deeper conversations belong in a dedicated decision view, not threaded comments.

The send button uses the locked icon-in-CTA pattern (clay icon + soft white text on black bubble) — the only place clay appears on an action surface.


Side-by-side comparison · version history

Drawing revisions, contract markups, spec changes — construction generates document-level diffs constantly. The diff UI surfaces what changed between versions with the warmth of the locked palette, not GitHub's bright red/green which would clash with the brand surface.

Side-by-side diff · drawing revision r3 → r4
Light surface
A-501 Floor plan, level 14
DWG +8 / −3 lines
Comparing r3 · 2026-04-22 r4 · 2026-04-29
r3 · before
14 SLAB-EDGE +0.4 H1
15 WALL-INT +12.0 W4
16 PEN-MECH D-203 (legacy spec)
17 PEN-MECH D-204
18 WALL-INT +24.0 W5
r4 · after
14 SLAB-EDGE +0.4 H1
15 WALL-INT +12.0 W4
16 PEN-MECH D-203R (revised, RFI-0142)
17 PEN-MECH D-204R
18 PEN-MECH D-205 (new)
19 WALL-INT +24.0 W5
Version history
r4 Slab pen revision (RFI-0142) 04-29 13:22 M. Wong
r3 Mechanical penetrations 04-22 09:08 M. Wong
r2 Initial structural revision 04-12 11:30 L. Chen
Dark surface
A-501 Floor plan, level 14
DWG +8 / −3 lines
Comparing r3 · 2026-04-22 r4 · 2026-04-29
r3 · before
14 SLAB-EDGE +0.4 H1
15 WALL-INT +12.0 W4
16 PEN-MECH D-203 (legacy spec)
17 PEN-MECH D-204
18 WALL-INT +24.0 W5
r4 · after
14 SLAB-EDGE +0.4 H1
15 WALL-INT +12.0 W4
16 PEN-MECH D-203R (revised, RFI-0142)
17 PEN-MECH D-204R
18 PEN-MECH D-205 (new)
19 WALL-INT +24.0 W5
Version history
r4 Slab pen revision (RFI-0142) 04-29 13:22 M. Wong
r3 Mechanical penetrations 04-22 09:08 M. Wong
r2 Initial structural revision 04-12 11:30 L. Chen
Why this direction

Construction's most common diff target isn't code — it's drawings, contracts, specs, cost estimates. The pattern still works (line-level adds/removes/changes) but the visual treatment matters: bright GitHub red/green collides with the warm clay palette. We use warm-tuned variants — the same #5DA17D / #c95151 semantic tokens as the rest of the system, paired with low-opacity backgrounds for the line-level wash.

Side-by-side is the default. When the file gets long enough that scrolling-in-sync becomes painful, the inline toggle lets the user switch. Either view runs the same change-detection — no information is lost in the toggle.

Version history is a rail below the diff. The current version (as of comparison) gets a clay-tinted bg so the user always knows their orientation. Clicking any history row swaps the comparison without leaving the surface.


Margin comments anchored to text

Google-Docs-style comments that anchor to specific text in a document — spec sections, contract clauses, drawing markups, brief paragraphs. Distinct from threaded discussions (Section 42, free-floating thread): each anchored comment ties to a precise position in the source document.

Document with anchored margin comments
Light surface
Section 09 30 13 · Drywall & acoustical
Specification scope

Drywall installation shall comply with ASTM C 840 and the manufacturer's published instructions. All wall assemblies shall be Type X gypsum board, 5/8″ thickness, with metal stud framing at 16″ on center.

Acoustical ceiling tile shall be Armstrong Ultima or approved equal, suspended on standard 15/16″ T-bar grid. Grid shall be capable of supporting fixtures up to 50 lb per ASTM E 580.

All penetrations shall be sealed in accordance with the firestopping specifications. Sound transmission class (STC) rating shall be minimum 50 for all demising walls.

Coordination with mechanical contractor required for ceiling penetrations. See drawing A-501 r4 for revised penetration locations.

Comments · 3
RK
R. Kapoor
PM · 04-29 14:32
"Type X gypsum board, 5/8″ thickness" Confirm if 5/8″ applies to corridor partitions only or all walls including offices.
JT
J. Tao
Capital int. · 04-30 09:14
selected
"Grid shall be capable of supporting fixtures up to 50 lb" Need clarification — some pendants are 65 lb. Should we spec heavy-duty grid for those bays specifically?
RK
R. Kapoor · 1h ago
Yes — spec heavy-duty for bays 14C, 14E. I'll update.
LC
L. Chen
Architect · 04-30 11:08
"STC rating shall be minimum 50" Owner requested STC 55 for executive offices. Updating spec accordingly.
Dark surface
Section 09 30 13 · Drywall & acoustical
Specification scope

Drywall installation shall comply with ASTM C 840 and the manufacturer's published instructions. All wall assemblies shall be Type X gypsum board, 5/8″ thickness, with metal stud framing at 16″ on center.

Acoustical ceiling tile shall be Armstrong Ultima or approved equal, suspended on standard 15/16″ T-bar grid. Grid shall be capable of supporting fixtures up to 50 lb per ASTM E 580.

All penetrations shall be sealed in accordance with the firestopping specifications. Sound transmission class (STC) rating shall be minimum 50 for all demising walls.

Coordination with mechanical contractor required for ceiling penetrations. See drawing A-501 r4 for revised penetration locations.

Comments · 3
RK
R. Kapoor
PM · 04-29 14:32
"Type X gypsum board, 5/8″ thickness" Confirm if 5/8″ applies to corridor partitions only or all walls including offices.
JT
J. Tao
Capital int. · 04-30 09:14
selected
"Grid shall be capable of supporting fixtures up to 50 lb" Need clarification — some pendants are 65 lb. Should we spec heavy-duty grid for those bays specifically?
RK
R. Kapoor · 1h ago
Yes — spec heavy-duty for bays 14C, 14E. I'll update.
LC
L. Chen
Architect · 04-30 11:08
"STC rating shall be minimum 50" Owner requested STC 55 for executive offices. Updating spec accordingly.
Why this direction

Two annotation patterns coexist. Threaded discussions (Section 42) for free-floating conversations attached to a brief or RFI. Anchored comments for precision — the user is asking about a specific clause, dimension, or sentence. The visual treatment makes the role clear: anchored comments live in a margin rail with line-of-sight to their target text.

Default highlights are warm amber (the same #A87A2E / #d4a960 warning palette used for "flagged" states elsewhere). Clay is reserved for the active / selected comment — the one the user is currently reading or replying to. This preserves the locked rule: clay is brand, not annotation.

The quoted snippet at the top of every comment card is non-negotiable. It anchors the conversation in the original text, so a user joining the thread late can read the comment without scrolling back to find what was annotated.


Read-only Gantt-lite for portfolio + project status

Compact horizontal Gantt for showing project phases at a glance. Read-only initially — we ingest the schedule from Procore / MS Project / Primavera but don't edit it. Each phase row: name + status text + colored bar spanning weeks. Status colors map to our semantic system (green on-track, amber starts-soon, red blocked, slate awaiting). Today marker (clay-bright vertical line with halo) drops on the current week. Time-range toggle (Week / Month / Quarter) via segmented control. Legend in footer. References: Linear roadmap, Asana timeline, GitHub Projects.

Schedule Greenline Tower · Phase 3 · 5 active phases
Apr 6
Apr 13
Apr 20
Apr 27
May 4
May 11
May 18
May 25
Jun 1
MEP rough-in on track
MEP rough-in
Drywall · level 3 starts soon
Drywall · level 3
Mech room reroute blocked · RFI-0142
Mech room reroute
Curtain wall install on track
Curtain wall install
Stair fabrication awaiting approval
Stair fabrication
Today
Status legend On track Starts soon Blocked Awaiting
Why this direction

Schedules are read-only in Vecreal. We ingest from Procore / MS Project / Primavera but never edit. The reason is the coordination-layer principle: the source-of-truth for schedule lives in the scheduler tool (P6, MSP) and the GC's scheduler maintains it. We surface it for context.

The strip is built in SVG, not CSS Grid. Grid had alignment glitches at certain widths; SVG with preserveAspectRatio stretches cleanly without sub-pixel issues.

Today marker is the visual anchor — clay-bright vertical line with halo at the current week. The user can scan past phases to see where today sits in the project arc.


Coordination summary · links out to all related artifacts

Subcontractor profile is a summary surface, not a CRM. Top header: company identity (icon + name + status badge + CSI division + contact details). Stats strip with 4 reliability metrics: contract value, change orders (with $ delta), on-time rate (with YoY trend), RFI volume (with response avg). Coordination links section: hyperlinks to the actual artifacts in their source systems — subcontract in Procore, change orders, RFIs, submittals. Each link carries an external-link icon and "Opens in Procore" subtext. Reference: Stripe customer profile, Linear project sidebar.

Greenline Drywall Inc. Active
CSI 09 30 13 · Drywall & Acoustical · on Greenline Tower Phase 3 since Jan 2026
(415) 555-0142 aaron@greenlinedrywall.com 2840 Industrial Way, Hayward CA
Contract value
$2.84M
Phase 3 · signed Jan 14
Change orders
3+$48K
1.7% of contract
On-time rate
92%+3pt YoY
Last 18 months
RFI volume
12
3 open · avg 4.2d response
Greenline Drywall Inc. Active
CSI 09 30 13 · Drywall & Acoustical · on Greenline Tower Phase 3 since Jan 2026
(415) 555-0142 aaron@greenlinedrywall.com 2840 Industrial Way, Hayward CA
Contract value
$2.84M
Phase 3 · signed Jan 14
Change orders
3+$48K
1.7% of contract
On-time rate
92%+3pt YoY
Last 18 months
RFI volume
12
3 open · avg 4.2d response
Why this direction

The subcontractor profile is a summary surface, not a CRM. We surface project-relevant data only: this firm's presence on this project, their open SOW value, RFI velocity, submittal cycle time. We do not duplicate the firm-wide data that lives in the GC's subcontractor management system.

Coordination links section is the centerpiece. Every artifact (subcontract, change orders, RFIs, submittals) is hyperlinked to where it actually lives in Procore. Vecreal augments the navigation; the source-of-truth stays in the source system.

Stats strip uses 4 reliability metrics: contract value, change orders ($ delta), on-time rate (YoY trend), RFI volume (response avg). Mono numerics with right alignment for scannability.


Variance highlighting · tabular numerics · budget vs. actual

Construction cost tables need to scan as financial statements: every number tabular-aligned, currency formatted with commas, variance color-coded (green under-budget with down-arrow, red over-budget with up-arrow, neutral on-track). Row backgrounds tint to match (subtle green or red wash) so the eye catches risk at a glance. Summary row at bottom with 2px border-top and bold totals. CSI division codes in mono left column. Reference: Stripe billing reports, Mercury account ledger, Procore budget views.

DARK SURFACE · COST VARIANCE TABLE
Greenline Tower Phase 3 · Q2 budget vs. actual
CSI Description Budgeted Actual Variance %
03 30 00 Cast-in-place concrete $1,850,000 $1,812,400 −$37,600 -2.0%
05 12 00 Structural steel $4,200,000 $4,341,000 +$141,000 +3.4%
07 84 00 Firestopping $285,000 $268,500 −$16,500 -5.8%
09 30 13 Drywall & acoustical $2,840,000 $2,888,000 +$48,000 +1.7%
15 50 00 Mechanical equipment $6,720,000 $6,720,000 $0 +0.0%
16 50 00 Electrical $3,650,000 $3,617,000 −$33,000 -0.9%
Total $19,545,000 $19,646,900 +$101,900 +0.5%
LIGHT SURFACE · COST VARIANCE TABLE
Greenline Tower Phase 3 · Q2 budget vs. actual
CSI Description Budgeted Actual Variance %
03 30 00 Cast-in-place concrete $1,850,000 $1,812,400 −$37,600 -2.0%
05 12 00 Structural steel $4,200,000 $4,341,000 +$141,000 +3.4%
07 84 00 Firestopping $285,000 $268,500 −$16,500 -5.8%
09 30 13 Drywall & acoustical $2,840,000 $2,888,000 +$48,000 +1.7%
15 50 00 Mechanical equipment $6,720,000 $6,720,000 $0 +0.0%
16 50 00 Electrical $3,650,000 $3,617,000 −$33,000 -0.9%
Total $19,545,000 $19,646,900 +$101,900 +0.5%
Why this direction

Cost tables read like financial statements. Every number tabular-aligned (mono with tabular-figures), currency comma-formatted, variance color-coded with leading arrow icon, and the row tinted subtly to match.

Subtle row tint is intentional — the eye catches risk at a glance without the table feeling alarmist. A bright red row across hundreds of cost codes would be noise; subtle wash + colored cell is signal.

CSI division code in mono left column. Summary row at bottom with 2px border-top and bold totals — the standard accounting visual cue.


Thumbnail grid · metadata-rich · opens in Procore

Photo grid for site walkdowns and submittal references. Vecreal generates thumbnail previews from Procore Photos / local files but does not host the full image — clicking a tile opens the full-resolution photo in its source. Each thumbnail has an "Opens in Procore" affordance overlay (top-right) on hover. Metadata strip below thumbnail: title + date + photographer + location. The metadata is what we ingest and cite from; the photo itself stays where the GC stores it. Grid / List toggle for different scan modes.

DARK SURFACE · PHOTO GALLERY (LINK-OUT TO PROCORE)
Vecreal does not host photos — thumbnails are generated previews, full-resolution images live in Procore Photos. Click any photo to open in the Procore viewer (or in Explorer/Finder if it's a local file). Metadata (date, location, photographer, EXIF) ingested with the photo for citation in briefs and RFIs.
LIGHT SURFACE · PHOTO GALLERY (LINK-OUT TO PROCORE)
Vecreal does not host photos — thumbnails are generated previews, full-resolution images live in Procore Photos. Click any photo to open in the Procore viewer (or in Explorer/Finder if it's a local file). Metadata (date, location, photographer, EXIF) ingested with the photo for citation in briefs and RFIs.
Why this direction

Vecreal generates thumbnails from Procore Photos but does not host the full image. Click a tile → full-resolution photo opens in its source system. The metadata is what we ingest and cite from; the photo asset stays where the GC stores it.

This is the coordination-layer principle in its purest form: we don't own the data, we navigate it. If Vecreal disappeared tomorrow, every Procore photo is still where it was — we're a layer, not a destination.

Each thumbnail has "Opens in Procore" affordance overlay (top-right) on hover. Metadata strip below: title + date + photographer + location. Grid / List toggle for different scan modes.


Generic log pattern: RFI / submittal / CO / sub / daily report

Logs are a recurring construction surface. Same skeleton across types: ID column (mono) + description + status indicator (colored dot + label) + lifecycle timeline (4 small horizontal bars showing progress through stages, with completed in green, current in status color, future in subtle border color) + updated date + owner initial chip. The lifecycle column is the key innovation — it visualizes where in the workflow each item sits without needing to read text. Status (dot + label) tells you the current state; lifecycle tells you the journey. Filter / Open in Procore / New {type} buttons in toolbar. Specific column lists vary by log type, but the layout is consistent.

DARK SURFACE · LOG PATTERN (SUBMITTAL LOG SHOWN)
Submittal log
ID
Description Status Lifecycle Updated Owner
SUB-0089 Greenline Drywall 09 30 13 Approved
Apr 27 AS
SUB-0091 Concrete Mix 03 30 00 Pending
Apr 28 JM
SUB-0092 Steel HSS 05 12 00 In review
Apr 29 AS
SUB-0093 Firestop 07 84 00 Rejected
Apr 30 JM
Generic log pattern. Same structure works for RFI log, submittal log, change-order log, subcontractor log, daily report log. Columns vary by log type but the layout is consistent: ID (mono) + description + status (dot + label) + lifecycle timeline (4 horizontal stage bars showing where in the process the item is) + updated date (mono) + owner (initials chip). Filter, sort, "Open in Procore" link-out, and "New {type}" CTA in the toolbar. Logs are read-mostly — updates flow from Procore.
LIGHT SURFACE · LOG PATTERN (SUBMITTAL LOG SHOWN)
Submittal log
ID
Description Status Lifecycle Updated Owner
SUB-0089 Greenline Drywall 09 30 13 Approved
Apr 27 AS
SUB-0091 Concrete Mix 03 30 00 Pending
Apr 28 JM
SUB-0092 Steel HSS 05 12 00 In review
Apr 29 AS
SUB-0093 Firestop 07 84 00 Rejected
Apr 30 JM
Generic log pattern. Same structure works for RFI log, submittal log, change-order log, subcontractor log, daily report log. Columns vary by log type but the layout is consistent: ID (mono) + description + status (dot + label) + lifecycle timeline (4 horizontal stage bars showing where in the process the item is) + updated date (mono) + owner (initials chip). Filter, sort, "Open in Procore" link-out, and "New {type}" CTA in the toolbar. Logs are read-mostly — updates flow from Procore.
Why this direction

One log skeleton, five log types. Every log surface in construction (RFI, submittal, change order, subcontractor registry, daily report) shares the same scaffold: ID column + description + status indicator + lifecycle timeline + updated date + owner.

The lifecycle timeline is the key innovation. Four small horizontal bars showing progress through stages. Completed in green, current in status color, future in subtle border. The user sees not just "what state is this in" but "how far through the workflow."

Status (dot + label) tells you the current state. Lifecycle tells you the journey. They're distinct signals working together — together they replace what would otherwise be 5–6 status states.


Multi-actor approval rail · sign-off chain

Approval workflows are central to construction: change orders need pricing + owner sign-off, RFIs need engineer + architect approval, contracts need legal + executive signature. The pattern surfaces the entire workflow chain, the current step, who's blocking, and what the current user can do right now.

Light surface
Change order
CO-0042 · Slab penetration revision
$48,200 · opened 2026-04-29 · 4d in workflow
Awaiting you
Drafted
2026-04-29 14:32
RK R. Kapoor · PM
Pricing approved
2026-04-30 09:14
SP S. Patel · Estimating
Owner sign-off
awaiting · 18h open
JT J. Tao · Owner rep · this is you
4
Executed
RK R. Kapoor · PM (pending sign-off)
Dark surface
Change order
CO-0042 · Slab penetration revision
$48,200 · opened 2026-04-29 · 4d in workflow
Awaiting you
Drafted
2026-04-29 14:32
RK R. Kapoor · PM
Pricing approved
2026-04-30 09:14
SP S. Patel · Estimating
Owner sign-off
awaiting · 18h open
JT J. Tao · Owner rep · this is you
4
Executed
RK R. Kapoor · PM (pending sign-off)
Why this direction

Vertical rail (vs. horizontal Section 37 stepper) because approval workflows are conversations, not progress bars. Each step has a person, a timestamp, sometimes a comment. The vertical layout gives each step room to surface that context without horizontal cramming.

The active step gets a clay-soft container so the current user instantly sees this is the action surface. The "this is you" callout makes self-identification trivial — especially important when multiple people are watching the same workflow.

The Approve button uses the locked icon-in-CTA pattern (clay check + soft white text on dark bubble). Reject is outlined error red — available but visually quieter than Approve. Reject always requires a comment; the rationale enters the audit trail.


Microcopy · accessibility · theme switcher

Three system-level concerns that touch every component but don't belong to any one of them. Microcopy: voice and tone rules with do / don't examples drawn from real surfaces (confidence reasoning, error messages). Accessibility: keyboard navigation specs, focus rings, contrast guarantees, screen-reader semantics. Theme switcher: 3-way segmented (Light / Dark / System) in user preferences, persistent on profile, instant switching via CSS variables. The dark sidebar always stays dark — brand anchor is theme-independent.

DARK SURFACE
Microcopy guide · voice and tone
Do
"3 sources agree, 1 source has minor inconsistency"
Specific, factual, calibrated. Names what is and isn't known.
Don't
"We're very confident this is correct! 🎉"
Effusive, vague, performs confidence rather than showing the work.
Do
"Couldn't reach Procore. Reconnect to resume."
Names the problem, prescribes the action. No blame, no panic.
Don't
"Oops! Something went wrong. Please try again."
Apologetic, vague, no actionable info. Strips agency from the user.
Voice principles: Calibrated · specific · never effusive. Names what is and isn't known. Construction PMs are professionals; speak like a professional collaborator. Never use exclamation points except on success confirmations. Avoid emoji entirely. Never apologize on behalf of the system — describe the state, prescribe the action.
Accessibility patterns
Keyboard navigation
  • Tab cycles focusable elements; Shift+Tab reverses
  • Enter / Space activates buttons
  • Esc closes modals / popovers / menus
  • Arrow keys move within lists, tables, calendar
  • All actions reachable without a mouse
Visible focus + contrast
  • Focus ring (clay 50% opacity, 2px offset) on every interactive element via :focus-visible
  • WCAG AA contrast for all text on surfaces (verified)
  • Status conveyed via color and icon/text (color-blind safe)
  • Motion respects prefers-reduced-motion (animations disabled)
Screen-reader semantics: all icon-only buttons need aria-label. Status dots get role="status" + aria-label="flagged" / "overdue" / etc. Modals trap focus and announce title on open. Live regions for the streaming indicator and number counter so updates are spoken. Tables have proper thead / scope="col" markup. Iconography is decorative (aria-hidden) when paired with text.
Theme switcher UX
3-way segmented in user preferences. Default: System (respects OS-level light/dark preference, switches automatically).
Persistence: stored on user profile, not per-device. Switching themes is instant (no flash) using CSS variables. The dark sidebar always stays dark regardless of theme — brand anchor is theme-independent.
LIGHT SURFACE
Microcopy guide · voice and tone
Do
"3 sources agree, 1 source has minor inconsistency"
Specific, factual, calibrated. Names what is and isn't known.
Don't
"We're very confident this is correct! 🎉"
Effusive, vague, performs confidence rather than showing the work.
Do
"Couldn't reach Procore. Reconnect to resume."
Names the problem, prescribes the action. No blame, no panic.
Don't
"Oops! Something went wrong. Please try again."
Apologetic, vague, no actionable info. Strips agency from the user.
Voice principles: Calibrated · specific · never effusive. Names what is and isn't known. Construction PMs are professionals; speak like a professional collaborator. Never use exclamation points except on success confirmations. Avoid emoji entirely. Never apologize on behalf of the system — describe the state, prescribe the action.
Accessibility patterns
Keyboard navigation
  • Tab cycles focusable elements; Shift+Tab reverses
  • Enter / Space activates buttons
  • Esc closes modals / popovers / menus
  • Arrow keys move within lists, tables, calendar
  • All actions reachable without a mouse
Visible focus + contrast
  • Focus ring (clay 50% opacity, 2px offset) on every interactive element via :focus-visible
  • WCAG AA contrast for all text on surfaces (verified)
  • Status conveyed via color and icon/text (color-blind safe)
  • Motion respects prefers-reduced-motion (animations disabled)
Screen-reader semantics: all icon-only buttons need aria-label. Status dots get role="status" + aria-label="flagged" / "overdue" / etc. Modals trap focus and announce title on open. Live regions for the streaming indicator and number counter so updates are spoken. Tables have proper thead / scope="col" markup. Iconography is decorative (aria-hidden) when paired with text.
Theme switcher UX
3-way segmented in user preferences. Default: System (respects OS-level light/dark preference, switches automatically).
Persistence: stored on user profile, not per-device. Switching themes is instant (no flash) using CSS variables. The dark sidebar always stays dark regardless of theme — brand anchor is theme-independent.
Why this direction

Three system-level concerns that touch every component but don't belong to any one component. Microcopy is the voice (direct, calibrated, specific — never marketing). Accessibility is the WCAG 2.1 AA baseline that every surface inherits. Theme switcher is the mechanism by which dark/light gets selected without breaking brand presence.

The dark sidebar always stays dark, regardless of theme — brand anchor is theme-independent. This is what gives the product its consistent identity moment across both themes.


Drawer nav · bottom sheet · touch targets · swipe

The four mobile-specific UI patterns that don't exist on desktop. Construction PMs work in the field on phones constantly — quick reads of an action register on a tablet between trades, a fast dismiss of a notification while walking the site. The desktop component library doesn't cover these gestures or the underlying spatial conventions.

Variant A · Drawer nav (slide-in left)
Light surface
Today's brief
ecreal
Project
Today's brief
Action register
Project state
Dark surface
Today's brief
ecreal
Project
Today's brief
Action register
Project state
Variant B · Bottom sheet (action sheet)
Light surface
RFI-0142
Slab penetration coordination
Open in Procore
View source thread
Quote in brief
Dismiss
Dark surface
RFI-0142
Slab penetration coordination
Open in Procore
View source thread
Quote in brief
Dismiss
Variant C · Touch targets · 44 × 44 px minimum
Light surface
Min 44 × 44 px tap area (annotated)
Icon button
visual: 28×28 · tap: 44×44
RFI-0142
Inline citation link
visual: 11px text · tap: 12px padding
8px gap min
Adjacent target spacing
8px min between adjacent tap targets
Dark surface
Min 44 × 44 px tap area (annotated)
Icon button
visual: 28×28 · tap: 44×44
RFI-0142
Inline citation link
visual: 11px text · tap: 12px padding
8px gap min
Adjacent target spacing
8px min between adjacent tap targets
Variant D · Swipe gesture · reveal trailing actions
Light surface
Swipe-left reveals trailing actions
Default
RFI-0142 returned
Stack mech. · 3d
Swiped left · reveals actions
RFI-0142 returned
Stack mech. · 3d
Swipe-left only on phones. Tap actions still reachable via row tap → bottom sheet (Variant B).
Dark surface
Swipe-left reveals trailing actions
Default
RFI-0142 returned
Stack mech. · 3d
Swiped left · reveals actions
RFI-0142 returned
Stack mech. · 3d
Swipe-left only on phones. Tap actions still reachable via row tap → bottom sheet (Variant B).
Why this direction

Mobile is not just "desktop scaled down." The interaction model changes: thumb territory (bottom 60% of viewport easiest to reach), gesture vocabulary (swipe-left for actions, swipe-down to dismiss sheets), spatial conventions (sheets slide up from where the thumb is, drawers slide from edges). Each variant respects the locked design system but operates by mobile-native rules.

The dark sidebar stays dark in the drawer too. This is the single most important continuity: regardless of theme on the canvas, the sidebar is the brand anchor. On mobile drawer, that anchor is the first thing the user sees when they open navigation.

Swipe gestures are always optional. Every action reachable by swipe is also reachable by tap → bottom sheet. Construction PMs wear gloves, work in cold, have wet hands — gestures fail. The tap path is the contract; the swipe path is the speed-up.

Touch targets are 44×44px regardless of visual size. A 14×14 dismiss icon still has a 44×44 tap area via invisible padding. This is non-negotiable for field use.


Welcome modal · coachmarks · walkthrough

Three onboarding patterns matching three intent levels. Welcome modal for the very first interaction (sets expectations + framing). Coachmarks for one-time discovery moments (introduce a non-obvious affordance). Walkthrough for multi-step setup that requires user input at each step.

Variant A · Welcome modal (first-run experience)
Light surface
ecreal
Welcome, R. Kapoor.
Vecreal synthesizes briefs from your project sources. Three quick steps to get your first brief.
1
Connect Procore
~ 2 min
2
Pick a project
30 sec
3
Get your first brief
~ 5 min
Dark surface
ecreal
Welcome, R. Kapoor.
Vecreal synthesizes briefs from your project sources. Three quick steps to get your first brief.
1
Connect Procore
~ 2 min
2
Pick a project
30 sec
3
Get your first brief
~ 5 min
Variant B · Coachmark (spotlight + tooltip pointing at element)
Light surface
ecreal
GREENLINE TOWER · PHASE 3
Tip 2 of 4
Generate a new brief
Click here to synthesize a brief from your project sources. Briefs are generated in seconds.
Dark surface
ecreal
GREENLINE TOWER · PHASE 3
Tip 2 of 4
Generate a new brief
Click here to synthesize a brief from your project sources. Briefs are generated in seconds.
Variant C · Walkthrough · multi-step setup wizard
Light surface
Setup · step 2 of 4
50%
2
Pick the project to start with
We'll generate your first brief from this project. You can add more projects later from settings.
Dark surface
Setup · step 2 of 4
50%
2
Pick the project to start with
We'll generate your first brief from this project. You can add more projects later from settings.
Why this direction

Three patterns, three intent levels. The welcome modal is a single moment — it sets up the rest of the journey but doesn't teach the product. Coachmarks are surgical — one tip about one affordance at the moment the user encounters it (not bulk-loaded at start). The walkthrough is a guided setup — multi-step, with user input gating progress.

Skip is always visible. Construction PMs are senior, time-pressured, often skeptical of software. Forcing them through onboarding teaches them to dismiss us. Letting them skip and return when curious teaches them we respect their time.

Coachmark tooltip uses the inverse surface treatment to the page. On a light surface, the coachmark is dark (#1F1D1A) for emphasis. On a dark surface, it's light (#FFFFFF). This is the same pattern as the locked tooltip from Section 25.

The walkthrough's recommended option (Greenline Tower in the example) gets the clay-soft treatment + a "RECOMMENDED" eyebrow. Clay reads as "Vecreal suggests this" rather than "you must" — the user retains agency.


Activity log · who-did-what-when

Compliance review surface for who-did-what-when across the project. Every approval, edit, dismissal, upload, and deletion is logged. Filterable, exportable, immutable. Connects to Section 59 (approvals always log) and Section 47 (uses log table pattern).

Audit log · activity timeline with expandable detail
Light surface
Audit log
Greenline Tower · Phase 3
Filters: Last 7 days Approvals + dismissals
14:32:18
APPROVED
RK
R. Kapoor approved CO-0042 for $48,200
2026-05-02
14:18:04
EDITED
LC
L. Chen edited spec section 09 30 13
2026-05-02
Field
STC rating requirement
Before
minimum 50 (all walls)
After
55 (executive offices), 50 (other)
Reason
Owner request — meeting 2026-05-01
11:02:47
DISMISSED
JT
J. Tao dismissed RFI-0138 as resolved
2026-05-02
09:14:22
APPROVED
SP
S. Patel approved pricing on CO-0042
2026-05-02
17:48:11
UPLOADED
MW
M. Wong uploaded A-501 r4 (4.2 MB)
2026-05-01
5 of 248 entries · last 7 days
Dark surface
Audit log
Greenline Tower · Phase 3
Filters: Last 7 days Approvals + dismissals
14:32:18
APPROVED
RK
R. Kapoor approved CO-0042 for $48,200
2026-05-02
14:18:04
EDITED
LC
L. Chen edited spec section 09 30 13
2026-05-02
Field
STC rating requirement
Before
minimum 50 (all walls)
After
55 (executive offices), 50 (other)
Reason
Owner request — meeting 2026-05-01
11:02:47
DISMISSED
JT
J. Tao dismissed RFI-0138 as resolved
2026-05-02
09:14:22
APPROVED
SP
S. Patel approved pricing on CO-0042
2026-05-02
17:48:11
UPLOADED
MW
M. Wong uploaded A-501 r4 (4.2 MB)
2026-05-01
5 of 248 entries · last 7 days
Why this direction

Audit logs are read for two reasons: compliance (annual SOC 2 review, owner audit, dispute resolution) and investigation ("who changed this and why?"). The visual treatment optimizes for both: action pills let the eye scan for unusual patterns; expandable rows surface before/after values for investigations.

Action pills use semantic color tokens consistent with the rest of the system — APPROVED is success-green, DISMISSED is error-red, EDITED is warning-amber, UPLOADED is info-slate. The user develops pattern recognition: a string of red rows for one user is a flag.

Before/after values use the same diff color treatment as Section 57 (red wash for before, green wash for after). This visual consistency means a user who's seen one diff surface intuits the other.

Immutable by design. Entries cannot be edited or deleted — that's the entire point. Even the user who created an entry can't modify it. The export includes a hash for verification when the log leaves the system.


Brief surface composing locked components · cohesion test

A real Brief surface using only locked components from Sections 16, 21, 26, 27, 33, 36, 39. Sidebar (with bell+badge from Section 39), topbar (Search + bell + locked CTA), title block (with date pill + flagged count), 3 stat cards (Section 36 stat-card pattern), 3 brief items with different statuses (amber Flagged, green Resolved, red Overdue — tests status color clustering), Open Actions register (Section 16 pattern). Goal: see if components hold together when composed in real proximity, not just in isolation. Look for: status color saturation, surface contrast at multiple nested levels, eyebrow / count pill / status dot competing.

ecreal
Project
Today's Brief 8
Action Register12
Project State
Documents
Drawings
Greenline Tower/Phase 3
Live · updated 14m ago
3
Today's brief
Wed Apr 30
8 flagged
Open RFIs
12+3 vs 14d
Avg response
8.2d−1.8d
Submittals pending
5avg 4.2d aging
Flagged / Drawing revision
Mech room layout conflict surfaced in Addendum 14
Addendum 14 reroutes chilled water lines through mech room ceiling. M-301 r3 shows existing ductwork in same location.
Refs M-301Add.14RFI-0142
Confidence
Resolved / Submittal approved
Greenline Drywall 09 30 13 submittal approved by owner
Tom Kowalski signed off on revision 2 of the drywall submittal. Aaron is cleared to begin procurement.
Refs SUB-0089Email thread
Confidence
Overdue / RFI response late
RFI-0140 has been awaiting design response for 12 days
Pipe support layout query was issued Apr 18; standard turnaround is 5 days. Recommend escalating to design lead.
Refs RFI-0140S-204
Confidence
Open actions 12 3 due this week
Submittal review/Greenline Drywall 09 30 13
2d AS
RFI draft/Mech ceiling conflict
today AS
CO pricing scrub/VCR-0042
3d JM
Pre-test observations to flag:

Status color clustering — OK. 3 brief items (amber / green / red eyebrows) read as distinct categories; the eye scans them as different things rather than a "rainbow" because the dot + label combination is the same shape with only the color varying. Same for the 3 action rows (amber / red / amber priority dots).
Clay frequency — check. Clay shows in: brand mark dot, sidebar active state, "8" count badge in sidebar, "3" notification badge in topbar, "+ New Brief" CTA "+", "12" amber count chip in Open Actions. Six clay-or-clay-tinted moments on one screen. Reads as accent rhythm, not saturation, because most are small (badges, dots, single characters).
Surface depth at nested levels — OK. Cards on the dark main bg (#131517) get the gradient; the action rows inside cards stay flat (no nested gradients). The Open Actions header has its own subtle bg overlay. The stack reads as 3 levels: app surface → card surface → row.
Confidence bars across briefs read consistently. Three briefs at 86 / 94 / 72 percent fill, all green — the user reads "high confidence" without parsing numbers, which is what we want.
Notification badge visibility — check. The "3" badge on the bell uses Clay Bright (#C68070) on dark surface (#131517) with a 2px ring matching the surface. Pops appropriately without competing with the brand mark.
One thing to watch in real product: if a brief feed has 8+ items with mixed amber / red / green eyebrows, the "rainbow" effect could appear. Probable mitigation: group/sort by type so similar statuses sit together, OR use the type label (Drawing revision / Submittal approved / RFI response late) as the primary grouping so eyebrow color reads as secondary.

Conclusion: the system holds together. Ready for full composition demos — multiple product surfaces (Today's Brief, Action Register, Drafts, Project State, Subcontractor profile, First-run/onboarding) — before the final-document migration + token consolidation pass.
Why this direction

This is the cohesion test that surfaced design notes carried forward into Section 50. A real Brief surface composed from locked components only — sidebar, topbar, title block, stat cards, brief items, action register.

What this test caught: status color clustering creates a "rainbow" that reads as decoration, not signal — the fix was to order action rows by priority & recency, never by status. Surface contrast at multiple nested levels needed adjustment. Eyebrow / count pill / status dot competing for attention required tuning.

The cohesion review only happens once a real surface composes the components. Patterns that look right in isolation can clash when placed in proximity.


7 complete product surfaces using only locked components

Each surface composes locked components from the system — no new components introduced. Goal: prove the components actually fit together when placed in real proximity, not just in isolation. Where tensions surface (status color clustering, surface-depth stacking, accent saturation), the cohesion review pass earlier flagged them. The demos below show what passing the cohesion test looks like at full surface scale.

50.1 · Today's Brief — feed surface
ecreal
Project
Today's Brief8
Action Register12
Drafts3
Project State
Documents
Drawings
Subcontractors
Greenline Tower/Phase 3
Live · updated 14m ago
3
Today's brief
Wed Apr 30
8 flagged
1 overdue
Open RFIs
12+3 vs 14d
Avg response
8.2d−1.8d
Submittals pending
5avg 4.2d aging
Schedule health
On track5 of 5 phases
Flagged / Drawing revision
Mech room layout conflict surfaced in Addendum 14
Addendum 14 reroutes chilled water lines through mech room ceiling. M-301 r3 shows existing ductwork in same location.
RefsM-301Add.14RFI-0142
Confidence
Overdue / RFI response late
RFI-0140 has been awaiting design response for 12 days
Pipe support layout query was issued Apr 18; standard turnaround is 5 days. Recommend escalating.
RefsRFI-0140S-204
Confidence
Resolved / Submittal approved
Greenline Drywall 09 30 13 submittal approved by owner
Tom Kowalski signed off on revision 2. Aaron is cleared to begin procurement on schedule.
RefsSUB-0089Email thread
Confidence
Flagged / Schedule risk
Mech procurement deadline May 8 conflicts with open RFI-0142
Aaron Schmidt confirms backorder risk if RFI-0142 is not resolved by Friday May 6.
RefsRFI-0142Schedule
Confidence
New / Owner direction
Addendum 14 issued — formal design direction received
Owner has formally issued Addendum 14, superseding M-301 r3 routing. Updated drawings expected by EOW.
RefsAdd.14Email thread
Confidence
Resolved / Change order priced
CO-0042 — Curtain wall anchor revision — pricing complete
Subcontractor has returned pricing for CO-0042 at $48,200 (within tolerance). Ready for owner review.
RefsCO-0042CW-301
Confidence
Design system rule for the brief feed surface: when items mix multiple statuses (Flagged amber / Overdue red / Resolved green / New slate), group by status or type before sorting by recency. Mixed-status feeds risk rainbow effect — the eye reads alternating colors as decoration rather than meaning. Default sort: priority (Overdue red first, then Flagged amber, then New slate, then Resolved green) so the eye lands on what needs action first. Within each status group, sort by recency. Implementation note for engineering: the feed component should accept a sort prop with default priority-then-recency.
50.2 · Action Register — table surface
ecreal
Project
Today's Brief8
Action Register12
Drafts3
Project State
Documents
Drawings
Subcontractors
Greenline Tower/Phase 3
Live · updated 14m ago
3
Action Register
142 items
2 overdue
Status: Open, In review Priority: High, Med
8 of 142
ID Title Status
Created
Due Priority Owner
RFI-0142 Mech room layout conflict
Open
Apr 30 2d High AS
RFI-0140 Pipe support layout
Open
Apr 18 today High JM
SUB-0089 Greenline Drywall 09 30 13
Approved
Apr 27 Low AS
CO-0042 Curtain wall anchor revision
In review
Apr 26 4d Med JM
RFI-0141 Slab on grade thickness
Closed
Apr 28 Low JM
SUB-0091 Concrete Mix 03 30 00
Pending
Apr 28 5d Med AS
RFI-0139 Stair tread material
In review
Apr 26 5d Med RC
CO-0067 Drywall scope revision
In review
Apr 24 7d Med AS
Showing 1–8 of 142
50.3 · Drafts — review queue + preview
ecreal
Project
Today's Brief8
Action Register12
Drafts3
Project State
Documents
Drawings
Subcontractors
Greenline Tower/Phase 3
Live · updated 14m ago
3
Drafts
4 pending review
1 ready to send
Drafts the system has prepared from project context. Review, edit, or send. Each draft cites the sources used.
RFI RFI-0142 response · Mech room conflict
Send to Tom Kowalski · 2h ago
Ready
Email Reply to Aaron · procurement deadline
Confirming May 8 deadline impact · yesterday
In progress
Submittal SUB-0091 review notes
Concrete mix follow-up questions · 3d ago
Awaiting input
RFI RFI-0143 draft · Stair fab clarification
Pending RFI for fabrication detail · 4d ago
In progress
RFI · preview
RFI-0142 response · Mech room conflict
VCR-DRAFT-2026-04-30-007
To: Tom Kowalski <tom@greenline.com>
Subject: RFI-0142 — Mech room layout conflict at G-7

Tom,

Per our discussion at the Apr 28 MEP coordination review and your written confirmation that Addendum 14 supersedes M-301 r3 routing, we are proceeding with the chilled water reroute as drawn in Add.14.

Aaron has confirmed the procurement deadline of May 8. We need formal written direction by May 6 to avoid backorder impact. Updated as-builts will follow your direction.

Please confirm receipt and timing for formal response.

Sources cited: Add.14 M-301 r3 MEP Apr 28
50.4 · Brief detail — modal + full-screen views
Today's brief
Wed Apr 30
Mech room layout conflict surfaced in Addendum 14
RFI-0140 has been awaiting design response for 12 days
Flagged / Drawing revision
Mech room layout conflict surfaced in Addendum 14
VCR-BRIEF-2026-04-30-007 · click title to open in dedicated view
Addendum 14 reroutes chilled water lines through mech room ceiling. M-301 r3 shows existing ductwork in same location. Owner has not yet acknowledged the conflict.
Suggested response · RFI draft
RFI: Please confirm whether the chilled water reroute in Add.14 supersedes ductwork on M-301 r3. If yes, please provide updated mech room layout. If no, please advise on coordination approach for the conflict at column line G-7.
Above · Modal view (centered overlay) Below · Full-screen view (dedicated route)
ecreal
Project
Today's Brief8
Action Register12
Drafts3
Project State
Documents
Drawings
Subcontractors
Greenline Tower/Phase 3/VCR-BRIEF-2026-04-30-007
Live · updated 14m ago
3
Flagged / Drawing revision VCR-BRIEF-2026-04-30-007 · full-screen view
Mech room layout conflict surfaced in Addendum 14
Generated 14m ago from project state / Synthesized from 22 sources / RFI-0142 in progress
Addendum 14 reroutes chilled water lines through mech room ceiling. M-301 r3 shows existing ductwork in same location at column line G-7. Aaron Schmidt confirmed the conflict via the MEP coordination review on Apr 28; Tom Kowalski has issued written direction stating Addendum 14 supersedes the drawing and reroute should proceed.
Refs M-301 r3Add.14RFI-0142MEP Apr 28
Suggested RFI response
RFI-0142: Please confirm Add.14 supersedes M-301 r3 routing. Aaron has procurement deadline May 8; need direction by May 6 to avoid backorder. Three reroute paths attached as alternates from Jin Park.
Confidence
Activity
RFI-0142 issued
just now
50.5 · Project State — portfolio dashboard
ecreal
Project
Today's Brief8
Action Register12
Drafts3
Project State
Documents
Drawings
Subcontractors
Greenline Tower/Phase 3
Live · updated 14m ago
3
Project State
Greenline Tower · Phase 3
On track
Schedule health
On track5 phases
Budget variance
−1.4%$28K under
Open RFIs
12+3 vs 14d
Submittals approved
22 / 4747% complete
Deliverables
Deliverable register breakdown
RFIs 142 total
Open 28 Review 14 Closed 100
Submittals 47 total
Approved 22 Pending 18 Rejected 5
Velocity
RFI velocity
This week
12
Last week +33%
9
Brief items flagged · 14 days
73
Apr 17 — Apr 30
Schedule
Schedule · 5 active phases Apr 6 — Jun 1
MEP rough-in
Drywall · level 3
Mech room reroute
blocked · RFI-0142
Curtain wall install
Stair fabrication
Today
50.6 · Subcontractor profile — coordination summary
ecreal
Project
Today's Brief8
Action Register12
Drafts3
Project State
Documents
Drawings
Subcontractors
Subcontractors/Greenline Drywall Inc.
Live · updated 14m ago
3
Greenline Drywall Inc. Active
CSI 09 30 13 · Drywall & Acoustical · on Greenline Tower Phase 3 since Jan 2026
(415) 555-0142 aaron@greenlinedrywall.com 2840 Industrial Way, Hayward CA
Contract value
$2.84M
Phase 3 · signed Jan 14
Change orders
3+$48K
1.7% of contract
On-time rate
92%+3pt YoY
Last 18 months
RFI volume
12
3 open · avg 4.2d response
Recent activity
SUB-0089 approved
today · 09:14
Email response · mech room conflict
14m ago
CO-0089 priced
2 days ago
50.7 · First-run / onboarding — setup flow
ecreal
Project
Today's Brief
Action Register
Drafts
Project State
Documents
Drawings
Subcontractors
Greenline Tower/Phase 3
Setup · step 3 of 4
75% complete
Connect Procore
Index documents
3 Sync emails
4 Generate first brief

Connect Outlook to capture project emails

We'll index 30 days of recent emails relevant to Greenline Tower Phase 3. Future emails sync automatically. Vecreal reads — never sends — without explicit action from you.

Read-only access · we never send
Disconnect anytime in settings
~90 seconds · opens Microsoft sign-in in a new tab
Cohesion observations across the 7 surfaces:

Component reuse worked. Every surface composes from: sidebar (locked), topbar (locked), title block, stat cards, brief cards, action rows, status pills, references pills, confidence bars, modal, popover, table, tabs, buttons, avatars, chips. No new patterns invented.
Status colors stay legible across surfaces. Brief feed (50.1) mixes amber/red/green/slate eyebrows; Action Register (50.2) mixes red/amber/green status dots + red/amber priority chips; Project State (50.5) shows the full red/amber/green spectrum. The pattern reads consistently: dot + label is always the same shape, only color varies.
Clay rhythm holds. On every surface, clay appears in: brand mark, sidebar active item, count badges, primary CTA "+", focus indicators. Six-to-eight clay touchpoints per screen. Reads as accent rhythm because most are small (badges, dots, single characters), with one larger moment (the CTA bubble's clay "+" prefix).
Surface depth scales. Three nested levels (app bg → card gradient → subtle row bg) work consistently. The Subcontractor profile (50.6) adds a fourth level with the colored metric strip and reads cleanly.
Page header · title block · date pill pattern feels canonical. Same on every surface. PMs scanning multiple Vecreal surfaces pick up the rhythm immediately.
Onboarding (50.7) is intentionally different. Centered card, hero icon, no rich data. Locks the "first-run feels like product, not setup wizard" goal. Setup-stepper shares the same green-check/clay-active/neutral-pending logic from the design system's Section 37 wizard pattern.

System holds together. Ready for migration to the final design system document with token consolidation pass.
Why this direction

Seven surfaces that compose from locked components only. No new components introduced. This is the integration test that proves the system actually holds together at full surface scale.

Each demo carries its own design notes locked from the cohesion review (50.1 grouping rule, 50.2 outlined filter pills, 50.3 thin clay accent bar, 50.4 mono divider labels, 50.5 section eyebrow dividers, 50.6 project-specific subtitle, 50.7 trimmed trust list). These notes propagate back to engineering as locked rules.

If a new surface needs a component not in the catalog, the system has a gap — either escalate (add it to the catalog) or constrain the surface to existing primitives. Composition is the test that the system actually holds together.


Operating compass for product UI

Calibrated for "intelligent + premium + approachable" — neither cockpit-overload nor minimal-sparse. Modernized B2B, not bleeding-edge minimal.

Spacing & Layout
Border radius: 6-8px on cards/panels, 4-6px on small UI.

Card padding: 24px standard. 20px tight. 32-40px hero.

Spacing scale: 4px base (4, 8, 12, 16, 24, 32, 48, 64, 96).

Whitespace: Leaned generous. Confidence signal.
Color Discipline
95/5 rule: ~95% neutrals, ~5% accent.

Accent only for: Active states, primary CTA, citations, confidence, brand moments.

Hierarchy through type: Inter weight + size, not color.

Semantic colors stay neutral: Status dots, not loud labels.
Elevation & Depth
Cards: 1px borders + minimal warm shadows.

Surface hierarchy: App → card → elevated card. Tonal shifts, not heavy contrast.

Floating: Subtle warm shadow (rgba 31,29,26, 0.06).

No heavy chrome: Borders + tone do the work.
Motion & Polish
Timing: 150-250ms state changes. 300-400ms entries.

Easing: Custom curves (cubic-bezier 0.16, 1, 0.3, 1).

Purposeful only: Motion communicates state. Never decorative.

Loading: Subtle, consistent. No spinners-on-spinners.
What kills the intelligence feeling: heavy drop shadows, loud colors everywhere, cluttered density, default browser button styles, inconsistent spacing, stock UI patterns, bouncy decorative animations, emoji in UI labels, gradient backgrounds, "AI sparkle" loaders, configurable settings panel that screams "we built every feature anyone might want."
Why this direction

The principles are the constitution. When the system doesn't answer a question, these do. They're calibrated for "intelligent + premium + approachable" — neither cockpit-overload nor minimal-sparse. Modernized B2B, not bleeding-edge minimal.

If a proposed change conflicts with a principle, the principle wins. They're the longest-lived layer of the system — tokens get tuned, components get extended, but principles stay constant.