Go Pug Go Go Pug Go proposal · v1
Working draft · 2026-06-22 Profit share → ⤓ Source spreadsheet
Internal proposal · Ernest Chan & Jared Kuvent

Go Pug Go

A pug animation series in production with Ernest Chan, with custom production infrastructure built alongside it. This document captures the design decisions, the platform direction, and the interface mockups behind the system — one shared locked artifact for the series and its tooling before any code lands.

Series in incubation Custom platform, VPS-hosted Producer engagement Source · 4 sheets, 71+ shorts catalogued
01

What this is

A single-line read of Go Pug Go and what we're building beside it.

Go Pug Go is an animated pug short-form series built in Moho for YouTube and short-form platforms, with Ernest as showrunner / lead animator and a small bench of freelance riggers and animators. Episodes run roughly 1–5 minutes each. The catalogue is already four series deep — Pug Impressions, Do Pugs, Random, and Ancillary — with 71 Pug Impression concepts written down.

Alongside the series, we're building Ernest's production infrastructure from scratch: a custom web application running on the existing VPS that handles incubation (idea-stage), greenlight, production tracking, video-frame-accurate review, file-handoff, budget, and audience analytics. It's the system the studio runs on, not just a tracker.

Why custom. The two load-bearing surfaces of this system — the Moho project handoff/validation pipeline, and the frame-accurate take-review interface — are custom either way. Once you're building two custom surfaces, an off-the-shelf CMS becomes overhead. So we build it the way it should be built: Next.js, Postgres, Drizzle, themed to match Ernest's series identity, deployed on the VPS we already pay for.
02

The decisions, locked

Where we've landed. Tiles are color-coded: green = locked, gold = open / negotiable, lavender = needs Ernest's call.

Locked
Custom platform, not a CMS

Next.js + TypeScript + Postgres + Drizzle on the existing VPS. Two custom surfaces (Moho upload + take review) make a CMS net-negative.

Locked
List/table view is canonical

Every other view (kanban, calendar, timeline, dashboard) is a projection of the same underlying table. Table first, projections second.

Locked
Scenes are per-project optional

Default: one scene = the whole project. Ernest flips "this project has scenes" on per-need. Logo stings stay simple; multi-scene shorts get the breakdown.

Locked
Greenlight is a state transition

Greenlight forks the incubation record into a production project. Incubation row stays as historical record. Linked, not duplicated.

Locked
Production status is two fields

Manual production stage (pre-production / animating / cleanup / review / approved / delivered) AND derived activity status (waiting on Ernest, idle, in-revision, blocked). Two surfaces, two questions.

Locked
Archive auto-cascades

Archiving a production project flips the linked incubation record from greenlit → archived automatically. One canonical archive action runs the full script (tarball → confirm → delete heavy assets → keep metadata).

Locked
No native dialogs, no system tooltips

Every popover, modal, tooltip, scrollbar is themed. Standard system chrome never appears in the product. Hard rule.

Locked
Upload mode is a per-take toggle

Three modes: review take (video only) / project snapshot (zip without renders) / final delivery (full zip with renders). Different size + archive treatment.

Locked
Folder convention validated at upload

Strict directory shape per project (moho/ assets/ renders/ takes/ notes/). The uploader validates the shape on drop. Without a validator, the convention rots in 3 months.

Ernest's call
"Scenes" naming

Default term is scenes; could equally be shots, beats, moments. The hierarchy works the same — the word should match how you think.

Ernest's call
Brand handles + domain hygiene

YouTube / Instagram / TikTok handles for "Go Pug Go" — claim them now while free, even if launch is later. Same for the domain.

Why scenes optional — the reasoning

The shorts catalogue ranges from one-beat impressions ("Pug crawling into a sleeping bag and then bursts out with wings and throws glitter in the air") to multi-beat narratives ("Do pugs make good ninjas?"). Forcing scene structure on the simple ones is friction; making it impossible to add structure to the complex ones is worse friction. The hierarchy is opt-in per-project: a flag on the project record, and the take view collapses or expands accordingly. Notes attach to scenes when scenes exist; they attach to the project root when they don't.

03

Incubation — the first system to ship

The spreadsheet has 71 Pug Impression concepts already. This is the section that earns its keep on day one.

The incubation surface is a single sortable table. Columns mirror the existing spreadsheet (Anim Name, Story, Animation Notes, Dialogue Notes, Music Notes, Budget Tier, Status) and extend it with reference links, cast list (other pugs / props / animals appearing), tags (slapstick, wholesome, gross-out, dance, seasonal), and a status richer than greenlit-or-not (ideated → written → sketched → ready-to-greenlight → greenlit → archived).

The status column is the moment Ernest's mental model lives in the system. The greenlight button on a row is the moment the system earns its first real value: one click forks the row into a full production project with scenes, takes, notes, budget, and assignments — while the incubation record stays in place as the historical brief.

Go Pug Go studio

Incubation

71 shorts · 4 series · 12 ready for greenlight
All71 Pug Impressions35 Do Pugs18 Random12 Ancillary6 SORT: status ↓
Anim Story Tier Status
SkunkA Pug farts. Tier 1 Ready
UnicornA Pug puts on a party hat and plays with party poppers. Tier 1 Ready
CheetahA Pug with trainers attempts to run but quickly gets winded and collapses. Tier 2 Greenlit → in production
ButterflyA Pug crawling into a sleeping bag and then bursts out with wings and throws glitter in the air. Tier 2 Sketched
AnacondaA Pug giving another pug an extreme hug. Tier 1 Ideated
MoleA Pug using a backhoe to dig a hole. Tier 3 Ideated
Incubation table mockup. Status (Ideated → Written → Sketched → Ready → Greenlit → Archived) drives the greenlight button's visibility and the row's downstream behavior. Click any cell to edit inline; click the row to expand the full record. Series filter at top.
04

The dashboard — Ernest's morning surface

What Ernest opens with his coffee. Top-line numbers, projects-in-flight, what needs his attention today.

The dashboard is the at-a-glance view: cumulative state, what's happening this week, what's blocked on him, what's blocked on a freelancer. Critically, activity status is auto-derived from take state + last-touched timestamps — Ernest doesn't have to update it. Production stage is manually moved; activity is just visible.

Go Pug Go studio

This week

June 22 · 6 active · 2 in review · 3 pending Ernest
Active shorts
6
+2 this week · 12 in incubation
Waiting on Ernest
3
2 takes to review · 1 budget approval
June budget
$1,840
of $2,500 · 73% committed
In production tap to open
CheetahA
Pug Impressions · 2 scenes
Review Jin
UnicornA
Pug Impressions · 1 scene
Animating Sara
Ninja
Do Pugs · 3 scenes
Animating Sara
SkunkA
Pug Impressions · 1 scene
Delivered Jin
Needs Ernest
CheetahA · take 3 ready for review
2h
Ninja · budget overrun proposed
5h
BeaverA · greenlight request from Sara
1d
Team load
Sara · 2 active · 0 overdue
light
Jin · 2 active · 1 overdue
heavy
Production dashboard mockup. "Waiting on Ernest" is the day-driver; team-load surfaces who needs work next. Budget rolls up live against the monthly cap.
05

Take review — the load-bearing custom surface

Frame-accurate timeline notes + spatial notes. Frame.io's UX without Frame.io's cost.

This is the surface the system stands or falls on. Ernest scrubs a take, pauses on a frame, clicks where the pug's ear is wrong, types "the ear deflates a frame too early", and the note pins to that (timecode, x, y). The artist opens the take and sees the pins along the timeline; clicks one and the player jumps there with the marker centered on the frame. Threaded replies. Resolvable. Searchable.

Notes have three flavors: timeline-only (pinned to a timecode), spatial (pinned to a position on the frame at a timecode), and take-level (general feedback, no anchor). One data model, three surfaces.

1
2
1
2
3
0:34 / 1:42 CheetahA · take 3 · v04 3 notes
Notes · CheetahA · take 3
Ernest · 3 notes
0:14 · spatial Ernest
The ear deflates a frame too early — feels like the pug's already given up. Let it hold one more.
0:34 · spatial Ernest
Motion blur could be heavier here. The collapse should feel sudden — almost a stop-frame.
1:02 · timeline Ernest
Sound effect needs more weight on the landing. Maybe a sigh + dust puff?
Take-review mockup. Click on the frame to drop a spatial pin; click the timeline to drop a timecode pin. Markers on the video carry the note number; the side panel lists every note for this take.
06

Kanban — the standup view

A projection of the same data. Useful for the quick "who's where" glance.

The kanban view is a projection of the production table. Columns are production stages; cards are shorts. Drag a card to move stage. Identical data, different question being asked.

Pre-prod1
BeaverA
Pug dressed up as a Canadian mountie.
SaraTier 1
Animating2
UnicornA
Party hat + party poppers.
Sara42%
Ninja
Do pugs make good ninjas?
Sara24%
Cleanup0
Review2
CheetahA
Trainers + winded collapse.
Jintake 3
KangarooA
Waist bag + boxing gloves punch.
Jintake 2
Delivered1
SkunkA
Pug farts. (the classic)
Jinfinal
Kanban projection of the production table. Drag-to-move maps to the manual production-stage field on the underlying record.
07

The Moho file pipeline

Folder convention, upload modes, validation, archive flow. The thing that keeps 250GB usable forever.

Folder convention per project

One canonical shape, enforced at upload. Every short is a folder with the same skeleton:

go-pug-go/projects/CheetahA/
  moho/                 ← the .moho file lives here
  assets/
    characters/         ← linked, not embedded
    audio/
    reference/
  takes/                ← exported videos for review
  notes/                ← screenshots, PDFs, scribbles
  renders/              ← optional, only on final delivery

Three upload modes

The upload UI offers a clear three-way choice so size + treatment match intent:

Mode 1 · Review take
Video only

Just the exported .mp4 / .mov for Ernest to review. ~50–200MB. Fast. Most common mode during iteration.

Mode 2 · Project snapshot
Zip · no renders

Full project zipped — moho/, assets/, takes/, notes/ — but renders/ excluded. ~200–500MB. Used for backup + handoff between artists.

Mode 3 · Final delivery
Full zip with renders

Everything including final renders. ~500MB–1.5GB. Marked specially in the table. Used once per project, on approval.

Validation at upload

The uploader is a drag-and-drop surface that validates the folder shape before accepting the upload. Does it have a moho/ subfolder? Does it contain at least one .moho file? Does the project name match the system's project ID? If anything's off, the upload is rejected with a specific, actionable error. The validator is the magic. Without it, the convention rots in 3 months — Ernest's tone gets gentler with each freelancer, and standards drift. A machine enforces what a human eventually won't.

Storage math + archive

250GB on the VPS holds roughly 6–9 months of active work before pressure. The archive flow is built in from day one:

  • Active project → all takes, all uploads, full versioning kept online
  • Completed but not archived → final delivery kept online, intermediate snapshots tarred but kept
  • Archived → only the final video + metadata stay online (~50MB). Everything else exported as a single project-CheetahA-full-archive.tar.gz Ernest downloads locally before the system deletes the heavy bytes from the VPS.

The metadata always stays — notes, timeline, takes, status, dates, owners, budget. Just not the binaries. Five years later Ernest can scroll back through every short he ever made; the bytes live on his external drives.

The deliberate-friction archive flow, step by step

The archive action is a multi-step confirmation, not a button. Step 1: select project, hit "Archive." Step 2: system bundles the heavy assets into a tar.gz on the VPS. Step 3: system serves the file for download and waits. Step 4: Ernest confirms "I have the file locally". Step 5: system removes the heavy bytes from the VPS and marks the project as archived. Both the production project and the linked incubation record flip to archived automatically. The deliberate friction is the safety.

08

Build sequence

What ships first, what ships next, what's nice-to-have. Order can flex; this is the proposal.

  1. Incubation table. Just the table, with filters, search, status field, and Ernest's columns from the spreadsheet. Migrate the existing 71 + 39 + 39 + 37 rows. Make Ernest use it daily.
  2. The greenlight transition. Button that promotes an incubation row to a production project. Empty production project structure with scenes-optional, takes, notes, budget fields.
  3. The Moho folder validator + uploader. Drag-and-drop with three upload modes (review take / project snapshot / final delivery). Validates the folder shape, zips server-side, stores as a take version.
  4. Take review UI. Video player + timeline notes + spatial notes. The only really custom piece; the one the system stands on.
  5. Dashboards. Ernest's (review queue + needs-attention) and the producer view (team-load + budget + active projects). Falls out of the data the first 4 steps generate.
  6. Archive workflow. Multi-step confirmation, tar export, confirm-then-delete, metadata preserved.
  7. Publish log. Per-short release tracking + per-platform performance pull (YouTube, Instagram, TikTok). Becomes the most valuable dataset Ernest owns over time.
  8. Freelancer onboarding view. Per-user scoped homepage + assignment view + pinned guidelines.

1–5 is the MVP and ships Ernest a tool that already beats the spreadsheet + email status quo. 6–8 are the durability features. The build phase rolls into the ongoing producer engagement after launch — no separate build invoices, no special-project pricing.

09

Open questions for Ernest

Things to decide before code lands.

For Ernest
Scenes or shots or beats?

What word fits your mental model? The hierarchy is the same; only the label changes.

For Ernest
Budget tier — what are the tiers?

The spreadsheet has "Budget Tier" as a column but no defined values. Tier 1/2/3 with $ ranges? Or a dollar field directly?

For Ernest
Who reviews who?

Default: Ernest reviews all takes. Edge case: producer/asst producer reviews first pass? Ernest only sees take 2+?

For Ernest
Music + audio — separate workflow?

Music Notes is a column today. Is music a separate freelancer pipeline or does Ernest handle it himself?

For Ernest
YouTube + IG + TikTok all at once?

Or YouTube primary with social as auto-syndication? Affects the publish-log surface.

For Ernest
The biggest time-eater right now?

What's the thing that ate your last month? The system should be aimed at your actual pain, not the producer-tool pain in the abstract.