vyynl.
am portal · ui v3
RG
Razelle G.
ACCOUNT MANAGER · 18
Studio office
Today 14The Book 18Issues 9Briefs 8This week 2Calendar 4
On the desk
Nothing open yet. Accounts and briefs land here as you work them.Open the Book →
Reference
Empty · loading · error
Legend
⏸waiting on client
▸waiting on vyynl
$money
!needs you
✓moving
Glyph and word always. Colour reinforces, it never carries the state alone.
Nothing here auto-sends.
Every action produces a draft.
SUN 01 NOV, 04:25
/am · ranked stack

Today.

One order, severity then age. Stall and Hold are derived: three days with no Hold reason, or a Hold flag with a restart date. No filters, no tabs.

Review this weekOpen the Book
9
Need action
4
Stalled 3d+
1
On hold
2
Installs this week
1
Balance due
2
No next action
QueuePreview seed · severity, then age
14items
4d
PS 268 · brief stalled 4d
auditorium wrap. No Hold reason. Three days without movement is the AM’s failure, not the designer’s.
!Stalled
Why this is here · derived, never typed
brief.status === 'draft' && ageDays >= 3 && !on_hold → stall_no_hold
A draft nobody finished blocks its job silently. Put it on Hold with a reason and a restart date, or finish C, D, and F and submit it to the PM.
Job
J-0142 · auditorium wrap
Brief age
4d
Hold
null
Handoff
Submit to PM · PM assigns the designer
Go to PS 268Nothing on this row sends anything.
4d
PS 268 · brief stalled 4d
corridor panels. No Hold reason. Three days without movement is the AM’s failure, not the designer’s.
!Stalled
Why this is here · derived, never typed
brief.status === 'draft' && ageDays >= 3 && !on_hold → stall_no_hold
A draft nobody finished blocks its job silently. Put it on Hold with a reason and a restart date, or finish C, D, and F and submit it to the PM.
Job
J-0157 · corridor panels
Brief age
4d
Hold
null
Handoff
Submit to PM · PM assigns the designer
Go to PS 268Nothing on this row sends anything.
9d
Riverdale Prep · brief stalled 9d
lobby rebrand. No Hold reason. Three days without movement is the AM’s failure, not the designer’s.
!Stalled
Why this is here · derived, never typed
brief.status === 'draft' && ageDays >= 3 && !on_hold → stall_no_hold
A draft nobody finished blocks its job silently. Put it on Hold with a reason and a restart date, or finish C, D, and F and submit it to the PM.
Job
J-0146 · lobby rebrand
Brief age
9d
Hold
null
Handoff
Submit to PM · PM assigns the designer
Go to Riverdale PrepNothing on this row sends anything.
3d
Fordham Pharmacy · no movement in 3d
Same stage, no Hold reason. Name why it is still or put a restart date on it.
!Stalled
Why this is here · derived, never typed
last_move_days >= 3 && !on_hold && wait IN (vyynl, moving) → stall_no_hold
Client waits already have nudge rows. This row is the invisible one: work that looks live and is not.
Wait
vyynl
Last touch
3d
Hold
null
Go to Fordham PharmacyNothing on this row sends anything.
over
JHS 118 · designer due 2026-06-26
shade repair. Designer delivery date has passed.
▸Due from us
Why this is here · derived, never typed
designer_due within 5 business days OR designer_due < today → designer_due_overdue
The due date is when the designer must deliver, not when the client wants it installed. Install is a PM booking.
Job
J-0155 · shade repair
Designer due
2026-06-26
Install
PM books · AM proposes
Designer assigned by
PM
Go to JHS 118Nothing on this row sends anything.
15d
PS 268 · signature not countersigned
Sent 19 Aug. Past the 14 day line, so leadership can see it.
⏸Waiting on client
Why this is here · derived, never typed
proposal.status === 'sent' && !proposal.signedAt → waiting_on_client('signature')
The proposal went out 19 August and no countersigned copy has come back. Nothing set this state by hand: it is computed from the proposal row every time the queue renders, so it clears itself the moment the signature lands.
Proposal sent
19 Aug
Signed at
null
Nudge 1
Drafted 22 Aug, unsent
Escalation
Past 14 days · leadership visibility
Go to PS 268Nothing on this row sends anything.
6d
IS 211 · access not confirmed for Thursday
Custodian unreachable. Nudge 1 drafted 22 Aug, still unsent.
⏸Waiting on client
Why this is here · derived, never typed
install.scheduled && !access.confirmedAt → waiting_on_client('access_confirm')
An install is on the calendar for Thursday and nobody at the school has confirmed the crew can get in. This is the branch with no source column in the schema yet, so it is the first thing to break when the mocks come off.
Install scheduled
Thu 28 Aug
Access confirmed
null
Contact
Denise Whitaker · custodial
Best window
7:00 – 9:00 AM
Go to IS 211Nothing on this row sends anything.
2d
PS 115 · mockup r2 sitting with design
You logged it 24 Aug. Design has not picked it up.
▸Waiting on Vyynl
Why this is here · derived, never typed
issues.some(i => i.status === 'open') → waiting_on_vyynl('issue_open')
You logged an issue and it routed to design. The job reads as blocked on us, not on the client, so no nudge is drafted and no clock runs against the school.
Issue
ISS-0321 · mockup r2 not picked up
Routed to
design
Logged
24 Aug
Cleared
not yet
Go to PS 115Nothing on this row sends anything.
2h
IS 211 · access issue cleared, the client does not know
Stays here until you log the callback.
!Callback owed
Why this is here · derived, never typed
issue.status === 'cleared' && !issue.client_notified_at → callback card
The PM cleared it two hours ago. To the school nothing has changed, because nobody has told them. The row will not leave this queue until the callback is logged, which is the only thing that sets client_notified_at.
Issue
ISS-0316 · access window moved
Cleared by
PM · 2h ago
Client notified
null
Contact
Denise Whitaker · (718) 555-0142
Go to IS 211Nothing on this row sends anything.
Thu
IS 211 · balance due on install day
Deposit paid 12 Apr. Read only on this surface.
$Money
Why this is here · derived, never typed
installCompletedAt && !balancePaidAt → money('balance_due')
Money is the lowest band in the sort, so it only surfaces once nothing client-blocking or internally blocking is ahead of it. You can see the balance here but you cannot touch it: money is edited where money is owned.
Deposit
Paid 12 Apr
Balance
Due on install day, Thu 28 Aug
Invoice
Sent 5/2
Writable here
No
Go to IS 211Nothing on this row sends anything.
—
2 accounts have no next action
Mott Haven Café and Riverdale Prep. Blocks nothing, nags forever.
!Debt
Why this is here · derived, never typed
client_accounts.next_action IS NULL → next-action debt
A null next action is legal in the database and loud in the interface. Nothing is blocked by it, no write is refused, and it will sit at the top of this queue until somebody names the next step.
Mott Haven Café
Commercial · last touch 9d
Riverdale Prep
School · last touch 4d
Blocks anything
No
Clears when
Both rows carry a next action
Nothing on this row sends anything.
09-02
Tottenville HS · on hold · solar shades
Production notes never written. Surfaces, measurements, or brand files not attested. Restart 2026-09-02.
⏸Hold
Why this is here · derived, never typed
jobs.on_hold && hold.reason && hold.restart → hold_audit
Hold is a flag, not a stage. The job stays where it is. A reason and a restart date keep it visible instead of invisible.
Job
J-0161 · solar shades
Reason
Production notes never written. Surfaces, measurements, or brand files not attested.
Restart
2026-09-02
Held since
2026-08-19
Go to Tottenville HSNothing on this row sends anything.
09-02
IS 211 · designer due 2026-09-02
logo blinds. Inside the next five business days.
▸Due from us
Why this is here · derived, never typed
designer_due within 5 business days OR designer_due < today → designer_due_watch
The due date is when the designer must deliver, not when the client wants it installed. Install is a PM booking.
Job
J-0149 · logo blinds
Designer due
2026-09-02
Install
PM books · AM proposes
Designer assigned by
PM
Go to IS 211Nothing on this row sends anything.
8d
Castle Hill Dental · quiet 8d
No stage change. Silence is what clients read as trouble. Draft the weekly update.
✎Weekly update
Why this is here · derived, never typed
last_touch_days >= 7 && wait !== 'debt' → weekly_quiet
Update at every stage change, and weekly on anything quiet. The draft answers where the job is, what happens next, and what you need from them.
Last touch
8d
Wait
money
Channel
Draft only · nothing sends
Go to Castle Hill DentalNothing on this row sends anything.
Every action on this screen writes a draft. Draft nudge 1 goes out past three days, nudge 2 past seven, and past fourteen the row escalates to the top with leadership visibility. The cadence lives in config. The send button lives with you.
TodayBookIssuesWeek