Open-Source Cold Email & Warmup Platform
Warmbly는 메일함을 예열하고 캠페인 전송·답변 triage를 지원하는 오픈소스 콜드 이메일 플랫폼입니다
AI 답변에 브랜드 인용을 보장하고, 기술 SEO·보안 엔지니어링으로 뒷받침합니다
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
마케팅PythonGitHub @ferinazumaDEV온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Scaffold fully-wired Python projects (tests, CI, pre-commit, license) from templates, with a TUI.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
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.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).