|
| 1 | +# Go-To-Market Launch Readiness — Design |
| 2 | + |
| 3 | +_Date: 2026-05-28. Status: Approved (design); ready for per-workstream planning._ |
| 4 | + |
| 5 | +This is a **program-level** plan: a go-to-market readiness effort that decomposes into |
| 6 | +seven independent workstreams, each of which gets its own spec → plan → implementation |
| 7 | +cycle when we execute it. It does not itself contain implementation detail for any one |
| 8 | +workstream — it sequences them and defines the launch. |
| 9 | + |
| 10 | +> **Public-repo note.** This repo is public. The two marketing sites |
| 11 | +> (`metaobjects.dev`, public; the commercial/contact site, private) live in separate |
| 12 | +> sibling repos. This document refers to them generically and contains no private |
| 13 | +> business, pricing, or strategy detail. |
| 14 | +
|
| 15 | +## Goal |
| 16 | + |
| 17 | +**North Star: activation** — developers who run `meta gen` and keep the generated code. |
| 18 | + |
| 19 | +That is the proof the product is real and the mental model makes sense. It is also the |
| 20 | +single asset that later converts into any of three downstream doors — business leads, |
| 21 | +job offers, or monetization — without having to commit to one now. We optimize for |
| 22 | +activation; stars and traffic are momentum signals only. |
| 23 | + |
| 24 | +## Strategy (decided) |
| 25 | + |
| 26 | +- **All-five-ports splash.** The headline is "one schema, five languages, all |
| 27 | + installable." Publishing the C# port to NuGet and the Python port to PyPI is therefore |
| 28 | + a hard pre-launch gate, not a follow-up. |
| 29 | +- **Open-source first; commercial aspirational.** Follow the bootstrapped open-core |
| 30 | + pattern (fully-open core, authentic build-in-public, monetize an adjacent surface |
| 31 | + later). The lightest adjacent surface — and the right one given the maintainer holds a |
| 32 | + full-time job — is **limited consulting / advisory**, positioned honestly and |
| 33 | + low-key on the commercial/contact site. No product is sold that does not exist. |
| 34 | +- **Moderate time budget (~5–10 hrs/wk).** AI does the heavy execution; the maintainer |
| 35 | + reviews and approves. One well-timed coordinated launch plus a light build-in-public |
| 36 | + cadence — not a sustained multi-launch machine. |
| 37 | +- **Sequencing: readiness-gated launch with light build-in-public ("A + light B").** |
| 38 | + Complete the readiness sweep before the coordinated launch, but post a few |
| 39 | + build-in-public devlogs during prep (starting when the first ports publish) to warm |
| 40 | + the channel and begin the visibility that serves the leads/jobs motive. |
| 41 | + |
| 42 | +## Current state (from the 2026-05-28 readiness audit) |
| 43 | + |
| 44 | +The hard part is done and trustworthy: five language ports, byte-identical behavior |
| 45 | +enforced by shared conformance corpora, and a differentiated thesis ("the metamodel is |
| 46 | +the durable spine; generated code is the disposable artifact"). What is missing is the |
| 47 | +connective tissue a stranger needs in their first five minutes. |
| 48 | + |
| 49 | +- **C#** is unpublished on NuGet. Four packages would ship (`MetaObjects`, |
| 50 | + `MetaObjects.Render`, `MetaObjects.Codegen`, and the `MetaObjects.Cli` as a |
| 51 | + `dotnet tool`). None carry packaging metadata; there is no version anywhere in the C# |
| 52 | + tree; there is no shared `Directory.Build.props`. Tests are green in CI. ~½–1 day. |
| 53 | +- **Python** is unpublished on PyPI; the `metaobjects` name is available. The package |
| 54 | + builds cleanly and 610 tests pass; `py.typed` ships. `pyproject.toml` is missing |
| 55 | + license, project URLs, readme reference, classifiers, and authors, and the README |
| 56 | + understates scope. ~2 hours. |
| 57 | +- **The repo's first impression is the real launch risk.** The README quickstart fails |
| 58 | + for three of five ports (tells users to install packages that are not published, and |
| 59 | + gives no Maven version for Java, which is live). There is no runnable demo. The |
| 60 | + version story (TS `0.7.x` vs Java `7.1.x` vs unpublished others) is unexplained and |
| 61 | + several version strings are stale/contradictory. Trust scaffolding |
| 62 | + (CONTRIBUTING/SECURITY/issue templates/badges) is absent. The `docs/` tree itself is |
| 63 | + good. |
| 64 | +- **Websites are close.** The public site has a strong hero and positioning but a wrong |
| 65 | + headline version string and a ~6-month-stale `llms-full.txt` that contradicts shipped |
| 66 | + reality. The commercial/contact site is clean but frames an aspirational product and |
| 67 | + carries the same version-string bug. |
| 68 | + |
| 69 | +## Workstreams |
| 70 | + |
| 71 | +Each is an independent unit with a clear job; each gets its own spec/plan when executed. |
| 72 | + |
| 73 | +| # | Workstream | Effort | Job | |
| 74 | +|---|---|---|---| |
| 75 | +| **WS1** | C# → NuGet | ½–1 day | Shared `Directory.Build.props`; per-package metadata (id, description, license, repo URL, readme, tags); CLI as `dotnet tool` (`PackAsTool` + `ToolCommandName=meta`); version; SourceLink + symbols; `docs/RELEASING-csharp.md`; first publish in dependency order (Render/MetaObjects → Codegen → Cli). | |
| 76 | +| **WS2** | Python → PyPI | ~2 hrs | Fill `pyproject.toml` (license `Apache-2.0`, `[project.urls]`, `readme`, classifiers, authors, keywords); PyPI-correct README (absolute links, accurate scope); TestPyPI dry run + clean-venv install check; trusted publishing (OIDC) recommended; `docs/RELEASING-python.md`; first publish. | |
| 77 | +| **WS3** | Version-story reconciliation | ~½ day | Decide the per-port version scheme (see below); fix every stale/contradictory string across repo + both sites; add a "Why different numbers?" note. | |
| 78 | +| **WS4** | Repo launch-readiness | ~1 day | README rewrite with working quickstarts for all five ports; CI/license/version badges; `CONTRIBUTING.md`, `SECURITY.md`, bug/feature issue templates; point "how to contribute" at CONTRIBUTING, not `CLAUDE.md`. | |
| 79 | +| **WS5** | The five-minute demo ("wow") | ~½–1 day | TypeScript end-to-end: `meta init` → declare an entity → `meta gen` → run the server → `curl` → `200` with JSON, captured as a runnable recipe + a README transcript + a short GIF. The single highest-leverage asset for an adoption goal. | |
| 80 | +| **WS6** | Website fixes | ~½ day | Public site: fix the version string, regenerate or unlink the stale `llms-full.txt`, add a low-friction install CTA near the hero. Commercial/contact site: reframe the aspirational product as **light consulting/advisory** + keep the existing contact CTA, fix the version string, fix the dead OG-image config. | |
| 81 | +| **WS7** | Launch assets + execution | ongoing | One-sentence positioning; launch narrative essay; comparison-to-alternatives page (largely exists on the public site); channel plan + timing; metrics instrumentation; build-in-public cadence. | |
| 82 | + |
| 83 | +## Critical path & phasing |
| 84 | + |
| 85 | +``` |
| 86 | +Phase 0 Version decision (WS3 core) blocks releases, README, sites — do first, quick |
| 87 | +Phase 1 Publish Python (WS2) ‖ C# (WS1) all five ports now installable ▶ build-in-public begins |
| 88 | +Phase 2 Repo readiness (WS4) + Demo (WS5) quickstarts now reference real packages |
| 89 | +Phase 3 Website fixes (WS6) ‖ Phase 2 |
| 90 | +Phase 4 Launch assets (WS7: narrative, positioning, comparison) ‖ Phase 2–3 |
| 91 | +Phase 5 Instrument metrics download dashboards, Discussions, feedback CTA |
| 92 | +Phase 6 Coordinated launch Show HN + build-in-public push + Console.dev/newsletters |
| 93 | +``` |
| 94 | + |
| 95 | +The **demo (WS5) is the long pole** and gates a credible launch. Phases 2–4 run in |
| 96 | +parallel. Light build-in-public posts begin at Phase 1 (devlog each release). |
| 97 | + |
| 98 | +## The version story |
| 99 | + |
| 100 | +Today the version number is wrong or missing in roughly six places across the repo and |
| 101 | +both sites, and the schemes diverge (TS `0.7.x`, Java `7.1.x`, C#/Python unpublished). |
| 102 | +For an all-five-ports splash this must be coherent. Direction: |
| 103 | + |
| 104 | +- **Lead with a single "MetaObjects standard" version** as the headline — the thing that |
| 105 | + is genuinely identical across ports. This reinforces the conformance pitch rather than |
| 106 | + fighting it. |
| 107 | +- **Each package keeps its ecosystem-native version underneath.** Never renumber |
| 108 | + already-published artifacts: Java stays `com.metaobjects 7.x`; TS stays `0.7.x`; |
| 109 | + C# and Python pick an intentional first version. |
| 110 | +- **Add a one-paragraph "Why different numbers?" note** to the README and the public |
| 111 | + site so a newcomer is not confused. |
| 112 | + |
| 113 | +**Open sub-decision for Phase 0:** the first version C# and Python publish at — mirror |
| 114 | +TS's pre-1.0 track (honest for newly-published ports) or align to the standard version. |
| 115 | +A crisp recommendation will accompany the start of Phase 0; it does not block this plan. |
| 116 | + |
| 117 | +## Launch playbook (WS7 detail) |
| 118 | + |
| 119 | +- **Positioning — kill the "what is this?" problem first.** Lead with meaning and pain, |
| 120 | + not features. Working line: _"Define your entity model once; generate idiomatic, |
| 121 | + drift-checked code for TypeScript, Java, C#, Python, and Kotlin. Prisma-style |
| 122 | + schema→code — but the schema is a language-neutral standard, not a TS file."_ Pain |
| 123 | + anchor: one renamed field silently breaks three services in three languages. |
| 124 | +- **Assets.** Launch narrative essay (the "schema drift in the AI era" thesis, |
| 125 | + cross-posted to dev.to and linked from the Show HN first comment); the |
| 126 | + comparison-to-alternatives page (largely exists on the public site); the WS5 demo GIF. |
| 127 | +- **Channels, in ROI order for a solo maintainer.** Show HN (one shot, timed after |
| 128 | + readiness) → build-in-public on X (continuous from Phase 1) → Console.dev (free |
| 129 | + review — submit) and developer newsletters → targeted subreddits (r/typescript, |
| 130 | + r/java, r/dotnet) and dev.to `#showdev`. Time Show HN and Twitter together to |
| 131 | + concentrate a star burst into GitHub trending. **Product Hunt deferred** until there is |
| 132 | + a hostable surface to convert its traffic. |
| 133 | +- **Metrics — activation-first.** Public download deltas (npm/PyPI/Maven/NuGet), public |
| 134 | + docs traffic → quickstart completion, GitHub Discussions activity, and inbound. Stars |
| 135 | + are momentum only. Build-time telemetry is deferred (controversial, time-costly); use |
| 136 | + a lightweight feedback CTA instead. |
| 137 | +- **Community.** GitHub Discussions now (searchable, async, solo-friendly). Discord only |
| 138 | + after traction. |
| 139 | + |
| 140 | +## Non-goals (YAGNI) |
| 141 | + |
| 142 | +- No Product Hunt launch, no Discord-at-launch, no paid advertising. |
| 143 | +- No build-time telemetry pipeline. |
| 144 | +- No commercial-product build — consulting/advisory is the only monetization surface, and |
| 145 | + it stays light. |
| 146 | +- No renumbering of already-published Java artifacts. |
| 147 | +- No sustained multi-"launch-week" machine; one good launch plus a light cadence. |
| 148 | + |
| 149 | +## Comparable-project guidance |
| 150 | + |
| 151 | +Follow the bootstrapped open-core pattern (one beachhead language — TypeScript — won |
| 152 | +first, authentic founder build-in-public, fully-open core, real-pain narrative). Borrow |
| 153 | +the recurring-launch cadence idea (per-port milestones as future "launch weeks") and |
| 154 | +clear alternative-anchored positioning. Defer the commercial layer and Product Hunt until |
| 155 | +there is a hostable surface; keep that surface adjacent to, never gating, the open core. |
| 156 | + |
| 157 | +## Next step |
| 158 | + |
| 159 | +Per-workstream planning, beginning with **Phase 0 (version decision)** and the two |
| 160 | +releases (**WS2 Python**, then **WS1 C#**). Each workstream is taken through its own |
| 161 | +spec/plan/implementation cycle. |
0 commit comments