Django scaffold
Skill dr-rompecabezas/django-scaffold-skill/skills/django-scaffold
Scaffold a new Django project following Felipe's established patternsFrom its SKILL.md
npx -y skills add dr-rompecabezas/django-scaffold-skill --skill django-scaffoldAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
8.8 KB, ~2.3k tokens by cl100k_base, as published. Nobody here has run it
Django Project Scaffolding
Read reference.md in full before doing anything else. Then run the question flow below.
Assumed Starting Point
The user is already inside the project directory with:
uv initdone —pyproject.tomlexists.venvcreated and activateddjango(ordjango+wagtail) already installed viauv add
Do not generate setup instructions for creating the directory or installing Django. Do not cd anywhere.
Question Flow
Ask these questions one at a time, in order. Wait for each answer before asking the next.
Q1 — Project type:
- A. Django full-stack — templates + Tailwind CSS, server-rendered UI
- B. Wagtail CMS full-stack — same as A but with Wagtail
- C. Django REST API — DRF only. No Django templates beyond admin.
Q2 — Project name:
Used for pyproject.toml name, Railway service, and database name.
Derive the Python package name automatically: replace hyphens with underscores.
Example: my-project → package name: my_project
Q3 — Main app name:
The primary local Django app beyond users (default: core).
Apps live at the project root — flat structure, no apps/ subdirectory.
Q4 — Celery + Redis? (yes / no) Recommend yes only if: background jobs >5s, retry logic, scheduled tasks, or high-volume async email. Single transactional emails do NOT need Celery.
Q5 [Full-stack and Wagtail only] — Frontend interactivity? (select any, default: both)
Both HTMX and Alpine.js are served from static/js/ as downloaded minified files — no CDN, no pip package required.
- HTMX — server-driven interactions; place
htmx.min.jsinstatic/js/ - Alpine.js — client-side reactivity; place
alpine.min.jsinstatic/js/ - Both (recommended default)
- Neither
Q6 — Authentication:
- A. django-allauth — recommended default; handles email + password
- B. django-allauth with Google OAuth — adds
[socialaccount]and Google provider - C. Built-in Django auth only — simple projects, internal tools
Q7 — Languages? (default: English only)
List only the languages the project actually needs. English is always included.
Common additions: French (fr), Spanish (es), Portuguese (pt).
If English only, no extra i18n setup is generated. If multiple, activates LANGUAGES and LOCALE_PATHS in base.py.
Once you have all seven answers, generate the complete project without further questions.
Version Resolution
Before generating any files, look up the current versions using web search or available tools:
- Python — latest stable release (e.g. python.org/downloads)
- Node.js — latest LTS release (e.g. nodejs.org)
- Django — latest LTS release, which is always the x.2 series (e.g. djangoproject.com/download)
Use these resolved versions in railpack.json (packages.python, packages.node), pyproject.toml (target-version, python_version), and anywhere else a version string appears. Do not fall back to values from your training data.
Generation Checklist
Generate every file in the list below. Use reference.md for all non-trivial templates.
For files marked standard, generate from Django conventions.
Substitute {project_slug} (kebab-case), {project_name} (snake_case), {app_name} throughout.
Root
manage.py— standard;DJANGO_SETTINGS_MODULE = "config.settings.local"pyproject.toml— update the existing file: update[project]name/description; add all[tool.*]sections from reference.md § pyproject.toml. Do NOT replace dependencies — those are managed byuv add..env— reference.md § .env.example; substitute{project_name}; this is the working local file.env.example— same as .env (committed; no real secrets).gitignore— standard Django gitignore (include.env,staticfiles/,media/,*.pyc,node_modules/, etc.).pre-commit-config.yaml— reference.md § Pre-commit; omitdjlinthooks for API-only (Q1=C)railpack.json— reference.md § Deployment: railpack.json; if Q7 has multiple languages, addgettextapt packages (reference.md § Multilingual projects)railway.json— reference.md § Deployment: railway.json; omit npm build step for API-only (Q1=C); if Q7 has multiple languages, addcompilemessagesto startCommand (reference.md § Multilingual projects)docker-compose.yml— reference.md § docker-compose; uncomment Redis/Celery/Flower if Q4=yespackage.json— reference.md § package.json; full-stack and Wagtail only (Q1=A or B)assets/css/input.css—@import "tailwindcss";; full-stack and Wagtail only; input lives in assets/, NOT static/tailwind.config.js— do not generate; Tailwind v4 does not need one
config/
config/__init__.py— import celery_app if Q4=yes (reference.md § Celery); else emptyconfig/asgi.py— standard;DJANGO_SETTINGS_MODULE = "config.settings.local"config/wsgi.py— standard;DJANGO_SETTINGS_MODULE = "config.settings.local"config/celery.py— reference.md § Celery; only if Q4=yes; substitute{project_name}config/urls.py— reference.md § config/urls.py; include admin, allauth (if Q6=A or B), and app URLsconfig/settings/__init__.py— emptyconfig/settings/base.py— reference.md § base.py; customize INSTALLED_APPS per all answers; addLANGUAGES+LOCALE_PATHSonly if Q7 has more than one languagelocale/.gitkeep— only if Q7 has more than one language; empty placeholder so the directory is committed andcompilemessagesdoesn't error on first deployconfig/settings/local.py— reference.md § local.pyconfig/settings/production.py— reference.md § production.py (use in full, do not abbreviate)
.github/
.github/workflows/ci.yml— reference.md § GitHub Actions; add Redis service if Q4=yes
users/ (always included)
users/__init__.py— emptyusers/apps.py— standard AppConfig;name = "users"users/models.py— reference.md § Authentication → users/models.pyusers/admin.py— reference.md § users app — admin.pyusers/migrations/__init__.py— emptyusers/tests/__init__.py— emptyusers/tests/factories.py— reference.md § UserFactoryusers/tests/test_users.py— reference.md § Authentication → users/tests/test_users.pyusers/views.py— empty initially
{app_name}/ (main app)
{app_name}/__init__.py— empty{app_name}/apps.py— standard AppConfig;name = "{app_name}"{app_name}/admin.py— empty initially{app_name}/models.py— empty initially{app_name}/urls.py— empty urlpatterns list{app_name}/views.py— empty initially{app_name}/migrations/__init__.py— empty{app_name}/tests/__init__.py— empty
templates/ (full-stack and Wagtail only, Q1=A or B)
templates/base.html— minimal HTML5 boilerplate; Tailwind CSS link ({% static 'css/tailwind.css' %}); HTMX script tag from static if selected ({% static 'js/htmx.min.js' %}); Alpine.js script tag from static if selected ({% static 'js/alpine.min.js' %});{% block content %}{% endblock %}
After Generating All Files
Print a Next Steps section:
Install dependencies (run uv add for each you need):
Core: uv add gunicorn whitenoise dj-database-url psycopg[binary] django-environ
Auth: uv add django-allauth # or django-allauth[socialaccount]
Media: uv add django-storages[s3] boto3
Email: uv add django-anymail[mailtrap]
Monitoring: uv add sentry-sdk[django]
API only: uv add djangorestframework drf-spectacular djangorestframework-simplejwt django-cors-headers django-filter
Wagtail: already installed; add uv add django-allauth if needed
Celery: uv add celery[redis] django-celery-beat flower # only if Q4=yes
Dev dependencies:
uv add --dev django-debug-toolbar pytest pytest-django factory-boy faker coverage[toml] django-stubs[compatible-mypy] mypy pre-commit
Download static JS files (if HTMX or Alpine selected):
curl -o static/js/htmx.min.js https://unpkg.com/htmx.org/dist/htmx.min.js
curl -o static/js/alpine.min.js https://unpkg.com/alpinejs/dist/cdn.min.js
Setup:
cp .env.example .env
# Set SECRET_KEY: python -c "from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())"
docker compose up -d
uv run pre-commit install
python manage.py migrate
python manage.py createsuperuser
Frontend (full-stack/Wagtail only):
npm install
npm run dev:css ← keep running in a separate terminal
Railway deployment — set in Railway dashboard:
SECRET_KEY, ALLOWED_HOSTS, DJANGO_SETTINGS_MODULE=config.settings.production
DATABASE_URL and REDIS_URL are auto-injected by Railway plugins
SENTRY_DSN, MAILTRAP_API_TOKEN, AWS_* — set when ready
What ships with it: 1 file
47.0 KB alongside SKILL.md
- reference.md47.0 KB