afkaar-gen 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.
package/README.md ADDED
@@ -0,0 +1,65 @@
1
+ # afkaar-gen — AI Agent Skill
2
+
3
+ Generate beautiful PHP flat-file business websites (digital agency style) with an AI coding agent.
4
+
5
+ ## Installation
6
+
7
+ ### For AI agents (Claude, opencode, etc.)
8
+
9
+ This skill can be installed via npm:
10
+
11
+ ```bash
12
+ npx opencode add skill afkaar-gen
13
+ ```
14
+
15
+ Or manually by copying to your skills directory:
16
+
17
+ ```bash
18
+ git clone https://github.com/iyed/afkaar_gen.git ~/.claude/skills/afkaar-gen
19
+ ```
20
+
21
+ ### Usage with AI
22
+
23
+ Ask your AI agent:
24
+
25
+ > "Generate a website like afkars for my business"
26
+ > "Create a digital agency website"
27
+ > "Use afkaar-gen to build my site"
28
+
29
+ The agent will:
30
+ 1. Scan your message for uploads (logos, screenshots, URLs)
31
+ 2. Ask you simple selection-based questions (A/B/C/D)
32
+ 3. Generate a complete PHP flat-file site
33
+ 4. Apply security best practices and SEO
34
+
35
+ ## Features
36
+
37
+ - 4 inspiration modes: questionnaire, URL fetch, Figma, iteration
38
+ - 17 questions in 4 grouped steps with A/B/C/D selections
39
+ - PHP flat-file stack (no database needed, Hostinger-ready)
40
+ - 20 security measures (CSRF, bcrypt, CSP, rate limiting, etc.)
41
+ - SEO: sitemap.xml, JSON-LD, Open Graph, GTM
42
+ - Lazy loading, responsive design, accessibility
43
+ - Optional admin panel (CRUD services/references/leads/blog)
44
+ - Customizable services and integrations (WhatsApp, Calendly, Stripe...)
45
+
46
+ ## Structure
47
+
48
+ ```
49
+ afkaar-gen/
50
+ ├── SKILL.md # Main skill instructions
51
+ ├── package.json # npm package
52
+ ├── references/
53
+ │ ├── architecture.md # Full directory structure & schemas
54
+ │ ├── security-checklist.md # 20 security measures
55
+ │ ├── seo-guide.md # SEO, sitemap, JSON-LD
56
+ │ ├── questions.md # 17 selection-based questions
57
+ │ ├── integrations.md # WhatsApp, Stripe, Calendly...
58
+ │ ├── inspiration-mode.md # URL fetch & analysis
59
+ │ ├── figma-mode.md # Figma screenshot/API
60
+ │ └── iteration-mode.md # Modify existing site
61
+ ```
62
+
63
+ ## License
64
+
65
+ MIT
package/SKILL.md ADDED
@@ -0,0 +1,80 @@
1
+ ---
2
+ name: afkaar-gen
3
+ description: >
4
+ Génère un site vitrine PHP flat-file (type agence digitale) en posant
5
+ des questions simples. Utilise quand l'utilisateur dit : "génère un
6
+ site", "create a site like afkars", "comme afkars", ou donne une
7
+ URL/mockup d'inspiration.
8
+ ---
9
+
10
+ # afkaar-gen — Générateur de site vitrine PHP flat-file
11
+
12
+ ## Règles de dialogue (TRÈS IMPORTANT)
13
+
14
+ - **AVANT toute question, scanner les uploads du message** : base64 images (les lire via Read), URLs, fichiers attachés
15
+ - **Ne JAMAIS demander ce qui a déjà été fourni** — si l'utilisateur a envoyé un logo en image, ne pas demander "avez-vous un logo ?"
16
+ - **Toujours proposer des choix (A/B/C/D)** — l'utilisateur répond par une lettre
17
+ - **Ne jamais poser une question ouverte sans suggestions**
18
+ - **Si l'utilisateur répond hors choix** → l'accepter et continuer
19
+ - **Si "je sais pas"** → prendre l'option par défaut (marquée ★)
20
+ - **Regrouper 3-4 questions par message**, pas 1 par 1
21
+ - **Langage simple** : pas de "slug", "JSON", "SEO" — dire "adresse de la page", "texte pour Google"
22
+ - **Enchaîner** : question → réponse → immédiatement la suivante
23
+
24
+ ## Flux
25
+
26
+ 0. **Scanner les uploads déjà présents** (AVANT toute question !) :
27
+ - Si le message contient une image base64 → la lire avec l'outil Read (Claude voit l'image), extraire logo, couleurs, style
28
+ - Si le message contient une URL (http/https) → mode inspiration URL, fetch + analyse
29
+ - Si le message contient un lien Figma → mode Figma (demander screenshot si pas token)
30
+ - Si le message contient des fichiers attachés → les lire et extraire les infos
31
+ - Les infos trouvées pré-remplissent le questionnaire → l'agent ne repose pas les questions déjà répondues
32
+ 1. **Détecter langue** (FR/EN). Si indéterminé → FR.
33
+ 2. **Détecter le mode** (non fait à l'étape 0) :
34
+ - Sinon → mode questionnaire
35
+ 3. **Lancer questionnaire** (4 étapes, TOUJOURS avec suggestions A/B/C/D, voir `references/questions.md`)
36
+ - **Ne PAS reposer une question si l'utilisateur a déjà fourni l'info** (logo, URL, couleurs...)
37
+ 4. **Afficher résumé structuré**, demander confirmation
38
+ 5. **Générer le site** (structure dans `references/architecture.md`)
39
+ 6. **Valider** (`php -l`, checklist sécurité, credentials dans config.php uniquement)
40
+ 7. **README + instructions déploiement**
41
+
42
+ ## Règles absolues
43
+
44
+ - Chaque `<img>` DOIT avoir `loading="lazy"` + `decoding="async"`
45
+ - Tous les credentials (API keys, tokens, passwords) UNIQUEMENT dans `config.php`
46
+ - Les fichiers `data/*.json` ne contiennent JAMAIS de secrets
47
+ - Tout output utilisateur passe par `htmlspecialchars()` (helper `e()`)
48
+ - CSRF token 32 bytes sur TOUS les formulaires
49
+ - Anti brute-force : session (5/10min) + IP (12/15min)
50
+ - Honeypot + timer 3s sur formulaire contact
51
+ - `.htaccess` bloque `data/`, `core/`, `templates/`
52
+ - Aucun commentaire dans le code généré
53
+ - PHP `declare(strict_types=1)` en tête de chaque fichier
54
+ - Pas de mention d'hébergeur spécifique dans le code
55
+
56
+ ## Si mode "itération" (modifier site existant)
57
+
58
+ - Lire les fichiers existants
59
+ - Appliquer uniquement les modifications demandées
60
+ - Ne pas régénérer l'intégralité
61
+
62
+ ## Validation post-génération
63
+
64
+ Vérifier que :
65
+ - `php -l` passe sur tous les fichiers `.php`
66
+ - `index.php` ne fait pas d'erreur PHP
67
+ - `config.php` a `APP_URL`, `MAIL_TO`, `MAIL_FROM` définis
68
+ - `.htaccess` bloque `data/`, `core/`, `templates/`
69
+ - Aucun mot de passe / clé API dans `data/*.json`
70
+ - Toutes les images ont `loading="lazy"`
71
+ - Le formulaire contact a `csrf_check()`
72
+ - Les templates utilisent `e()` pour tout output
73
+ - Le `sitemap.xml` route existe dans le routeur
74
+
75
+ ## Gestion des fichiers
76
+
77
+ Pour toute opération de fichier, utiliser les outils suivants :
78
+ - **Créer un dossier** : `New-Item -ItemType Directory -Path "chemin" -Force`
79
+ - **Créer/écrire un fichier** : utiliser l'outil Write
80
+ - **Copier un template** : lire le fichier source avec Read, puis écrire avec Write
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env node
2
+ const { exec } = require('child_process');
3
+ const path = require('path');
4
+ const htmlPath = path.join(__dirname, '..', 'interactive.html');
5
+ const cmd = process.platform === 'win32' ? `start "" "${htmlPath}"` :
6
+ process.platform === 'darwin' ? `open "${htmlPath}"` :
7
+ `xdg-open "${htmlPath}"`;
8
+ exec(cmd, err => {
9
+ if (err) console.log('Ouvrez ce fichier dans votre navigateur :\n' + htmlPath);
10
+ });