The Pain: Your OPC system can write articles, serve customers, deliver products, analyze data, and take care of itself. Then one day a friend asks: "Can you build one for me too?" You say yes, open the code, and go quiet. Platform credentials are hard-coded in scripts, article quality depends on your eyeballs, and the publishing record lives in your head. Copying the system for a friend means redoing three months of work. You realize for the first time: a system that works well and a system that can be copied are two completely different things.
What You'll Learn:
- Why copying a system is harder than building it — and the three ties that bind "you" to the system
- The 4-layer architecture of a replicable business system: content production → quality gates → adapters → ledger
- Step 1 — Configuration: move credentials out of code into
platforms.env+load_creds(), so swapping a person means swapping a config file, not the code- Step 2 — Quality gates:
validate → continuity → checker → gate, four physical pipelines that block a bad article before it ships- Step 3 — Productization: one adapter function per platform + a
publication-ledger, so the system becomes an asset instead of a script- Why a replicable system is really a trust mechanism — and the loop that turns "selling time" into "selling evolution"
1. Opening: "Can You Build Me One Too?"
Your OPC system can write articles, receive customers, deliver products, analyze data, and take care of itself. In the previous article — From 996 to 007: The Self-Healing Ops Stack for a One-Person Company — we automated the last manual step: when the system breaks it gets back up on its own, and only wakes you when it can't.
Then one day, a friend who runs a training business finishes reading your articles and asks: "Can you build me one too?"
You say yes. Then you open the code and go quiet.
Because this system is built for you, head to toe: platform credentials written in the scripts, article quality guarded by your eyeballs, publishing records kept in your head. Building a copy for a friend means redoing three months of work. It's the first time you realize: a system that works well, and a system that can be copied, are two completely different things.
Today's cure is a three-step leap: configuration, quality gates, productization. Once the three steps are done, your system goes from "serving one person" to "installable by many" — you upgrade from a one-person company to a system company.
2. First, Get This Straight: Why Copying a System Is Harder Than Building It
The root cause of a non-copyable system is not missing features — it's that "you" are welded too tightly to the system. Specifically, in three places:
- Credentials hard-coded in code: changing a platform account or a customer means changing the code
- Quality guarded by your eyeballs: it works while you're watching; nobody is watching when you're not
- The process lives in your head: which article was published, where, and how it performed — no auditable record anywhere
So the first step of a replicable system is not adding features. It's extracting "you" from the system. Once extracted, the system can be used by "someone else" for the first time — and other people using your system is the beginning of moving from selling time to selling systems.
3. The Architecture: A 4-Layer Replicable Business System

The architecture diagram is the roadmap for this article.
┌──────────────────────────────────────────────────────┐
│ Layer 1: Content Production │
│ → one source article, content factory drafts it │
├──────────────────────────────────────────────────────┤
│ Layer 2: Quality Gates │
│ → validate → continuity → checker → gate │
│ → no pass, no publish │
├──────────────────────────────────────────────────────┤
│ Layer 3: Adapters │
│ → WeChat / Dev.to / Hashnode / Cnblogs │
│ → one adapter function per platform │
├──────────────────────────────────────────────────────┤
│ Layer 4: Ledger │
│ → publication-ledger, URL registry for every platform│
│ → new platform = one new row │
└──────────────────────────────────────────────────────┘
The first two layers answer "how the system is trusted"; the last two answer "how the system is copied." Let's take them apart, mapped to the three-step leap.
4. Step 1: Configuration — Pull "You" Out of the Code
Let's start with the hardest pitfall: credentials and parameters hard-coded in the code are the first lock on a copyable system.
Early scripts looked like this: platform tokens written at the top of the file. Changing an account means changing code and re-running the release flow — and if the code leaks, the credentials leak with it. The cure is exactly one action: move configuration out of the code.
First, create the platforms.env config file:
# platforms.env - one line per platform, one file for all platforms
# change account = edit this file, not the code
DEVTO_API_KEY=xxxx
HASHNODE_TOKEN=xxxx
HASHNODE_PUB_ID=6a6d64167b082815e6b87962
Second, write one unified loader — the code only knows environment variables, never hard-coded values:
# multi_publish.py - load credentials from config file
def load_creds():
env = {}
with open('/etc/opc/platforms.env') as f:
for line in f:
line = line.strip()
if not line or line.startswith('#') or '=' not in line:
continue
k, v = line.split('=', 1)
env[k.strip()] = v.strip().strip("'\"")
return env
Verification: delete the hard-coded credentials from the script, keep only load_creds(), and run the first gate of the publishing pipeline. The output must be exactly the same as with hard-coded values.
Pitfall: config parsing is stricter than you'd expect. Empty lines, comment lines, and quoted values — all three must be handled, or it breaks the moment you move to another machine. The startswith('#') and strip("'\"") lines above exist precisely for those three cases.
Direct value: adopting your system no longer means changing code — it means copying a config file: open platforms.env, write in the new platform's credentials, and not a single line of code changes. New person = new config, not new code.
Cognitive leap: configuration is the act of turning "the knowledge in your head" into "data a machine can read." For the first time, the system can be installed by someone else.
5. Step 2: Quality Gates — From Human Review to Machine Gates
Configuration answers "who can install it," but the next question is more lethal: when someone else uses your system, you can't hand-teach every user how an article should be written.
Early on we guarded quality with human review — and hit a real incident: an article already sitting in the draft box was missing the next-article hook, had non-compliant images, and its cover repeated the previous two articles. Human review caught none of it; only the release gate's full scan exposed all three. The flaw of human review is not lack of care — it's lack of reproducibility: on a good day you catch it, on a bad day you miss it.
The cure is to write quality checks as a physical pipeline. Run these 4 commands — all 4 gates are mandatory before any publish:
# physical pipeline - 4 gates before any publish
python3 validate_article.py check article-22.md
python3 check_series_continuity.py check
python3 article_checker.py article-22.md
python3 publish_gate.py article-22.md
Then modify the publish script so the gates sit in front of the publish command — anything that fails is physically blocked:
# publish_gate.py - core gate logic
import subprocess
from pathlib import Path
SCRIPTS_DIR = Path("/root/hermes-harness/scripts")
def run_validator(filepath):
result = subprocess.run(
["python3", str(SCRIPTS_DIR / "validate_article.py"), "check", filepath],
capture_output=True, text=True, timeout=30)
if result.returncode != 0:
return False
return True
Verification: deliberately delete the next-article hook from an article, run the release gate — the command returns non-zero and the publish is blocked. Restore the hook, run again, it passes.
Pitfall: the gate must be placed before the publish command, not "remembered" inside the flow. In front of the command is physical interception; after it is moral obligation. Physical interception never forgets.
Direct value: quality no longer depends on any individual. No matter how urgently the client pushes, the mechanism simply won't release what doesn't pass. Mechanisms don't get tired, and mechanisms have no moods.
Cognitive leap: quality gates are the act of turning "your standards" into "the machine's determinism." Once standards become code, the system can be safely used by someone else.
6. Step 3: Productization — Adapters + Ledger Turn the System into an Asset
Configuration makes it installable, gates make it usable — but "selling" needs one more step: the system must serve multiple platforms and multiple clients at once, with every platform's publish state queryable.
This step does two things: adapters make "platforms" pluggable, and the ledger makes "records" a data asset.
First, the adapters. One function per platform, uniform input, platform-specific output:
# multi_publish.py - adapter pattern, one function per platform
def publish_hashnode(title, body_md, tags, token, pub_id):
# check duplicate before publish - prevent double post on retry
if hashnode_title_exists(title, token, pub_id):
return f"SKIPPED (duplicate): {title}"
create_q = "mutation CreateDraft($input: CreateDraftInput!) { createDraft(input: $input) { draft { id } } }"
# then call publishDraft with the returned draft id
That duplicate check is not a nice-to-have — it was paid for by a real incident. Early on, the API returned "Draft not found," we assumed it was a failure and retried, but the article had actually published — the same title appeared twice on the platform. Checking for duplicates before publishing is the lowest baseline of an adapter.
Second, the ledger. One file manages all platforms, one row per article:
# publication-ledger.md - one row per article per platform
| # | Title | WeChat | Cnblogs | Dev.to | Hashnode | First published |
|:-:|:------|:-------|:-------|:-------|:---------|:---------|
| B6 | Selling the System | Draft | /p/xxx | dev.to/xxx | hashnode.dev/xxx | 2026-08-07 |
Verification: connect a new platform — write one adapter function, add one ledger row, publish once, and the ledger shows the URL. The loop is closed.
Pitfall: the ledger must be updated the moment a publish completes — never batch it. We paid three times for "published but not registered": articles went live on overseas platforms while the queue had no row, so the distribution job never saw them and never backfilled. The publish action and the record action must be bound into the same step.
Direct value: adding a new platform is one adapter function plus one ledger row. The system goes from "a script" to "an asset list plus a replication process."
Cognitive leap: productization is the act of turning "process" into "asset." Adapters are pluggable interfaces; the ledger is an auditable record — for the first time, someone else can take over the system.
7. Before vs After: Human Company vs System Company
| Area | Human company | System company |
|---|---|---|
| New client | rewrite the code | copy a config file |
| Quality control | your eyeballs | 4 machine gates |
| Publish record | in your head | ledger, queryable and auditable |
| New platform | research from scratch | write one adapter |
| Scaling limit | your time and energy | the system's throughput |
8. Deeper: A Replicable System Is a Trust Mechanism
Many people think "selling the system" means packaging the code, selling it once, and collecting a fee. That direction is wrong.
A system company doesn't sell code — it sells certainty. A client dares to use your system not because you personally are reliable, but because the mechanism guarantees "no matter who uses it, it won't drift":
- Machine gates = certainty of quality: no matter who the user is, non-compliant output never enters the publish pipeline
- Ledger = certainty of process: any article, where it was published, and when — all queryable
- Adapters = certainty of platforms: new platform integration follows a fixed pattern, not one person's experience
One level deeper, this is the endgame of Loop Engineering: make "copying the system" itself a closed loop. Every copy delivered to a new client returns real feedback — which platform broke, which gate over-blocked, which adapter needs upgrading. The feedback flows back into the system, and the next copy is a little more complete.
The compounding is right here: build once, copy N times, and every copy is incremental feedback. From "selling time" to "selling systems," then from "selling systems" to "selling evolution" — the latter is what a real system company does.
9. Summary: Three Things You Can Start Today
Reviewing the three-step leap:
-
Configuration:
platforms.env+load_creds()— move credentials out of code -
Quality gates:
validate → continuity → checker → gate, four physical pipelines -
Productization: one adapter per platform + a
publication-ledger
Don't wait for someone to ask "can you build me one too?" Do three things today: move your credentials into a config file; put a verify script in front of the publish command; create a ledger file that records publish state across all platforms.
After these three, your system goes from "your system" to "a sellable system" — the last piece of the OPC series, and the first foundation stone of a system company.
Next article: a new series — Digital Transformation in Practice
Series 2 is complete. One person's system methodology is now whole: from the architecture blueprint to the content factory, from smart customer service to unattended operations, from A/B testing to a replicable system. But no matter how strong one person is, it is still one person. Starting next article, we pull the lens from "one person" to "one organization" — the first article of the Digital Transformation in Practice series: how does one person's methodology migrate to a team?
About the author: Wu Ji (无记) — AI & digitalization practitioner focused on Agent engineering, Loop Engineering, and digital transformation. Practical, hands-on tutorials — follow along and it just works.


Top comments (0)