Open-Source Cold Email & Warmup Platform
Warmbly is the open-source platform for cold email: warm your mailboxes, send campaigns, and triage every reply. Run it on our cloud or self-host the whole thing.
Generative Engine Optimization (GEO): I get your brand cited in AI answers — ChatGPT, Perplexity, Google AI Overviews — backed by technical SEO and security engineering. And I prove it: dogfooded and
MarketingPythonGitHub @ferinazumaDEVOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Scaffold fully-wired Python projects (tests, CI, pre-commit, license) from templates, with a TUI.
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
Scaffold a new, fully-wired Python project in seconds — with a friendly terminal UI.
scaffld generates a clean project skeleton (src layout, tests, typed code, CI,
pre-commit, license, and an optional virtualenv) from extensible templates. No
cookiecutter YAML to memorize, no {% raw %} gymnastics to keep GitHub Actions
files intact — just answer a few prompts and start writing code.Read the full README ↗English · Español: README.es.md
Scaffold a new, fully-wired Python project in seconds — with a friendly terminal UI.
scaffld generates a clean project skeleton (src layout, tests, typed code, CI,
pre-commit, license, and an optional virtualenv) from extensible templates. No
cookiecutter YAML to memorize, no {% raw %} gymnastics to keep GitHub Actions
files intact — just answer a few prompts and start writing code.
pip install scaffld
scaffld new
pyproject.toml, a src/ layout,
pytest tests that pass out of the box, a GitHub Actions matrix CI, a
.pre-commit-config.yaml, a real LICENSE, and a sensible .gitignore.python-lib, python-cli, and python-api (FastAPI).${{ ... }}
expressions untouched, so your workflow files render correctly with zero escaping.~/.scaffld/templates and it shows
up instantly. Templates are just a template.toml plus a files/ tree.--no-input makes scaffld behave in CI and Makefiles..venv for the new project.pip install scaffld
# or, from a clone:
pip install -e ".[dev]"
scaffld is on PyPI, so pip install scaffld works. Installing from a clone
instead needs git on your machine.
Requires Python 3.9+. Runtime dependencies: typer and rich (plus tomli on 3.9/3.10).
List the available templates:
$ scaffld list
Available templates
┏━━━┳━━━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ # ┃ Template ┃ Kind ┃ Description ┃
┡━━━╇━━━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
│ 1 │ python-api │ api │ FastAPI service with a health route, typed │
│ │ │ │ handlers, and CI. │
│ 2 │ python-cli │ cli │ Zero-dependency argparse CLI with a │
│ │ │ │ console-script entry point. │
│ 3 │ python-lib │ library │ Importable Python library: src/ layout, typed │
│ │ │ │ API, tests, and CI. │
└───┴────────────┴─────────┴───────────────────────────────────────────────────┘
Create a project. Run scaffld new with no arguments for the full interactive flow,
or pass flags to skip the prompts:
$ scaffld new "Weather Bot" -t python-cli -a "Ada Lovelace" -d "A tiny weather CLI." --no-input --no-venv
weather-bot/
├── .github/
│ └── workflows/
│ └── ci.yml
├── .gitignore
├── .pre-commit-config.yaml
├── LICENSE
├── README.md
├── pyproject.toml
├── src/
│ └── weather_bot/
│ ├── __init__.py
│ └── cli.py
└── tests/
└── test_cli.py
╭──────────────────────────────────── Done ────────────────────────────────────╮
│ Created 9 files in /tmp/weather-bot │
╰──────────────────────────────────────────────────────────────────────────────╯
Next steps:
cd weather-bot
pip install -e ".[dev]"
pytest
scaffld show python-lib prints the file tree a template would generate, without
writing anything to disk.
The generated project is real and works immediately:
$ cd weather-bot && pip install -e ".[dev]" && pytest -q
... [100%]
3 passed in 0.01s
$ weather-bot Fernando
Hello, Fernando!
| Flag | Meaning |
|---|---|
-t, --type | Template to use (scaffld list). |
-a, --author | Author name (defaults to SCAFFLD_AUTHOR, then git config user.name, then $USER). |
--email | Author email (defaults to SCAFFLD_EMAIL, then git config user.email). |
-d, --description | One-line project description. |
-l, --license | MIT, BSD-3-Clause, ISC, or none. |
-o, --output | Directory to create the project in (defaults to the current directory). |
--python | Minimum Python version for the generated project (3.N or 3.N.P). |
--venv / --no-venv | Create a .venv in the new project. On by default. |
--no-input | Never prompt — fail if a required value is missing (great for CI). |
--force | Write into a non-empty directory. |
scaffld -V (or --version) prints the version and exits.
A template is just a directory:
my-template/
├── template.toml # name, kind, description
└── files/ # the tree that gets rendered
├── pyproject.toml
├── src/{{ package_name }}/__init__.py
└── ...
Both file contents and path segments are rendered, so a directory literally named
{{ package_name }} becomes weather_bot/ on disk.
The rendering engine is deliberately small and has one property that matters for real
projects: unknown {{ ... }} expressions are left untouched. That means a GitHub
Actions file can contain ${{ matrix.python-version }} right next to a scaffld variable
like {{ project_name }}, and only the latter is substituted — no escaping required. It
also supports filters ({{ project_name | snake }}) and nestable conditionals
({% if has_license %}...{% endif %}).
Derived variables are computed once and kept consistent: give it "Weather Bot" and you
get package_name = weather_bot, project_slug = weather-bot, a filled-in license, the
year, and more. Names are transliterated to ASCII first, so "Café Búho" yields
cafe_buho rather than a shredded caf_b_ho, and a name that collides with a Python
keyword gets a trailing underscore (class → class_) so the package stays importable.
Point scaffld at your own templates by dropping them in ~/.scaffld/templates/
(or any directory listed in the SCAFFLD_TEMPLATES environment variable). A user
template that shares a name with a built-in one shadows it, so you can override the
defaults. Available variables include project_name, package_name, project_slug,
author, author_email, description, license, python_version, and year.
python -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]"
pytest
scaffld is one of a family of small, focused open-source tools I build and maintain. If it saved you some project-setup time, a few of the sibling projects tackle neighbouring problems in the same practical, batteries-included spirit.
By ferinazumaDEV.
MIT — see LICENSE.
Built by Fernando (@ferinazumaDEV).