create-pwt 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. package/README.md +51 -0
  2. package/bin/create-pwt +7 -0
  3. package/bin/init.sh +136 -0
  4. package/bin/update.sh +112 -0
  5. package/package.json +22 -0
  6. package/template/.claude/agents/task-agent.md +142 -0
  7. package/template/.claude/settings.json +15 -0
  8. package/template/.claude/skills/analisi/SKILL.md +50 -0
  9. package/template/.claude/skills/architettura/SKILL.md +58 -0
  10. package/template/.claude/skills/blueprint/SKILL.md +85 -0
  11. package/template/.claude/skills/deploy/SKILL.md +63 -0
  12. package/template/.claude/skills/design/SKILL.md +51 -0
  13. package/template/.claude/skills/implementazione/SKILL.md +148 -0
  14. package/template/.claude/skills/implementazione/code-quality-reviewer-prompt.md +83 -0
  15. package/template/.claude/skills/implementazione/spec-reviewer-prompt.md +73 -0
  16. package/template/.claude/skills/legale/SKILL.md +57 -0
  17. package/template/.claude/skills/pianificazione/SKILL.md +88 -0
  18. package/template/.claude/skills/qa/SKILL.md +59 -0
  19. package/template/.claude/skills/ricerca/SKILL.md +50 -0
  20. package/template/.claude/skills/roadmap/SKILL.md +170 -0
  21. package/template/.claude/skills/setup/SKILL.md +128 -0
  22. package/template/.claude/skills/start/SKILL.md +23 -0
  23. package/template/.claude/skills/task/SKILL.md +360 -0
  24. package/template/CLAUDE.md +70 -0
  25. package/template/README.md +59 -0
  26. package/template/STATE.json +44 -0
  27. package/template/project.json +39 -0
  28. package/template/system/preferences.json +92 -0
  29. package/template/system/schemas/state.schema.json +293 -0
  30. package/template/system/schemas/workflow.schema.json +104 -0
  31. package/template/system/workflow-v5.json +1216 -0
@@ -0,0 +1,59 @@
1
+ ---
2
+ name: qa
3
+ description: QA e testing — test funzionali, sicurezza, bug triage — invocato dall'orchestratore /task
4
+ user-invocable: false
5
+ ---
6
+
7
+ <HARD-GATE>
8
+ - NON marcare test come "Pass" senza evidenza di verifica reale. I test non ancora eseguiti devono avere stato vuoto, non "Pass".
9
+ - NON saltare la checklist sicurezza OWASP anche per progetti interni o personali.
10
+ </HARD-GATE>
11
+
12
+ # Skill: QA e testing
13
+
14
+ Sei un agente specializzato in quality assurance per applicazioni web. Produci piani di test strutturati, checklist di sicurezza e report di bug triage.
15
+
16
+ ## Input atteso (passato dall'orchestratore)
17
+ - Feature core da 1.2
18
+ - Flussi utente da 3.1
19
+ - Stack da 1.3
20
+ - Risposte raccolte dall'utente (coverage esistente, browser/device target, bug noti)
21
+
22
+ ## Comportamento
23
+
24
+ ### Strategia di test e test funzionali (task 6.1)
25
+ 1. Definisci la strategia:
26
+ - Unit test: cosa testare (utils, hooks, server actions critiche)
27
+ - Integration test: flussi end-to-end prioritari
28
+ - Manual test: checklist per ogni feature core
29
+ 2. Per ogni feature core, produci una tabella di test funzionali:
30
+
31
+ ```
32
+ | # | Scenario | Precondizioni | Steps | Risultato atteso | Pass/Fail |
33
+ |---|---|---|---|---|---|
34
+ ```
35
+
36
+ 3. Identifica i 5 scenari più critici (quelli che se falliscono bloccano il lancio)
37
+
38
+ ### Test cross-browser/device e sicurezza (task 6.2)
39
+ 1. **Cross-browser matrix**: Chrome, Firefox, Safari, Edge — desktop e mobile
40
+ 2. **Checklist sicurezza** (OWASP Top 10 applicato al progetto):
41
+ - Autenticazione e autorizzazione (RLS Supabase corrette?)
42
+ - Input validation e SQL injection
43
+ - XSS e CSRF
44
+ - Esposizione dati sensibili nelle API
45
+ - Rate limiting
46
+ - Headers di sicurezza (CSP, HSTS, ecc.)
47
+ 3. Produce tabella cross-browser + checklist sicurezza con stato
48
+
49
+ ### Beta test e bug triage (task 6.3)
50
+ 1. Definisci il piano beta: chi, quanti utenti, durata, canale feedback
51
+ 2. Triage bug raccolti (input dall'utente): classifica per severità
52
+ - **Critico**: blocca funzionalità core → fix prima del lancio
53
+ - **Maggiore**: degrada UX → fix se possibile prima del lancio
54
+ - **Minore**: cosmetic/edge case → backlog post-lancio
55
+ 3. Produce: piano beta + tabella bug con priorità
56
+
57
+ ## Output
58
+ Markdown con tabelle. Ogni riga testabile deve avere un campo Pass/Fail da compilare.
59
+ La checklist sicurezza deve essere eseguibile anche senza tool specializzati.
@@ -0,0 +1,50 @@
1
+ ---
2
+ name: ricerca
3
+ description: Ricerca web strutturata (competitor, prezzi servizi) — invocato dall'orchestratore /task
4
+ user-invocable: false
5
+ ---
6
+
7
+ <HARD-GATE>
8
+ - NON produrre output senza aver eseguito almeno una WebSearch reale. I dati su competitor, pricing e mercato devono provenire da fonti verificabili, non dalla conoscenza del modello.
9
+ - NON inventare URL, nomi di prodotto o dati di pricing. Se una ricerca non produce risultati, documentalo come "dato non trovato" invece di fabbricarlo.
10
+ </HARD-GATE>
11
+
12
+ # Skill: Ricerca web strutturata
13
+
14
+ Sei un agente specializzato nella ricerca web. Ricevi contesto dal task orchestratore e produci output strutturato pronto da integrare nell'output della task.
15
+
16
+ ## Input atteso (passato dall'orchestratore)
17
+ - Descrizione del prodotto (da output task dipendenti)
18
+ - Dominio di ricerca (competitor, prezzi servizi, trend di mercato, ecc.)
19
+ - Risposte già raccolte dall'utente (per evitare duplicazioni)
20
+
21
+ ## Comportamento
22
+
23
+ ### Per ricerca competitor (task 0.2)
24
+ 1. Identifica 3–6 prodotti/servizi che risolvono lo stesso problema
25
+ 2. Per ognuno esegui WebSearch: nome, URL, positioning, pricing, punti di forza, punti deboli
26
+ 3. Includi sia competitor diretti (stesso target, stessa soluzione) che indiretti (target diverso o soluzione parziale)
27
+ 4. Produci una tabella markdown:
28
+
29
+ ```
30
+ | Nome | URL | Cosa fa bene | Cosa manca | Pricing |
31
+ |---|---|---|---|---|
32
+ ```
33
+
34
+ 5. Aggiungi sezione **Gap analysis**: cosa nessun competitor fa che il progetto potrebbe fare
35
+
36
+ ### Per ricerca costi e dipendenze tecniche (task 1.4)
37
+ 1. Per ogni servizio nello stack (Supabase, Vercel, Stripe, ecc.): cerca pricing aggiornato
38
+ 2. Identifica limiti dei piani free/starter rilevanti per un MVP
39
+ 3. Segnala eventuali cambi di pricing recenti
40
+ 4. Produce tabella:
41
+
42
+ ```
43
+ | Servizio | Piano consigliato | Costo/mese | Limite critico | Note |
44
+ |---|---|---|---|---|
45
+ ```
46
+
47
+ ## Output
48
+ Markdown strutturato, pronto da incollare nelle sezioni corrispondenti dell'output della task.
49
+ Includi sempre le fonti (URL) per ogni dato ricercato.
50
+ Non aggiungere introduzioni o conclusioni generiche — solo il contenuto richiesto.
@@ -0,0 +1,170 @@
1
+ ---
2
+ name: roadmap
3
+ description: Genera la roadmap custom del progetto selezionando le task rilevanti dal workflow master
4
+ ---
5
+
6
+ # Skill: /roadmap — Generatore roadmap personalizzata
7
+
8
+ Genera una roadmap custom per questo progetto selezionando dal workflow master solo le task realmente necessarie.
9
+
10
+ Invocato manualmente dopo il gate 0.4, oppure con `/roadmap --update` se il profilo progetto è cambiato.
11
+
12
+ ---
13
+
14
+ ## Procedura
15
+
16
+ ### 1. Carica contesto
17
+
18
+ Leggi questi file:
19
+ - `STATE.json`
20
+ - `docs/phases/0/0.1-output.md`
21
+ - `docs/phases/0/0.2-output.md`
22
+ - `docs/phases/0/0.3-output.md`
23
+
24
+ Se uno degli output di fase 0 non esiste, fermati e scrivi:
25
+ > "Mancano gli output della fase 0 (task 0.1/0.2/0.3). Completa la fase 0 prima di generare la roadmap."
26
+
27
+ ### 2. Estrai il profilo progetto
28
+
29
+ Dai tre output, deriva questi 6 valori. Sii deterministico: se l'informazione non è esplicita, usa il valore di default indicato.
30
+
31
+ | Campo | Valori possibili | Default |
32
+ |---|---|---|
33
+ | `audience` | `personal_only` / `internal_team` / `external_users` | `external_users` |
34
+ | `business_model` | `personal_tool` / `no_profit` / `paid_once` / `saas` / `freemium` | `saas` |
35
+ | `has_payments` | `true` / `false` | `true` |
36
+ | `has_ui` | `true` / `false` | `true` |
37
+ | `complexity` | `low` / `medium` / `high` | `medium` |
38
+ | `solo_dev` | `true` / `false` | `true` |
39
+
40
+ ### 3. Applica la decision matrix
41
+
42
+ Per ogni regola: se la condizione è vera, applica gli effetti. Le regole si sommano.
43
+
44
+ **Regola 1 — Tool personale / nessun utente esterno**
45
+ `if audience == "personal_only"`
46
+ - **Skip:** 6.3 (beta test), 7.1 (privacy policy), 7.2 (landing page + social), 7.4 (hypercare + comunicazione lancio)
47
+ - **Simplify:** 6.1 (test funzionali — meno formali), 7.3 (deploy senza setup analytics), 8.1 (KPI informali, no dashboard)
48
+
49
+ **Regola 2 — No UI (API-only o tool CLI)**
50
+ `if has_ui == false`
51
+ - **Skip:** 3.1 (flussi utente), 3.2 (design system + mockup), 3.3 (gate design)
52
+ - **Simplify:** 4.1 (focus su API/DB, sezione architettura UI non necessaria)
53
+
54
+ **Regola 3 — No pagamenti**
55
+ `if has_payments == false`
56
+ - **Simplify:** 1.5 (skip analisi PSD2/Stripe, mantieni solo rischi operativi e GDPR se applicabile)
57
+
58
+ **Regola 4 — Complessità bassa + solo dev**
59
+ `if complexity == "low" AND solo_dev == true`
60
+ - **Simplify:** 2.2 (dipendenze critiche — lista informale, no Gantt), 4.3 (blueprint snello — solo schema DB + API principali)
61
+
62
+ **Regola 5 — No-profit / associazione**
63
+ `if business_model == "no_profit"`
64
+ - **Skip:** 7.2 (landing page commerciale)
65
+ - **Simplify:** 1.5 (vincoli legali diversi — ente non commerciale, non IVA)
66
+
67
+ **Regola 6 — Team (non solo dev)**
68
+ `if solo_dev == false`
69
+ - **Include sempre:** 2.2 (dipendenze critiche — essenziale per coordinamento)
70
+ - **Rimuovi simplify** su 2.2 se applicato da regola 4 (team vince su complessità bassa)
71
+
72
+ **Task sempre incluse (non saltabili):**
73
+ 0.1, 0.2, 0.3, 0.4, 1.1, 1.2, 1.3, 1.6, 2.1, 2.3, 4.1, 4.2, 4.4, 5.1, 5.2, 5.3, 5.4, 6.4, 7.3, 7.5, 8.4
74
+
75
+ ### 4. Costruisci ROADMAP.json
76
+
77
+ ```json
78
+ {
79
+ "_generated_at": "<data odierna>",
80
+ "_note": "Roadmap custom generata dopo fase 0. Modifica manualmente se necessario.",
81
+ "profile": {
82
+ "audience": "<valore>",
83
+ "business_model": "<valore>",
84
+ "has_payments": <bool>,
85
+ "has_ui": <bool>,
86
+ "complexity": "<valore>",
87
+ "solo_dev": <bool>
88
+ },
89
+ "rules_applied": ["<lista regole attivate>"],
90
+ "tasks": {
91
+ "0.1": { "status": "completed" },
92
+ "0.2": { "status": "completed" },
93
+ "0.3": { "status": "completed" },
94
+ "0.4": { "status": "completed" },
95
+ "<id>": { "status": "included" },
96
+ "<id>": { "status": "skipped", "reason": "<motivo>" },
97
+ "<id>": { "status": "simplified", "note": "<cosa semplificare>" }
98
+ }
99
+ }
100
+ ```
101
+
102
+ Includi TUTTE le task del workflow (0.1 → 8.4) con uno status.
103
+
104
+ ### 5. Costruisci ROADMAP.md
105
+
106
+ Formato:
107
+
108
+ ```markdown
109
+ # Roadmap — <Nome progetto>
110
+
111
+ Generata il <data>. Basata sul profilo: <audience> · <business_model> · UI: <sì/no> · Pagamenti: <sì/no> · Complessità: <valore>.
112
+
113
+ ## Task incluse (<N>)
114
+
115
+ | Task | Titolo | Note |
116
+ |---|---|---|
117
+ | 0.1 | Documentare e strutturare l'idea | — |
118
+ ...
119
+
120
+ ## Task semplificate (<N>)
121
+
122
+ | Task | Titolo | Cosa cambia |
123
+ |---|---|---|
124
+ ...
125
+
126
+ ## Task escluse (<N>)
127
+
128
+ | Task | Titolo | Motivo |
129
+ |---|---|---|
130
+ ...
131
+
132
+ ---
133
+ Per reintegrare una task esclusa: modifica manualmente `docs/ROADMAP.json` cambiando lo status in "included".
134
+ Per rigenerare la roadmap: `/roadmap --update`
135
+ ```
136
+
137
+ ### 6. Mostra anteprima e chiedi approvazione
138
+
139
+ Mostra il contenuto di `docs/ROADMAP.md` e scrivi:
140
+
141
+ > "**Roadmap approvata?** Rispondi SÌ per salvare, oppure dimmi cosa modificare."
142
+
143
+ - **Se SÌ** → vai al punto 7
144
+ - **Se modifica** → aggiorna `docs/ROADMAP.json` e `docs/ROADMAP.md`, ri-mostra, ripeti
145
+
146
+ ### 7. Salva e aggiorna STATE.json (solo dopo SÌ esplicito)
147
+
148
+ 1. Salva `docs/ROADMAP.json`
149
+ 2. Salva `docs/ROADMAP.md`
150
+ 3. Aggiorna `STATE.json`:
151
+ - Aggiungi campo `"roadmap_generated": true`
152
+ - Aggiorna `workflow.current_task` a `"1.1"`
153
+ - Aggiorna `workflow.current_phase` a `1`
154
+ - Aggiorna `workflow.phase_name` a `"Definizione e Fattibilità"`
155
+ - Aggiorna `workflow.task_title` a `"Scrivere descrizione completa del progetto"`
156
+ - Aggiorna `last_session`
157
+
158
+ 4. Scrivi:
159
+ > "Roadmap salvata. Nella prossima sessione scrivi: **`/start`**"
160
+
161
+ 5. **FERMATI.**
162
+
163
+ ---
164
+
165
+ ## Comportamento `--update`
166
+
167
+ Se invocato con `/roadmap --update`:
168
+ - Esegui la stessa procedura dall'inizio
169
+ - Se `docs/ROADMAP.json` esiste già, mostra le differenze rispetto alla versione precedente prima di chiedere approvazione
170
+ - Se lo status di una task era stato cambiato manualmente (diverso da quello che la matrix produrrebbe), evidenzialo e chiedi se mantenere la modifica manuale o sovrascrivere
@@ -0,0 +1,128 @@
1
+ ---
2
+ name: setup
3
+ description: Compila interattivamente system/preferences.json per sezione o tutto
4
+ ---
5
+
6
+ # Skill: /setup — Configurazione preferenze progetto
7
+
8
+ Compila interattivamente `system/preferences.json` per questo progetto.
9
+ Può essere invocato direttamente dall'utente o chiamato da `/task` quando mancano campi richiesti.
10
+
11
+ **Argomenti:**
12
+ - `/setup` → compila tutte le sezioni con campi vuoti
13
+ - `/setup identity` → compila solo la sezione identity
14
+ - `/setup stack` → compila solo la sezione stack
15
+ - `/setup deploy` → compila solo la sezione deploy
16
+ - `/setup accounts` → compila solo la sezione accounts
17
+ - `/setup legal` → compila solo la sezione legal
18
+ - `/setup --import <percorso>` → importa preferences.json da un altro progetto
19
+
20
+ ---
21
+
22
+ ## Procedura
23
+
24
+ ### Caso `--import <percorso>`
25
+
26
+ 1. Leggi `<percorso>/system/preferences.json`
27
+ 2. Se esiste: copia il contenuto in `system/preferences.json` del progetto corrente e scrivi:
28
+ > "✓ Preferenze importate da _[percorso]_. Rivedi `system/preferences.json` per verificare."
29
+ 3. Se non esiste: scrivi:
30
+ > "⚠ Nessun preferences.json trovato in _[percorso]_."
31
+ 4. Fermati.
32
+
33
+ ---
34
+
35
+ ### Caso normale (compila sezione/i)
36
+
37
+ #### 1. Leggi lo stato attuale
38
+
39
+ Leggi `system/preferences.json`. Identifica i campi vuoti (`""`) nella/e sezione/i da compilare.
40
+
41
+ Se non ci sono campi vuoti, scrivi:
42
+ > "Le preferenze della sezione _[nome]_ sono già complete. Se vuoi modificarle, editale direttamente in `system/preferences.json`."
43
+ E fermati.
44
+
45
+ #### 2. Compila i campi vuoti uno alla volta
46
+
47
+ Per ogni campo vuoto, poni la domanda corrispondente dalla tabella sotto. Aspetta la risposta prima di procedere al campo successivo.
48
+
49
+ Regole:
50
+ - Se l'utente risponde "salta" o "—" o lascia vuoto: mantieni il campo vuoto e annota
51
+ - Se l'utente dà una risposta: aggiorna subito `system/preferences.json` con quel valore
52
+ - Non porre domande per campi già compilati
53
+ - Non porre domande per campi delle sezioni `conventions` e `ai_preferences` (hanno default validi)
54
+
55
+ #### Domande per sezione
56
+
57
+ **identity**
58
+ | Campo | Domanda |
59
+ |---|---|
60
+ | name | Come ti chiami? (usato nei documenti del progetto) |
61
+ | role | Qual è il tuo ruolo? (es. Founder / Solo Developer, Freelance Dev) |
62
+ | piva | P.IVA o codice fiscale (per privacy policy e documenti legali): |
63
+ | email | Email di contatto pubblica per questo progetto: |
64
+ | website | Sito web o portfolio (opzionale — lascia vuoto se non hai): |
65
+
66
+ **stack**
67
+ | Campo | Domanda |
68
+ |---|---|
69
+ | frontend.framework | Frontend framework? (es. Next.js 15, Nuxt 3, SvelteKit, React + Vite) |
70
+ | frontend.language | Linguaggio? (es. TypeScript, JavaScript) |
71
+ | frontend.ui_library | UI library? (es. shadcn/ui + Tailwind, Chakra UI, nessuna) |
72
+ | frontend.state | State management? (es. Zustand, Jotai, Redux, nessuno) |
73
+ | frontend.forms | Form handling? (es. React Hook Form + Zod, nessuno) |
74
+ | frontend.animations | Animazioni? (es. Framer Motion, nessuna — opzionale) |
75
+ | backend.approach | Backend? (es. Next.js API Routes / Server Actions, Express, FastAPI, solo frontend) |
76
+ | backend.orm | ORM / query builder? (es. Drizzle, Prisma, nessuno) |
77
+ | backend.validation | Validazione dati? (es. Zod, Yup, nessuna) |
78
+ | database.primary | Database principale? (es. Supabase PostgreSQL, PlanetScale, SQLite, nessuno) |
79
+ | database.local_dev | Database in locale? (es. Supabase local via Docker, SQLite file, nessuno) |
80
+ | database.auth | Autenticazione? (es. Supabase Auth, NextAuth, Clerk, nessuna) |
81
+ | payments | Pagamenti? (es. Stripe, LemonSqueezy, nessuno) |
82
+ | email | Email transazionale? (es. Resend, SendGrid, nessuno) |
83
+ | analytics | Analytics? (es. PostHog, Plausible, Google Analytics, nessuno) |
84
+ | error_tracking | Error tracking? (es. Sentry, nessuno) |
85
+ | storage | Storage file? (es. Supabase Storage, S3, nessuno) |
86
+ | search | Ricerca full-text? (es. Supabase FTS, Algolia, nessuna) |
87
+
88
+ **deploy**
89
+ | Campo | Domanda |
90
+ |---|---|
91
+ | frontend | Dove fai il deploy del frontend? (es. Vercel, Netlify, Railway, Fly.io) |
92
+ | database | Dove host il database? (es. Supabase cloud, Railway, self-hosted) |
93
+ | domain_registrar | Dove compri i domini? (es. Namecheap, Cloudflare, Aruba, non so ancora) |
94
+ | github_org_or_user | GitHub username o org per i nuovi repo: |
95
+ | vercel_org | Team/org Vercel (lascia vuoto se usi account personale): |
96
+ | supabase_org | Organization Supabase (lascia vuoto se usi account personale): |
97
+
98
+ **accounts** — chiedi solo gli account rilevanti in base allo stack compilato
99
+ | Campo | Domanda |
100
+ |---|---|
101
+ | github | GitHub username: |
102
+ | vercel | Email o username Vercel: |
103
+ | supabase | Email o username Supabase: |
104
+ | stripe | Email o username Stripe: |
105
+ | resend | Email o username Resend: |
106
+ | posthog | Email o username PostHog: |
107
+ | sentry | Email o username Sentry: |
108
+ | figma | Email o username Figma: |
109
+ | notion | Email o username Notion: |
110
+ | clickup | Email o username ClickUp: |
111
+
112
+ **legal**
113
+ | Campo | Domanda |
114
+ |---|---|
115
+ | privacy_policy_template | Che strumento usi per la privacy policy? (es. Iubenda, template manuale, non so ancora) |
116
+ | cookie_consent | Cookie consent? (es. Iubenda, Cookiebot, nessuno, non so ancora) |
117
+ | tos_needed_by_default | Vuoi T&C di default in questo progetto? (sì/no) |
118
+ | gdpr_applicable | Il GDPR si applica? (sì/no — sì se hai utenti europei) |
119
+
120
+ #### 3. Riepilogo
121
+
122
+ Dopo aver compilato tutti i campi, mostra un riepilogo:
123
+
124
+ > **Preferenze aggiornate:**
125
+ > - ✓ Campo: valore
126
+ > - ⏭ Campo: saltato (da compilare prima della fase X)
127
+ >
128
+ > Per compilare i campi saltati: `/setup [sezione]`
@@ -0,0 +1,23 @@
1
+ ---
2
+ name: start
3
+ description: Avvia la sessione e delega alla task corrente da STATE.json
4
+ ---
5
+
6
+ # Avvio sessione — comando universale
7
+
8
+ Leggi `STATE.json`.
9
+
10
+ ## Se `workflow.status == "not_started"`
11
+
12
+ Esegui la procedura definita in `.claude/skills/task/SKILL.md` usando `0.1` come argomento.
13
+
14
+ ## Se `workflow.status == "in_progress"`
15
+
16
+ Esegui la procedura definita in `.claude/skills/task/SKILL.md` usando il valore di `workflow.current_task` come argomento.
17
+
18
+ ## Se `workflow.status == "completed"`
19
+
20
+ Scrivi:
21
+ > "Il progetto **[project_name]** è completato. Tutte le task del workflow sono state eseguite."
22
+
23
+ Fermati.