mainbranch 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- mainbranch-0.1.0/LICENSE +21 -0
- mainbranch-0.1.0/PKG-INFO +98 -0
- mainbranch-0.1.0/README.md +40 -0
- mainbranch-0.1.0/mainbranch.egg-info/PKG-INFO +98 -0
- mainbranch-0.1.0/mainbranch.egg-info/SOURCES.txt +41 -0
- mainbranch-0.1.0/mainbranch.egg-info/dependency_links.txt +1 -0
- mainbranch-0.1.0/mainbranch.egg-info/entry_points.txt +2 -0
- mainbranch-0.1.0/mainbranch.egg-info/requires.txt +13 -0
- mainbranch-0.1.0/mainbranch.egg-info/top_level.txt +1 -0
- mainbranch-0.1.0/mb/__init__.py +12 -0
- mainbranch-0.1.0/mb/__main__.py +14 -0
- mainbranch-0.1.0/mb/_data/educational/anti-cloud-backup.md +86 -0
- mainbranch-0.1.0/mb/_data/educational/cloudflare-vs-vercel.md +66 -0
- mainbranch-0.1.0/mb/_data/educational/github-vs-gdocs.md +85 -0
- mainbranch-0.1.0/mb/_data/fixtures/acme-brewing/CLAUDE.md +4 -0
- mainbranch-0.1.0/mb/_data/fixtures/acme-brewing/core/offer.md +9 -0
- mainbranch-0.1.0/mb/_data/fixtures/acme-brewing/decisions/2026-04-29-launch-flagship.md +9 -0
- mainbranch-0.1.0/mb/_data/fixtures/acme-brewing/research/2026-04-20-craft-beer-trends.md +9 -0
- mainbranch-0.1.0/mb/_data/playbooks/ship-bet/SKILL.md +52 -0
- mainbranch-0.1.0/mb/_data/playbooks/weekly-review/SKILL.md +45 -0
- mainbranch-0.1.0/mb/_data/skills/ads/SKILL.md +350 -0
- mainbranch-0.1.0/mb/_data/skills/ads/references/entry-points.md +184 -0
- mainbranch-0.1.0/mb/_data/skills/ads/references/image-generation-workflow.md +355 -0
- mainbranch-0.1.0/mb/_data/skills/ads/references/image-prompt-templates.md +202 -0
- mainbranch-0.1.0/mb/_data/skills/ads/references/mode-hook-library.md +112 -0
- mainbranch-0.1.0/mb/_data/skills/ads/references/mode-review.md +54 -0
- mainbranch-0.1.0/mb/_data/skills/ads/references/mode-static-ads.md +89 -0
- mainbranch-0.1.0/mb/_data/skills/ads/references/mode-video-scripts.md +51 -0
- mainbranch-0.1.0/mb/_data/skills/ads/references/one-liner-examples.md +165 -0
- mainbranch-0.1.0/mb/_data/skills/ads/references/one-liner-methodology.md +445 -0
- mainbranch-0.1.0/mb/_data/skills/ads/references/pipeboard-integration.md +261 -0
- mainbranch-0.1.0/mb/_data/skills/ads/references/post-generation-pipeline.md +152 -0
- mainbranch-0.1.0/mb/_data/skills/ads/references/preflight-algorithm.md +201 -0
- mainbranch-0.1.0/mb/_data/skills/ads/references/review-workflow.md +166 -0
- mainbranch-0.1.0/mb/_data/skills/ads/references/static-output-template.md +248 -0
- mainbranch-0.1.0/mb/_data/skills/ads/references/video-templates-hooks.md +99 -0
- mainbranch-0.1.0/mb/_data/skills/end/SKILL.md +376 -0
- mainbranch-0.1.0/mb/_data/skills/end/references/crystallize-agent.md +331 -0
- mainbranch-0.1.0/mb/_data/skills/end/references/decision-lifecycle-audit.md +69 -0
- mainbranch-0.1.0/mb/_data/skills/help/SKILL.md +85 -0
- mainbranch-0.1.0/mb/_data/skills/help/references/becoming-contributor.md +152 -0
- mainbranch-0.1.0/mb/_data/skills/help/references/conductor-setup.md +148 -0
- mainbranch-0.1.0/mb/_data/skills/help/references/content-strategy-help.md +151 -0
- mainbranch-0.1.0/mb/_data/skills/help/references/gpt-migration.md +155 -0
- mainbranch-0.1.0/mb/_data/skills/help/references/making-outputs-better.md +155 -0
- mainbranch-0.1.0/mb/_data/skills/help/references/organic-help.md +231 -0
- mainbranch-0.1.0/mb/_data/skills/help/references/philosophy.md +112 -0
- mainbranch-0.1.0/mb/_data/skills/help/references/skills-guide.md +297 -0
- mainbranch-0.1.0/mb/_data/skills/help/references/skool-help.md +128 -0
- mainbranch-0.1.0/mb/_data/skills/help/references/task-tracking-options.md +212 -0
- mainbranch-0.1.0/mb/_data/skills/help/references/terminal-basics.md +171 -0
- mainbranch-0.1.0/mb/_data/skills/help/references/the-think-cycle.md +211 -0
- mainbranch-0.1.0/mb/_data/skills/help/references/troubleshooting.md +298 -0
- mainbranch-0.1.0/mb/_data/skills/help/references/two-repos.md +90 -0
- mainbranch-0.1.0/mb/_data/skills/help/references/working-with-agents.md +91 -0
- mainbranch-0.1.0/mb/_data/skills/organic/SKILL.md +311 -0
- mainbranch-0.1.0/mb/_data/skills/organic/references/apify-discovery.md +135 -0
- mainbranch-0.1.0/mb/_data/skills/organic/references/apify-setup.md +130 -0
- mainbranch-0.1.0/mb/_data/skills/organic/references/carousel-template.md +498 -0
- mainbranch-0.1.0/mb/_data/skills/organic/references/examples.md +73 -0
- mainbranch-0.1.0/mb/_data/skills/organic/references/first-time-setup.md +153 -0
- mainbranch-0.1.0/mb/_data/skills/organic/references/minimal-voice-template.md +188 -0
- mainbranch-0.1.0/mb/_data/skills/organic/references/mining-methodology.md +54 -0
- mainbranch-0.1.0/mb/_data/skills/organic/references/mining-template.md +329 -0
- mainbranch-0.1.0/mb/_data/skills/organic/references/organic-frameworks.md +465 -0
- mainbranch-0.1.0/mb/_data/skills/organic/references/static-template.md +389 -0
- mainbranch-0.1.0/mb/_data/skills/organic/references/video-script-template.md +313 -0
- mainbranch-0.1.0/mb/_data/skills/pull/SKILL.md +132 -0
- mainbranch-0.1.0/mb/_data/skills/setup/SKILL.md +398 -0
- mainbranch-0.1.0/mb/_data/skills/setup/references/claude-md-guide.md +211 -0
- mainbranch-0.1.0/mb/_data/skills/setup/references/context-gathering.md +129 -0
- mainbranch-0.1.0/mb/_data/skills/setup/references/cwd-detection.md +223 -0
- mainbranch-0.1.0/mb/_data/skills/setup/references/file-education.md +67 -0
- mainbranch-0.1.0/mb/_data/skills/setup/references/git-workflow.md +252 -0
- mainbranch-0.1.0/mb/_data/skills/setup/references/migration-multi-offer.md +72 -0
- mainbranch-0.1.0/mb/_data/skills/setup/references/nano-banana-setup.md +142 -0
- mainbranch-0.1.0/mb/_data/skills/setup/references/repo-scaffolding.md +207 -0
- mainbranch-0.1.0/mb/_data/skills/setup/references/templates.md +605 -0
- mainbranch-0.1.0/mb/_data/skills/site/SKILL.md +310 -0
- mainbranch-0.1.0/mb/_data/skills/site/references/anti-patterns.md +161 -0
- mainbranch-0.1.0/mb/_data/skills/site/references/archetypes/broken-hero.md +46 -0
- mainbranch-0.1.0/mb/_data/skills/site/references/archetypes/dark-hero.md +79 -0
- mainbranch-0.1.0/mb/_data/skills/site/references/archetypes/david-goliath.md +49 -0
- mainbranch-0.1.0/mb/_data/skills/site/references/archetypes/redemption.md +93 -0
- mainbranch-0.1.0/mb/_data/skills/site/references/archetypes/savior.md +46 -0
- mainbranch-0.1.0/mb/_data/skills/site/references/archetypes/tragedy-mindset.md +81 -0
- mainbranch-0.1.0/mb/_data/skills/site/references/archetypes/tragic-comedy.md +90 -0
- mainbranch-0.1.0/mb/_data/skills/site/references/archetypes/victim.md +75 -0
- mainbranch-0.1.0/mb/_data/skills/site/references/archetypes/wounded-healer.md +50 -0
- mainbranch-0.1.0/mb/_data/skills/site/references/archetypes.md +45 -0
- mainbranch-0.1.0/mb/_data/skills/site/references/cloudflare-pages-link.md +59 -0
- mainbranch-0.1.0/mb/_data/skills/site/references/concept-variations.md +97 -0
- mainbranch-0.1.0/mb/_data/skills/site/references/deployment.md +224 -0
- mainbranch-0.1.0/mb/_data/skills/site/references/examples-and-troubleshooting.md +134 -0
- mainbranch-0.1.0/mb/_data/skills/site/references/frontend-design.md +315 -0
- mainbranch-0.1.0/mb/_data/skills/site/references/graduation.md +124 -0
- mainbranch-0.1.0/mb/_data/skills/site/references/headline-formulas.md +80 -0
- mainbranch-0.1.0/mb/_data/skills/site/references/lander-build.md +30 -0
- mainbranch-0.1.0/mb/_data/skills/site/references/minisite-build.md +405 -0
- mainbranch-0.1.0/mb/_data/skills/site/references/minisite-generation-system.md +185 -0
- mainbranch-0.1.0/mb/_data/skills/site/references/naming-heuristic.md +101 -0
- mainbranch-0.1.0/mb/_data/skills/site/references/review.md +74 -0
- mainbranch-0.1.0/mb/_data/skills/site/references/section-patterns.md +347 -0
- mainbranch-0.1.0/mb/_data/skills/site/references/website-build.md +265 -0
- mainbranch-0.1.0/mb/_data/skills/site/scripts/.gitignore +3 -0
- mainbranch-0.1.0/mb/_data/skills/site/scripts/_envelope.py +85 -0
- mainbranch-0.1.0/mb/_data/skills/site/scripts/dns.py +611 -0
- mainbranch-0.1.0/mb/_data/skills/site/scripts/domain.py +430 -0
- mainbranch-0.1.0/mb/_data/skills/site/scripts/init-site.sh +153 -0
- mainbranch-0.1.0/mb/_data/skills/site/scripts/og_render.py +372 -0
- mainbranch-0.1.0/mb/_data/skills/site/scripts/pages.py +976 -0
- mainbranch-0.1.0/mb/_data/skills/site/scripts/setup_creds.sh +100 -0
- mainbranch-0.1.0/mb/_data/skills/site/scripts/stripe.py +870 -0
- mainbranch-0.1.0/mb/_data/skills/site/scripts/test_atoms.py +1370 -0
- mainbranch-0.1.0/mb/_data/skills/site/scripts/verify_live.py +329 -0
- mainbranch-0.1.0/mb/_data/skills/skill-brief-draft/SKILL.md +57 -0
- mainbranch-0.1.0/mb/_data/skills/skill-concept/SKILL.md +39 -0
- mainbranch-0.1.0/mb/_data/skills/skill-review/SKILL.md +58 -0
- mainbranch-0.1.0/mb/_data/skills/start/SKILL.md +355 -0
- mainbranch-0.1.0/mb/_data/skills/start/references/auto-heal.md +155 -0
- mainbranch-0.1.0/mb/_data/skills/start/references/config-system.md +324 -0
- mainbranch-0.1.0/mb/_data/skills/start/references/mcp-preflight.md +112 -0
- mainbranch-0.1.0/mb/_data/skills/start/references/readiness-assessment.md +636 -0
- mainbranch-0.1.0/mb/_data/skills/start/references/repo-detection.md +159 -0
- mainbranch-0.1.0/mb/_data/skills/start/references/tool-status-audit.md +42 -0
- mainbranch-0.1.0/mb/_data/skills/start/references/triage-agent.md +593 -0
- mainbranch-0.1.0/mb/_data/skills/start/references/triage-menu.md +90 -0
- mainbranch-0.1.0/mb/_data/skills/think/SKILL.md +408 -0
- mainbranch-0.1.0/mb/_data/skills/think/references/codify-phase.md +238 -0
- mainbranch-0.1.0/mb/_data/skills/think/references/decide-phase.md +177 -0
- mainbranch-0.1.0/mb/_data/skills/think/references/document-ingestion.md +159 -0
- mainbranch-0.1.0/mb/_data/skills/think/references/gemini-deep-research.md +494 -0
- mainbranch-0.1.0/mb/_data/skills/think/references/gemini-setup.md +174 -0
- mainbranch-0.1.0/mb/_data/skills/think/references/grok-setup.md +247 -0
- mainbranch-0.1.0/mb/_data/skills/think/references/grok-social.md +443 -0
- mainbranch-0.1.0/mb/_data/skills/think/references/local-transcription.md +181 -0
- mainbranch-0.1.0/mb/_data/skills/think/references/recovery.md +116 -0
- mainbranch-0.1.0/mb/_data/skills/think/references/research-architecture.md +675 -0
- mainbranch-0.1.0/mb/_data/skills/think/references/research-phase.md +374 -0
- mainbranch-0.1.0/mb/_data/skills/think/references/research-routing-quick-ref.md +174 -0
- mainbranch-0.1.0/mb/_data/skills/think/references/templates/decision-template.md +278 -0
- mainbranch-0.1.0/mb/_data/skills/think/references/templates/research-template.md +252 -0
- mainbranch-0.1.0/mb/_data/skills/think/references/tool-detection.md +131 -0
- mainbranch-0.1.0/mb/_data/skills/think/references/tool-status-self-healing.md +91 -0
- mainbranch-0.1.0/mb/_data/skills/think/references/tool-surfacing.md +256 -0
- mainbranch-0.1.0/mb/_data/skills/think/scripts/detect-tools.sh +93 -0
- mainbranch-0.1.0/mb/_data/skills/vsl/SKILL.md +203 -0
- mainbranch-0.1.0/mb/_data/skills/vsl/references/examples/b2b-ijanitorial.md +226 -0
- mainbranch-0.1.0/mb/_data/skills/vsl/references/frameworks/b2b-haynes.md +315 -0
- mainbranch-0.1.0/mb/_data/skills/vsl/references/frameworks/skool-18-section.md +473 -0
- mainbranch-0.1.0/mb/_data/skills/wiki/SKILL.md +375 -0
- mainbranch-0.1.0/mb/_data/skills/wiki/references/cloudflare-pages-setup.md +106 -0
- mainbranch-0.1.0/mb/_data/skills/wiki/references/customization.md +95 -0
- mainbranch-0.1.0/mb/_data/skills/wiki/references/hosting-recommendation.md +50 -0
- mainbranch-0.1.0/mb/_data/skills/wiki/references/note-template.md +189 -0
- mainbranch-0.1.0/mb/_data/skills/wiki/references/research-format.md +249 -0
- mainbranch-0.1.0/mb/_data/skills/wiki/references/setup-mode.md +131 -0
- mainbranch-0.1.0/mb/_data/skills/wiki/references/updates-template.md +137 -0
- mainbranch-0.1.0/mb/_data/stubs/audience.md +24 -0
- mainbranch-0.1.0/mb/_data/stubs/offer.md +25 -0
- mainbranch-0.1.0/mb/_data/stubs/soul.md +17 -0
- mainbranch-0.1.0/mb/_data/stubs/voice.md +34 -0
- mainbranch-0.1.0/mb/_data/templates/CLAUDE.md.tmpl +40 -0
- mainbranch-0.1.0/mb/_data/templates/CODEOWNERS.tmpl +5 -0
- mainbranch-0.1.0/mb/cli.py +195 -0
- mainbranch-0.1.0/mb/doctor.py +183 -0
- mainbranch-0.1.0/mb/educational.py +53 -0
- mainbranch-0.1.0/mb/graph.py +122 -0
- mainbranch-0.1.0/mb/init.py +193 -0
- mainbranch-0.1.0/mb/py.typed +0 -0
- mainbranch-0.1.0/mb/resolve.py +131 -0
- mainbranch-0.1.0/mb/think.py +31 -0
- mainbranch-0.1.0/mb/validate.py +140 -0
- mainbranch-0.1.0/pyproject.toml +99 -0
- mainbranch-0.1.0/setup.cfg +4 -0
- mainbranch-0.1.0/setup.py +46 -0
- mainbranch-0.1.0/tests/test_cli.py +28 -0
- mainbranch-0.1.0/tests/test_doctor.py +37 -0
- mainbranch-0.1.0/tests/test_graph.py +30 -0
- mainbranch-0.1.0/tests/test_init.py +35 -0
- mainbranch-0.1.0/tests/test_resolve.py +25 -0
- mainbranch-0.1.0/tests/test_smoke_coverage.py +171 -0
- mainbranch-0.1.0/tests/test_validate.py +52 -0
mainbranch-0.1.0/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Noontide / Devon Meadows
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: mainbranch
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Main Branch engine umbrella - scaffolds, validates, and graphs business-as-files repos. Built for Claude Code.
|
|
5
|
+
Author-email: Devon Meadows <devon@noontide.co>
|
|
6
|
+
License: MIT License
|
|
7
|
+
|
|
8
|
+
Copyright (c) 2026 Noontide / Devon Meadows
|
|
9
|
+
|
|
10
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
11
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
12
|
+
in the Software without restriction, including without limitation the rights
|
|
13
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
14
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
15
|
+
furnished to do so, subject to the following conditions:
|
|
16
|
+
|
|
17
|
+
The above copyright notice and this permission notice shall be included in all
|
|
18
|
+
copies or substantial portions of the Software.
|
|
19
|
+
|
|
20
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
21
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
22
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
23
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
24
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
25
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
26
|
+
SOFTWARE.
|
|
27
|
+
|
|
28
|
+
Project-URL: Homepage, https://github.com/noontide-co/mainbranch
|
|
29
|
+
Project-URL: Repository, https://github.com/noontide-co/mainbranch
|
|
30
|
+
Project-URL: Issues, https://github.com/noontide-co/mainbranch/issues
|
|
31
|
+
Keywords: cli,business-as-files,claude-code,skills,scaffolding
|
|
32
|
+
Classifier: Development Status :: 3 - Alpha
|
|
33
|
+
Classifier: Environment :: Console
|
|
34
|
+
Classifier: Intended Audience :: Developers
|
|
35
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
36
|
+
Classifier: Operating System :: OS Independent
|
|
37
|
+
Classifier: Programming Language :: Python :: 3
|
|
38
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
39
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
40
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
41
|
+
Classifier: Topic :: Software Development :: Libraries
|
|
42
|
+
Classifier: Topic :: Utilities
|
|
43
|
+
Requires-Python: >=3.10
|
|
44
|
+
Description-Content-Type: text/markdown
|
|
45
|
+
License-File: LICENSE
|
|
46
|
+
Requires-Dist: typer>=0.12
|
|
47
|
+
Requires-Dist: pyyaml>=6.0
|
|
48
|
+
Requires-Dist: rich>=13.0
|
|
49
|
+
Provides-Extra: ogrender
|
|
50
|
+
Requires-Dist: cairosvg>=2.7; extra == "ogrender"
|
|
51
|
+
Provides-Extra: dev
|
|
52
|
+
Requires-Dist: ruff~=0.6; extra == "dev"
|
|
53
|
+
Requires-Dist: mypy~=1.10; extra == "dev"
|
|
54
|
+
Requires-Dist: pytest~=8.0; extra == "dev"
|
|
55
|
+
Requires-Dist: pytest-cov~=5.0; extra == "dev"
|
|
56
|
+
Requires-Dist: types-PyYAML; extra == "dev"
|
|
57
|
+
Dynamic: license-file
|
|
58
|
+
|
|
59
|
+
# mainbranch (`mb`)
|
|
60
|
+
|
|
61
|
+
Engine umbrella for [Main Branch](https://github.com/noontide-co/mainbranch) — scaffolds, validates, and graphs business-as-files repos.
|
|
62
|
+
|
|
63
|
+
This package is the Python entry point. Skills, playbooks, educational content, and consumer-repo templates ship as bundled package data. The actual day-to-day "do work" surfaces are Claude Code skills (markdown), invoked from inside Claude Code.
|
|
64
|
+
|
|
65
|
+
The source tree keeps skills and playbooks in one place: repo-root `.claude/skills/` and `.claude/playbooks/`. During sdist/wheel builds, `setup.py` copies those directories into `mb/_data/skills/` and `mb/_data/playbooks/` inside the build artifact so installed wheels can resolve `mb skill list` without a source checkout.
|
|
66
|
+
|
|
67
|
+
## Install
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
pipx install mainbranch
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
That puts `mb` on your PATH. Verify:
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
mb --version
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
## Subcommands (v0.1)
|
|
80
|
+
|
|
81
|
+
| Command | What it does |
|
|
82
|
+
|---|---|
|
|
83
|
+
| `mb init` | Scaffold a new business repo (six folders, CLAUDE.md, CODEOWNERS, `git init`). One question only: business name. |
|
|
84
|
+
| `mb doctor` | Diagnostic. Checks Claude Code, gh auth, network, librsvg. Warns on cloud-backed finance paths and offers educational triage. |
|
|
85
|
+
| `mb validate` | Frontmatter shape check across `decisions/`, `core/offers/`, `research/`, `log/`, `campaigns/`, `documents/`. Exit 1 on any fail. |
|
|
86
|
+
| `mb graph` | Walk linked_research / linked_decisions / supersedes; emit Graphviz DOT to stdout. `--open` shells to `dot` + `open`. |
|
|
87
|
+
| `mb think <topic>` | Print the /think skill invocation hint for Claude Code (or run inside a session). |
|
|
88
|
+
| `mb resolve <key>` | Resolve a reference path through the OSS / paid layered lookup. |
|
|
89
|
+
| `mb skill path <name>` | Print the on-disk path to a bundled skill. |
|
|
90
|
+
| `mb educational <topic>` | Print an educational triage file. Powers `mb doctor`'s "tell me more" prompts. |
|
|
91
|
+
|
|
92
|
+
## Status
|
|
93
|
+
|
|
94
|
+
v0.1 is **Built for Claude Code only**. Cross-agent compatibility is a v0.2+ commitment. The schema is v1 and will evolve. The engine decision lives at `decisions/2026-04-29-mb-vip-v0-1-0-master.md`; the business-side master plan is tracked in `noontide-co/projects#119`.
|
|
95
|
+
|
|
96
|
+
## License
|
|
97
|
+
|
|
98
|
+
MIT.
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# mainbranch (`mb`)
|
|
2
|
+
|
|
3
|
+
Engine umbrella for [Main Branch](https://github.com/noontide-co/mainbranch) — scaffolds, validates, and graphs business-as-files repos.
|
|
4
|
+
|
|
5
|
+
This package is the Python entry point. Skills, playbooks, educational content, and consumer-repo templates ship as bundled package data. The actual day-to-day "do work" surfaces are Claude Code skills (markdown), invoked from inside Claude Code.
|
|
6
|
+
|
|
7
|
+
The source tree keeps skills and playbooks in one place: repo-root `.claude/skills/` and `.claude/playbooks/`. During sdist/wheel builds, `setup.py` copies those directories into `mb/_data/skills/` and `mb/_data/playbooks/` inside the build artifact so installed wheels can resolve `mb skill list` without a source checkout.
|
|
8
|
+
|
|
9
|
+
## Install
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
pipx install mainbranch
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
That puts `mb` on your PATH. Verify:
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
mb --version
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Subcommands (v0.1)
|
|
22
|
+
|
|
23
|
+
| Command | What it does |
|
|
24
|
+
|---|---|
|
|
25
|
+
| `mb init` | Scaffold a new business repo (six folders, CLAUDE.md, CODEOWNERS, `git init`). One question only: business name. |
|
|
26
|
+
| `mb doctor` | Diagnostic. Checks Claude Code, gh auth, network, librsvg. Warns on cloud-backed finance paths and offers educational triage. |
|
|
27
|
+
| `mb validate` | Frontmatter shape check across `decisions/`, `core/offers/`, `research/`, `log/`, `campaigns/`, `documents/`. Exit 1 on any fail. |
|
|
28
|
+
| `mb graph` | Walk linked_research / linked_decisions / supersedes; emit Graphviz DOT to stdout. `--open` shells to `dot` + `open`. |
|
|
29
|
+
| `mb think <topic>` | Print the /think skill invocation hint for Claude Code (or run inside a session). |
|
|
30
|
+
| `mb resolve <key>` | Resolve a reference path through the OSS / paid layered lookup. |
|
|
31
|
+
| `mb skill path <name>` | Print the on-disk path to a bundled skill. |
|
|
32
|
+
| `mb educational <topic>` | Print an educational triage file. Powers `mb doctor`'s "tell me more" prompts. |
|
|
33
|
+
|
|
34
|
+
## Status
|
|
35
|
+
|
|
36
|
+
v0.1 is **Built for Claude Code only**. Cross-agent compatibility is a v0.2+ commitment. The schema is v1 and will evolve. The engine decision lives at `decisions/2026-04-29-mb-vip-v0-1-0-master.md`; the business-side master plan is tracked in `noontide-co/projects#119`.
|
|
37
|
+
|
|
38
|
+
## License
|
|
39
|
+
|
|
40
|
+
MIT.
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: mainbranch
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Main Branch engine umbrella - scaffolds, validates, and graphs business-as-files repos. Built for Claude Code.
|
|
5
|
+
Author-email: Devon Meadows <devon@noontide.co>
|
|
6
|
+
License: MIT License
|
|
7
|
+
|
|
8
|
+
Copyright (c) 2026 Noontide / Devon Meadows
|
|
9
|
+
|
|
10
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
11
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
12
|
+
in the Software without restriction, including without limitation the rights
|
|
13
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
14
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
15
|
+
furnished to do so, subject to the following conditions:
|
|
16
|
+
|
|
17
|
+
The above copyright notice and this permission notice shall be included in all
|
|
18
|
+
copies or substantial portions of the Software.
|
|
19
|
+
|
|
20
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
21
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
22
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
23
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
24
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
25
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
26
|
+
SOFTWARE.
|
|
27
|
+
|
|
28
|
+
Project-URL: Homepage, https://github.com/noontide-co/mainbranch
|
|
29
|
+
Project-URL: Repository, https://github.com/noontide-co/mainbranch
|
|
30
|
+
Project-URL: Issues, https://github.com/noontide-co/mainbranch/issues
|
|
31
|
+
Keywords: cli,business-as-files,claude-code,skills,scaffolding
|
|
32
|
+
Classifier: Development Status :: 3 - Alpha
|
|
33
|
+
Classifier: Environment :: Console
|
|
34
|
+
Classifier: Intended Audience :: Developers
|
|
35
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
36
|
+
Classifier: Operating System :: OS Independent
|
|
37
|
+
Classifier: Programming Language :: Python :: 3
|
|
38
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
39
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
40
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
41
|
+
Classifier: Topic :: Software Development :: Libraries
|
|
42
|
+
Classifier: Topic :: Utilities
|
|
43
|
+
Requires-Python: >=3.10
|
|
44
|
+
Description-Content-Type: text/markdown
|
|
45
|
+
License-File: LICENSE
|
|
46
|
+
Requires-Dist: typer>=0.12
|
|
47
|
+
Requires-Dist: pyyaml>=6.0
|
|
48
|
+
Requires-Dist: rich>=13.0
|
|
49
|
+
Provides-Extra: ogrender
|
|
50
|
+
Requires-Dist: cairosvg>=2.7; extra == "ogrender"
|
|
51
|
+
Provides-Extra: dev
|
|
52
|
+
Requires-Dist: ruff~=0.6; extra == "dev"
|
|
53
|
+
Requires-Dist: mypy~=1.10; extra == "dev"
|
|
54
|
+
Requires-Dist: pytest~=8.0; extra == "dev"
|
|
55
|
+
Requires-Dist: pytest-cov~=5.0; extra == "dev"
|
|
56
|
+
Requires-Dist: types-PyYAML; extra == "dev"
|
|
57
|
+
Dynamic: license-file
|
|
58
|
+
|
|
59
|
+
# mainbranch (`mb`)
|
|
60
|
+
|
|
61
|
+
Engine umbrella for [Main Branch](https://github.com/noontide-co/mainbranch) — scaffolds, validates, and graphs business-as-files repos.
|
|
62
|
+
|
|
63
|
+
This package is the Python entry point. Skills, playbooks, educational content, and consumer-repo templates ship as bundled package data. The actual day-to-day "do work" surfaces are Claude Code skills (markdown), invoked from inside Claude Code.
|
|
64
|
+
|
|
65
|
+
The source tree keeps skills and playbooks in one place: repo-root `.claude/skills/` and `.claude/playbooks/`. During sdist/wheel builds, `setup.py` copies those directories into `mb/_data/skills/` and `mb/_data/playbooks/` inside the build artifact so installed wheels can resolve `mb skill list` without a source checkout.
|
|
66
|
+
|
|
67
|
+
## Install
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
pipx install mainbranch
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
That puts `mb` on your PATH. Verify:
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
mb --version
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
## Subcommands (v0.1)
|
|
80
|
+
|
|
81
|
+
| Command | What it does |
|
|
82
|
+
|---|---|
|
|
83
|
+
| `mb init` | Scaffold a new business repo (six folders, CLAUDE.md, CODEOWNERS, `git init`). One question only: business name. |
|
|
84
|
+
| `mb doctor` | Diagnostic. Checks Claude Code, gh auth, network, librsvg. Warns on cloud-backed finance paths and offers educational triage. |
|
|
85
|
+
| `mb validate` | Frontmatter shape check across `decisions/`, `core/offers/`, `research/`, `log/`, `campaigns/`, `documents/`. Exit 1 on any fail. |
|
|
86
|
+
| `mb graph` | Walk linked_research / linked_decisions / supersedes; emit Graphviz DOT to stdout. `--open` shells to `dot` + `open`. |
|
|
87
|
+
| `mb think <topic>` | Print the /think skill invocation hint for Claude Code (or run inside a session). |
|
|
88
|
+
| `mb resolve <key>` | Resolve a reference path through the OSS / paid layered lookup. |
|
|
89
|
+
| `mb skill path <name>` | Print the on-disk path to a bundled skill. |
|
|
90
|
+
| `mb educational <topic>` | Print an educational triage file. Powers `mb doctor`'s "tell me more" prompts. |
|
|
91
|
+
|
|
92
|
+
## Status
|
|
93
|
+
|
|
94
|
+
v0.1 is **Built for Claude Code only**. Cross-agent compatibility is a v0.2+ commitment. The schema is v1 and will evolve. The engine decision lives at `decisions/2026-04-29-mb-vip-v0-1-0-master.md`; the business-side master plan is tracked in `noontide-co/projects#119`.
|
|
95
|
+
|
|
96
|
+
## License
|
|
97
|
+
|
|
98
|
+
MIT.
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
LICENSE
|
|
2
|
+
README.md
|
|
3
|
+
pyproject.toml
|
|
4
|
+
setup.py
|
|
5
|
+
mainbranch.egg-info/PKG-INFO
|
|
6
|
+
mainbranch.egg-info/SOURCES.txt
|
|
7
|
+
mainbranch.egg-info/dependency_links.txt
|
|
8
|
+
mainbranch.egg-info/entry_points.txt
|
|
9
|
+
mainbranch.egg-info/requires.txt
|
|
10
|
+
mainbranch.egg-info/top_level.txt
|
|
11
|
+
mb/__init__.py
|
|
12
|
+
mb/__main__.py
|
|
13
|
+
mb/cli.py
|
|
14
|
+
mb/doctor.py
|
|
15
|
+
mb/educational.py
|
|
16
|
+
mb/graph.py
|
|
17
|
+
mb/init.py
|
|
18
|
+
mb/py.typed
|
|
19
|
+
mb/resolve.py
|
|
20
|
+
mb/think.py
|
|
21
|
+
mb/validate.py
|
|
22
|
+
mb/_data/educational/anti-cloud-backup.md
|
|
23
|
+
mb/_data/educational/cloudflare-vs-vercel.md
|
|
24
|
+
mb/_data/educational/github-vs-gdocs.md
|
|
25
|
+
mb/_data/fixtures/acme-brewing/CLAUDE.md
|
|
26
|
+
mb/_data/fixtures/acme-brewing/core/offer.md
|
|
27
|
+
mb/_data/fixtures/acme-brewing/decisions/2026-04-29-launch-flagship.md
|
|
28
|
+
mb/_data/fixtures/acme-brewing/research/2026-04-20-craft-beer-trends.md
|
|
29
|
+
mb/_data/stubs/audience.md
|
|
30
|
+
mb/_data/stubs/offer.md
|
|
31
|
+
mb/_data/stubs/soul.md
|
|
32
|
+
mb/_data/stubs/voice.md
|
|
33
|
+
mb/_data/templates/CLAUDE.md.tmpl
|
|
34
|
+
mb/_data/templates/CODEOWNERS.tmpl
|
|
35
|
+
tests/test_cli.py
|
|
36
|
+
tests/test_doctor.py
|
|
37
|
+
tests/test_graph.py
|
|
38
|
+
tests/test_init.py
|
|
39
|
+
tests/test_resolve.py
|
|
40
|
+
tests/test_smoke_coverage.py
|
|
41
|
+
tests/test_validate.py
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
mb
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"""Main Branch engine umbrella.
|
|
2
|
+
|
|
3
|
+
Public surface: ``mb.cli:app`` (Typer entry point installed as the ``mb``
|
|
4
|
+
console script). Submodules implement individual subcommands so the CLI
|
|
5
|
+
file stays a thin dispatcher.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from __future__ import annotations
|
|
9
|
+
|
|
10
|
+
__version__ = "0.1.0"
|
|
11
|
+
|
|
12
|
+
__all__ = ["__version__"]
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"""Allow ``python -m mb`` to run the Typer app."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from mb.cli import app
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
def main() -> None:
|
|
9
|
+
"""Entrypoint mirror of the ``mb`` console script."""
|
|
10
|
+
app()
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
if __name__ == "__main__":
|
|
14
|
+
main()
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: educational
|
|
3
|
+
topic: anti-cloud-backup
|
|
4
|
+
status: stub
|
|
5
|
+
last-updated: 2026-04-29
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Why your financial ledger doesn't belong in iCloud, Drive, or Dropbox
|
|
9
|
+
|
|
10
|
+
## Why we don't recommend consumer cloud sync
|
|
11
|
+
|
|
12
|
+
Consumer cloud sync products (iCloud Drive, Google Drive, Dropbox, OneDrive) are designed for convenience: a folder on your laptop that mirrors to a server you don't own. That convenience comes from defaults that are wrong for financial records.
|
|
13
|
+
|
|
14
|
+
First, **subpoena exposure**. Every major US cloud provider publishes a transparency report documenting thousands of warrants and subpoenas served against user data per year. iCloud Drive content is decryptable by Apple under standard legal process unless you've explicitly enabled Advanced Data Protection (still off by default in 2026). Google and Dropbox encrypt at rest with keys they hold. Your `core/finance/ledger.beancount` becomes a third-party record under the third-party doctrine the moment it touches their servers — which means the bar to access it is a subpoena, not a warrant.
|
|
15
|
+
|
|
16
|
+
Second, **encryption-at-rest is not end-to-end encryption**. Marketing copy on these products often blurs the line. "Encrypted at rest" means the disk is encrypted; the provider holds the key. Anyone who compels the provider — or breaches them — gets plaintext. Beancount files are plaintext. Account numbers, vendor names, transaction memos, headcount payroll details: all of it readable by anyone the provider hands the key to.
|
|
17
|
+
|
|
18
|
+
Third, **silent corruption and conflict resolution**. Dropbox famously creates `filename (Devon's Mac Studio's conflicted copy 2026-04-12).beancount` files when two devices touch a file at once. iCloud has truncated files mid-sync more than once in documented cases. For a ledger you are going to balance and audit, "the cloud quietly corrupted line 4,182" is not an acceptable failure mode.
|
|
19
|
+
|
|
20
|
+
Fourth, **vendor lock-in**. The day Dropbox raises prices, removes a feature, or terminates your account for a TOS dispute, your data is wherever they say it is. With self-hosted git you carry the repo to a new origin in one `git remote set-url`.
|
|
21
|
+
|
|
22
|
+
## What we recommend instead
|
|
23
|
+
|
|
24
|
+
A three-layer setup that keeps you in control:
|
|
25
|
+
|
|
26
|
+
1. **Forgejo** (self-hosted git) is the primary working copy. You commit to a repo on a server you own — a Mac mini in a closet, a Hetzner box, a Synology NAS running Docker. `git push` is the sync mechanism. Conflicts surface as merge conflicts, not silent overwrites.
|
|
27
|
+
2. **Backblaze B2** is the encrypted off-site backup. `restic` snapshots the working tree (and the Forgejo data dir) on a schedule. The encryption key lives on your machine; B2 holds ciphertext. Subpoenaed B2 hands over noise.
|
|
28
|
+
3. **Time Machine** is the local snapshot recovery. macOS already does this if you plug in an external drive. It saves you from "I just `rm -rf core/finance/`" within seconds, not hours.
|
|
29
|
+
|
|
30
|
+
The combination is cheaper than Dropbox Pro, gives you forensic git history, and keeps the encryption key out of any vendor's hands.
|
|
31
|
+
|
|
32
|
+
## Setup walkthrough
|
|
33
|
+
|
|
34
|
+
1. Stand up Forgejo on a machine you own. Easiest path is Docker on a home server:
|
|
35
|
+
```bash
|
|
36
|
+
docker run -d --name forgejo \
|
|
37
|
+
-p 3000:3000 -p 222:22 \
|
|
38
|
+
-v /opt/forgejo:/data \
|
|
39
|
+
codeberg.org/forgejo/forgejo:7
|
|
40
|
+
```
|
|
41
|
+
Visit `http://your-server.local:3000`, create the admin user, create a private repo named after your business.
|
|
42
|
+
|
|
43
|
+
2. Point your `core/finance/` directory at it:
|
|
44
|
+
```bash
|
|
45
|
+
cd ~/your-business
|
|
46
|
+
git init
|
|
47
|
+
git remote add origin git@your-server.local:devon/your-business.git
|
|
48
|
+
git add core/finance/
|
|
49
|
+
git commit -m "[init] finance ledger"
|
|
50
|
+
git push -u origin main
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
3. Install `restic` and configure a B2 bucket:
|
|
54
|
+
```bash
|
|
55
|
+
brew install restic
|
|
56
|
+
# Create a B2 application key with read+write on a new private bucket.
|
|
57
|
+
export B2_ACCOUNT_ID="<keyID>"
|
|
58
|
+
export B2_ACCOUNT_KEY="<applicationKey>"
|
|
59
|
+
export RESTIC_REPOSITORY="b2:your-bucket-name:/"
|
|
60
|
+
export RESTIC_PASSWORD="$(openssl rand -base64 32)" # WRITE THIS DOWN
|
|
61
|
+
restic init
|
|
62
|
+
```
|
|
63
|
+
Save `RESTIC_PASSWORD` somewhere offline (paper, hardware key, password manager you trust). Without it, the backup is unrecoverable — that is the point.
|
|
64
|
+
|
|
65
|
+
4. Schedule a daily snapshot via `launchd` (macOS) or `cron`:
|
|
66
|
+
```bash
|
|
67
|
+
restic backup ~/your-business --exclude='node_modules' --exclude='.venv'
|
|
68
|
+
restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 12 --prune
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
5. Confirm Time Machine is on and pointed at an external SSD. macOS does the rest.
|
|
72
|
+
|
|
73
|
+
6. Run a recovery drill once. Pick a non-critical file, delete it, and restore it from each of the three layers (`git checkout`, `restic restore`, Time Machine). If any layer fails the drill, fix it now, not when you actually need it.
|
|
74
|
+
|
|
75
|
+
Cost at typical scale: Forgejo on existing hardware is free. B2 storage runs roughly $6/TB/month, and a finance ledger plus business repo will sit comfortably under 1 GB for years. Total operating cost: under $1/month.
|
|
76
|
+
|
|
77
|
+
## Honest limitations
|
|
78
|
+
|
|
79
|
+
This stack does not solve **availability**. If your home server is offline, your collaborators can't push. If you travel and your laptop is lost, you're cloning from B2, which takes longer than a Dropbox sync. For a single-operator business the trade-off is fine; for a 5-person team you want a managed Forgejo or Gitea on a VPS instead of a closet box. It also requires you to remember the restic password — losing it loses the backup. A 30-second failover plan and a hardware-key-stored copy of the password is part of the deal.
|
|
80
|
+
|
|
81
|
+
## Resources
|
|
82
|
+
|
|
83
|
+
- Forgejo docs: https://forgejo.org/docs/
|
|
84
|
+
- Restic docs: https://restic.readthedocs.io/
|
|
85
|
+
- Backblaze B2 pricing: https://www.backblaze.com/cloud-storage/pricing
|
|
86
|
+
- Apple's "Government Information Requests" transparency report: https://www.apple.com/legal/transparency/
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: educational
|
|
3
|
+
topic: cloudflare-vs-vercel
|
|
4
|
+
status: stub
|
|
5
|
+
last-updated: 2026-04-29
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Why we ship sites on Cloudflare Pages, not Vercel or Netlify
|
|
9
|
+
|
|
10
|
+
## Why we don't recommend Vercel or Netlify by default
|
|
11
|
+
|
|
12
|
+
Vercel and Netlify are excellent products. The reason we don't pick them as the Main Branch default is not quality — it's pricing posture and lock-in.
|
|
13
|
+
|
|
14
|
+
**Pricing model risk.** Both Vercel and Netlify use a "free tier with metered overage" model. If your site goes viral, you pay for it after the fact, and the bill can be surprising. Vercel's bandwidth overages are billed at $40/TB after the included 100 GB on Hobby; Netlify's are $55/TB after 100 GB. We have seen Main Branch members hit $300 surprise bills from a single Reel that sent 500K visitors to a one-page site. Cloudflare's free Pages tier has unlimited bandwidth — that is not marketing copy, it is the actual policy as of 2026. The bill cannot surprise you because there is no meter.
|
|
15
|
+
|
|
16
|
+
**Build minutes are a hidden meter.** Vercel includes 6,000 build-execution minutes per month on Pro; if you are deploying every commit on a busy week, you'll see throttling or upgrade prompts. Cloudflare Pages includes 500 builds per month on the free tier, then charges per build (not per minute). The pricing scales linearly and predictably.
|
|
17
|
+
|
|
18
|
+
**Egress and image-optimization fees.** Vercel's image-optimization and edge-function minutes are separately metered. Each Next.js `<Image>` view counts. For a marketing site this is small, but for any site that grows organically over a year, it compounds. Cloudflare's image resizing and Workers requests are metered too, but the free tier ceiling is meaningfully higher and the per-unit cost is lower at every tier we have benchmarked.
|
|
19
|
+
|
|
20
|
+
**Build-pipeline lock-in.** Vercel's build pipeline is tightly coupled to their platform. Their Next.js features (ISR, on-demand revalidation, edge middleware) work only on Vercel; the same code on a different host degrades. Cloudflare Pages is build-pipeline-agnostic — it accepts the static output of any framework, and the deploy is just a folder of files. This makes "leave Cloudflare" a one-day project. "Leave Vercel after writing Vercel-specific Next.js features" is a quarter-long project.
|
|
21
|
+
|
|
22
|
+
**Composability.** Cloudflare Pages, Workers, R2 (object storage), D1 (SQLite at the edge), Queues, and KV are one platform with one bill. The Main Branch stack uses Pages for the static site, Workers for any custom endpoint (e.g., the `mb claim` Skool-membership check), and R2 for ad-hoc artifact storage. On Vercel you'd reach for AWS or a third-party for the equivalents.
|
|
23
|
+
|
|
24
|
+
## What we recommend instead
|
|
25
|
+
|
|
26
|
+
Cloudflare Pages, deployed via `wrangler` from a GitHub repo, with a custom domain and SSL provisioned automatically. Builds run in Cloudflare's pipeline; deploys are atomic; rollbacks are one click. For any dynamic surface, Workers sit beside Pages in the same project.
|
|
27
|
+
|
|
28
|
+
## Setup walkthrough
|
|
29
|
+
|
|
30
|
+
1. Create a Cloudflare account at https://dash.cloudflare.com/sign-up. Free tier is enough.
|
|
31
|
+
|
|
32
|
+
2. Install `wrangler` (the Cloudflare CLI):
|
|
33
|
+
```bash
|
|
34
|
+
npm install -g wrangler
|
|
35
|
+
wrangler login
|
|
36
|
+
```
|
|
37
|
+
The login command opens a browser tab and authorizes the CLI.
|
|
38
|
+
|
|
39
|
+
3. Connect a GitHub repo as a Pages project. From the dashboard: `Workers & Pages → Create → Pages → Connect to Git`. Pick the repo, the branch (typically `main`), and the build settings. For a vanilla static site, set the build command to whatever your framework needs (e.g., `npm run build`) and the output directory to `dist/` or `public/`.
|
|
40
|
+
|
|
41
|
+
4. Set a custom domain. From the project page: `Custom domains → Set up a domain`. Cloudflare will provision an SSL cert automatically if your domain is on Cloudflare DNS. If it's elsewhere, you add a CNAME at your registrar.
|
|
42
|
+
|
|
43
|
+
5. Verify deploys. Push a commit to `main`. Within ~60 seconds Cloudflare builds and publishes. Open the project URL.
|
|
44
|
+
|
|
45
|
+
6. Optional but recommended: set up a `wrangler.toml` in the repo so you can `wrangler pages deploy` from your laptop without a GitHub round-trip:
|
|
46
|
+
```toml
|
|
47
|
+
name = "your-site"
|
|
48
|
+
compatibility_date = "2026-04-29"
|
|
49
|
+
pages_build_output_dir = "dist"
|
|
50
|
+
```
|
|
51
|
+
Then `wrangler pages deploy dist/` after a local build.
|
|
52
|
+
|
|
53
|
+
Cost at typical Main Branch scale: $0/month for a marketing site under ~10K daily visitors. You start paying when you cross into Workers Paid ($5/month for 10M requests) or R2 storage above 10 GB.
|
|
54
|
+
|
|
55
|
+
## Honest limitations
|
|
56
|
+
|
|
57
|
+
Cloudflare Pages does not have first-class Next.js ISR or React Server Components support the way Vercel does. If you are building a heavy React app with dynamic SSR rendering and per-request edge logic, Vercel's developer experience is better and the lock-in cost may be worth it. For Main Branch sites — which are mostly static marketing surfaces with the occasional Worker for a form submit or a Skool gate — Pages is the right tool.
|
|
58
|
+
|
|
59
|
+
The Cloudflare dashboard is also denser and less polished than Vercel's. First-time users will need 30 minutes to learn it. After that it's fine.
|
|
60
|
+
|
|
61
|
+
## Resources
|
|
62
|
+
|
|
63
|
+
- Cloudflare Pages docs: https://developers.cloudflare.com/pages/
|
|
64
|
+
- Wrangler CLI: https://developers.cloudflare.com/workers/wrangler/
|
|
65
|
+
- Pricing comparison (Cloudflare): https://developers.cloudflare.com/pages/platform/limits/
|
|
66
|
+
- Vercel pricing (for comparison): https://vercel.com/pricing
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: educational
|
|
3
|
+
topic: github-vs-gdocs
|
|
4
|
+
status: stub
|
|
5
|
+
last-updated: 2026-04-29
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Why your business reference belongs in git, not Google Docs
|
|
9
|
+
|
|
10
|
+
## Why we don't recommend Google Docs as the company brain
|
|
11
|
+
|
|
12
|
+
Google Docs is the default place businesses put their thinking — meeting notes, briefs, SOPs, brand guidelines, decision logs. It works for a season and rots in three specific ways.
|
|
13
|
+
|
|
14
|
+
**Version history is opaque and losable.** Docs revision history exists, but it is not a forensic record. You cannot diff two arbitrary versions side-by-side as text. You cannot search "when did we change the pricing on the offer page" across the whole drive. You cannot revert a single paragraph from three months ago without manual copy-paste. And every Docs user has stories of revision history that quietly disappeared after a rename, a copy, or a long period of inactivity. Git's history is content-addressed, immutable, and forensic by default. Every change has an author, a timestamp, and a parent commit. This isn't a nice-to-have; it is the only honest way to know how your company's thinking evolved.
|
|
15
|
+
|
|
16
|
+
**Search is shallow.** Google Drive search is keyword search across titles and visible content — it does not handle regex, does not respect word boundaries reliably, and silently truncates very large drives. Once your reference corpus passes ~200 docs, finding the one paragraph you remember writing six months ago becomes a project. With markdown in git, `rg "the exact phrase"` is instant and exact. Composability with the rest of your shell (`rg | xargs sed`, for example) means you can refactor terminology across 500 files in 30 seconds.
|
|
17
|
+
|
|
18
|
+
**Portability is a fiction.** "Export to .docx" or "Download all" produces a folder of files that lose the comments, the suggestion threads, the embedded images, and most of the formatting fidelity. Markdown is text. Markdown in git is text plus history. You own it forever, and every tool in your future stack will read it natively.
|
|
19
|
+
|
|
20
|
+
**Agent-friendliness.** Claude, Codex, Cursor, and every AI coding agent speak markdown-and-git natively. They can `git log --follow` a file, read its history, and reason about why it changed. They cannot reason about a Google Doc except by exporting it, parsing the export, and losing the threading. As "AI that knows your business" becomes the operating model, the substrate has to be one agents can read. Git is that substrate. Docs is not.
|
|
21
|
+
|
|
22
|
+
**Lock-in.** Your company's thinking is in Google's database. Your account is one suspension away from being read-only. The TOS allows Google to terminate accounts at their discretion. Most businesses never hit this wall. The ones that do hit it discover that "export everything" is harder than they assumed.
|
|
23
|
+
|
|
24
|
+
## What we recommend instead
|
|
25
|
+
|
|
26
|
+
A private GitHub (or Forgejo) repo with a CLAUDE.md at the root and a six-primitive folder structure: `core/`, `research/`, `decisions/`, `log/`, `campaigns/`, `documents/`. Markdown for everything. Frontmatter for status. The repo is the company brain. Conductor or any AI agent reads it as the working substrate.
|
|
27
|
+
|
|
28
|
+
The pitch in one sentence: **your business is a tree of files**. Once it is, every agent that can read files becomes a coworker.
|
|
29
|
+
|
|
30
|
+
## Setup walkthrough
|
|
31
|
+
|
|
32
|
+
1. Create a private repo. From the GitHub UI: `New repository → Private → Initialize with README`. Name it something like `your-business` or `your-business-brain`.
|
|
33
|
+
|
|
34
|
+
2. Clone it locally:
|
|
35
|
+
```bash
|
|
36
|
+
git clone git@github.com:yourname/your-business.git
|
|
37
|
+
cd your-business
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
3. Add a `CLAUDE.md` at the root. This is the always-loaded context for any AI agent that opens the repo. A minimal first version:
|
|
41
|
+
```markdown
|
|
42
|
+
# <Business Name>
|
|
43
|
+
|
|
44
|
+
<One-sentence thesis: what this business is and who it serves.>
|
|
45
|
+
|
|
46
|
+
## Folder structure
|
|
47
|
+
|
|
48
|
+
- core/ — soul, offer, audience, voice, visual identity, finance
|
|
49
|
+
- research/ — dated investigations, never deleted
|
|
50
|
+
- decisions/ — dated choices with rationale, frontmatter status field
|
|
51
|
+
- log/ — daily/weekly notes, inbox-style dumps
|
|
52
|
+
- campaigns/ — outputs grouped by campaign
|
|
53
|
+
- documents/ — long-form artifacts (briefs, SOPs, contracts)
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
4. Set up the six-primitive folders:
|
|
57
|
+
```bash
|
|
58
|
+
mkdir -p core/{soul,offer,audience,voice,visual-identity,finance} \
|
|
59
|
+
research decisions log campaigns documents
|
|
60
|
+
git add . && git commit -m "[init] six-primitive structure"
|
|
61
|
+
git push
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
5. Connect to a Conductor workspace (or open the repo in Claude Code directly):
|
|
65
|
+
```bash
|
|
66
|
+
# In Conductor: New Workspace -> point at the repo path
|
|
67
|
+
# Or: cd into the repo and run `claude` to start a Claude Code session.
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
6. Migrate one Google Doc as a forcing function. Pick the most important one — usually a brand brief or a strategy doc. Paste it into `core/offer/offer.md` (or wherever it belongs). Commit. Notice how much faster every subsequent edit, search, and agent read becomes. Migrate the next doc when the next decision needs it. Don't try to bulk-migrate everything; that's a project that never ships.
|
|
71
|
+
|
|
72
|
+
Cost: $0/month for private repos on GitHub (free tier covers it for individuals and small teams). Forgejo on your own hardware is also free.
|
|
73
|
+
|
|
74
|
+
## Honest limitations
|
|
75
|
+
|
|
76
|
+
Markdown in git does not solve **real-time multiplayer editing**. If two people are typing in the same paragraph at the same time, Google Docs still wins. Most reference work isn't actually concurrent — it's "someone writes, others react" — but the few cases where it is concurrent (live meeting notes during a call, brainstorm with three people typing) are friction. We solve this by writing first in a scratch tool (Apple Notes, a shared scratchpad) and porting to git at the end of the session, but that's a workflow gap, not a no-op.
|
|
77
|
+
|
|
78
|
+
It also has a higher learning curve. A non-technical collaborator who is fluent in Docs needs an afternoon to learn `git pull / git commit / git push`. GitHub Desktop or the GitHub web editor lowers the bar; some collaborators will still bounce. Whether the learning curve is worth the durability gain is a per-person judgment call.
|
|
79
|
+
|
|
80
|
+
## Resources
|
|
81
|
+
|
|
82
|
+
- GitHub markdown reference: https://docs.github.com/en/get-started/writing-on-github
|
|
83
|
+
- GitHub Desktop (no-CLI git client): https://desktop.github.com/
|
|
84
|
+
- Conductor workspace docs: https://conductor.build/docs
|
|
85
|
+
- "Your business is a tree of files" (Main Branch positioning, internal): see `decisions/2026-04-29-mb-vip-v0-1-0-master.md`
|