feat: Tier B operator scaffolding — bundle, copy SoT, posts, emails
Pick up and finish yesterday's cut-off Tier B pass. - build/: PyInstaller scaffold (datatools.spec + launcher.py + hook-streamlit.py + README) — folder-mode bundle, locked 127.0.0.1, per-OS recipe - marketing/COPY.md: single source of truth for every customer-facing string — landing H1/sub/CTAs, demo CTAs, email subjects, Gumroad listing, banned phrases - marketing/community-posts/: 9 drafts (3 posts × 3 niches: bookkeeper, revops, shopify-pet) — story / tip / soft-offer - marketing/emails/: 18 drafts (Gumroad delivery + 5-touch onboarding × 3 niches), per-niche segmentation guidance - docs/NEXT-STEPS.md: flip 2.2 / 2.4 / 3.1 / 3.4 to done with pointers to the new assets; add Phase 0 inventory rows - .gitignore: narrow `build/` ignore so PyInstaller spec + launcher + hooks get tracked, only generated artifacts (build/build/, build/__pycache__/, build/dist/) stay ignored Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
30
build/hooks/hook-streamlit.py
Normal file
30
build/hooks/hook-streamlit.py
Normal file
@@ -0,0 +1,30 @@
|
||||
"""PyInstaller hook for Streamlit.
|
||||
|
||||
The runtime needs three things PyInstaller's static analyser misses:
|
||||
|
||||
1. Every submodule of ``streamlit`` (the framework reaches into
|
||||
``streamlit.runtime`` / ``streamlit.web`` / ``streamlit.elements``
|
||||
via dynamic import).
|
||||
2. The static front-end assets (JS / CSS / fonts) under
|
||||
``streamlit/static/``.
|
||||
3. The vendored config / proto schemas under
|
||||
``streamlit/runtime/scriptrunner/`` etc.
|
||||
|
||||
The main spec already calls ``collect_all('streamlit')`` so this
|
||||
hook is mostly belt-and-braces — but PyInstaller picks hooks up by
|
||||
name, and a missing hook can produce confusing runtime errors when
|
||||
Streamlit upgrades. Keeping it explicit here documents the
|
||||
dependency.
|
||||
"""
|
||||
|
||||
from PyInstaller.utils.hooks import collect_all, collect_data_files, collect_submodules
|
||||
|
||||
datas, binaries, hiddenimports = collect_all("streamlit")
|
||||
|
||||
# Belt-and-braces: explicitly include the static directory.
|
||||
datas += collect_data_files("streamlit", subdir="static", include_py_files=False)
|
||||
|
||||
# Some Streamlit components are loaded by name from the registry.
|
||||
hiddenimports += collect_submodules("streamlit.elements")
|
||||
hiddenimports += collect_submodules("streamlit.runtime")
|
||||
hiddenimports += collect_submodules("streamlit.web")
|
||||
Reference in New Issue
Block a user