agentsclimarketplace

Django scaffold

Skill dr-rompecabezas/django-scaffold-skill/skills/django-scaffold

Scaffold a new Django project following Felipe's established patternsFrom its SKILL.md

Install
npx -y skills add dr-rompecabezas/django-scaffold-skill --skill django-scaffold

Assembled 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 init done — pyproject.toml exists
  • .venv created and activated
  • django (or django + wagtail) already installed via uv 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.js in static/js/
  • Alpine.js — client-side reactivity; place alpine.min.js in static/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.pystandard; DJANGO_SETTINGS_MODULE = "config.settings.local"
  • pyproject.tomlupdate the existing file: update [project] name/description; add all [tool.*] sections from reference.md § pyproject.toml. Do NOT replace dependencies — those are managed by uv add.
  • .env — reference.md § .env.example; substitute {project_name}; this is the working local file
  • .env.example — same as .env (committed; no real secrets)
  • .gitignorestandard Django gitignore (include .env, staticfiles/, media/, *.pyc, node_modules/, etc.)
  • .pre-commit-config.yaml — reference.md § Pre-commit; omit djlint hooks for API-only (Q1=C)
  • railpack.json — reference.md § Deployment: railpack.json; if Q7 has multiple languages, add gettext apt 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, add compilemessages to startCommand (reference.md § Multilingual projects)
  • docker-compose.yml — reference.md § docker-compose; uncomment Redis/Celery/Flower if Q4=yes
  • package.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.jsdo not generate; Tailwind v4 does not need one

config/

  • config/__init__.py — import celery_app if Q4=yes (reference.md § Celery); else empty
  • config/asgi.pystandard; DJANGO_SETTINGS_MODULE = "config.settings.local"
  • config/wsgi.pystandard; 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 URLs
  • config/settings/__init__.py — empty
  • config/settings/base.py — reference.md § base.py; customize INSTALLED_APPS per all answers; add LANGUAGES + LOCALE_PATHS only if Q7 has more than one language
  • locale/.gitkeep — only if Q7 has more than one language; empty placeholder so the directory is committed and compilemessages doesn't error on first deploy
  • config/settings/local.py — reference.md § local.py
  • config/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 — empty
  • users/apps.pystandard AppConfig; name = "users"
  • users/models.py — reference.md § Authentication → users/models.py
  • users/admin.py — reference.md § users app — admin.py
  • users/migrations/__init__.py — empty
  • users/tests/__init__.py — empty
  • users/tests/factories.py — reference.md § UserFactory
  • users/tests/test_users.py — reference.md § Authentication → users/tests/test_users.py
  • users/views.py — empty initially

{app_name}/ (main app)

  • {app_name}/__init__.py — empty
  • {app_name}/apps.pystandard 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

Keep looking

Skills are one crate of 326,852. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.