NEON CANVAS
TEAM PRE-READ · JUNE 2026 · V2
Web Build Operating System

One way to build, fifty at a time.

How we run website builds from now on: one structure for every build, gates you can trust, blockers that surface themselves, and estimates that learn. The pilot is live on Marcel Method Orthodontic Specialists — every example in this doc is real, pulled from our own Asana this week.

1,054
web build rows, all-time, in Web Project Priorities
57
builds active right now
27
of those are blocked — today
3 YRS
one site has been built but never launched
01 / WHY
Why we changed

The old way worked — until we had to see all of it at once.

This isn't criticism of the work — the sites are good. The problem is the system around the work made truth expensive: finding out where a build stood meant reading, asking, and remembering. We audited 18 of our own projects from 2021–2026 before designing this. Receipts below.

BEFORE

  • A build's stage lives in four places on one row — section, Status, Task Progress, and a hand-typed Notes field."6/10: Writing web copy now; In design queue…"
  • Blockers are invisible until someone asks at standup.Marcel's site migration sat dead for weeks on missing logins — zero signal
  • Date changes are manual and endless.one copy subtask carried 55 date-shuffle entries: "I had to shift the dates here again"
  • Builds can stall silently for years.22 months in punchlist rounds · built 4/2023, never launched
  • Estimates never learn — actual hours are never captured.
  • QA findings are subtasks: uncountable, unchartable, untraceable.

AFTER

  • One fact, one field. The stage is a single field — kept current automatically.
  • Blockers are data. One field when you're stuck; status flips, the pipeline shows it within the hour, a blocked-days clock runs.
  • Dates cascade. A milestone moves once; everything downstream shifts in one pass.
  • Stalls get named. On-Hold and Cancelled are real states; anything stuck too long is flagged weekly.
  • Estimates learn. Actual hours are logged when phases close; rates recalibrate every build.
  • Quality is countable. Every finding is a task with a "which phase let this through" field.
Put every fact in exactly one reportable place, gate the phases explicitly, and automate the bookkeeping — so nobody maintains two copies of the truth ever again.The one-sentence design brief
02 / MODEL
The model

Four containers. Each does one job.

Existing

Client Hub

Everything for one client — SEO, Ads, Creative, Video, Rebrand, and the post-launch Website Requests queue. Keeps all of it; only the build moves out, leaving a link.

New · per client

Website Build project

Where build work happens. One section per launchable build (Marcel has two: custom site + interim migration) plus a Punchlist section.

Stays

Web Project Priorities

The pipeline. One control row per build — same rows you know, now carrying real fields instead of hand-typed notes. Group by Phase and it sorts itself.

New

Web Builds portfolio

Holds the build projects. Its Dashboard tab charts every task across every build — hours by phase, blocker-days, punchlist sources. The cross-build view nothing else can give.

03 / FLOW
Phases & handoffs

Nine phases. Every handoff passes an artifact, not a vibe.

Each phase is one parent task. Its done gate lives in the task description — the objective definition of finished. Between phases, the thing that changes hands is named below: if the artifact isn't ready, the handoff didn't happen.

00Gate · Web Lead
Brand / Rebrand Gate
Settle the brand question before design capacity gets spent.
Do: confirm brand assets · confirm rebrand status · if rebranding, make the call explicitly
⚑ Done gateBrand status = Approved AND Design-ready = Yes. Proceeding mid-rebrand is allowed — as a recorded decision with a name on it.
Handoff → Design-ready flag — 04 is hard-blocked until this gate passes.
01Web Lead
Scope + Inventory
Lock what we're building and collect everything we need to build it.
Do: package + vertical · Discover/Design Form chased · page inventory locked · all access collected (domain, hosting, logins, GA, socials, CRM) · estimates + dates set
⚑ Done gateContent inventory linked · page count locked · access in hand · milestone dates on the control row.
Handoff → the content inventory — the page-level spreadsheet every later phase reads from.
02Content · Robert
Sitemap + Content Strategy
Architect the site: every page, its type, its target, its keywords.
Do: keyword strategy distributed · content audit · sitemap + nav · client sitemap meeting · template type + target words per page
⚑ Done gateEvery page has slug, page type, template type, target words · nav confirmed · strategist sign-off.
Handoff → approved sitemap + per-page briefs into the inventory; writers start from structure, not a blank page.
03Content · Robert
Copy Package
Write every page — homepage first, because it unblocks design.
Do: homepage copy early · inner pages per template · high-touch pages · content-lead review · client edit rounds · *CONTENT FREEZE*
⚑ Done gateEvery page Client-ready or Dev-ready in the inventory · freeze declared (no copy changes once dev starts).
Handoff ×2 → homepage copy → 04 (design starts early) · final copy docs → 06 (content load).
04Creative · Kira
Homepage Concept
One desktop concept, run through the full internal review chain.
Do: brief · design · design-lead review · content-lead + AM review · edits + dev notes · polish · final review
⚑ Done gateInternal chain complete · zero placeholder copy · ready to present.
Handoff → presentable concept + interaction/dev notes to the PM for the client moment.
05Gate · Web Lead
Approval + Revisions
Get a real decision, on the record. Max two revision rounds in standard scope.
Do: schedule + present · capture the choice · classify feedback · revisions · set the field · schedule dev dates
⚑ Done gateClient approval = Approved for Dev — a field, not an email memory. Round 3 = scope conversation.
Handoff → approved design + scheduled dev dates; the rule notifies dev automatically.
06Dev · Trenton
WordPress Build
Six sub-phases from setup to responsive cleanup — built against frozen copy.
Do: 06A setup/global → 06B homepage → 06C templates → 06D content load + blogs → 06E forms/CRM/embeds → 06F dev QA
⚑ Done gateStaging responsive · pages load · forms submit · CRM connects · Staging URL set on the control row.
Handoff → one canonical Staging URL — everything QA touches lives at that link.
07QA · Web Lead
QA/QC + Punchlist
Two loops: internal QA, then the client's. Every finding becomes a countable task.
Do: automated pre-QA · design/content/forms QA · marker.io on · client review call · feedback window · punchlist · marker.io off
⚑ Done gateClient loop closed · Punchlist has zero open Priority-High items (High = launch blocker).
Handoff → a cleared launch-blocker list + documented non-blockers; 08 may open.
08Dev · Trenton
Launch + Handoff
Go live, verify everything on production, hand off to every team — then close the loop.
Do: domain readiness · go-live · reconnect embeds · test forms w/ client confirm · CRM check · 72-hr bug watch · SEO/Ads/AM handoffs · retro
⚑ Done gateLive + verified · zero open tasks (delete N/A, never fake-complete) · time tracked on every phase · control row completed.
Handoff → SEO, Ads & AM receive their post-launch tasks inside the build project, with dates that cascaded with the launch — and the retro feeds the estimate model (§04).
Not every build runs all nine. Neon Now skips 04 — approval happens on a clickable draft of the built site. Migrations run 01 → 06 → 07 → 08. Phased builds get one control row per wave. The template is trimmed at kickoff — inapplicable tasks are deleted, never completed, so our completion data stays honest.
04 / HOURS
Estimated vs. actual

Where the hours come from — and why we track them.

Estimates aren't gut-feel anymore: they're computed from the page inventory using rates per page type, plus per-phase formulas. Then reality gets logged, and the rates get corrected. That loop is the whole point.

1

The inventory classifies every page on two axes: template type (drives design/dev effort) and copy type (drives writing effort). Marcel: 25 content pages + blog hub + 4 thank-you pages.

2

Rates × counts = role estimates. Copy rates per page type (see panel), design as a per-concept formula, dev as setup + per-template + per-page load. These land on the control row: Marcel = 24.1h copy · 10h design · 44h dev.

3

Per-phase formulas cover the rest: 02 = base + per-page · 05 = per revision round · 07 = base + per-page + per-form · 08 = base + handoff. Each phase task carries its estimate.

4

You track time with the built-in timer ▶ — hit play on the task or subtask you're actually working, pause when you stop. Time tracked on subtasks rolls up into the phase task natively, so the reporting layer stays true without anyone copying numbers. Estimating at the subtask level is supported too — estimate where the work is real.

5

Retro closes the loop. At launch, actual-vs-estimate per phase recalibrates the rates. Every build makes the next estimate more honest.

Copy rates · standard ortho (v1, will calibrate) Homepage 2.0h
Treatment / SEO page (1,600–2,000w) 1.5h
High-touch (bios, team, why-us) 1.25h
Location page 1.0h
Section landing 0.75h
Conversion page 0.6h
Standard / utility 0.5h
Thank-you / micro 0.15h
This is for you, not on youVisible estimates mean realistic workloads and defensible timelines — when scope creeps, the numbers argue for you. When estimates are wrong, we fix the rate, not blame the person.
Realistic assignmentsCapacity planning runs on real numbers — no more "can you squeeze it in" built on hope.
Proof of where time goesBlocked-days and actuals show what waiting and rework actually cost — by category, by phase, by client.
Gaps become supportIf a phase consistently runs over, that's a training, tooling, or scoping problem to fix — visible early, not discovered at the retro.
05 / LIVE
Tour the pilot — live right now

This is Marcel Method's build, today.

Built 6/10 from the real state of the build. Completed phases came over as completed — and the system made its first two catches on day one, without anyone having to notice them.

Marcel Method — Website Build [PILOT]🔒 PRIVATE UNTIL PROMOTED
▾  Website Build
Marcel Method Orthodontic Specialists — the control row (also lives in WPP)03 COPY DESIGN-READY: PENDING
The control row = the build's facts: Custom Website · Ortho · 25 pages · est 24.1 / 10 / 44h · Brand: Actively Rebranding · Client approval: Not sent · inventory attached. Nobody hand-maintains it.
00 Brand / Rebrand GateAndyJUN 11⚑ DECISION DUE
Day-one catch №1: the rebrand is unlaunched and homepage design starts tomorrow. The gate demands the explicit call — proceed on the approved style board and set Design-ready = Yes with a name on it, or hold 04. Under the old way, this decision was being made by nobody.
01 Scope + InventoryAndyDONE4H EST
02 Sitemap + Content StrategyRobert5/228.5H EST
03 Copy Package — 23/25 drafted · 10 in final edits · Necia makesRobertJUN 1024.1H EST
04 Homepage Concept ⛓ waits on 00 · Tiara makesKiraJUN 238H EST
05 Approval + RevisionsAndyJUN 30GATE → DEV
06 WordPress Build · Nelson makesTrentonAUG 344H EST
07 QA/QC + PunchlistAndyAUG 1415.5H EST
08 Launch + HandoffTrentonAUG 18LAUNCH
▾  Interim Migration — the second build, its own pipeline row
Marcel Method … — Interim Site MigrationAndy🚫 ACCESS/DNS · 10 DAYS
01 Access & Scope · Connar chases accessAndyJUN 17BLOCKED
Day-one catch №2: the interim migration has been stuck on missing site files, hosting and domain access since ~May 31 — previously invisible. Now it's a red pill in the pipeline with a 10-day blocker clock running, assigned to the AM to chase.
06 Migrate + Upgrades · 07 Site QA · 08 Launch + HandoffTrenton⛓ CHAIN
▾  Punchlist — empty until QA; marker.io items land here automatically
QA findings & client feedback become tasks here — countable, assignable, chartable
06 / FIELDS
The fields

You'll touch two or three of these, ever.

FieldWhat it meansWho sets it
Web Build Type / PhaseWhat it is · where it is (00–08, ⏸ On Hold, ✖ Cancelled)Web lead at kickoff · then automatic
Brand status · Design-readyThe 00 gate pair — design can't start mid-rebrand by accidentWeb lead/AM; the flip is the recorded decision
Page count · Est. hours ×3 · Content inventory linkScope + role estimates, rolled up from the inventory (§04)Set once at scoping
Client approvalNot sent → In review → Revisions → Approved for Dev (the 05 gate)Web lead — this field is what unlocks dev
Blocker category + daysContent · Assets/Brand · Client · Access/DNS · 3rd Party · Internal — and what waiting costsYou, the minute you're stuck; days computed for you
Estimated time → Actual time ▶Asana's native pair: the budget vs. the timer. Subtask time rolls up to the phase automaticallyEstimates at kickoff (or on your subtasks) · you just run the timer
QA escape source phaseOn punchlist items: which phase let this throughQA, when logging a finding
Staging URLOne canonical link for all QA and reviewDev, when staging spins up

The rule behind the rules: anything we want to report on is a task; subtasks are checklists. That one principle is why the dashboards work.

07 / HABIT
The most important habit

When you're blocked: ten seconds, one field.

The blocked playbook

  1. On your phase task, set Blocker category — Content, Assets/Brand, Client, Access/DNS, 3rd Party, or Internal.
  2. Add one comment with specifics ("waiting on YT login, asked 6/9").
  3. Done. Status flips to 🚫 Blocked, the pipeline shows it within the hour, your lead is notified, and the blocked-days clock starts.
  4. Unblocked? Set it back to None. Clock stops, status returns.

Why it matters: 27 of 57 active builds are blocked right now — and under the old way, each one was discovered by someone asking. The clock isn't surveillance: it's how we prove where time goes, what waiting costs, and which blockers deserve a process fix. Blocked time is the #1 thing this system exists to recover.

08 / AUTO
The robots

Eight rules do the bookkeeping. You do the work.

#When…The rule…
R0Vertical is setfills in Vertical fit for you
R1you set a Blocker categoryflips status to 🚫 Blocked, notifies the web lead, starts the clock
R2you clear it to Noneback to In Progress, clock stops
R3a phase completesreminds you: check the gate honestly + log Actual hours
R4Client approval → Approved for Devnotifies dev and kicks off scheduling
R5a task lands in Punchlistmarks it Needs Assignment — nothing sits untriaged
R6a due date is 2 days outnudges the assignee
R7marker.io creates a feedback itemroutes it into Punchlist automatically — client feedback becomes data, zero process

Behind the rules, automation handles what rules can't: advancing the control row's phase, computing blocker-days, cascading dates when a milestone moves, the weekly pipeline digest, stuck-too-long flags, and the retro pack that recalibrates estimates after every launch.

09 / VIEWS
Where to look

Three views, three jobs. Bookmark, don't memorize.

The Build Project

Doing the work · daily

Your tasks, your phase, the gates, the punchlist. Phase owners live here.

  • Assigned tasks & checklists
  • Done gates in every description
  • Punchlist triage

Web Project Priorities

The pipeline · same place as always

One row per build — now with real fields. Group by Web Build Phase and stage columns replace section-shuffling and Notes-reading.

  • What stage is every build in?
  • What's 🚫 blocked, on what, how long?
  • What launches this month?

Web Builds Portfolio

The dashboards · weekly & monthly

Holds the build projects — its Dashboard tab charts tasks across every build at once.

  • Actual vs. estimated hours, by phase
  • Blocker-days by category
  • Punchlist volume by source phase
  • Launches per month

Plain answer to the obvious question: control rows are never "in" the portfolio — they live in WPP and the build project. The portfolio contains projects; its dashboards read every task inside them. During the pilot the new columns aren't in WPP yet — they get attached on promotion day, so the team meets the new pipeline exactly once, fully formed.

10 / CADENCE
Your cadence

Who looks at what — daily, weekly, monthly.

Who owns a phase? The functional lead is accountable — their name goes on the phase task; the makers do the work on subtasks, timer running. Leads answer for the gate, the queue, and raising blockers; makers answer for the craft. The map: 00 · 01 · 05 · 07 → Andy (Web Lead)  ·  02 · 03 → Robert (Content)  ·  04 → Kira (Creative)  ·  06 · 08 → Trenton (Dev). Tiara, Nelson, Necia, Alison and team carry the subtasks. There is deliberately no PM role on this list — the bookkeeping that used to need one (status syncing, date shuffling, blocker chasing, rollups) is what the automation now does, which is what lets web run under one lead.

Web Lead ANDY — RUNS WEB

Daily · ~5 min
WPP grouped by Phase: new/aging 🚫 blocked rows · the 00 and 05 gate calls are yours · Punchlist items in Needs Assignment.
Weekly · ~20 min
Portfolio dashboard + digest: actual-vs-estimate drift · blocker-days by category · stuck-too-long flags · approve date cascades when milestones move · sequence design/dev queues from real capacity.
Monthly
Retro review with the phase leads: rate calibration · escape-phase trends ("what is QA catching that 06 should?") · retro closeouts · template tweaks.

Phase Leads ROBERT · KIRA · TRENTON

Always
Your name is on your phase, every build — you answer for the gate, the queue, and the estimate; your team carries the subtasks.
Daily
Your phases that are 🚫 blocked or coming due · raise blockers your makers hit, same hour.
Weekly
Queue + capacity for your function across all builds · estimate sanity on incoming scopes · time-tracking discipline on your team.

Makers TIARA · NELSON · NECIA · ALISON + TEAM

Always
Work the checklist — the done gate is in the task description. "Finished" needs no interpretation.
While you work
Run the timer ▶ on the task or subtask you're in — it rolls up to the phase automatically. It's how the next estimate gets sane.
The moment you're stuck
Blocker category + one comment. Ten seconds. (§07)

Account Managers CONNAR + TEAM

Per build
Own access collection at 01 (the #1 stall cause) · client scheduling at 05 & 07 · NAP truth at QA · post-launch checks at 08.
Daily
Your blocked items where category = Client — yours to chase, clock visible.

SEO · Ads · Social BEN · THERON · GARRETT · KATIA

Per build
Your handoff tasks live inside the build project at 08, assigned to you, with dates that cascade when launch moves. No more learning a slip from Slack.

Leadership JUSTIN

Weekly
Digest + portfolio dashboard: pipeline distribution, blocked cost, launches on track.
Monthly
Throughput · blocker-days trend by category · estimate-accuracy trend · zombie report.
11 / NEXT
Rollout

What happens from here — and your three asks.

NOW

The pilot is live on Marcel Method (private). It was built from the build's real state — completed phases came over completed, blockers came over blocked.

+1

Rules go in and we hold this walkthrough. Bring questions — friction you spot now gets fixed before anyone else lives in it.

+2

Promotion day: the pilot becomes Marcel's project of record, Web Project Priorities gets the new columns, and the dashboards turn on. You meet the new pipeline exactly once, fully formed.

+3

Migration waves: the ~40 active builds move over one batch at a time, full history intact — comments keep their original author and date. Nothing is lost, nothing is retyped.

The template: every new build starts identical from day one — which is what keeps fifty projects reportable as one system.

Your three asks — the entire behavior change:  ▶ Run the timer on the task or subtask you're working.  🚫 Set Blocker category the minute you're stuck (ten seconds).  ⚑ Treat the done gate as the definition of finished. Everything else — status, rollups, dates, reports — is the system's job, not yours.
12 / FAQ
FAQ

The questions you're about to ask.

Is this more work for me?

It's different work, and less of it. You gain: one field when blocked, and a timer ▶ you tap while you work. You lose: status meetings about status, Notes-field archaeology, being asked "where's the build at," and re-typing dates nine times when a launch moves.

Is the time tracking about watching me?

No — it's about fixing the estimates and proving where time goes. When a phase runs over consistently, we fix the rate or the process, not the person. Visible numbers are also your best defense when scope creeps: the hours argue for you.

What happens to Web Project Priorities?

It stays — same rows, same place. The rows just become trustworthy: real stage and blocker fields replace the four overlapping signals. Nothing changes for you until the pilot is promoted, and then it changes once, fully formed.

What about the old projects?

Active builds (~40) migrate in waves with full task history — comments carry their original author and date. The 997 completed rows stay where they are as history. Client hubs keep everything that isn't the build, including Website Requests.

What if a client goes dark?

The build goes ⏸ On Hold with a blocker category — visibly, clock running. When they return, dates cascade forward in one pass. No more zombie builds discovered years later.

Who keeps the control row updated?

Mostly nobody — that's the point. Automation advances the phase, rolls up blockers, counts the days. The web lead touches it at kickoff and at client approval.