A revised, reorganized, and expanded edition of the master plan — the honest path from an impressive machine with zero customers to a viable, profitable automated-marketing business, built around two niches and one real partnership.
Edition 1 (/autoseo/) is a build log: it grew section by section as the machine was built, and it's a faithful record. This edition is different. It starts from the uncomfortable question — why is there a great machine and no revenue? — and reorganizes everything around the answer. Read Edition 1 to see how the machine works. Read this edition to see how the business works.
Plain English: before planning anything, here is exactly what exists and works today, what exists but is unproven, and what does not exist at all. Everything in the first table was verified live on 25 July 2026.
| Asset | What it is | Evidence (verified 25 Jul 2026) |
|---|---|---|
| The analysis engine | Deterministic site scorer — 48 signal checks, token-free (no API billing possible, by design), never fabricates. Runs the agent desk data. | /opt/autoengine on the main droplet, port 8932; tonight's run: 430 workspaces, 421 scored, avg 59.5, 89 movers. |
| The publishing hub | Self-hosted Postiz on a dedicated droplet: Docker stack (app + Postgres + Redis + Temporal), HTTPS, registration locked, nightly DB backups, on the 5-minute uptime monitor. | postiz.wholetech.com — serving 200. |
| X publishing, live | @springnet (the flagship audience, thousands of followers) connected via our own X developer app (OAuth 1.0a, Read+Write) and posting through the hub's credentials. $25 posting credit loaded. | First post, live. |
| Bluesky publishing, live | walhus.bsky.social connected via app password; posting proven end-to-end. | Test post, live. |
| Direct-publish scripts | Server-side "post now" that bypasses the hub's confusing UI — the seed of engine-driven auto-publishing. | postx.py (OAuth 1.0a signed calls to the X v2 API), postbsky.py (atproto createRecord) — both produced the live posts above. |
| The Human Desk | Order → dispatch → verify → release pipeline for human tasks (account creation etc.): authenticity guard, dry-run default, owner-gated payments; RentAHuman marketplace integration tested with a real funded bounty ($13 escrowed). | /opt/autoengine/human_tasks.py + hd_admin.py; live bounty posted 25 Jul. |
| The intake funnel | "Get set up" CTA on all 11 family sites → /setup form → creates a pending-review order with per-platform tasks. Nothing dispatches without approval. | automarketingengine.com/setup → POST /api/setup-request. |
| The polished storefronts | 11 family sites with complete social preview tags, branded share images (all verified loading), analytics, FAQ schema on the flagship, agent-readable surfaces, sitemaps, clean structured data. | Tonight's 20-item polish pass; all 11 serving 200. |
| The wider network | ~190 sites on one droplet — a distribution and proof asset (and the engine's test bed). | Ongoing; leaderboard at wholetech.com/leaderboard/. |
| Prior partner collaborations | Real delivered work inside the partners' world: the bejane.com rebuild, and the three-design deptless / automarketingdept pitch built specifically for them. | wholetech.com/bejane; deptless.com; automarketingdept.com. |
| Polymagnetics depth | Demonstrated technical fluency in the niche: the 10-page Polymagnet rebuild (1.deptmatic.com), the magnetics case file (c.deptmatic.com), test-bed clones, polymag.automarketing.wholetech.com. | All live. |
Technical summary: the delivery layer (analyze → publish) is real and proven on two networks. The business layer (sell → onboard → bill → report → renew) is at zero. Every hour of work from here should go to the business layer or to the minimum delivery work a pilot demands — nothing else.
This is not a product problem. The machine works — a post written on this desk reached thousands of real followers tonight through infrastructure we own. The problem is that nobody is asking for it, because nobody knows it exists, and the people who could know it exist haven't been shown a reason to pay. That is a demand, trust, and distribution problem. More features cannot fix it. Only two things fix it: a partner who already owns trust and distribution, or years of building both ourselves. We have the first option available. Most businesses don't.
| Category | Players | Price floor | What it means for us |
|---|---|---|---|
| Social schedulers | Buffer, Hootsuite, Later, Sprout Social, SocialBee, Metricool, Publer, Vista Social — and open-source Postiz itself | $0–60/mo | Mature, trusted, cheap. Competing with them on features or price is unwinnable. (We use one of them instead of fighting them — correct move.) |
| AI content tools | Jasper, Copy.ai, and AI features now inside every scheduler above | ~$0–40/mo | "AI writes your posts" is table stakes, not a product. |
| Frontier assistants | ChatGPT, Claude, Gemini | $0–20/mo | Any owner can generate a month of posts in one sitting, free. The task has no standalone price anymore. |
| Humans | VAs, freelancers, local agencies | $300–3,000/mo | For "just handle it" buyers, a trusted human still wins — which tells you the winning product is a human-accountable service with a machine inside, not a tool. |
| Industry-specific marketing platforms | In home building: the industry's dominant digital-marketing ecosystem (builder websites, listings syndication, virtual tours) and the agency vendors around it | varies | Builders already buy digital marketing through this ecosystem — which is precisely why partnering with it beats competing against it. |
When a builder or a magnetics company hears our pitch, they will think of something they already know. This is the card for each — what it costs, what it's genuinely good at, where it fails our buyer, and the one-sentence answer. The "where they beat us" column is deliberate: knowing it keeps us honest and keeps us out of fights we'd lose. Published prices are typical ranges as of mid-2026 and can drift. EST
| They name… | Typical cost | Genuinely good at | Where it fails our buyer | Where they beat us | The one-sentence answer |
|---|---|---|---|---|---|
| Buffer | ~$5–6/channel/mo | Cheap, simple scheduling | Someone still has to write, schedule, and remember every post — the exact labor nobody at a builder owns | Price; DIY users who enjoy the work | "Buffer is a better calendar. We're the person who fills it, publishes it, and reports on it — without your staff." |
| Hootsuite / Sprout Social | ~$99–330/seat/mo | Enterprise dashboards, team workflows, listening | Heavy, per-seat pricing for tooling — still zero content produced; overkill for a builder's marketing coordinator | Big in-house social teams | "Those are cockpits for social teams. Our buyers don't want a cockpit — they want the plane flown." |
| Later / SocialBee / Metricool / Publer | ~$0–45/mo | Mid-market scheduling + AI caption helpers | Same DIY gap; AI captions are generic and happily invent specifics | Solopreneurs with time | "Every one of them will write 'Beautiful new homes, link in bio!' We write from your actual listings — and hold the post if a fact can't be verified." |
| Jasper / Copy.ai | ~$39–59/seat/mo | Volume copywriting for marketers | A writing tool for someone whose job is writing; our buyer has no such person | Content teams that exist | "A faster pen still needs a hand. We're the hand, the pen, the calendar, and the report." |
| ChatGPT / Claude / Gemini | $0–20/mo | Anything, on demand — genuinely | Requires a human to prompt, curate, schedule, post, measure, and keep doing it every week forever; accuracy unguaranteed | Motivated owners with discipline (rare, and they were never buyers) | "If someone on the team will happily run it every week forever, they should. Our clients are the ones who tried that in January and stopped by March." |
| A Fiverr/Upwork VA | ~$300–800/mo | A human who actually does it | Quality variance, turnover, no measurement discipline, no industry knowledge, invented facts under deadline pressure | Price vs our managed tiers | "That's a person with a scheduling tool. We're a machine with a person — the machine never quits, never guesses, and the person answers the phone." |
| A local/regional agency | ~$2,000–5,000/mo | Strategy, creative, relationships, accountability | Price excludes most builders per-brand; social is often the intern's job inside a retainer | Full-funnel campaigns, paid media, brand work | "For a third of an agency retainer, the machine does the always-on layer perfectly — and plays fine under an agency if you have one." |
| "Our coordinator posts sometimes" (the real incumbent) | $0 visible | Knows the brand; free in theory | The calendar goes quiet every busy week — which is every week; no measurement; no consistency | Nothing to cancel, nothing to approve | "Keep the coordinator — give them the approve button instead of the blank page. Under a minute a day, and the calendar never goes quiet again." |
| The builder-industry marketing ecosystem | varies | Listings syndication, builder websites, lead gen — the industry's trusted plumbing | Always-on social presence isn't the core product | Trust, breadth, incumbency — decisively | We don't answer this one — we partner with it. That is the entire Niche-A strategy. |
Notice that the two-niche partner strategy scores on all five. The generic SaaS strategy scores on none. That's the whole argument, and it's why this edition exists.
Yes — one. Not "an AI marketing SaaS for small business" (saturated, undifferentiated, distribution-less: poor odds, roughly 5–10% EST). The path with real odds is a partner-channeled, niche-focused, done-for-you managed service where the machine does the work and the margins, and humans supply trust and accountability. With a live partner conversation available and working artifacts already delivered into that relationship, the odds of reaching a modest, genuinely profitable service business are materially better — our working estimate is 40–55% EST, with the biggest single variable being whether the pilot earns a "yes" from real builders. That is a subjective estimate and should be treated as one; Part IX defines the checkpoints that will replace guesses with evidence.
Plain English. The home-building industry spends real money making new communities and homes visible. Our two partners built and led the company at the center of how American home builders do digital marketing, and the working relationship with them is five years deep, with delivered artifacts to show for it (the bejane.com rebuild; the three-design automated-marketing-department pitch built for them at deptless.com and automarketingdept.com). They hold exactly the two assets we lack: the industry's trust and distribution to its buyers. We hold exactly what complements it: a working machine that turns a builder's listings into an always-on, on-brand social presence at near-zero marginal cost.
The offer to builders (through or alongside the partners): "Every community and every home you list becomes a steady stream of on-brand posts across every social channel — automatically, with your team approving from their phone. No one on your staff logs into anything." Home building is close to the ideal case for our machine: the content is structured (listings: price ranges, plans, lot availability, amenities, location), visual (photos and renderings already exist), local (community-level audiences), and recurring (inventory changes weekly) — which means the deterministic content path produces genuinely good posts from facts, without fabrication risk.
What the partnership could look like — three shapes, in ascending commitment, all TBD until the conversation happens:
| Shape | How it works | Best when |
|---|---|---|
| 1. Pilot | We run 2–3 builder brands (chosen by the partners) free or near-free for 60 days, with weekly digests and a results report. Zero risk to anyone; produces the proof everything else needs. | Now. This is the ask. |
| 2. Referral / reseller | Partners introduce; we deliver and bill; they take a share of recurring revenue. TBD | After the pilot proves retention. |
| 3. White-label | The machine runs under a partner brand as their offering; we operate it; revenue split. TBD | If the partners want to own the product line. |
Plain English. The programmable-magnetics world (Polymagnet and the companies around that technology) is small, technical, and starved for good marketing: the products are genuinely fascinating, the buyers are engineers, and generic AI copy about them is transparently shallow. We have already done the hard part once — the 10-page Polymagnet rebuild and the magnetics case file demonstrate we can write about this field credibly. That work is the door-opener.
The offer: "A consistent, technically credible presence — applications, case studies, product news — published across LinkedIn, X, and your site on a steady cadence, with your engineer's approval on every post." In technical B2B, consistency and credibility compound: a year of steady, accurate posting makes a small company look like the category leader.
Honest status: we do not have a named contact in this niche recorded in our notes. TBD The first to-do is identifying the right person (the Polymagnet technology's owners/licensees and adjacent magnetics manufacturers) and approaching them with the already-built case file as the credential — "we built this about your industry because we find it genuinely interesting; here's what a year of this looks like, automated." That is a warm approach built on demonstrated work, not a cold pitch.
Sequencing: Niche A first — its distribution already exists. Niche B runs one step behind, reusing every asset (portal, reports, templates) the pilot produces.
| Component | Plain English | Technical |
|---|---|---|
| Listing-to-post pipeline | Every community and home becomes a stream of posts: new-listing announcements, price/plan spotlights, amenity features, milestone posts. | Deterministic templates over structured listing data (feed, page scrape, or CSV — per builder TBD); image reuse from existing listing photos; per-builder brand tokens (voice, colors, hashtags, disclaimers). |
| Channel fan-out | Posts go to every connected channel on a sane cadence. | Postiz workspace per builder; engine → hub publish adapter (P59); X live today, FB/IG/LinkedIn as app reviews land (P57/P58). |
| Approval queue | The builder's marketing person approves, edits, or skips each post from their phone in under a minute a day. | The client portal (P74) — the single most important unbuilt piece of UI. Detail in Part V. |
| Weekly digest + monthly report | "Here's what went out, here's what it did." | Report generator (P75) over the hub's post log + platform engagement APIs + GA click-through. |
| Account setup | If a channel doesn't exist or isn't business-grade, we make it so — the human, annoying part, handled. | Human Desk dispatch (P50–P52, built) + the identity/phone policy (client's real business identity, dedicated number — never burners). |
Same chassis, different content spine: instead of listings, the source material is applications, case studies, and product news, produced on a weekly/biweekly cadence with a mandatory expert-approval gate (an engineer signs off on every technical claim — our "never fabricates" rule made human). Lower volume, higher depth, LinkedIn-centered. Deliverables: cadence plan, per-post drafts from verified source material, publication, quarterly "authority report" (reach, engagement, inbound signals).
| Offer | Price | Replaces | Rationale |
|---|---|---|---|
| Setup (accounts + connection + brand profile) | $199–$399 one-time (existing rate card, kept) | — | Covers Human Desk cost at ~70% margin; already defined. |
| Builder Presence Engine, managed | $500–$1,500/mo per builder brand EST, scaling with community count | the $49 self-serve fantasy | Normal builder marketing spend; funds accountability; machine keeps ~90%+ gross margin. Final pricing set with partner input. TBD |
| Technical Presence Engine, managed | $1,000–$2,500/mo EST | — | Fewer, deeper clients; expert-gated content justifies premium. |
| Partner economics (referral/white-label) | Revenue share TBD — modeled at 30–50% in Part VIII | — | Distribution is worth paying for; it's the scarce asset. |
| Starter | Growth | Portfolio | |
|---|---|---|---|
| Monthly price EST | $500 | $900 | $1,500 |
| Active communities covered | 1 | 2–5 | 6–12 |
| Cadence | 3 posts/wk | 4–5 posts/wk | daily |
| Channels | 3 (e.g. FB + IG + X) | all connected | all connected |
| Approval queue + weekly digest | ✓ | ✓ | ✓ |
| Monthly five-number report | ✓ | ✓ | ✓ + quarterly review call |
| Account setup (Human Desk) | One-time: $199 (up to 3 accounts) / $399 (full set) — waived for pilot participants | ||
| Technical Presence | Authority | |
|---|---|---|
| Monthly price EST | $1,250 | $2,500 |
| Cadence | 2 posts/wk, LinkedIn-primary | 3 posts/wk + one long-form piece/month syndicated to their site |
| Expert approval gate | ✓ (mandatory, both tiers) | ✓ + quarterly authority report (reach, engagement, inbound signals) |
Plain English: a marketing machine only produces results if the people around it can operate it without friction — the client approving posts, the operator running the system, the partner watching the portfolio. This part walks the entire flow as it exists today, names every gap honestly, then specifies the target experience screen by screen and shows exactly how the interface chain produces marketing results.
| Stage | What exists today | What's broken or missing | What to build |
|---|---|---|---|
| 1. Discover | 11 polished family sites; the wider 190-site network; tonight's social-preview/GA pass. | No traffic with buying intent; 11 mirrors dilute rather than compound; no single canonical product home. | In the partner-led model this stage is replaced by the partner introduction — the sites become proof, not funnel. Pick ONE canonical product site (recommendation: automarketingengine.com) and let the mirrors 301 or link to it. TBD |
| 2. Understand | Good plain-language copy; FAQ; the honesty pitch ("can't make things up"). | No industry-specific page. A builder should land on a page about builders, not about "marketing." | One vertical landing page per niche (builders; magnetics) with a live demo embed. Small, high-leverage. |
| 3. Trust | The live @springnet post; the engine's determinism; the partner relationship (off-site). | No case study, no named human, no partner logo, no "who answers the phone." | The pilot exists to manufacture exactly this. One real before/after with real numbers. |
| 4. Buy | /setup form (site, tier, platforms, contact) → creates a pending-review order. Works. | No payment (form only); no confirmation email (no SMTP); dead air after submit — the single worst moment in the current funnel. | Stripe checkout on the managed tiers (P67); transactional email; "what happens next" page. For the pilot phase, skip self-serve entirely — orders come from conversations. |
| 5. Onboard | Human Desk dispatch pipeline (built, tested); identity/phone policy defined. | No client-facing view of onboarding progress; connection of client accounts to the hub is manual. | Onboarding checklist screen in the portal (P74/P68): "accounts → connected → first posts queued," each with a green check the client can watch. |
| 6. Deliver | Hub publishes (proven, 2 networks); direct-publish scripts; Temporal scheduler. | No content generator (humans write posts); single-tenant workspace; the hub UI's "Post now" is buried and "Add to calendar" silently schedules — confusing even to us. | Content module (P63/P73); per-client workspaces (P60); clients never see the hub — they see the approval queue. The hub becomes back-of-house. |
| 7. Approve | Nothing. | The pivotal daily interaction of the whole product does not exist yet. | The Approval Queue — the most important screen in the company. Spec below. |
| 8. Report | Engine scorecards exist for sites; nothing per client/post. | A client who can't see results cancels. Every time. | Weekly digest email + monthly report page/PDF (P75/P61). |
| 9. Renew / refer | Nothing. | No renewal moment, no referral ask. | The monthly report IS the renewal instrument; add a standing referral line to it ("know another builder who should see this?"). |
/setup form: five fields, radio tiers, platform checkboxes. Functional. Submits into silence (no email, no next-step page) — must fix before any paying client touches it.hd_admin.py — a CLI. Fine for us (list/show/approve/poll/verify/release all work); invisible to clients; will need a thin web wrapper only when someone other than the founder operates it. Not urgent.┌─────────────────────────────────────────────┐ │ 1. TODAY (Approval Queue) ● 3 waiting │ │ ┌─────────────────────────────────────────┐ │ │ │ [photo] Cypress Grove — 3 new homesites │ │ │ │ "Three new homesites just released in │ │ │ │ Cypress Grove from the $340s…" │ │ │ │ → X · Facebook · Instagram Tue 10:00 │ │ │ │ [ Approve ] [ Edit ] [ Skip ] │ │ │ └─────────────────────────────────────────┘ │ │ swipe → next card. Under 60 seconds a day. │ ├─────────────────────────────────────────────┤ │ 2. CALENDAR — month view of queued/sent │ │ 3. RESULTS — this month: posts, reach, │ │ engagement, top post, GA clicks │ │ 4. CHANNELS — connected accounts, health │ │ 5. SETTINGS — voice, cadence, approvers │ └─────────────────────────────────────────────┘
pending_approval state that the engine writes and the hub only publishes once approved. Approval-by-reply email as fallback for the phone-averse.Orders board (today's CLI, webbed later), per-client health (last post, next post, queue depth, token expiry warnings), Human Desk queue, and the existing uptime/backup monitors. Nothing here blocks the pilot; the CLI carries us months.
One page: every builder in the program, posts this month, engagement trend, status green/amber. This is how a referral partner sees the portfolio working without asking us. Cheap to build off the same data as Screen 3; disproportionate relationship value.
| Link in the chain | Mechanism | Metric that proves it |
|---|---|---|
| Frictionless approval → | 60-second phone queue means posts actually go out (the #1 killer of social programs is drafts dying in review) | approval rate; time-to-approve |
| → Consistent cadence → | the scheduler never gets busy, never forgets; presence becomes reliable | posts/week vs plan (target: 100%) |
| → Compounding presence → | steady, on-brand, local content accrues followers and algorithmic trust | reach and follower trend by channel |
| → Engagement → | listing posts with real photos and real prices earn saves/shares/DMs | engagement per post; DMs/leads flagged |
| → Attributable traffic → | every post links (tagged) to the community page | GA sessions from social; per-campaign UTM |
| → Visible report → | the monthly report converts activity into perceived (and real) value | renewal rate; referral count |
Illustration of the cadence math (labeled EST, not a promise): a builder with 6 active communities and a 4-posts/week cadence ships ~200 posts a year with roughly 15 minutes a week of client attention — a volume and consistency no human social manager maintains at this price, and the exact thing the machine does for pennies. The pilot's job is to replace this estimate with that builder's real numbers.
/setup dead-air (thank-you page + email) — before any paid order.This is the experience a pilot builder signs up for, hour-for-hour honest about whose time gets used. Total client time in month one: about 75 minutes, most of it in two short calls.
| When | What happens | Who does it | Client time | What the client should feel |
|---|---|---|---|---|
| Day 0 | Kickoff: intake form (brand voice words, banned words, hashtags, disclaimers), listing source agreed (feed, page, or CSV), channel inventory taken. | Us + client, one call | 30 min | "That was the whole setup meeting?" |
| Days 1–2 | Brand profile built; templates tuned to their communities; workspace created; existing accounts connected via guided link. | Machine + us | 5 min (clicking "authorize" per account) | Progress without effort. |
| Days 2–5 | Missing or non-business-grade accounts opened properly — client's identity, dedicated business number, done by a real person (Human Desk). | Us (human layer) | 0–10 min (identity confirmations) | "They handled the annoying part." |
| Day 5 | Baseline snapshot captured — followers, prior 90-day posting, prior social traffic. Before the first post, so results are honest. | Machine | 0 | Rigor. This is the moment we're differentiated from every vendor they've had. |
| Day 6 | First week's queue generated from their listings. Guided first approval session — we're on the phone while they swipe through it. | Machine + us + client | 15 min, once | "Approve, edit, skip — I get it. This is easy." |
| Day 7 | First posts go live across connected channels. | Machine | 0 | The calendar is alive for the first time in years. |
| Week 2 | Daily cadence steady; approvals now under a minute a day; first weekly digest lands Monday morning. | Machine; client approves | ~5 min/wk | A habit forming, not a burden. |
| Week 3 | Template tuning from their skips and edits (every skip reason is product feedback); new channels appear as platform approvals land. | Machine + us | 0 | "It's getting more like us." |
| Day 30 | First monthly report — five numbers against the day-5 baseline — and a 20-minute review call. In the pilot, this is the day-30 gate review. | Us + client | 20 min | Value they can forward to their boss. |
Two design commitments hiding in this table: nothing in month one requires the client to learn a tool (the hub stays back-of-house; they see only the approval cards and the reports), and every claim of progress is measured against a baseline captured before we touched anything — the honesty rule applied to ourselves.
A product that lives or dies on "under a minute a day" lives or dies on interface quality. This register lists every UI issue currently known across all surfaces — including the ones we hit ourselves, tonight, as real users — each with severity, the fix, and the phase that owns it. Severity: S1 blocks a user or loses money · S2 causes confusion or wasted time · S3 polish. Issues found by actually failing are marked ⚡ (observed live) — they are the most trustworthy items on this list.
| # | Surface | Issue | Sev | Fix | Phase |
|---|---|---|---|---|---|
| U1 ⚡ | Hub (Postiz) sign-in | A prominent "Continue with Google" button leads to a dead-end error (no Google OAuth configured) — the owner clicked it and got "Access blocked: Authorization Error." First-session failure on the very first screen. | S1 | Hide unconfigured SSO buttons (Postiz env/UI config); clients never see this screen anyway once the portal exists — reinforcing the portal-first rule. | 2 |
| U2 ⚡ | Hub sign-in | Over plain http on a raw IP, login silently bounced back to the sign-in screen — a correct login appearing to fail, with no error message. Cost us a real user-session tonight. | S1 | Fixed — HTTPS on a real domain. Standing rule: no interface ever ships on a raw IP. | done |
| U3 ⚡ | Hub compose | "Add to calendar" is the only visible action and it silently schedules; the real "Post Now" is buried in a submenu. Our first post quietly queued for midnight instead of publishing — even the operator was fooled. | S2 | Clients never touch the compose UI (portal-first); operator runbook documents the trap; immediate publishing goes through the adapter (P59), not the UI. | 2 |
| U4 ⚡ | Any credential step | Every flow that asks a non-technical user to handle tokens/keys stalls the session (observed repeatedly tonight: DO token, X keys, app passwords). Each credential moment is a support call waiting to happen. | S2 | Design rule: clients never see a credential. OAuth "authorize" clicks and magic links only; the founder-side installer scripts absorb the rest. | standing |
| U5 ⚡ | /setup | Submitting ended in silence — no next-step page content beyond one line, no email. The worst possible moment for dead air: right after someone asks to pay you. | S1 | Half-fixed tonight (a proper "what happens next" now shows). Remaining: transactional email confirmation — needs SMTP (founder decision, end-list). | 3 |
| U6 | Family sites | Eleven near-identical mirrors split attention and confuse any buyer who lands on two of them ("is this the same company?"). | S2 | One canonical product site; mirrors link to it (decision TBD — recommendation: automarketingengine.com). | 3 |
| U7 | Buyer funnel | No industry-specific landing page: a builder currently lands on generic "marketing" copy, not builder copy. | S2 | One vertical page per niche; the builder demo already doubles as the visual for it. | 1–2 |
| U8 | Client portal | Doesn't exist yet — the pivotal daily interaction currently has no interface at all. The single largest UI gap in the company. | S1 | P74 — Approval Queue v1 before the pilot's second week (spec: V.3 and V.8). | 2 |
| U9 | Reports | No results surface — a client literally cannot see what they paid for. Retention killer. | S1 | P75 — weekly digest + monthly five-number report before day 30 of the pilot. | 2–3 |
| U10 | All client surfaces | Buyers in both niches skew senior; small fonts, low contrast, and tiny tap targets silently exclude exactly our decision-makers. | S2 | Accessibility floor, committed: 16px+ body, WCAG-AA contrast, 44px tap targets, no hover-only actions, works one-handed on a phone. | standing |
| U11 | Approval queue (spec) | Risk of empty-state confusion: a client opens the portal on a quiet day and sees nothing — feels broken. | S3 | Designed empty state: "Queue clear — next posts generate Thursday. Here's what went out this week." Never a blank screen. | 2 |
| U12 | Approval queue (spec) | Failure states must never be silent: an expired social token or a failed publish that the client discovers before we do destroys trust disproportionately. | S1 | P71 watchdog alerts operator before failure surfaces; portal shows plain-language status ("Facebook needs a quick re-connect — tap here") never error codes. | 4 |
| U13 | Emails | Digest/nudge emails risk the classic trap: bare URLs get mangled by mail clients, links look like spam, tone drifts robotic. | S3 | House email rules: explicit HTML anchors (never bare URLs), one clear action per email, plain warm English, sender name a human can reply to. | 2+ |
| U14 | Operator console | CLI-only operation means exactly one person on earth can run the business today. | S2 | Acceptable through the pilot (documented runbooks); thin web console when the VA desk activates (P54). | 4 |
| U15 | Demo page | The held-card explanation must land in one glance for a non-technical viewer or the best moment of the demo is lost. | S3 | Already styled (red bar + plain-English note); rehearse the verbal line; watch the first real viewer and iterate. | 1 |
┌──────────────────────────────────────┐
│ Meadow Creek Homes ● 3 waiting │ ← client brand, count badge
├──────────────────────────────────────┤
│ ┌──────────────────────────────────┐ │
│ │ [listing photo] │ │ ← their real photo, full-bleed
│ │ Cypress Grove — 3 new homesites │ │
│ │ "Three new homesites just │ │
│ │ released from the $340s…" │ │ ← full text, no truncation
│ │ ⓧ ⓕ ⓘ Tue 10:00 AM │ │ ← channels + time, plain
│ │ ┌─────────┐ ┌──────┐ ┌────────┐ │ │
│ │ │ Approve │ │ Edit │ │ Skip │ │ │ ← 44px+ targets, thumb reach
│ │ └─────────┘ └──────┘ └────────┘ │ │
│ └──────────────────────────────────┘ │
│ … next card … │
│ ┌──────────────────────────────────┐ │
│ │ ✓ Approve all 3 remaining │ │ ← batch action, end of list
│ └──────────────────────────────────┘ │
├──────────────────────────────────────┤
│ Today · Calendar · Results · More │ ← 4-tab bottom nav
└──────────────────────────────────────┘
Interactions: Approve = one tap, card collapses to a green check.
Edit = textarea inline, Save approves. Skip = 4 reason chips
(wrong tone / wrong fact / wrong timing / other), then collapses.
Empty state: "Queue clear — next posts generate {day}." + last
3 published posts. Auth: magic link, 7-day, one client scope.
┌──────────────────────────────────────┐ │ July ◀ ▶ [month|wk] │ │ Mo Tu We Th Fr Sa Su │ │ · ● ● ● ● ● ○ ● sent/queued │ │ tap a day → its posts, status chips: │ │ SENT ✓ · QUEUED · AWAITING YOU ⚠ │ │ "AWAITING YOU" taps through to the │ │ queue — calendar never dead-ends. │ └──────────────────────────────────────┘
┌──────────────────────────────────────┐ │ July results [share] [print] │ │ ┌───────┐┌───────┐┌───────┐ │ │ │ 22 ││ 14.2k ││ 312 │ │ │ │ posts ││ reach ││ engmt │ │ │ └───────┘└───────┘└───────┘ │ │ ┌───────┐┌────────────────┐ │ │ │ 87 ││ TOP POST │ │ │ │ clicks││ [photo] +test │ │ │ └───────┘└────────────────┘ │ │ vs June: posts = · reach ▲12% · │ │ clicks ▲9% (every number sourced; │ │ platform-hidden metrics say so) │ │ ── "Know another builder who should │ │ see this? Reply to this report." ─│ └──────────────────────────────────────┘
CHANNELS: one row per account — icon, handle, big status dot
(green OK / amber "needs re-connect — tap to fix" with the OAuth
link right there / grey off). No error codes, ever.
SETTINGS: voice words, banned words, cadence slider (min→max per
tier), approvers (add by email → magic link), pause button
("pausing stops posts, not your subscription — resume anytime").
ROWS = clients. COLS: last post · next post · queue depth/age · token health · cadence % · MRR · flags. Click-through to the same portal the client sees (impersonation-view, read-only, logged). Top strip: infra (hub, certs, backups, X credit, Temporal).
One page, their logo: portfolio table (builder · posts this mo · reach trend sparkline · status dot) + a quarterly rollup line. Read-only, magic-link, revocable. Purpose: the partnership's health visible without anyone writing a status email.
These are pass/fail gates, tested with a real person (the founder counts; a pilot client is better) on a real phone. A failed test blocks the phase gate the same way a failed code test would.
| # | Test | Pass bar | Gated phase |
|---|---|---|---|
| T1 | A first-time client clears a 5-post approval queue on a phone, unassisted | < 60 seconds, zero questions asked | 2 (G2) |
| T2 | Magic-link login from the digest email | < 10 seconds, zero passwords, works in Gmail/Apple Mail | 2 |
| T3 | The monthly report, read cold by someone who's never seen it | They can say what they got and whether it's working, in their own words, in under a minute | 3 (G3) |
| T4 | Kill a social token on purpose (expire it) | Operator alerted before any client-visible failure; portal shows the plain-language re-connect row; no error code anywhere | 4 |
| T5 | Every error and empty state in the portal | Each one says, in plain English, what happened and what to do next — audited screen by screen | 2–4 |
| T6 | Onboarding, end to end (signed yes → first live post) | < 7 days elapsed, < 1 day of our labor, client credential count touched by client: zero | 4 (P68) |
| T7 | Accessibility floor on every client surface | 16px+ body, WCAG-AA contrast, 44px targets, usable one-handed, no hover-dependence — checked per screen, per release | standing |
| T8 | The demo, shown to someone non-technical who's never seen it | They can explain the held card back to us correctly — the honesty guarantee landed | 1 (G1) |
The sequencing principle: every phase ends at a human milestone (a demo shown, a pilot live, a price agreed), not a technical one. Platform approvals run in parallel from day one because their clock is the longest and not ours.
| Phase | Weeks EST | Plain English | Technical scope | Prompts | Exit gate |
|---|---|---|---|---|---|
| 0. Reviews in motion | Week 1 (then background) | Start the clocks we don't control. | Meta Business app (FB Pages + IG publish scopes, business verification) and LinkedIn app (Community Management API) submitted; Mastodon app registered same-day. | P56, P57, P58 | Both reviews submitted. |
| 1. The Demo | Weeks 1–2 | Make the machine undeniable in 15 minutes, with builder content. | Demo workspace in the hub; 6 sample builder posts from one real public community (all labeled SAMPLE); live publish to our own X/Bluesky during the walkthrough; one-page leave-behind. | P72, P73 | Working session with the partners booked and held; asked for pilot builders. |
| 2. The Pilot | Weeks 3–10 | Run 2–3 real builder brands, free/near-free, 60 days, instrumented. | Per-builder workspaces (P60); listing→post templates tuned per builder (P73); engine→hub publish adapter (P59); Approval Queue v1 (P74); weekly digest; accounts opened where missing via Human Desk. | P59, P60, P73, P74, P78 | Day-30 and day-60 reviews with real numbers in hand. |
| 3. The Price | Weeks 8–12 (overlaps) | Turn pilot results into a priced offer and a partner arrangement. | Results page v1 (P75); proposal one-pager (P79); Stripe subscriptions (P67); partner terms conversation. TBD | P75, P79, P67 | First paying builder OR a written partner deal — ideally both. |
| 4. Productize | Weeks 12–20 | Make delivery hands-off enough to serve 10+ clients. | Orchestrator (P69) with approval gates (P70) and self-monitoring (P71); onboarding automation (P68); content module hardening (P63/P65); FB/IG/LinkedIn connected as approvals land. | P63, P65, P68, P69, P70, P71 | A new builder onboards in <1 day of our labor. |
| 5. Second niche | Weeks 14+ | Take the proven chassis to polymagnetics. | Identify the named buyer TBD; magnetics content spine (P77); expert-approval gate; pitch with the existing case-file artifacts. | P77, P80 | One magnetics client in a paid or pilot engagement. |
How to use this part: each prompt below is written to be pasted directly into a Claude Code session on this network (it assumes our stack, paths, and rules). Plain-English purpose first, then the paste-able text. Statuses of the P53–P71 set from Edition 1 are listed first for continuity; the new P72–P80 set operationalizes this edition.
| # | Prompt | Status |
|---|---|---|
| P53 | Postiz publishing hub | DONE — LIVE |
| P54 | Social Ops VA desk | QUEUED (activates with client volume) |
| P55 | Identity & phone policy | DEFINED |
| P56 | Connect Mastodon | WIRED — app registered on mastodon.social, keys installed; account connect is a 2-minute job |
| P57 | LinkedIn app + review | QUEUED — Phase 0, start now |
| P58 | Meta app (FB+IG) + verification | QUEUED — Phase 0, start now |
| P59 | Engine → hub publish adapter | BUILT v1 — publish adapter live (dry + X + Bluesky routes) |
| P60 | Per-client workspaces | BUILT v1 — clients.json multi-tenant + demo tenant |
| P61 | Analytics pull-back | QUEUED — merged into P75 |
| P62 | Hub hardening | DONE (lockdown, backups, monitoring) |
| P63 | Content generation module | QUEUED — Phase 4 (expanded below) |
| P64 | Cadence scheduler | QUEUED — folded into P69 |
| P65 | Brand voice + guardrails | QUEUED — Phase 4 (expanded below) |
| P66 | Feedback loop | QUEUED — Phase 4+ |
| P67 | Stripe billing | QUEUED — Phase 3 |
| P68 | Onboarding automation | QUEUED — Phase 4 |
| P69 | Orchestrator | QUEUED — Phase 4 (expanded below) |
| P70 | Approval gates | QUEUED — Phase 4 (expanded below) |
| P71 | Self-monitoring | QUEUED — Phase 4 |
Build the builder demo for the partner working session.
Context: Postiz hub live at postiz.wholetech.com (X + Bluesky connected);
direct-publish scripts postx.py/postbsky.py proven on the postiz droplet.
1. Create a dedicated "Builder Demo" workspace/context in the hub.
2. Pick ONE real, public new-home community page from a large production
builder. Extract only public facts (community name, city, price range,
plan names, amenities). Do not invent numbers or availability.
3. Write 6 posts from those facts: 2 new-release announcements, 2 amenity/
lifestyle spotlights, 1 price-range post, 1 "why this location" post.
Every post labeled SAMPLE in the demo view (not in any live post).
4. Queue all 6 in the hub with realistic spacing across a demo week.
5. Prepare TWO live-fire posts (generic, non-builder-branded versions) to
publish to our own @springnet X + Bluesky DURING the demo, proving the
pipe end-to-end in front of the partners.
6. Produce a one-page leave-behind (HTML + print CSS): the offer in plain
English, the causal chain (approve → cadence → presence → leads →
report), pilot ask ("give us two builders for 60 days"), and honest
costs. No fabricated metrics anywhere — use "the pilot will measure X".
7. Write the 15-minute walkthrough script: 2 min problem, 5 min live demo,
3 min approval-queue mockup, 3 min pilot ask, 2 min questions.Build the deterministic builder-content generator.
1. Define a normalized listing schema: community, builder brand, city/area,
status (now selling / coming soon / final homes), price_from, plans[]
(name, beds, baths, sqft), amenities[], photo_urls[], page_url.
2. Ingest adapters, in priority order: (a) manual CSV/JSON (pilot-ready
day one), (b) page scraper per builder site template, (c) feed if the
partner ecosystem exposes one (TBD).
3. Template library v1 — at least 12 templates across 5 families:
new-release, price-point, plan spotlight, amenity/lifestyle, milestone.
Templates fill ONLY from schema fields; if a field is missing the
template is ineligible (never guess). Rotate phrasing variants to avoid
repetition; track last-used per builder.
4. Per-builder brand profile: tone words, banned words, emoji policy,
hashtag set, required disclaimers, link/UTM pattern.
5. Output: post objects {text, image_url, channels[], proposed_time}
written to a pending_approval store (feeds P74).
6. Hard rule inherited from the engine: no invented facts, no invented
urgency ("only 2 left!" requires a status field saying so).
Test: run against the P72 demo community; generate 20 posts; hand-review.Build client-portal v1: the Approval Queue. 1. Storage: pending_approval posts (from P73) in the hub droplet's Postgres, keyed by client workspace. States: pending → approved | edited+approved | skipped; audit trail on every transition. 2. UI: phone-first single-column card feed (plain HTML/CSS/JS, no framework): photo, post text, channel icons, scheduled time; buttons Approve / Edit (inline textarea) / Skip. Batch "Approve all remaining" at the bottom. Target: full day's queue in <60 seconds. 3. Auth: per-client magic-link (signed token, 7-day expiry) — no passwords for clients. HTTPS on portal.wholetech.com or /portal/on the hub droplet's nginx. 4. Publish handoff: approved posts flow to the hub scheduler (or the direct-publish scripts) at their proposed_time. Skipped posts logged with optional reason (feeds P66 later). 5. Email fallback: daily digest email listing pending posts with one-click approve links (same signed-token mechanism). 6. Safety: nothing publishes unapproved while a client's require_approval flag is true (default true, always true during pilot).
Build the reporting layer.
1. Post log: every published post recorded {client, channel, url, time,
template_family}. Engagement pulled per channel where the API allows
(X counts are pay-per-use reads — batch weekly, budget-capped;
Bluesky/Mastodon free; FB/IG/LinkedIn once connected).
2. GA integration: UTM-tagged links per post; pull sessions/clicks per
campaign from the existing GA property.
3. Weekly digest email (client-facing, plain English): posts that went
out, best performer, next week's plan. Assemble automatically; allow
one human sentence on top.
4. Monthly results page (portal Screen 3) + print CSS for PDF: five
numbers a builder cares about — posts published, total reach EST,
engagements, site clicks from social, top post — with deltas vs
prior month and zero vanity padding. Include the standing referral
line. Every number traceable to its source; if a platform hides a
metric, say "not exposed by platform" rather than estimating.Prepare the white-label option (build only after partner interest): 1. Brandable portal: logo, colors, product name per tenant via config; partner domain CNAME + cert automation. 2. Tenant hierarchy: partner → clients → workspaces; partner-level portfolio view (posts, engagement, health per builder). 3. Billing split support in Stripe (partner share as negotiated). 4. Operational isolation: per-tenant backups and export (a partner must be able to leave cleanly — that clause builds trust going in).
Build the technical presence engine for the magnetics niche. 1. Content spine: source-material intake (client's application notes, spec sheets, case studies, product pages) → a verified-facts store per client. Posts may cite ONLY the verified store. 2. Cadence: 2–3 posts/week, LinkedIn-primary (once P57 lands), X secondary; monthly longer-form piece for the client's own site. 3. Expert gate: every post requires named-human approval (the client's engineer) via the P74 queue — no exceptions, ever, for technical claims. Surface the source snippet next to each draft for one-glance verification. 4. Re-use our existing artifacts (the 1.deptmatic Polymagnet rebuild, c.deptmatic case file) as the pitch portfolio; refresh both before any outreach. 5. First business task (human, not code): identify the named buyer — Polymagnet technology owners/licensees and adjacent magnetics manufacturers; log candidates in the CRM note file. TBD.
Instrument the pilot. 1. Baseline capture BEFORE first post, per builder: follower counts per channel, posts in prior 90 days, GA social sessions prior 90 days. 2. Weekly snapshot job: same metrics + our post/approval/skip counts, time-to-approve, cadence adherence. Store as JSON; chart on a simple internal page. 3. Skip-reason taxonomy (wrong tone / wrong fact / wrong timing / other) — every skip is free product feedback. 4. Day-30 and day-60 review docs auto-drafted from the data: what went out, what changed vs baseline, what clients did (approval behavior), open issues, and an honest "is this working?" section the founder edits by hand before any partner sees it.
Build the proposal generator. Input: builder name, community count, channels, chosen cadence, setup needs (accounts to open), pilot results if available. Output: one-page HTML (+print CSS) proposal — their numbers from the pilot (real, sourced), the service definition (approve from your phone; we do the rest; monthly report), price per the rate card ranges, what happens in week one, and a plain-English no-lock-in clause (month to month, your accounts stay yours — a differentiator worth stating). No fabricated projections: if pilot data exists, show it; if not, show the causal chain and say "the first 60 days will measure this."
Write and wire the onboarding runbook. Checklist per new client, each step logged with owner + timestamp: 1. Intake: brand profile (P73 §4), listing source, channel inventory. 2. Accounts: existing → connect (client OAuth, guided call or link); missing → Human Desk order (P50) under identity/phone policy (P55). 3. Workspace: create in hub (P60), map channels, set cadence + approval flag, load templates. 4. Baseline: run P78 §1 capture. 5. First week: generate first batch (P73), client approves (P74), posts flow; day-7 check-in email auto-drafted. Wire steps 3–5 into scripts; keep 1–2 human. Target: <1 day labor. Publish the runbook as an internal page so a future VA can run it.
Build the publish adapter that lets our systems post through the hub.
1. Module publish.py on the hub droplet: publish(client, post) → routes
to Postiz API (scheduled) or direct scripts (immediate); returns
{post_url, channel, ts}; retries 3x with backoff; failure → operator
alert (existing ntfy), never silent.
2. Per-client channel map (workspace → integration ids) in one config.
3. Queue semantics: everything flows THROUGH pending_approval (P74)
unless client flag require_approval=false (never during pilot).
4. Log every publish to the post log (P75 §1).
5. X cost guard: count X posts/month per client; warn at threshold
(subscription-discipline habit applied to the $25 X credit).Build the content module with two lanes, respecting the network's subscription-only rule (no pay-per-token API, ever): LANE 1 (deterministic, daily): P73 templates over structured facts — the drumbeat. Zero marginal cost, zero fabrication risk. LANE 2 (batched, weekly): one Claude Code session per week generates/ refreshes spotlight posts for ALL clients in one cached run — seasonal angles, local events (verified sources only), template variants. Output of both lanes lands in pending_approval; nothing publishes itself. Lane 2 outputs carry a source note per post for the approver. Measure: % of Lane-1 posts approved unedited (target >80%); skip reasons feed template fixes (P78 §3).
Enforce the honesty brand promise in code. 1. Fact rule: every factual claim in a post must trace to a schema field (Lane 1) or a verified-source note (Lane 2). Fail → post not created. 2. Banned-pattern lint: fake urgency without status data, superlatives without source, competitor disparagement, fair-housing-sensitive phrasing for builder content (flag for human, never auto-fix). 3. Brand lint per client: banned words, required disclaimers, emoji/ hashtag policy (from P73 §4). 4. Cadence sanity: per-channel daily caps, quiet hours, no duplicate text within N days. 5. When unsure, don't post: any lint uncertainty routes the post to pending with a visible flag instead of publishing.
Build the per-client loop runner on the hub droplet (cron first; Temporal if complexity earns it): Daily per client: ingest listing changes → generate eligible Lane-1 posts → queue to pending_approval → send approval digest if queue>0 → publish approved at scheduled times → log. Weekly: engagement pull (budget-capped for X) → snapshot (P78) → digest email (P75). Monthly: results page refresh + report PDF + renewal/referral prompt. Every step idempotent and individually re-runnable; every failure alerts (ntfy) with client + step; a stalled client (no posts 7 days) is an ALARM, not a silence.
Codify the permanent human gates: 1. Client posts: gated by P74 while require_approval=true (pilot: always). Relaxable per client ONLY by the founder, in writing. 2. Money: no charge, refund, escrow release, or payout without an explicit human --confirm (Human Desk rule, extended to Stripe). 3. New accounts: only via Human Desk under the identity policy (P55); the machine never self-registers client accounts. 4. Technical claims (magnetics): named-expert approval, no relaxation flag exists. 5. The engine's own social (@springnet etc.): founder approves; the flagship account is never on autopilot. Log every gate decision; review the log monthly.
These complete the library: every still-queued prompt from Edition 1 now has paste-able text. (P56 is wired; P61 merged into P75; P62 done; P64 folded into P69.)
Stand up the Social Ops VA desk.
1. Hiring spec (post to OnlineJobs.ph and one US VA agency for comparison):
fluent written English, social-platform account admin experience,
detail discipline; ~10 hrs/wk to start; $6-9/hr PH or ~$1k/mo US EST.
2. Their queue = the Human Desk (hd_admin) + the onboarding runbook
(P80) steps marked HUMAN. They never touch money, API keys, or the
founder's accounts (P70 gates apply to them too).
3. SOPs to write before day one: account creation under the identity
policy (P55), evidence submission, client email templates (kickoff,
nudge, day-7 check-in), escalation rules ("when unsure, stop and ask").
4. QA: founder reviews 100% of their work weeks 1-2, then 20% sampled;
trust score tracked like any pool operator (P51 pattern).
5. Payment via the pool ledger — logged, founder-confirmed, never
automated.Create and wire the LinkedIn app. 1. Founder (browser): linkedin.com/developers → Create app. App name "WholeTech Publishing Hub"; company page: create one for the product first if none exists (a Company Page is REQUIRED to own an app). Privacy policy URL: https://automarketingengine.com/privacy/ 2. Auth tab → Authorized redirect URLs — add BOTH: https://postiz.wholetech.com/integrations/social/linkedin https://postiz.wholetech.com/integrations/social/linkedin-page 3. Products tab → request "Share on LinkedIn" + "Sign In with LinkedIn using OpenID Connect" (usually instant) and "Community Management API" (review; needed for organization-page posting - scopes rw_organization_admin, w_organization_social, r_organization_social). Review answer: "Self-hosted publishing dashboard; posts only content our authenticated clients approve to pages they administer; no data resale; privacy policy linked." 4. Founder runs /opt/postiz/set-linkedin-keys.sh (client ID + secret; installer already staged). 5. Verify: hub Add Channel → LinkedIn shows and OAuth round-trips.
Create and wire the Meta app (founder answer-sheet exists in session notes; installer /opt/postiz/set-meta-keys.sh is staged). 1. Founder: developers.facebook.com → Create App (type Business) → add Facebook Login for Business; Valid OAuth Redirect URI: https://postiz.wholetech.com/integrations/social/facebook Basic settings: app domains postiz.wholetech.com; privacy /privacy/; terms /terms/; data-deletion /privacy/#data-deletion. 2. Founder runs set-meta-keys.sh with App ID + Secret. 3. IMMEDIATELY usable (dev mode): connect founder-admin'd FB Pages + IG professional accounts. Do this the same day for proof. 4. App Review (for client accounts): request pages_show_list, pages_manage_posts, pages_read_engagement, pages_manage_engagement, business_management, read_insights, instagram_basic, instagram_content_publish, instagram_manage_insights. Prepare: 3-min screencast of the connect+approve+publish flow on a test page; reviewer test instructions; business verification docs (business portfolio required at this step). 5. Track review status weekly; add channels to pilot digests as they land.
Configure multi-tenant operation. 1. Use Postiz organizations/workspaces: one per client, named ""; owner login stays ours; clients NEVER get hub logins (they get the portal). 2. Config file /opt/postiz/clients.json: slug, workspace/org id, integration ids per channel, cadence, require_approval, brand profile path, listing source. Single source of truth for P59/P69. 3. Isolation checks (scripted, run weekly): no integration id appears in two workspaces; every post log row carries the right client slug; portal magic-links scope to exactly one client. 4. Backup note: nightly pg_dump already covers all workspaces; add per-client export script (their posts + reports as a zip) — the clean-exit promise from the terms.
Build the template feedback loop. 1. Every post carries template_family + template_id in the post log. 2. Monthly per client: engagement rate and click-through by template_family vs that client's median; skip-rate and edit-rate by family from the approval log (P74 data). 3. Weighting rule (simple, explainable): families >1.5x median get +25% selection weight next month; families <0.5x median for two consecutive months get flagged for rewrite; skip-reason "wrong tone" twice on one family → auto-flag for brand-profile review. 4. Never auto-delete a family — flags go to a monthly 15-minute human template review (us), decisions logged. 5. Report hook: "what we changed and why" one-liner appears in the client's monthly report — improvement made visible.
Wire Stripe subscriptions (build now, activate at G3). 1. Products: builder-starter/growth/portfolio, magnetics-presence/ authority; monthly prices per the rate card; one-time setup SKUs $199/$399. Founding-pilot coupon: -20% x12 months. 2. Payment links (no custom checkout needed v1): one link per tier, sent with the proposal (P79); metadata carries client slug. 3. Webhook receiver on the hub droplet: checkout.session.completed → mark client active in clients.json + notify (ntfy); invoice.payment_failed → dunning email + operator alert; customer.subscription.deleted → offboarding checklist trigger. 4. Money gates (P70): refunds and plan changes are founder-manual in the Stripe dashboard, never API-automated. Recurring charges are client-authorized by the subscription itself. 5. Bookkeeping: monthly Stripe payout summary appended to a simple revenue log page (internal, auth-protected).
Automate the onboarding runbook (P80 stays the spec). 1. Intake form (private link per new client) → writes the brand profile JSON + clients.json entry directly; founder reviews diff before commit. 2. Channel connect: generate the client's guided-connect page — one button per channel, each opening the right OAuth flow into their workspace; progress checkmarks stored per channel. 3. Missing accounts: intake gaps auto-draft Human Desk orders (pending_review as always — dispatch stays human-approved). 4. Baseline capture (P78 §1) fires automatically when the last channel connects; first content batch (P73) generates the same night; guided-approval call gets calendar-booked by email. 5. Definition of done: from signed yes to first live post in <7 days with <1 day of our hands-on labor, measured and logged per client.
Build the ops watchdog (extends the existing 5-min health-check). 1. Per-client heartbeats: last post published, next post scheduled, pending-approval queue depth + age. Alarms: no post in 7 days; queue item older than 72h (client nudge email + operator ping). 2. Token health: X/LinkedIn/Meta token expiry probes weekly; re-auth needed → operator alert BEFORE posts fail, with the client's guided-reconnect link ready. 3. Infra: hub uptime (exists), cert expiry (certbot + probe), nightly backup success (file age check), disk headroom, Temporal liveness, X credit balance vs monthly burn. 4. All alerts → existing ntfy channel, severity-tagged; weekly ops digest (one email: every client green/amber/red + infra summary). 5. The rule from the blueprint: a stalled client is an ALARM, not a silence. No system state may be quiet and broken at once.
| Item | Monthly | Status |
|---|---|---|
| Hub droplet (serves every client) | $24 | Live, billed |
| Main droplet (pre-existing, whole network) | already carried | No new cost from this product |
| X posting | ~1.5¢/post, ~20¢ with link; $25 credit loaded | Live |
| All other platform posting | $0 | APIs are free |
| Software (Postiz, engine, portal) | $0 | Owned / self-hosted |
| Build labor | $0 cash (subscription Claude Code sessions) | The standing rule |
| VA (when volume justifies) | ~$1,000 dedicated or ~$12–15/task EST | Phase 4+, scales with revenue |
| Stripe | ~2.9% + 30¢ of what we charge | Phase 3, scales with revenue |
One builder at $750/month: infrastructure share is a few dollars; X fees perhaps $2–4; the real cost is residual human attention (approval nudges, report glance, occasional fix) — call it 1–2 hours/month once Phase 4 lands. Gross margin runs ~90%+. Ten builders ≈ $90,000/year on the same $24 droplet. Twenty at a blended $900 ≈ $216,000/year. With a 40% partner share on partner-sourced clients, ten partner-sourced builders still net ≈ $54,000/year to us. All of these are arithmetic on assumed prices, not forecasts — the pilot and the partner conversation set the real numbers. TBD
Break-even on new cash costs is one client at any plausible price (the hub costs $24/month; a single $500/month client covers it twenty times over). The floor case — no partner deal, one or two direct clients — is still a profitable micro-service that pays for the whole network's infrastructure. The ceiling case runs through the partner channel. The difference between floor and ceiling is not code; it is the Part III conversations.
| Scenario | Month 3 | Month 6 | Month 9 | Month 12 | Year-1 revenue ≈ | What has to be true |
|---|---|---|---|---|---|---|
| Floor — no partner deal; 1–3 direct clients from existing relationships | $600 | $1,200 | $1,800 | $1,800 | ~$12k | Just the pilot converting once or twice. Still pays for all infrastructure many times over. |
| Base — pilot converts; referrals trickle; no formal partner channel | $1,100 (2 clients) | $3,200 (4) | $4,800 (6) | $6,400 (8 @ ~$800 avg) | ~$40k | Day-60 review is good; two referrals land per quarter; churn ≤ 1 client/2 quarters. |
| Partner channel — referral/reseller deal from Q2; partner share 35% on partner-sourced clients | $1,100 | $5,400 gross (8) | $10,800 gross (14) | $18,000 gross (20 @ $900) → ~$13k/mo net after shares | ~$70–90k net | The partners actively introduce; onboarding stays <1 day/client (P68); the VA desk is running. |
| Cost | 3 clients | 10 clients | 25 clients |
|---|---|---|---|
| Hub droplet(s) | $24 | $24 | $48 (add a worker) |
| X posting + capped engagement reads | ~$5 | ~$20 | ~$50 |
| VA desk | $0 (founder-run) | ~$400 (part-time PH) | ~$1,000 (dedicated) |
| Stripe (~3% of revenue) | ~$50 | ~$250 | ~$650 |
| Human Desk setup tasks (amortized, ~70% covered by setup fees) | ~$15 | ~$50 | ~$120 |
| Total | ~$95 | ~$745 | ~$1,870 |
| Against revenue of | ~$1,800 | ~$8,000 | ~$21,000 |
| Gross margin | ~95% | ~91% | ~91% |
| Path | Odds of a profitable business | Why |
|---|---|---|
| Generic AI-marketing SaaS (abandoned) | ~5–10% | Commoditized, no distribution, AI-eroded. |
| Partner-led builder service (this plan) | ~40–55% | Distribution + trust exist; product fits niche; pilot converts guesses to evidence. Biggest variable: pilot outcome. |
| Magnetics technical service (second track) | ~25–35% | Real depth advantage, but no named buyer yet. |
| Floor case (1–3 direct clients, no partner deal) | high | Achievable with existing relationships; modest but real profit. |
| Gate | Question | If yes | If no |
|---|---|---|---|
| G1 — after the demo | Did the working session yield pilot builders? | Phase 2 immediately. | Ask why, honestly; offer white-label framing; if still no, pivot Niche A to direct builder outreach via other contacts and accelerate Niche B. |
| G2 — pilot day 30 | Cadence ≥90% and approval friction low? | Continue; start price conversations. | Fix the product experience before talking money — the machine must be effortless first. |
| G3 — pilot day 60 | Will at least one builder pay ≥$500/mo, or the partners advance a deal? | Phase 3/4: bill, productize, scale. | Reprice, restructure (white-label), or accept the floor case and cap investment — in writing, no drift. |
| G4 — magnetics, one quarter in | A named buyer engaged in pilot or paid work? | Continue track B. | Park track B; it costs nothing parked. |
| Window | Deliverables | Prompts |
|---|---|---|
| Days 1–7 | Meta + LinkedIn reviews submitted; Mastodon connected; builder demo built and rehearsable; leave-behind one-pager done. | P56–P58, P72, P73(v1) |
| Days 8–30 | Approval Queue v1 live; per-builder workspaces; publish adapter; pilot baselines captured; first pilot posts flowing (X/Bluesky/Mastodon); weekly digest v1; /setup dead-air fixed. | P74, P60, P59, P78, P75(digest) |
| Days 31–60 | Results page v1; day-30 review doc from real data; FB/IG/LinkedIn connected as approvals land; proposal generator ready; Stripe wired (unused until G3). | P75, P78, P57/P58(landing), P79, P67 |
| Days 61–90 | Day-60 review + pricing decision (G3); orchestrator + gates + monitoring; onboarding runbook; magnetics case-file refresh and pitch pack. | P69–P71, P68, P80, P77 |
This last chapter retells everything in this document in everyday language — no jargon, nothing left out. If you read only one part, read this one.
The goal was to build a marketing machine: a system that takes care of a business's online presence — especially social media — automatically, so the owner doesn't have to. Write once, publish everywhere, measure what happened, get better over time. And then to sell that as a service to other businesses for a monthly fee.
Here is the uncomfortable truth this document exists to face: we built the machine before we found the customers. It's the most common mistake in business — "build it and they will come." They don't come. Nobody knew the machine existed, nobody had a reason to trust it, and it was being offered to "any small business," which is the same as offering it to no one in particular. On top of that, the price was set at $49 — too little to pay for the human attention that earns a stranger's trust. So: great machine, empty street. Not a failure of the product; a failure of the selling — which had simply never been done.
There's a bigger force at work too. AI tools now let anyone generate a month of social media posts for free in a few minutes. That means "we'll write and post your content" is no longer worth much on its own — the task itself has become nearly free, for everyone. So a business built on doing that task is standing on melting ice. What AI cannot give people for free: a trusted relationship, access to buyers, a real person who's accountable, deep knowledge of one industry, and someone to do the annoying human parts. Any durable business must be made of those five things, with the machine hidden inside making the costs low.
Stop selling a tool to everyone. Start delivering a finished result — "your company visible everywhere, automatically, and you just approve from your phone" — to two specific industries where trust already exists: home building, through a five-year working relationship with two senior partners at the center of that industry's marketing world; and magnetics, a technical field where we've already demonstrated real understanding. Charge real service prices ($500–$1,500 a month for builders), prove it with a free 60-day trial run for two builders the partners choose, measure everything honestly, and then set final prices from the evidence. Grow by referral. It won't be a tech empire — it can be a genuinely profitable small business with costs under $100 a month and margins above 90%.
Building honestly means recording the failures too, because each one taught something:
Running everything — the analyzer, the hub, the portal, the reports, monitoring, backups — costs about $24 a month, plus about a penny and a half each time we post to X (the only network that charges; $25 of credit is already loaded). Building it cost almost no cash, because the building is done inside a flat-fee subscription. The costs that grow later — a part-time assistant, payment-processing fees — only appear after revenue does, and scale with it. One client at any realistic price covers the entire cost base many times over.
The machine's work is largely done for now. What remains is human, and most of it is one person's job:
As a "software company for everyone," this would most likely fail — the field is crowded and AI keeps making the core task cheaper. As a small, trusted, two-industry service with a machine inside, the odds are genuinely decent — our working guess is roughly a coin flip's neighborhood, and the pilot will replace that guess with facts within about ninety days. The floor is low (costs are trivial), the ceiling is real (ten clients ≈ $100,000 a year at ~90% margin), and the deciding factor isn't code anymore. It's whether two builders say yes. Getting them to say it is the entire job now.
☀️ START HERE TOMORROW MORNING (as of the night of 25–26 July)
Already handled overnight: the invite draft written · a reminder set for Tue 29 Jul (10am, to your phone) in case the morning gets away · portal database added to nightly backups · portal API added to monitoring.
This is the whole list. Nothing else in this entire plan is waiting on you — the machine's side is done. Each item below says why it matters, how long it takes, and every step in order. And for every single one, there is an easier path: open a Claude session and say "help me with checklist item 1" (or 2, 3…) — and it will be walked through with you live, one small step at a time, with the right text placed on your clipboard as you go. Doing them in the order listed is best, but any order works.
Why: every dollar in this plan sits behind one half-hour meeting. The demo, the script, and the leave-behind are all built and waiting.
Subject: Want to show you something built for builders I've spent the summer building a marketing machine, and it's alive — it posted to my real accounts this week, automatically. I built the demo around home builders, and I'd love 30 minutes to show you: a builder's listings turning into approved, published social posts, live, while we watch. No deck, no ask beyond your honest reaction — though if you like it, I'll want your advice on which two builders to pilot it with. Good day this week or next?
automarketingengine.com/demo/builders/automarketingengine.com/demo/builders/script.htmlautomarketingengine.com/demo/builders/leave-behind.htmlWhy: this is the key that lets the machine post to Facebook and Instagram. Your own pages work the same day; client pages unlock after Meta's review — which is a multi-day clock that starts the moment you do this. That's why it's item 2.
developers.facebook.com/apps and log in with your regular Facebook account. (First time it may say "Register as a developer" — agree and continue.)WholeTech Publishing Hubwalhus@gmail.comWholeTech only if it forces you)https://postiz.wholetech.com/integrations/social/facebook→ Save changes.
postiz.wholetech.comhttps://automarketingengine.com/privacy/https://automarketingengine.com/terms/https://automarketingengine.com/privacy/#data-deletionssh -t root@64.227.29.192 /opt/postiz/set-meta-keys.shIt asks for the App ID, then the Secret — paste each, press Enter. It says "Done!" and the hub restarts with Facebook + Instagram wired in.
Why: LinkedIn is the channel that matters most for the magnetics niche and for builder corporate brands. Its review is also a multi-day clock.
Auto Marketing Engine, website automarketingengine.com, industry "Software Development", tiny logo optional → create. (2 minutes; skip anything optional.)linkedin.com/developers → Create app.
WholeTech Publishing Hubhttps://automarketingengine.com/privacy/https://postiz.wholetech.com/integrations/social/linkedin https://postiz.wholetech.com/integrations/social/linkedin-page
Self-hosted publishing dashboard. It posts only content our authenticated clients approve, to pages they administer. No data resale. Privacy policy linked on the app.
ssh -t root@64.227.29.192 /opt/postiz/set-linkedin-keys.shPaste the two values when asked. On "Done!", tell Claude "LinkedIn keys installed."
Why: a free, no-review network that makes the pilot's channel list longer on day one. The machine's side is already fully wired — only an account is missing.
mastodon.social → Create account → username suggestion: wholetech (or springnet), your email, a password you write down. Confirm the email it sends you.postiz.wholetech.com → sign in → + Add Channel → Mastodon → it bounces you to mastodon.social → click Authorize. Done — tell Claude, and Mastodon joins every future post.Why: $13 of your money is escrowed on a task (creating a Bluesky account for one of the sites) that may now be redundant, since your own Bluesky is connected.
Why: that key once appeared in a chat window, so best practice is to replace it. Until then it can spend from your RentAHuman wallet (caps are set, but still).
rentahuman.ai → find API keys (usually under Settings or your profile) → Regenerate (or delete + create new). Copy the new key — shown once.ssh root@143.198.182.180 nano /opt/autoengine/rentahuman.envReplace the old value after
RENTAHUMAN_API_KEY= with the new one. Save: Ctrl+O, Enter. Exit: Ctrl+X.automarketingengine.com. Just reply "use automarketingengine.com as canonical" (or name another) and the redirects get handled.| # | Item | Time | Unlocks |
|---|---|---|---|
| 1 | Book the partner session | 5 min | Everything. The pilot, the pricing, the business. |
| 2 | Meta developer app | 10 min | Facebook + Instagram posting (yours same-day; clients after review) |
| 3 | LinkedIn developer app | 10 min | LinkedIn pages — key for magnetics + builder brands |
| 4 | Mastodon account | 3 min | One more free channel, instantly |
| 5 | Bounty decision | 1 min | $13 back, or a brand account |
| 6 | Rotate RAH key | 4 min | Closes the one loose security end |
| 7 | Two one-line decisions | 2 min | Canonical site + pricing green light |
This chapter assumes Part XII is done — the session is booked, the developer apps exist, the keys are installed, the decisions are made. From that moment, here is every step remaining, in order, until the project is complete — with who does each one, what it unlocks, and the honest definition of "finished" at the end. Almost everything below is the machine's work; your parts are marked YOU and total a few hours spread over three months.
The project is done — not paused, done — when every box below is true:
After that, the weekly rhythm of the finished business is small and calm: approvals happen on clients' phones without us; the Monday digests go out alone; one batched content session; one glance at the ops digest; one monthly report cycle; conversations only with prospects and partners. The machine does the work. The humans keep the trust. That was the whole idea, and at that point it will simply be true.
| Stage | When EST | Mostly | Ends with |
|---|---|---|---|
| A — Connect & rehearse | days 1–3 after inputs | Machine | Your own FB/IG/LinkedIn posting; session-ready |
| B — The session | within 2 weeks | YOU | Two pilot builders named (G1) |
| C — Pilot onboarding | ~1 week per builder | Machine + Human Desk | First posts live, baselines locked |
| D — Pilot operations | weeks 1–8 | Machine | Day-30 gate (G2) + real results data |
| E — Money | weeks 8–12 | YOU decide, machine executes | First recurring revenue + partner terms (G3) |
| F — Productionize | weeks 12–20 | Machine | Self-driving loop; VA-runnable; 10+ client capacity |
| G — Magnetics | from week 14 | Both | Second-niche pilot (G4) |
| H — Steady state | ~month 4–5 | — | Every box in Stage H checked = project complete |
Built automatically from the document's own headings on every page load, so it can never drift out of date. Click any entry.
Every distinct URL referenced anywhere above, collected automatically on page load and grouped: first the project's own live pages (the evidence), then external references. Self-updating.
The open-source map of this project: repositories already in production, and vetted candidates for each upcoming phase. Everything here fits the house rules — self-hosted, subscription-safe, boring-by-preference.
| Repository | What it is | Role here | Status |
|---|---|---|---|
| gitroomhq/postiz-app | Open-source social publishing platform (30+ networks) | The publishing hub at postiz.wholetech.com | IN PRODUCTION |
| temporalio/temporal | Durable workflow scheduler | Postiz's required scheduler (run as lightweight dev server) | IN PRODUCTION |
| certbot/certbot | Let's Encrypt client | HTTPS on the hub + portal (auto-renewing) | IN PRODUCTION |
| digitalocean/doctl | DigitalOcean CLI | Droplet provisioning (how the hub droplet was created) | IN PRODUCTION |
| binwiederhier/ntfy | Push notifications via simple HTTP | All operator alerts (publish failures, watchdog) | IN PRODUCTION (hosted ntfy.sh) |
| PLhery/node-twitter-api-v2 | The X/Twitter API client Postiz uses internally | Reference for our OAuth 1.0a direct publisher | IN USE (inside Postiz) |
| bluesky-social/atproto | The AT Protocol (Bluesky) reference implementation | Spec behind our direct Bluesky publisher; MarshalX/atproto is the Python SDK if we outgrow raw calls | IN USE (via API) |
| mastodon/mastodon | The Mastodon server + API | Our registered app posts through it; halcy/Mastodon.py if we script it directly | WIRED |
| microsoft/playwright | Browser automation | Listing-page scrapers for P73 adapters (already used elsewhere on the network; runs from Windows, never the droplet) | CANDIDATE — Phase 2 |
| stripe/stripe-python | Stripe's official Python SDK | P67 subscription billing + webhook receiver | CANDIDATE — Phase 3 |
| knadh/listmonk | Self-hosted newsletter/mailing engine (Postiz already speaks to it) | Client digest + report emails once SMTP is decided — beats hand-rolled mail | CANDIDATE — Phase 2–3 |
| louislam/uptime-kuma | Self-hosted uptime monitoring with status pages | Upgrade path for P71 watchdog + a client-facing status page | CANDIDATE — Phase 4 |
| umami-software/umami | Self-hosted, privacy-first web analytics | Per-client click tracking in reports without GA dependence | CANDIDATE — Phase 4 |
| dubinc/dub | Open-source link shortener/attribution (Postiz has native support) | Branded short links + per-post click attribution in P75 reports | CANDIDATE — Phase 4 |
| inovector/mixpost | Self-hosted social publishing (Laravel) | The designated fallback if Postiz ever stalls | FALLBACK |
| n8n-io/n8n | Self-hosted workflow automation | Optional glue for P69 if the cron orchestrator outgrows itself | OPTIONAL — Phase 4+ |
| paulwalhus/* (private) | Our own per-site GitHub repos (the six-leg backup pattern) | Version history for the portal + doc code as they stabilize | EXTEND |
The integration rule: nothing joins this table by being exciting — it joins by removing work at a phase we've actually reached, self-hosted, with no per-token or per-seat metering. Candidates get adopted when their phase arrives, not before.