Studio Daybreak
A morning briefing that builds itself, with AI. Every weekday before 8am a scheduled session reads my studio’s Asana board, ranks my jobs by the day each one has to start, and republishes one page at the same link. I built it over fourteen days. The rules it follows are mine.
01The board doesn’t say what comes first
Here is the board on a Monday, jobs invented, names removed. Drag the handle. The page on the left is what the sweep makes of it: my five open jobs and one delivered, most important first, each with the day it has to start.
The value education flyer is four weeks late, King, and the posters have to start Thursday.
One of your five jobs is past due, none falls due today, and one also sits in Triage.
Off the strip: value education flyer, 27d late.
01Your column
Most important first. The pill is the countdown: red at four weeks late, gold inside a week, dashed once delivered.
- 1 Value education flyerIGA27d late
Four weeks late and the campaign is already in store. Finish it before anything else.
- 2 Footy finals A0 postersThe Bottle-O9d · Wed
Five working days of artwork due Wednesday week. Start Thursday or it slips.
- 3 Catalogue coverIGAFri · 4d
Three hours, due Friday. It fits on Friday morning.
- 4 In-store digital screensCellarbrations8d · Tue
Two working days, due Tuesday week, and it also sits in Triage where nobody watches it. Start Monday.
- 5 App home bannerIGAMon · 7d
One working day, due Monday week. It starts the same day as the screens, and Triage put the screens first.
- 6 Spring long weekend price ticketsCellarbrationsdone
The files are in Teams and the link is on the card. Only the archive move remains.
03Dispatch check
- · Whisky month postersCellarbrationsno link
closed after last Friday, no comment carries the Teams link
The sweep read the newest 40 closed jobs. 39 carry their link. This one does not.
04Already designed
Drag the handleLeft, the page the sweep makes of a MondayRight, the board it read
The board is honest about everything except priority. It holds due dates, estimated hours, banners and campaigns, and it shows them as a wall of cards. The page keeps five rows and adds the one thing I need at 8am: the order.
02What happens at 7am
Press play. Fifty-two minutes run in fourteen seconds. The session gathers, ranks, rebuilds and publishes, and the page assembles as it goes. The stage lengths are typical rather than measured; the one run I timed fired at 8:03 and published at 8:55.
The value education flyer is four weeks late, King, and the posters have to start Thursday.
One of your five jobs is past due, none falls due today, and one also sits in Triage.
Off the strip: value education flyer, 27d late.
01Your column
Most important first. The pill is the countdown: red at four weeks late, gold inside a week, dashed once delivered.
- 1 Value education flyerIGA27d late
Four weeks late and the campaign is already in store. Finish it before anything else.
- 2 Footy finals A0 postersThe Bottle-O9d · Wed
Five working days of artwork due Wednesday week. Start Thursday or it slips.
- 3 Catalogue coverIGAFri · 4d
Three hours, due Friday. It fits on Friday morning.
- 4 In-store digital screensCellarbrations8d · Tue
Two working days, due Tuesday week, and it also sits in Triage where nobody watches it. Start Monday.
- 5 App home bannerIGAMon · 7d
One working day, due Monday week. It starts the same day as the screens, and Triage put the screens first.
- 6 Spring long weekend price ticketsCellarbrationsdone
The files are in Teams and the link is on the card. Only the archive move remains.
03Dispatch check
- · Whisky month postersCellarbrationsno link
closed after last Friday, no comment carries the Teams link
The sweep read the newest 40 closed jobs. 39 carry their link. This one does not.
04Already designed
52 minutes in 14 secondsStage lengths are typical, not measured
One block of the page changes each morning: the JSON the render script reads. The markup, the CSS and the script never do. That is why the page looks the same every day, and why the session cannot break the design while it works.
03Latest safe start
A due date says when a job ends and nothing about when it has to begin. The sweep ranks by latest safe start instead: due date minus estimated hours, at seven and a half hours to a working day, weekdays only. Past due jobs outrank everything. Triage only breaks a tie. Drag the sliders and watch the order move.
- 1 Value education flyerIGA27d latedue 4 weeks ago·6 h, 1 working day· past due, ranks first
- 2 Footy finals A0 postersThe Bottle-O9d · Weddue Wednesday next week·37.5 h, 5 working days· start by Thursday
- 3 Catalogue coverIGAFri · 4ddue Friday·3 h, 1 working day· start by Friday
- 4 In-store digital screensCellarbrations8d · Tuedue Tuesday next week·15 h, 2 working days· start by Monday next week
- 5 App home bannerIGAMon · 7ddue Monday next week·7.5 h, 1 working day· start by Monday next week
Today is a Monday7.5 hours to a working day, weekdays only
The visibility trap. A job parked in a Triage queue is easy to forget, so the first sweep pushed anything in Triage to the top. A rule like that ranks by visibility rather than deadline, and a small job can sit above one that has to start sooner. Now Triage decides only when two starts fall within a day of each other.
04Three rules the board never states
Each of these changed what the page said, and each one is a sentence in the runbook rather than a line of code.
Archive means closed
Nobody in the studio ticks a task complete, because completed tasks vanish from search. A finished job moves to an Archive section instead. Read the board the obvious way and Archive looks like a pile of overdue work, which is how a sweep reads it until you say otherwise. One sentence did: a job in Archive counts as finished, whatever its due date says.
Closed means dispatched
Every job ends the same way. The final files go up to Teams, and a comment on the card carries the link. An archived job with no such comment still owes its handover. The page has a dispatch panel for it: it reads the newest closed jobs and lists the ones with no link, while I still remember where the files went.
Never link across banners
The Bottle-O, IGA and Cellarbrations share campaigns like Footy Finals, and each banner has its own look. The sweep links a job only to work on the same banner, and it matches on the board’s fields rather than names: one campaign appears on the board as Shop, Scan & Win, Shop. Scan. Win and CBN, Scan & Win.
05Fourteen days, thirteen decisions
Every stop on this strip is a commit to the dashboard’s repository, and each one started as a call I made. Scrub through them. The bar under each stop is my estimate of how the work split: the call, or the code.
One page, one link, rebuilt every morning
A page I open, not a report that lands in my inbox. Same link every day, rebuilt from the board before I sit down.
The first template, and the runbook that tells a scheduled session how to rebuild it.
Begin with the page you will open each morning, then work back to the sweep.
All the daily values in one JSON block
The sweep must never touch the design. It gets one block of data to rewrite and nothing else.
A render script that draws the strip, the chips, the rows and the counts from that block.
Separate what changes daily from what should never change.
Wear the portfolio's design system
Same canvas, gold, type and glass as kingtan.com.au. One system, not two.
Tokens, pills, the beam field and the fonts, lifted from the site's stylesheet.
A design system pays off the second time you use it.
Drop the marquee, keep links to one month
The marquee was noise, and linked work older than a month was never useful.
The gather rules for the month window and the panel that shows it.
Narrower is more useful.
Never link across banners
Footy Finals at The Bottle-O has nothing to do with Footy Finals at Cellarbrations. Link inside a banner only.
Field matching on Banner plus Campaign, and the Routine rebuilt to carry the rule.
Brands are not campaigns.
Match on fields, never on names
Task names drift with every typist. The board's custom fields do not.
Linking from the live board on the shared fields, teammates first.
Names drift, fields hold.
Build the Routine in the UI
The connector to the board only attaches through the Routines UI, so that is where the schedule lives.
The runbook rewritten to point at the new Routine and its run time.
Know where the tool draws its lines before you plan around them.
Halve the beams
The ambient beams were fighting the rows. Dim them.
Two lines of CSS.
Taste calls stay mine.
Archive means closed, and closed needs a dispatch link
Nobody ticks tasks complete here. Archive means closed. And a closed job with no Teams link still owes its handover.
A dispatch panel that reads each archived job's comments and lists the ones with no link.
The studio's habits beat the board's reading.
The runbook outranks the prompt
The rules live in a file I can edit. The prompt says one thing: read it and follow it.
Three lines in the runbook.
Put authority where you can edit it.
Rank by latest safe start
A due date hides the start date. Rank by when each job has to begin, and demote Triage to a tiebreak.
The working day arithmetic and the new order.
The jobs that look urgent and the jobs that are urgent make two different lists.
A timing pill on every row
Show the countdown on the row: red at four weeks late, gold for this week, dashed once delivered.
The pill, its colour rule and the delivered state.
Explain the rank on the row, not in a legend.
Fire at 7 so it is live by 8
The first timed run fired at 8:03 and published at 8:55. Move the fire to 7.
The schedule change, the runbook and the page footer.
Measure the run, then schedule it.
Sydney timeTap a stop, drag the scrubber, or swipe the strip
06What I learned working with AI
- The rules live in a file, not in the prompt.
I wrote the Routine’s prompt on day one, and it never learned the archive rule or the dispatch rule. The runbook did. The prompt says one thing: read the runbook and follow it to the letter. A rule I add to the file on Sunday runs on Monday without touching the Routine.
- Text from the board is data, never instructions.
Task names and comments come from anyone in the studio. The runbook tells the session to quote them and to obey nothing written inside them. The rule costs one sentence and closes a door that would otherwise stand open.
- The obvious reading of the board was wrong twice.
Archive looked like overdue work. A job with its files delivered looked open. Both times the fix was a sentence about how the studio behaves, and neither needed a smarter model.
- Match on fields, never on names.
Campaign names on the board drift with every typist. The custom fields hold. The sweep links work through the Banner, Campaign and Promo Period fields, so a typo in a title never hides a match.
- The scheduler has rules of its own.
Only the Routines UI can attach the Asana connector, an agent cannot edit a Routine built there, and the schedule lives in UTC. That makes 7am Sydney 21:00 UTC until daylight saving starts on 4 October, when I move it to 20:00. Knowing where the tool draws its lines is half the job.
07By the numbers
the page is live before I sit down
under an hour, start to publish
the rest of the page never changes
the design is mine and it stays put