onboarding
npx machina-cli add skill mrsknetwork/supernova/onboarding --openclawProject Onboarding (Day-0 Setup)
Purpose
The most common vibe-coder mistake on a new project is starting to code before the project structure exists. This leads to files scattered everywhere, no .gitignore, hardcoded secrets in source code, and a project that cannot be replicated by another developer. This skill creates a production-ready foundation in one pass.
Pre-Flight: Stack Confirmation
Before generating any files, ask:
"I'll set up a new project with the Supernova standard stack:
- Backend: Python 3.12 + FastAPI + SQLAlchemy + PostgreSQL
- Frontend: Next.js 14 + TypeScript + Tailwind + Shadcn/ui
- Infrastructure: Docker Compose (local), GitHub Actions (CI)
Does this work for your project, or do you have a preference?"
If the user has an existing project, STOP and use the appropriate domain skill instead.
SOP: Project Scaffold
Step 1 - Repository Root
# Repository structure
my-project/
├── .github/
│ └── workflows/
│ └── ci.yml # GitHub Actions CI pipeline
├── backend/ # FastAPI app
│ ├── src/
│ │ ├── api/v1/
│ │ ├── models/
│ │ ├── repositories/
│ │ ├── services/
│ │ ├── schemas/
│ │ ├── auth/
│ │ ├── config.py
│ │ ├── database.py
│ │ └── main.py
│ ├── alembic/
│ │ └── versions/
│ ├── tests/
│ │ ├── unit/
│ │ └── integration/
│ ├── pyproject.toml
│ ├── Dockerfile
│ └── .env.example
├── frontend/ # Next.js app
│ ├── app/
│ ├── components/
│ ├── hooks/
│ ├── lib/
│ └── package.json
├── docker-compose.yml # Full local dev stack
├── .gitignore
└── README.md
Step 2 - Backend: pyproject.toml
[project]
name = "my-project-backend"
version = "0.1.0"
requires-python = ">=3.12"
dependencies = [
"fastapi>=0.111",
"uvicorn[standard]>=0.29",
"sqlalchemy>=2.0",
"asyncpg>=0.29",
"alembic>=1.13",
"pydantic>=2.7",
"pydantic-settings>=2.2",
"structlog>=24",
"passlib[bcrypt]>=1.7",
"python-jose[cryptography]>=3.3",
"python-multipart>=0.0.9",
"httpx>=0.27",
]
[project.optional-dependencies]
dev = [
"pytest>=8",
"pytest-asyncio>=0.23",
"pytest-cov>=5",
"httpx>=0.27",
"ruff>=0.4",
"mypy>=1.10",
]
[tool.ruff.lint]
select = ["E", "F", "I", "B", "UP"]
[tool.pytest.ini_options]
asyncio_mode = "auto"
testpaths = ["tests"]
addopts = "--cov=src --cov-report=term-missing --cov-fail-under=80"
Step 3 - .env.example (Committed to Repo)
# Application
APP_NAME=My Project
DEBUG=true
SECRET_KEY=change-this-to-a-random-64-char-string
# Database
DATABASE_URL=postgresql+asyncpg://postgres:password@localhost:5432/myproject
# Redis
REDIS_URL=redis://localhost:6379/0
# Frontend
FRONTEND_URL=http://localhost:3000
# Email (Resend)
RESEND_API_KEY=re_...
EMAIL_FROM=no-reply@yourdomain.com
# Storage (optional)
AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
S3_BUCKET=
CDN_BASE_URL=
The .env file (with real values) is in .gitignore. Only .env.example is committed.
Step 4 - docker-compose.yml
services:
api:
build: ./backend
ports: ["8000:8000"]
env_file: ./backend/.env
depends_on:
db: { condition: service_healthy }
redis: { condition: service_started }
volumes: ["./backend:/app"]
command: uvicorn src.main:app --reload --host 0.0.0.0 --port 8000
db:
image: postgres:16-alpine
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: password
POSTGRES_DB: myproject
volumes: [postgres_data:/var/lib/postgresql/data]
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres"]
interval: 5s
retries: 5
redis:
image: redis:7-alpine
ports: ["6379:6379"]
volumes:
postgres_data:
Step 5 - Backend main.py
from contextlib import asynccontextmanager
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from src.config import settings
from src.api.v1 import router as v1_router
import structlog
log = structlog.get_logger()
@asynccontextmanager
async def lifespan(app: FastAPI):
log.info("startup", env=settings.ENV)
yield
log.info("shutdown")
app = FastAPI(title=settings.APP_NAME, lifespan=lifespan)
app.add_middleware(
CORSMiddleware,
allow_origins=[settings.FRONTEND_URL],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
app.include_router(v1_router, prefix="/api/v1")
@app.get("/health")
async def health():
return {"status": "ok"}
Step 6 - Frontend Initialization
npx create-next-app@latest frontend --typescript --tailwind --eslint --app --src-dir --import-alias "@/*"
cd frontend
npx shadcn@latest init
Step 7 - .gitignore
# Python
__pycache__/
*.pyc
.venv/
dist/
*.egg-info/
# Environment
.env
*.env.local
# Next.js
frontend/.next/
frontend/node_modules/
frontend/out/
# Coverage
.coverage
htmlcov/
# OS
.DS_Store
Thumbs.db
Step 8 - Initial README
Generate a README with:
- Project name and 1-sentence description
- Prerequisites (Python 3.12, Node 20, Docker)
- Quick Start (5 steps: clone, copy
.env.example, docker-compose up, alembic upgrade head, npm run dev) - Tech stack table
- Contributing guide stub
Step 9 - First Git Commit
git init
git add .
git commit -m "chore: initial project scaffold"
git branch -M main
git remote add origin <url>
git push -u origin main
After this, hand off to the appropriate domain skill (backend, frontend, db, etc.) to implement the first feature.
Source
git clone https://github.com/mrsknetwork/supernova/blob/main/skills/onboarding/SKILL.mdView on GitHub Overview
Onboarding creates a production-ready foundation for a new project in one pass. It builds the complete repository structure, config files, environment templates, and base scaffolding so development can start immediately. Use this as the FIRST skill on any brand-new project before any other skill runs to ensure a consistent baseline.
How This Skill Works
Before generating any files, it runs a pre-flight stack check to confirm the target stack (Backend: Python 3.12 + FastAPI + SQLAlchemy + PostgreSQL; Frontend: Next.js 14 + TypeScript + Tailwind + Shadcn/ui; Infrastructure: Docker Compose, GitHub Actions). It then executes a comprehensive scaffold to create the repository root, backend, frontend, Docker workflows, environment templates, and CI configuration so you can begin coding right away.
When to Use It
- Starting a brand-new project from scratch
- Scaffolding a new app (e.g., you say 'start a new project' or 'scaffold a new app')
- You want to initialize a project described by an idea with no code yet
- You need a production-ready repo: backend, frontend, Docker, and CI configured
- You want a repeatable baseline to accelerate team onboarding
Quick Start
- Step 1: Confirm the stack and project goals (pre-flight) per the SOP
- Step 2: Generate the repository root, backend, frontend, Docker, and CI scaffolding
- Step 3: Review the README, env.example, and run docker-compose up to verify
Best Practices
- Confirm the stack upfront (backend/frontend/infrastructure) before generating files
- Use the standard repository layout (backend/, frontend/, and a shared docker-compose.yml) for consistency
- Commit only templates (e.g., .env.example) and keep real secrets out of version control
- Include CI workflow definitions (GitHub Actions) from day 0
- Document the scaffold (README) and provide a clear hand-off checklist for new teammates
Example Use Cases
- A SaaS startup bootstrapping a FastAPI + Next.js stack with Docker Compose
- An internal tool built from scratch for a multinational company
- An open-source full-stack starter for new projects
- A hackathon project scaffold to demo ideas quickly
- An educational course project skeleton to teach full-stack concepts