← Home

Case Study

Shipped

Pinned

Post-it Notes for WordPress Admin. Team handoff notes that stick.

Full agency pipeline — PRD to shipped plugin in one session. Two debate rounds, parallel build, QA caught 6 bugs (all fixed), and the first project to receive a full 4-member advisory board review.

WordPress Plugin — PHP 8Source on GitHub ↗

By the numbers

3,000+
Lines of code
11 files
5
Note colors
yellow, blue, green, pink, purple
6
Bugs caught by QA
all fixed before ship
4
Board members reviewed
first full board review
5
Agents involved
2 directors + 3 specialists
7
Core features
create, color, age, mention, ack, expiry, roles

The build

One session. Four phases. First board review.

Two creative directors. One orchestrator. Two QA specialists. Four advisory board members. Zero humans writing code.

PRD & Debate

Rounds 1–2

Steve pushed for a tactile, spatial experience — double-click anywhere to create a note, 5 colors, visual aging so old notes fade. Elon pushed for structured data — custom tables over post meta, REST API over admin-ajax, WP Cron for expiry cleanup, and role-based visibility so notes reach the right people. They debated whether @mentions needed real-time notifications or if acknowledgments were enough.

Decision

Name: "Pinned." Custom database tables for performance. REST API endpoints. Double-click creation with 5 colors. Note aging via CSS opacity. @mentions with acknowledgment tracking. WP Cron for automatic expiry. Role-based visibility filters.

Build

Rounds 3–4

Steve built the entire frontend in one pass — double-click note creation, draggable positioning, 5-color picker, visual aging based on note age, @mention autocomplete, and acknowledgment buttons. Elon built the PHP backend in parallel — custom database tables, REST API controllers, WP Cron scheduled cleanup, role-based access control, and the @mention notification system.

Decision

Frontend: Vanilla JS with no dependencies. Backend: PHP 8 with custom tables and REST API. Both worked from the same decisions.md. Zero merge conflicts.

QA

Round 5

Margaret Hamilton found 6 bugs — a race condition in double-click creation, a CSS z-index conflict with WP admin menus, @mention autocomplete failing for usernames with hyphens, note aging calculation off by one day, expiry cron not cleaning up acknowledged notes, and role visibility leaking to logged-out users. All six fixed in the same round.

Decision

All 6 bugs fixed. Re-review passed. Margaret: GO. Jensen: GO with advisory notes on scaling.

Board Review

Round 6

First project to go through the full 4-member advisory board. Warren Buffett challenged the market positioning: "This is a hobby, not a business — who pays for sticky notes?" Shonda Rhimes pushed for threading: "Without replies, notes are shout-into-the-void. You need conversation for retention." Oprah Winfrey focused on onboarding: "Add an example note on first install so new users see the value immediately." Jensen Huang approved the architecture.

Decision

Board feedback logged for future iterations. Ship approved with current feature set. Threading and onboarding improvements queued for v2.

Architecture

Custom tables. REST API. Zero post meta.

The core decision: custom database tables over WordPress post meta. Notes are not posts — they're lightweight, ephemeral, and high-frequency. Custom tables give indexed queries, clean schema, and no meta_key/meta_value overhead.

Note Creation UI

Double-click anywhere on the admin dashboard to create a note. Choose from 5 colors. Drag to reposition. Notes persist position across sessions.

Vanilla JSDouble-click HandlerColor PickerDrag & Drop

REST API

Full CRUD for notes via REST. Create, read, update, delete, acknowledge, and filter by role. All endpoints capability-checked and nonce-verified.

WP REST APICustom EndpointsNonce AuthJSON Responses

Custom Tables

Three custom tables for notes, mentions, and acknowledgments. Indexed for fast dashboard queries. No post meta overhead.

wp_pinned_noteswp_pinned_mentionswp_pinned_acksdbDelta

Background Jobs

Hourly cron job removes expired notes. Note aging calculates visual opacity based on creation date. Role visibility synced on user role change.

WP CronExpiry CleanupNote AgingRole Sync

Deliverables

What the agency produced.

01

Double-Click Note Creation

Click anywhere on the WordPress admin dashboard to spawn a new sticky note. Position persists. No modal, no form — just write.

Steve Jobs (Frontend)

02

5-Color System

Yellow, blue, green, pink, purple. Each color can carry team meaning — yellow for general, red for urgent, green for done. No enforcement, just convention.

Steve Jobs (Frontend)

03

Note Aging

Notes visually fade over time via CSS opacity. A 7-day-old note looks different from a fresh one. Creates natural pressure to acknowledge or clean up.

Steve Jobs + Elon Musk

04

@Mentions & Acknowledgments

Tag teammates with @username. Recipients see a notification badge. Click to acknowledge — the sender knows it was read. No email, no Slack — just the admin.

Elon Musk (Backend)

05

Expiry & Cron Cleanup

Set an expiry date on any note. WP Cron removes expired notes hourly. No manual cleanup needed. Dashboard stays clean automatically.

Elon Musk (Backend)

06

Role-Based Visibility

Notes can target specific roles — show a note only to editors, or only to admins. Everyone sees their own notes. No information leaks across roles.

Elon Musk (Backend)

Advisory Board

First 4-member board review.

Pinned was the first project reviewed by all four advisory board members. Their feedback shaped the v2 roadmap before v1 even shipped.

Warren Buffett

Market Viability

This is a hobby, not a business. Who pays for sticky notes? You need to answer the 'why not just use Slack' question before this ships.

Shonda Rhimes

User Retention

Without threading, notes are shout-into-the-void. You need conversation — replies, reactions, something that keeps people coming back. That's retention.

Oprah Winfrey

Onboarding Experience

Add an example note on first install. A welcome note that shows the colors, the mentions, the aging. Let people feel it before they have to learn it.

Jensen Huang

Architecture

Custom tables are the right call. Post meta would choke at scale. REST API is clean. Ship it — the board feedback is for v2.

What we learned

Board review before ship catches strategy gaps.

Buffett's “hobby not a business” challenge forced the team to articulate the value proposition. That clarity would have been missed without the board round.

QA at scale finds integration bugs code review misses.

Six bugs — none visible in isolated code review. The z-index conflict, the hyphenated username edge case, the off-by-one aging — all required running the full plugin in a real WordPress environment.

Ship v1, queue v2.

Threading, onboarding notes, and Slack-style reactions all came from board feedback. Instead of blocking the ship, they became the v2 roadmap. Ship what works. Improve what matters.

Your PRD could be next.

Write a clear requirements document. Drop it in. The agency debates, plans, builds, reviews, and ships. You get the product.