New Project Starter First message to Claude for a new project
## PROJECT: [Project Name]
### What it is
[One or two sentences — what this project does and who it's for.]
### Standards
Stack: Python Flask, SQLAlchemy, Jinja2 templates. No frontend frameworks.
Database: SQLite default, must support PostgreSQL. DB URL in .config file (configparser format).
Architecture: Minimal server calls. Load on page load, hit server on save. No polling/websockets.
UI: Dark theme (slate/charcoal), compact, mobile-friendly.
.config format:
```
[database]
url = sqlite:///projectname.db
[app]
host = 0.0.0.0
port = [PORT]
debug = false
secret_key = change-me
```
Deploy pattern (with DB preservation):
```
cp instance/projectname.db ~/tmp/
unzip -o projectname*.zip -d /home/[user]/
cp ~/tmp/projectname.db /home/[user]/[project]/instance/
cd /home/[user]/[project]
source venv/bin/activate
git add -A && git commit -m "describe"
sudo systemctl restart [service]
```
Gunicorn for production (ExecStart in systemd):
```
ExecStart=/home/[user]/[project]/venv/bin/gunicorn -w 4 -b 127.0.0.1:[PORT] app:app
```
Nginx pattern:
```
server {
listen 80;
server_name [DOMAIN];
location / {
proxy_pass http://127.0.0.1:[PORT];
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
# then: sudo certbot --nginx -d [DOMAIN]
```
Zip delivery: exclude __pycache__, *.pyc, .db files. Include .config, .service, and this prompt.
Register in Nocturne after deploy. Scan for components with the Component Scan prompt.
### Current request
[What you want built or changed.]
Component Scan Extract reusable components from a codebase
Review this codebase and identify pieces of code that could be extracted into standalone, reusable components.
A component is a self-contained piece that could work in other projects without major changes. It lives in its own directory with its own models, routes, templates, or utilities. It's not project-specific business logic — it's a pattern or module that solves a general problem.
For each component found, provide:
- name: lowercase-hyphenated, describes what it does
- description: one sentence, what it does
- path: the directory name it would live under in the component library
- files: what files from this project would be extracted
- origin: the name of the project this was found in (or "standalone")
- status: "Draft"
Return as JSON array.
Existing component library — don't duplicate, but note if something extends an existing component:
[
{
"name": "client-profiles",
"description": "CRUD for client contacts with name, email, phone, address, and notes \u2014 generic CRM-lite module.",
"path": "client-profiles/",
"files": [
"models.py:Client",
"app.py:clients_list,client_new,client_edit,client_delete",
"templates/clients.html",
"templates/client_form.html"
],
"origin": "Nocturne",
"status": "Draft"
},
{
"name": "component-library",
"description": "Tracks reusable code components with name, description, path, origin project, and status \u2014 populated by LLM scan prompts.",
"path": "component-library/",
"files": [
"models.py:Component,SoftwareComponent",
"app.py:components_list",
"templates/components.html"
],
"origin": "Nocturne",
"status": "Draft"
},
{
"name": "dns-zone-parser",
"description": "Parses BIND-style zone files into clean, normalized DNS records \u2014 strips boilerplate, categorizes record types (SPF, DKIM, DMARC), and skips provider noise.",
"path": "dns-zone-parser/",
"files": [
"app.py:_parse_zone_file",
"app.py:_validate_dns_records",
"app.py:_dns_from_nameservers"
],
"origin": "Nocturne",
"status": "Draft"
},
{
"name": "domain-registry",
"description": "Manages domain inventory with registrar, expiry tracking, auto-renew status, and CSV import from GoDaddy and Hostgator.",
"path": "domain-registry/",
"files": [
"models.py:Domain",
"app.py:domain_new,domain_edit,domain_delete,domain_import,domain_reconcile,domain_upload_zone,domain_link_deployment",
"templates/domain_form.html",
"templates/domain_import.html",
"templates/domain_reconcile.html"
],
"origin": "Nocturne",
"status": "Draft"
},
{
"name": "flask-project-scaffold",
"description": "Boilerplate project skeleton \u2014 configparser-based .config reader, systemd service file, dark-theme base template, deploy flow, and context prompt template.",
"path": "flask-project-scaffold/",
"files": [
"config.py",
"nocturne.service",
"CONTEXT_PROMPT.md",
"templates/base.html",
"static/css/style.css"
],
"origin": "standalone",
"status": "Draft"
},
{
"name": "hosting-inventory",
"description": "Tracks VPS and hosting accounts with provider, IP, cost, billing cycle, and XLSX import from InterServer.",
"path": "hosting-inventory/",
"files": [
"models.py:Hosting",
"app.py:hosting_new,hosting_edit,hosting_delete,hosting_import,hosting_reconcile",
"templates/hosting_form.html",
"templates/hosting_import.html",
"templates/hosting_reconcile.html"
],
"origin": "Nocturne",
"status": "Draft"
},
{
"name": "llm-prompt-library",
"description": "Stores and displays reusable LLM prompt templates with one-click copy \u2014 for structured code review, dependency scanning, etc.",
"path": "llm-prompt-library/",
"files": [
"app.py:prompts",
"templates/prompts.html"
],
"origin": "Nocturne",
"status": "Draft"
},
{
"name": "nginx-config-parser",
"description": "Parses bulk nginx configs \u2014 extracts server blocks, resolves upstream references, matches server_name to domains, and pulls ports and SSL status.",
"path": "nginx-config-parser/",
"files": [
"app.py:hosting_import_nginx",
"app.py:deployment_upload_nginx"
],
"origin": "Nocturne",
"status": "Draft"
},
{
"name": "ops-accountability",
"description": "Cross-references hosting, domains, DNS records, and deployments to surface orphaned servers, unlinked domains, unaccounted DNS entries, and expiring assets.",
"path": "ops-accountability/",
"files": [
"app.py:ops",
"templates/ops.html"
],
"origin": "Nocturne",
"status": "Draft"
},
{
"name": "roadmap-board",
"description": "Simple kanban-style roadmap with Planned, In Progress, and Done columns \u2014 seeded from code, editable via UI.",
"path": "roadmap-board/",
"files": [
"models.py:Roadmap",
"app.py:roadmap_list,roadmap_new,roadmap_edit,roadmap_delete",
"templates/roadmap.html",
"templates/roadmap_form.html"
],
"origin": "Nocturne",
"status": "Draft"
},
{
"name": "sqlite-column-migrator",
"description": "Runtime schema migration helper that detects missing columns via SQLAlchemy inspect and adds them with ALTER TABLE \u2014 works for SQLite and Postgres.",
"path": "sqlite-column-migrator/",
"files": [
"app.py:add_column_if_missing"
],
"origin": "Nocturne",
"status": "Draft"
},
{
"name": "systemd-config-parser",
"description": "Extracts User, WorkingDirectory, and service name from systemd unit files and docker-compose configs.",
"path": "systemd-config-parser/",
"files": [
"app.py:deployment_upload_systemd"
],
"origin": "Nocturne",
"status": "Draft"
}
]
Dependency Scan Identify external services and dependencies
Review this codebase and identify all external dependencies and third-party services it relies on.
This includes:
- External APIs it calls (geocoding, email, payment, etc.)
- Third-party services (CDNs, auth providers, etc.)
- System-level dependencies beyond standard Python/Rust
- Any service that if it went down, this software would be affected
For each dependency, provide:
- name: the service or API name
- purpose: what it's used for in this project
- critical: yes/no — would the app break without it?
Return as a simple text list:
Nominatim — geocoding, address lookup — critical: yes
Mailgun — outgoing email — critical: no (app works without email)
SQLite — primary database — critical: yes