Repository files navigation

⚡ ClickGenerator

Plateforme open-source de load testing, synthetic monitoring, audit SEO, accessibilité et sécurité — pilotée par un navigateur réel (Playwright), avec dashboard web, opérations en masse, multi-région et planification.

CIPythonFastAPIPlaywrightTestsLicensePRs welcomeGitHub stars

ClickGenerator mesure les performances réelles d'un site (Core Web Vitals via la lib officielle Google web-vitals), audite son SEO et son accessibilité, teste sa résilience sous charge, scanne sa posture serveur/sécurité, et produit des rapports — le tout en self-host, sans dépendance cloud.

Dashboard ClickGenerator


⚖️ Usage responsable — à lire avant tout

ClickGenerator inclut du load testing et du scan de sécurité défensif. Ces capacités ne doivent être utilisées que sur des systèmes que vous possédez ou que vous êtes explicitement autorisé à tester (mandat écrit pour des sites clients). Un garde-fou AUTH_ALLOWLIST permet de restreindre les opérations intrusives aux domaines autorisés. Voir SECURITY.md.

Le projet ne fournit volontairement pas : DoS/flood sans limite, payloads d'exploitation, brute-force, ni évasion de détection. Voir docs/SECURITY-TOOLS.md.


✨ Fonctionnalités

DomaineDétail
PerformanceCore Web Vitals précis (LCP/INP/CLS/FCP/TTFB via web-vitals), TTFB, temps de chargement, poids, requêtes, multi-passes médiane, notation CWV /100, screenshot
SEOmeta/title/description, canonical, hreflang, structured data (extruct : JSON-LD/OG/microdata), robots.txt (protego), sitemaps, liens cassés, score on-page
Accessibilitéaxe-core (WCAG 2.x A/AA) injecté dans la page
Audit sitemulti-pages (découverte + audit + agrégat) + rapport HTML & PDF
Load testingasync (httpx) : throughput, p50/p95/p99, taux d'erreur, garde-fous
Charge progressivepaliers de concurrence → asymétrie charge↔latence + détection du genou + détection de défense (429/WAF)
Scan serveurTLS/cert, en-têtes sécurité, compression, HTTP/2, redirections, score
Sécurité (défensif)grade A→F : TLS faible, en-têtes, cookies, fichiers exposés, divulgation version, security.txt
Multi-régionmesure via proxies par région + comparaison (IP/LCP/score)
Bulkaudit/scan/perf en masse sur une liste d'URLs ou toutes les cibles d'un client/projet
Multi-clientsCRUD Clients → Projets → Cibles, historique d'audits persisté
Planificationaudits récurrents (scheduler in-process) + alerting sur seuils
DashboardUI web 10 onglets servie par le moteur (zéro build)

🏗️ Architecture

ClickGenerator/
├── engine/ # moteur Python : FastAPI + Playwright + SQLAlchemy async
│ ├── app/
│ │ ├── runner/ # mesure navigateur (web-vitals, métriques)
│ │ ├── seo/ # SEO + accessibilité (axe-core, extruct, protego)
│ │ ├── security_scan.py · server_scan.py · loadtest.py · ramp.py
│ │ ├── bulk.py · scheduler.py · alerting.py · authz.py
│ │ ├── routes/ # API REST
│ │ ├── static/ # dashboard web (index.html)
│ │ └── main.py · cli.py
│ ├── tests/ # 78 tests (pytest)
│ └── Dockerfile
├── web/ # scaffold Next.js (dashboard multi-tenant — amorce)
├── autoclicker/ # module annexe : autoclicker local (jeux idle)
└── docs/ # AUDIT, TOOLS, SECURITY-TOOLS, PHASES

🚀 Démarrage rapide

git clone https://github.com/SoCloseSociety/ClickGenerator.git
cd ClickGenerator/engine
python3.13 -m venv venv &&source venv/bin/activate
pip install -r requirements.txt
playwright install chromium
cp .env.example .env # SQLite par défaut, zéro config# Dashboard web (choisit un port libre automatiquement)
./run-dashboard.sh # -> http://localhost:8200# Ou en CLI
python -m app.cli audit https://example.com # perf + SEO + a11y
python -m app.cli security-scan https://example.com # grade sécurité A-F
python -m app.cli ramp https://example.com # charge progressive
python -m app.cli site-audit https://example.com --pdf rapport.pdf

⚠️ Python 3.13 recommandé (3.14 n'a pas encore tous les wheels).

Docker

cd engine && docker build -t clickgenerator .
docker run -p 8000:8000 clickgenerator # -> http://localhost:8000

Tests

cd engine && pip install -r requirements-dev.txt
pytest # tout (avec navigateur)
pytest -m "not integration"# rapide, sans navigateur

🔧 Configuration

Tout via engine/.env (voir .env.example) : base (SQLite → Postgres via DATABASE_URL), navigateur, timeouts/retries, concurrence, rétention des screenshots, seuils d'alerte, et AUTH_ALLOWLIST (garde-fou). GET /config expose les réglages effectifs (sans secret).

🗺️ Roadmap & état

Voir docs/PHASES.md. Phases 0–5 ✅, dashboard 10 onglets, scan serveur/sécurité, bulk, charge asymétrique, Docker + CI. Reste : Next.js multi-tenant complet, reporting avancé.

🤝 Contribuer & communauté

Les contributions sont les bienvenues ! 🎉

🙏 Crédits / dépendances notables

Playwright, FastAPI, SQLAlchemy, web-vitals (Apache-2.0), axe-core (MPL-2.0), extruct, protego, trafilatura, httpx, typer, loguru. Voir NOTICE.

📄 Licence

MIT © SoClose Society.

About

⚡ Open-source platform for load testing, synthetic monitoring, SEO/accessibility audits & defensive security scanning — Playwright-powered, self-hosted.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

⚡ ClickGenerator

Plateforme open-source de load testing, synthetic monitoring, audit SEO, accessibilité et sécurité — pilotée par un navigateur réel (Playwright), avec dashboard web, opérations en masse, multi-région et planification.

CIPythonFastAPIPlaywrightTestsLicensePRs welcomeGitHub stars

ClickGenerator mesure les performances réelles d'un site (Core Web Vitals via la lib officielle Google web-vitals), audite son SEO et son accessibilité, teste sa résilience sous charge, scanne sa posture serveur/sécurité, et produit des rapports — le tout en self-host, sans dépendance cloud.

Dashboard ClickGenerator


⚖️ Usage responsable — à lire avant tout

ClickGenerator inclut du load testing et du scan de sécurité défensif. Ces capacités ne doivent être utilisées que sur des systèmes que vous possédez ou que vous êtes explicitement autorisé à tester (mandat écrit pour des sites clients). Un garde-fou AUTH_ALLOWLIST permet de restreindre les opérations intrusives aux domaines autorisés. Voir SECURITY.md.

Le projet ne fournit volontairement pas : DoS/flood sans limite, payloads d'exploitation, brute-force, ni évasion de détection. Voir docs/SECURITY-TOOLS.md.


✨ Fonctionnalités

DomaineDétail
PerformanceCore Web Vitals précis (LCP/INP/CLS/FCP/TTFB via web-vitals), TTFB, temps de chargement, poids, requêtes, multi-passes médiane, notation CWV /100, screenshot
SEOmeta/title/description, canonical, hreflang, structured data (extruct : JSON-LD/OG/microdata), robots.txt (protego), sitemaps, liens cassés, score on-page
Accessibilitéaxe-core (WCAG 2.x A/AA) injecté dans la page
Audit sitemulti-pages (découverte + audit + agrégat) + rapport HTML & PDF
Load testingasync (httpx) : throughput, p50/p95/p99, taux d'erreur, garde-fous
Charge progressivepaliers de concurrence → asymétrie charge↔latence + détection du genou + détection de défense (429/WAF)
Scan serveurTLS/cert, en-têtes sécurité, compression, HTTP/2, redirections, score
Sécurité (défensif)grade A→F : TLS faible, en-têtes, cookies, fichiers exposés, divulgation version, security.txt
Multi-régionmesure via proxies par région + comparaison (IP/LCP/score)
Bulkaudit/scan/perf en masse sur une liste d'URLs ou toutes les cibles d'un client/projet
Multi-clientsCRUD Clients → Projets → Cibles, historique d'audits persisté
Planificationaudits récurrents (scheduler in-process) + alerting sur seuils
DashboardUI web 10 onglets servie par le moteur (zéro build)

🏗️ Architecture

ClickGenerator/
├── engine/ # moteur Python : FastAPI + Playwright + SQLAlchemy async
│ ├── app/
│ │ ├── runner/ # mesure navigateur (web-vitals, métriques)
│ │ ├── seo/ # SEO + accessibilité (axe-core, extruct, protego)
│ │ ├── security_scan.py · server_scan.py · loadtest.py · ramp.py
│ │ ├── bulk.py · scheduler.py · alerting.py · authz.py
│ │ ├── routes/ # API REST
│ │ ├── static/ # dashboard web (index.html)
│ │ └── main.py · cli.py
│ ├── tests/ # 78 tests (pytest)
│ └── Dockerfile
├── web/ # scaffold Next.js (dashboard multi-tenant — amorce)
├── autoclicker/ # module annexe : autoclicker local (jeux idle)
└── docs/ # AUDIT, TOOLS, SECURITY-TOOLS, PHASES

🚀 Démarrage rapide

git clone https://github.com/SoCloseSociety/ClickGenerator.git
cd ClickGenerator/engine
python3.13 -m venv venv &&source venv/bin/activate
pip install -r requirements.txt
playwright install chromium
cp .env.example .env # SQLite par défaut, zéro config# Dashboard web (choisit un port libre automatiquement)
./run-dashboard.sh # -> http://localhost:8200# Ou en CLI
python -m app.cli audit https://example.com # perf + SEO + a11y
python -m app.cli security-scan https://example.com # grade sécurité A-F
python -m app.cli ramp https://example.com # charge progressive
python -m app.cli site-audit https://example.com --pdf rapport.pdf

⚠️ Python 3.13 recommandé (3.14 n'a pas encore tous les wheels).

Docker

cd engine && docker build -t clickgenerator .
docker run -p 8000:8000 clickgenerator # -> http://localhost:8000

Tests

cd engine && pip install -r requirements-dev.txt
pytest # tout (avec navigateur)
pytest -m "not integration"# rapide, sans navigateur

🔧 Configuration

Tout via engine/.env (voir .env.example) : base (SQLite → Postgres via DATABASE_URL), navigateur, timeouts/retries, concurrence, rétention des screenshots, seuils d'alerte, et AUTH_ALLOWLIST (garde-fou). GET /config expose les réglages effectifs (sans secret).

🗺️ Roadmap & état

Voir docs/PHASES.md. Phases 0–5 ✅, dashboard 10 onglets, scan serveur/sécurité, bulk, charge asymétrique, Docker + CI. Reste : Next.js multi-tenant complet, reporting avancé.

🤝 Contribuer & communauté

Les contributions sont les bienvenues ! 🎉

🙏 Crédits / dépendances notables

Playwright, FastAPI, SQLAlchemy, web-vitals (Apache-2.0), axe-core (MPL-2.0), extruct, protego, trafilatura, httpx, typer, loguru. Voir NOTICE.

📄 Licence

MIT © SoClose Society.

About

⚡ Open-source platform for load testing, synthetic monitoring, SEO/accessibility audits & defensive security scanning — Playwright-powered, self-hosted.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

⚡ ClickGenerator

Plateforme open-source de load testing, synthetic monitoring, audit SEO, accessibilité et sécurité — pilotée par un navigateur réel (Playwright), avec dashboard web, opérations en masse, multi-région et planification.

CIPythonFastAPIPlaywrightTestsLicensePRs welcomeGitHub stars

ClickGenerator mesure les performances réelles d'un site (Core Web Vitals via la lib officielle Google web-vitals), audite son SEO et son accessibilité, teste sa résilience sous charge, scanne sa posture serveur/sécurité, et produit des rapports — le tout en self-host, sans dépendance cloud.

Dashboard ClickGenerator


⚖️ Usage responsable — à lire avant tout

ClickGenerator inclut du load testing et du scan de sécurité défensif. Ces capacités ne doivent être utilisées que sur des systèmes que vous possédez ou que vous êtes explicitement autorisé à tester (mandat écrit pour des sites clients). Un garde-fou AUTH_ALLOWLIST permet de restreindre les opérations intrusives aux domaines autorisés. Voir SECURITY.md.

Le projet ne fournit volontairement pas : DoS/flood sans limite, payloads d'exploitation, brute-force, ni évasion de détection. Voir docs/SECURITY-TOOLS.md.


✨ Fonctionnalités

DomaineDétail
PerformanceCore Web Vitals précis (LCP/INP/CLS/FCP/TTFB via web-vitals), TTFB, temps de chargement, poids, requêtes, multi-passes médiane, notation CWV /100, screenshot
SEOmeta/title/description, canonical, hreflang, structured data (extruct : JSON-LD/OG/microdata), robots.txt (protego), sitemaps, liens cassés, score on-page
Accessibilitéaxe-core (WCAG 2.x A/AA) injecté dans la page
Audit sitemulti-pages (découverte + audit + agrégat) + rapport HTML & PDF
Load testingasync (httpx) : throughput, p50/p95/p99, taux d'erreur, garde-fous
Charge progressivepaliers de concurrence → asymétrie charge↔latence + détection du genou + détection de défense (429/WAF)
Scan serveurTLS/cert, en-têtes sécurité, compression, HTTP/2, redirections, score
Sécurité (défensif)grade A→F : TLS faible, en-têtes, cookies, fichiers exposés, divulgation version, security.txt
Multi-régionmesure via proxies par région + comparaison (IP/LCP/score)
Bulkaudit/scan/perf en masse sur une liste d'URLs ou toutes les cibles d'un client/projet
Multi-clientsCRUD Clients → Projets → Cibles, historique d'audits persisté
Planificationaudits récurrents (scheduler in-process) + alerting sur seuils
DashboardUI web 10 onglets servie par le moteur (zéro build)

🏗️ Architecture

ClickGenerator/
├── engine/ # moteur Python : FastAPI + Playwright + SQLAlchemy async
│ ├── app/
│ │ ├── runner/ # mesure navigateur (web-vitals, métriques)
│ │ ├── seo/ # SEO + accessibilité (axe-core, extruct, protego)
│ │ ├── security_scan.py · server_scan.py · loadtest.py · ramp.py
│ │ ├── bulk.py · scheduler.py · alerting.py · authz.py
│ │ ├── routes/ # API REST
│ │ ├── static/ # dashboard web (index.html)
│ │ └── main.py · cli.py
│ ├── tests/ # 78 tests (pytest)
│ └── Dockerfile
├── web/ # scaffold Next.js (dashboard multi-tenant — amorce)
├── autoclicker/ # module annexe : autoclicker local (jeux idle)
└── docs/ # AUDIT, TOOLS, SECURITY-TOOLS, PHASES

🚀 Démarrage rapide

git clone https://github.com/SoCloseSociety/ClickGenerator.git
cd ClickGenerator/engine
python3.13 -m venv venv &&source venv/bin/activate
pip install -r requirements.txt
playwright install chromium
cp .env.example .env # SQLite par défaut, zéro config# Dashboard web (choisit un port libre automatiquement)
./run-dashboard.sh # -> http://localhost:8200# Ou en CLI
python -m app.cli audit https://example.com # perf + SEO + a11y
python -m app.cli security-scan https://example.com # grade sécurité A-F
python -m app.cli ramp https://example.com # charge progressive
python -m app.cli site-audit https://example.com --pdf rapport.pdf

⚠️ Python 3.13 recommandé (3.14 n'a pas encore tous les wheels).

Docker

cd engine && docker build -t clickgenerator .
docker run -p 8000:8000 clickgenerator # -> http://localhost:8000

Tests

cd engine && pip install -r requirements-dev.txt
pytest # tout (avec navigateur)
pytest -m "not integration"# rapide, sans navigateur

🔧 Configuration

Tout via engine/.env (voir .env.example) : base (SQLite → Postgres via DATABASE_URL), navigateur, timeouts/retries, concurrence, rétention des screenshots, seuils d'alerte, et AUTH_ALLOWLIST (garde-fou). GET /config expose les réglages effectifs (sans secret).

🗺️ Roadmap & état

Voir docs/PHASES.md. Phases 0–5 ✅, dashboard 10 onglets, scan serveur/sécurité, bulk, charge asymétrique, Docker + CI. Reste : Next.js multi-tenant complet, reporting avancé.

🤝 Contribuer & communauté

Les contributions sont les bienvenues ! 🎉

🙏 Crédits / dépendances notables

Playwright, FastAPI, SQLAlchemy, web-vitals (Apache-2.0), axe-core (MPL-2.0), extruct, protego, trafilatura, httpx, typer, loguru. Voir NOTICE.

📄 Licence

MIT © SoClose Society.

About

⚡ Open-source platform for load testing, synthetic monitoring, SEO/accessibility audits & defensive security scanning — Playwright-powered, self-hosted.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

⚡ ClickGenerator

Plateforme open-source de load testing, synthetic monitoring, audit SEO, accessibilité et sécurité — pilotée par un navigateur réel (Playwright), avec dashboard web, opérations en masse, multi-région et planification.

CIPythonFastAPIPlaywrightTestsLicensePRs welcomeGitHub stars

ClickGenerator mesure les performances réelles d'un site (Core Web Vitals via la lib officielle Google web-vitals), audite son SEO et son accessibilité, teste sa résilience sous charge, scanne sa posture serveur/sécurité, et produit des rapports — le tout en self-host, sans dépendance cloud.

Dashboard ClickGenerator


⚖️ Usage responsable — à lire avant tout

ClickGenerator inclut du load testing et du scan de sécurité défensif. Ces capacités ne doivent être utilisées que sur des systèmes que vous possédez ou que vous êtes explicitement autorisé à tester (mandat écrit pour des sites clients). Un garde-fou AUTH_ALLOWLIST permet de restreindre les opérations intrusives aux domaines autorisés. Voir SECURITY.md.

Le projet ne fournit volontairement pas : DoS/flood sans limite, payloads d'exploitation, brute-force, ni évasion de détection. Voir docs/SECURITY-TOOLS.md.


✨ Fonctionnalités

DomaineDétail
PerformanceCore Web Vitals précis (LCP/INP/CLS/FCP/TTFB via web-vitals), TTFB, temps de chargement, poids, requêtes, multi-passes médiane, notation CWV /100, screenshot
SEOmeta/title/description, canonical, hreflang, structured data (extruct : JSON-LD/OG/microdata), robots.txt (protego), sitemaps, liens cassés, score on-page
Accessibilitéaxe-core (WCAG 2.x A/AA) injecté dans la page
Audit sitemulti-pages (découverte + audit + agrégat) + rapport HTML & PDF
Load testingasync (httpx) : throughput, p50/p95/p99, taux d'erreur, garde-fous
Charge progressivepaliers de concurrence → asymétrie charge↔latence + détection du genou + détection de défense (429/WAF)
Scan serveurTLS/cert, en-têtes sécurité, compression, HTTP/2, redirections, score
Sécurité (défensif)grade A→F : TLS faible, en-têtes, cookies, fichiers exposés, divulgation version, security.txt
Multi-régionmesure via proxies par région + comparaison (IP/LCP/score)
Bulkaudit/scan/perf en masse sur une liste d'URLs ou toutes les cibles d'un client/projet
Multi-clientsCRUD Clients → Projets → Cibles, historique d'audits persisté
Planificationaudits récurrents (scheduler in-process) + alerting sur seuils
DashboardUI web 10 onglets servie par le moteur (zéro build)

🏗️ Architecture

ClickGenerator/
├── engine/ # moteur Python : FastAPI + Playwright + SQLAlchemy async
│ ├── app/
│ │ ├── runner/ # mesure navigateur (web-vitals, métriques)
│ │ ├── seo/ # SEO + accessibilité (axe-core, extruct, protego)
│ │ ├── security_scan.py · server_scan.py · loadtest.py · ramp.py
│ │ ├── bulk.py · scheduler.py · alerting.py · authz.py
│ │ ├── routes/ # API REST
│ │ ├── static/ # dashboard web (index.html)
│ │ └── main.py · cli.py
│ ├── tests/ # 78 tests (pytest)
│ └── Dockerfile
├── web/ # scaffold Next.js (dashboard multi-tenant — amorce)
├── autoclicker/ # module annexe : autoclicker local (jeux idle)
└── docs/ # AUDIT, TOOLS, SECURITY-TOOLS, PHASES

🚀 Démarrage rapide

git clone https://github.com/SoCloseSociety/ClickGenerator.git
cd ClickGenerator/engine
python3.13 -m venv venv &&source venv/bin/activate
pip install -r requirements.txt
playwright install chromium
cp .env.example .env # SQLite par défaut, zéro config# Dashboard web (choisit un port libre automatiquement)
./run-dashboard.sh # -> http://localhost:8200# Ou en CLI
python -m app.cli audit https://example.com # perf + SEO + a11y
python -m app.cli security-scan https://example.com # grade sécurité A-F
python -m app.cli ramp https://example.com # charge progressive
python -m app.cli site-audit https://example.com --pdf rapport.pdf

⚠️ Python 3.13 recommandé (3.14 n'a pas encore tous les wheels).

Docker

cd engine && docker build -t clickgenerator .
docker run -p 8000:8000 clickgenerator # -> http://localhost:8000

Tests

cd engine && pip install -r requirements-dev.txt
pytest # tout (avec navigateur)
pytest -m "not integration"# rapide, sans navigateur

🔧 Configuration

Tout via engine/.env (voir .env.example) : base (SQLite → Postgres via DATABASE_URL), navigateur, timeouts/retries, concurrence, rétention des screenshots, seuils d'alerte, et AUTH_ALLOWLIST (garde-fou). GET /config expose les réglages effectifs (sans secret).

🗺️ Roadmap & état

Voir docs/PHASES.md. Phases 0–5 ✅, dashboard 10 onglets, scan serveur/sécurité, bulk, charge asymétrique, Docker + CI. Reste : Next.js multi-tenant complet, reporting avancé.

🤝 Contribuer & communauté

Les contributions sont les bienvenues ! 🎉

🙏 Crédits / dépendances notables

Playwright, FastAPI, SQLAlchemy, web-vitals (Apache-2.0), axe-core (MPL-2.0), extruct, protego, trafilatura, httpx, typer, loguru. Voir NOTICE.

📄 Licence

MIT © SoClose Society.

About

⚡ Open-source platform for load testing, synthetic monitoring, SEO/accessibility audits & defensive security scanning — Playwright-powered, self-hosted.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

⚡ ClickGenerator

Plateforme open-source de load testing, synthetic monitoring, audit SEO, accessibilité et sécurité — pilotée par un navigateur réel (Playwright), avec dashboard web, opérations en masse, multi-région et planification.

CIPythonFastAPIPlaywrightTestsLicensePRs welcomeGitHub stars

ClickGenerator mesure les performances réelles d'un site (Core Web Vitals via la lib officielle Google web-vitals), audite son SEO et son accessibilité, teste sa résilience sous charge, scanne sa posture serveur/sécurité, et produit des rapports — le tout en self-host, sans dépendance cloud.

Dashboard ClickGenerator


⚖️ Usage responsable — à lire avant tout

ClickGenerator inclut du load testing et du scan de sécurité défensif. Ces capacités ne doivent être utilisées que sur des systèmes que vous possédez ou que vous êtes explicitement autorisé à tester (mandat écrit pour des sites clients). Un garde-fou AUTH_ALLOWLIST permet de restreindre les opérations intrusives aux domaines autorisés. Voir SECURITY.md.

Le projet ne fournit volontairement pas : DoS/flood sans limite, payloads d'exploitation, brute-force, ni évasion de détection. Voir docs/SECURITY-TOOLS.md.


✨ Fonctionnalités

DomaineDétail
PerformanceCore Web Vitals précis (LCP/INP/CLS/FCP/TTFB via web-vitals), TTFB, temps de chargement, poids, requêtes, multi-passes médiane, notation CWV /100, screenshot
SEOmeta/title/description, canonical, hreflang, structured data (extruct : JSON-LD/OG/microdata), robots.txt (protego), sitemaps, liens cassés, score on-page
Accessibilitéaxe-core (WCAG 2.x A/AA) injecté dans la page
Audit sitemulti-pages (découverte + audit + agrégat) + rapport HTML & PDF
Load testingasync (httpx) : throughput, p50/p95/p99, taux d'erreur, garde-fous
Charge progressivepaliers de concurrence → asymétrie charge↔latence + détection du genou + détection de défense (429/WAF)
Scan serveurTLS/cert, en-têtes sécurité, compression, HTTP/2, redirections, score
Sécurité (défensif)grade A→F : TLS faible, en-têtes, cookies, fichiers exposés, divulgation version, security.txt
Multi-régionmesure via proxies par région + comparaison (IP/LCP/score)
Bulkaudit/scan/perf en masse sur une liste d'URLs ou toutes les cibles d'un client/projet
Multi-clientsCRUD Clients → Projets → Cibles, historique d'audits persisté
Planificationaudits récurrents (scheduler in-process) + alerting sur seuils
DashboardUI web 10 onglets servie par le moteur (zéro build)

🏗️ Architecture

ClickGenerator/
├── engine/ # moteur Python : FastAPI + Playwright + SQLAlchemy async
│ ├── app/
│ │ ├── runner/ # mesure navigateur (web-vitals, métriques)
│ │ ├── seo/ # SEO + accessibilité (axe-core, extruct, protego)
│ │ ├── security_scan.py · server_scan.py · loadtest.py · ramp.py
│ │ ├── bulk.py · scheduler.py · alerting.py · authz.py
│ │ ├── routes/ # API REST
│ │ ├── static/ # dashboard web (index.html)
│ │ └── main.py · cli.py
│ ├── tests/ # 78 tests (pytest)
│ └── Dockerfile
├── web/ # scaffold Next.js (dashboard multi-tenant — amorce)
├── autoclicker/ # module annexe : autoclicker local (jeux idle)
└── docs/ # AUDIT, TOOLS, SECURITY-TOOLS, PHASES

🚀 Démarrage rapide

git clone https://github.com/SoCloseSociety/ClickGenerator.git
cd ClickGenerator/engine
python3.13 -m venv venv &&source venv/bin/activate
pip install -r requirements.txt
playwright install chromium
cp .env.example .env # SQLite par défaut, zéro config# Dashboard web (choisit un port libre automatiquement)
./run-dashboard.sh # -> http://localhost:8200# Ou en CLI
python -m app.cli audit https://example.com # perf + SEO + a11y
python -m app.cli security-scan https://example.com # grade sécurité A-F
python -m app.cli ramp https://example.com # charge progressive
python -m app.cli site-audit https://example.com --pdf rapport.pdf

⚠️ Python 3.13 recommandé (3.14 n'a pas encore tous les wheels).

Docker

cd engine && docker build -t clickgenerator .
docker run -p 8000:8000 clickgenerator # -> http://localhost:8000

Tests

cd engine && pip install -r requirements-dev.txt
pytest # tout (avec navigateur)
pytest -m "not integration"# rapide, sans navigateur

🔧 Configuration

Tout via engine/.env (voir .env.example) : base (SQLite → Postgres via DATABASE_URL), navigateur, timeouts/retries, concurrence, rétention des screenshots, seuils d'alerte, et AUTH_ALLOWLIST (garde-fou). GET /config expose les réglages effectifs (sans secret).

🗺️ Roadmap & état

Voir docs/PHASES.md. Phases 0–5 ✅, dashboard 10 onglets, scan serveur/sécurité, bulk, charge asymétrique, Docker + CI. Reste : Next.js multi-tenant complet, reporting avancé.

🤝 Contribuer & communauté

Les contributions sont les bienvenues ! 🎉

🙏 Crédits / dépendances notables

Playwright, FastAPI, SQLAlchemy, web-vitals (Apache-2.0), axe-core (MPL-2.0), extruct, protego, trafilatura, httpx, typer, loguru. Voir NOTICE.

📄 Licence

MIT © SoClose Society.

About

⚡ Open-source platform for load testing, synthetic monitoring, SEO/accessibility audits & defensive security scanning — Playwright-powered, self-hosted.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

⚡ ClickGenerator

Plateforme open-source de load testing, synthetic monitoring, audit SEO, accessibilité et sécurité — pilotée par un navigateur réel (Playwright), avec dashboard web, opérations en masse, multi-région et planification.

CIPythonFastAPIPlaywrightTestsLicensePRs welcomeGitHub stars

ClickGenerator mesure les performances réelles d'un site (Core Web Vitals via la lib officielle Google web-vitals), audite son SEO et son accessibilité, teste sa résilience sous charge, scanne sa posture serveur/sécurité, et produit des rapports — le tout en self-host, sans dépendance cloud.

Dashboard ClickGenerator


⚖️ Usage responsable — à lire avant tout

ClickGenerator inclut du load testing et du scan de sécurité défensif. Ces capacités ne doivent être utilisées que sur des systèmes que vous possédez ou que vous êtes explicitement autorisé à tester (mandat écrit pour des sites clients). Un garde-fou AUTH_ALLOWLIST permet de restreindre les opérations intrusives aux domaines autorisés. Voir SECURITY.md.

Le projet ne fournit volontairement pas : DoS/flood sans limite, payloads d'exploitation, brute-force, ni évasion de détection. Voir docs/SECURITY-TOOLS.md.


✨ Fonctionnalités

DomaineDétail
PerformanceCore Web Vitals précis (LCP/INP/CLS/FCP/TTFB via web-vitals), TTFB, temps de chargement, poids, requêtes, multi-passes médiane, notation CWV /100, screenshot
SEOmeta/title/description, canonical, hreflang, structured data (extruct : JSON-LD/OG/microdata), robots.txt (protego), sitemaps, liens cassés, score on-page
Accessibilitéaxe-core (WCAG 2.x A/AA) injecté dans la page
Audit sitemulti-pages (découverte + audit + agrégat) + rapport HTML & PDF
Load testingasync (httpx) : throughput, p50/p95/p99, taux d'erreur, garde-fous
Charge progressivepaliers de concurrence → asymétrie charge↔latence + détection du genou + détection de défense (429/WAF)
Scan serveurTLS/cert, en-têtes sécurité, compression, HTTP/2, redirections, score
Sécurité (défensif)grade A→F : TLS faible, en-têtes, cookies, fichiers exposés, divulgation version, security.txt
Multi-régionmesure via proxies par région + comparaison (IP/LCP/score)
Bulkaudit/scan/perf en masse sur une liste d'URLs ou toutes les cibles d'un client/projet
Multi-clientsCRUD Clients → Projets → Cibles, historique d'audits persisté
Planificationaudits récurrents (scheduler in-process) + alerting sur seuils
DashboardUI web 10 onglets servie par le moteur (zéro build)

🏗️ Architecture

ClickGenerator/
├── engine/ # moteur Python : FastAPI + Playwright + SQLAlchemy async
│ ├── app/
│ │ ├── runner/ # mesure navigateur (web-vitals, métriques)
│ │ ├── seo/ # SEO + accessibilité (axe-core, extruct, protego)
│ │ ├── security_scan.py · server_scan.py · loadtest.py · ramp.py
│ │ ├── bulk.py · scheduler.py · alerting.py · authz.py
│ │ ├── routes/ # API REST
│ │ ├── static/ # dashboard web (index.html)
│ │ └── main.py · cli.py
│ ├── tests/ # 78 tests (pytest)
│ └── Dockerfile
├── web/ # scaffold Next.js (dashboard multi-tenant — amorce)
├── autoclicker/ # module annexe : autoclicker local (jeux idle)
└── docs/ # AUDIT, TOOLS, SECURITY-TOOLS, PHASES

🚀 Démarrage rapide

git clone https://github.com/SoCloseSociety/ClickGenerator.git
cd ClickGenerator/engine
python3.13 -m venv venv &&source venv/bin/activate
pip install -r requirements.txt
playwright install chromium
cp .env.example .env # SQLite par défaut, zéro config# Dashboard web (choisit un port libre automatiquement)
./run-dashboard.sh # -> http://localhost:8200# Ou en CLI
python -m app.cli audit https://example.com # perf + SEO + a11y
python -m app.cli security-scan https://example.com # grade sécurité A-F
python -m app.cli ramp https://example.com # charge progressive
python -m app.cli site-audit https://example.com --pdf rapport.pdf

⚠️ Python 3.13 recommandé (3.14 n'a pas encore tous les wheels).

Docker

cd engine && docker build -t clickgenerator .
docker run -p 8000:8000 clickgenerator # -> http://localhost:8000

Tests

cd engine && pip install -r requirements-dev.txt
pytest # tout (avec navigateur)
pytest -m "not integration"# rapide, sans navigateur

🔧 Configuration

Tout via engine/.env (voir .env.example) : base (SQLite → Postgres via DATABASE_URL), navigateur, timeouts/retries, concurrence, rétention des screenshots, seuils d'alerte, et AUTH_ALLOWLIST (garde-fou). GET /config expose les réglages effectifs (sans secret).

🗺️ Roadmap & état

Voir docs/PHASES.md. Phases 0–5 ✅, dashboard 10 onglets, scan serveur/sécurité, bulk, charge asymétrique, Docker + CI. Reste : Next.js multi-tenant complet, reporting avancé.

🤝 Contribuer & communauté

Les contributions sont les bienvenues ! 🎉

🙏 Crédits / dépendances notables

Playwright, FastAPI, SQLAlchemy, web-vitals (Apache-2.0), axe-core (MPL-2.0), extruct, protego, trafilatura, httpx, typer, loguru. Voir NOTICE.

📄 Licence

MIT © SoClose Society.

About

⚡ Open-source platform for load testing, synthetic monitoring, SEO/accessibility audits & defensive security scanning — Playwright-powered, self-hosted.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

⚡ ClickGenerator

Plateforme open-source de load testing, synthetic monitoring, audit SEO, accessibilité et sécurité — pilotée par un navigateur réel (Playwright), avec dashboard web, opérations en masse, multi-région et planification.

CIPythonFastAPIPlaywrightTestsLicensePRs welcomeGitHub stars

ClickGenerator mesure les performances réelles d'un site (Core Web Vitals via la lib officielle Google web-vitals), audite son SEO et son accessibilité, teste sa résilience sous charge, scanne sa posture serveur/sécurité, et produit des rapports — le tout en self-host, sans dépendance cloud.

Dashboard ClickGenerator


⚖️ Usage responsable — à lire avant tout

ClickGenerator inclut du load testing et du scan de sécurité défensif. Ces capacités ne doivent être utilisées que sur des systèmes que vous possédez ou que vous êtes explicitement autorisé à tester (mandat écrit pour des sites clients). Un garde-fou AUTH_ALLOWLIST permet de restreindre les opérations intrusives aux domaines autorisés. Voir SECURITY.md.

Le projet ne fournit volontairement pas : DoS/flood sans limite, payloads d'exploitation, brute-force, ni évasion de détection. Voir docs/SECURITY-TOOLS.md.


✨ Fonctionnalités

DomaineDétail
PerformanceCore Web Vitals précis (LCP/INP/CLS/FCP/TTFB via web-vitals), TTFB, temps de chargement, poids, requêtes, multi-passes médiane, notation CWV /100, screenshot
SEOmeta/title/description, canonical, hreflang, structured data (extruct : JSON-LD/OG/microdata), robots.txt (protego), sitemaps, liens cassés, score on-page
Accessibilitéaxe-core (WCAG 2.x A/AA) injecté dans la page
Audit sitemulti-pages (découverte + audit + agrégat) + rapport HTML & PDF
Load testingasync (httpx) : throughput, p50/p95/p99, taux d'erreur, garde-fous
Charge progressivepaliers de concurrence → asymétrie charge↔latence + détection du genou + détection de défense (429/WAF)
Scan serveurTLS/cert, en-têtes sécurité, compression, HTTP/2, redirections, score
Sécurité (défensif)grade A→F : TLS faible, en-têtes, cookies, fichiers exposés, divulgation version, security.txt
Multi-régionmesure via proxies par région + comparaison (IP/LCP/score)
Bulkaudit/scan/perf en masse sur une liste d'URLs ou toutes les cibles d'un client/projet
Multi-clientsCRUD Clients → Projets → Cibles, historique d'audits persisté
Planificationaudits récurrents (scheduler in-process) + alerting sur seuils
DashboardUI web 10 onglets servie par le moteur (zéro build)

🏗️ Architecture

ClickGenerator/
├── engine/ # moteur Python : FastAPI + Playwright + SQLAlchemy async
│ ├── app/
│ │ ├── runner/ # mesure navigateur (web-vitals, métriques)
│ │ ├── seo/ # SEO + accessibilité (axe-core, extruct, protego)
│ │ ├── security_scan.py · server_scan.py · loadtest.py · ramp.py
│ │ ├── bulk.py · scheduler.py · alerting.py · authz.py
│ │ ├── routes/ # API REST
│ │ ├── static/ # dashboard web (index.html)
│ │ └── main.py · cli.py
│ ├── tests/ # 78 tests (pytest)
│ └── Dockerfile
├── web/ # scaffold Next.js (dashboard multi-tenant — amorce)
├── autoclicker/ # module annexe : autoclicker local (jeux idle)
└── docs/ # AUDIT, TOOLS, SECURITY-TOOLS, PHASES

🚀 Démarrage rapide

git clone https://github.com/SoCloseSociety/ClickGenerator.git
cd ClickGenerator/engine
python3.13 -m venv venv &&source venv/bin/activate
pip install -r requirements.txt
playwright install chromium
cp .env.example .env # SQLite par défaut, zéro config# Dashboard web (choisit un port libre automatiquement)
./run-dashboard.sh # -> http://localhost:8200# Ou en CLI
python -m app.cli audit https://example.com # perf + SEO + a11y
python -m app.cli security-scan https://example.com # grade sécurité A-F
python -m app.cli ramp https://example.com # charge progressive
python -m app.cli site-audit https://example.com --pdf rapport.pdf

⚠️ Python 3.13 recommandé (3.14 n'a pas encore tous les wheels).

Docker

cd engine && docker build -t clickgenerator .
docker run -p 8000:8000 clickgenerator # -> http://localhost:8000

Tests

cd engine && pip install -r requirements-dev.txt
pytest # tout (avec navigateur)
pytest -m "not integration"# rapide, sans navigateur

🔧 Configuration

Tout via engine/.env (voir .env.example) : base (SQLite → Postgres via DATABASE_URL), navigateur, timeouts/retries, concurrence, rétention des screenshots, seuils d'alerte, et AUTH_ALLOWLIST (garde-fou). GET /config expose les réglages effectifs (sans secret).

🗺️ Roadmap & état

Voir docs/PHASES.md. Phases 0–5 ✅, dashboard 10 onglets, scan serveur/sécurité, bulk, charge asymétrique, Docker + CI. Reste : Next.js multi-tenant complet, reporting avancé.

🤝 Contribuer & communauté

Les contributions sont les bienvenues ! 🎉

🙏 Crédits / dépendances notables

Playwright, FastAPI, SQLAlchemy, web-vitals (Apache-2.0), axe-core (MPL-2.0), extruct, protego, trafilatura, httpx, typer, loguru. Voir NOTICE.

📄 Licence

MIT © SoClose Society.

About

⚡ Open-source platform for load testing, synthetic monitoring, SEO/accessibility audits & defensive security scanning — Playwright-powered, self-hosted.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

⚡ ClickGenerator

Plateforme open-source de load testing, synthetic monitoring, audit SEO, accessibilité et sécurité — pilotée par un navigateur réel (Playwright), avec dashboard web, opérations en masse, multi-région et planification.

CIPythonFastAPIPlaywrightTestsLicensePRs welcomeGitHub stars

ClickGenerator mesure les performances réelles d'un site (Core Web Vitals via la lib officielle Google web-vitals), audite son SEO et son accessibilité, teste sa résilience sous charge, scanne sa posture serveur/sécurité, et produit des rapports — le tout en self-host, sans dépendance cloud.

Dashboard ClickGenerator


⚖️ Usage responsable — à lire avant tout

ClickGenerator inclut du load testing et du scan de sécurité défensif. Ces capacités ne doivent être utilisées que sur des systèmes que vous possédez ou que vous êtes explicitement autorisé à tester (mandat écrit pour des sites clients). Un garde-fou AUTH_ALLOWLIST permet de restreindre les opérations intrusives aux domaines autorisés. Voir SECURITY.md.

Le projet ne fournit volontairement pas : DoS/flood sans limite, payloads d'exploitation, brute-force, ni évasion de détection. Voir docs/SECURITY-TOOLS.md.


✨ Fonctionnalités

DomaineDétail
PerformanceCore Web Vitals précis (LCP/INP/CLS/FCP/TTFB via web-vitals), TTFB, temps de chargement, poids, requêtes, multi-passes médiane, notation CWV /100, screenshot
SEOmeta/title/description, canonical, hreflang, structured data (extruct : JSON-LD/OG/microdata), robots.txt (protego), sitemaps, liens cassés, score on-page
Accessibilitéaxe-core (WCAG 2.x A/AA) injecté dans la page
Audit sitemulti-pages (découverte + audit + agrégat) + rapport HTML & PDF
Load testingasync (httpx) : throughput, p50/p95/p99, taux d'erreur, garde-fous
Charge progressivepaliers de concurrence → asymétrie charge↔latence + détection du genou + détection de défense (429/WAF)
Scan serveurTLS/cert, en-têtes sécurité, compression, HTTP/2, redirections, score
Sécurité (défensif)grade A→F : TLS faible, en-têtes, cookies, fichiers exposés, divulgation version, security.txt
Multi-régionmesure via proxies par région + comparaison (IP/LCP/score)
Bulkaudit/scan/perf en masse sur une liste d'URLs ou toutes les cibles d'un client/projet
Multi-clientsCRUD Clients → Projets → Cibles, historique d'audits persisté
Planificationaudits récurrents (scheduler in-process) + alerting sur seuils
DashboardUI web 10 onglets servie par le moteur (zéro build)

🏗️ Architecture

ClickGenerator/
├── engine/ # moteur Python : FastAPI + Playwright + SQLAlchemy async
│ ├── app/
│ │ ├── runner/ # mesure navigateur (web-vitals, métriques)
│ │ ├── seo/ # SEO + accessibilité (axe-core, extruct, protego)
│ │ ├── security_scan.py · server_scan.py · loadtest.py · ramp.py
│ │ ├── bulk.py · scheduler.py · alerting.py · authz.py
│ │ ├── routes/ # API REST
│ │ ├── static/ # dashboard web (index.html)
│ │ └── main.py · cli.py
│ ├── tests/ # 78 tests (pytest)
│ └── Dockerfile
├── web/ # scaffold Next.js (dashboard multi-tenant — amorce)
├── autoclicker/ # module annexe : autoclicker local (jeux idle)
└── docs/ # AUDIT, TOOLS, SECURITY-TOOLS, PHASES

🚀 Démarrage rapide

git clone https://github.com/SoCloseSociety/ClickGenerator.git
cd ClickGenerator/engine
python3.13 -m venv venv &&source venv/bin/activate
pip install -r requirements.txt
playwright install chromium
cp .env.example .env # SQLite par défaut, zéro config# Dashboard web (choisit un port libre automatiquement)
./run-dashboard.sh # -> http://localhost:8200# Ou en CLI
python -m app.cli audit https://example.com # perf + SEO + a11y
python -m app.cli security-scan https://example.com # grade sécurité A-F
python -m app.cli ramp https://example.com # charge progressive
python -m app.cli site-audit https://example.com --pdf rapport.pdf

⚠️ Python 3.13 recommandé (3.14 n'a pas encore tous les wheels).

Docker

cd engine && docker build -t clickgenerator .
docker run -p 8000:8000 clickgenerator # -> http://localhost:8000

Tests

cd engine && pip install -r requirements-dev.txt
pytest # tout (avec navigateur)
pytest -m "not integration"# rapide, sans navigateur

🔧 Configuration

Tout via engine/.env (voir .env.example) : base (SQLite → Postgres via DATABASE_URL), navigateur, timeouts/retries, concurrence, rétention des screenshots, seuils d'alerte, et AUTH_ALLOWLIST (garde-fou). GET /config expose les réglages effectifs (sans secret).

🗺️ Roadmap & état

Voir docs/PHASES.md. Phases 0–5 ✅, dashboard 10 onglets, scan serveur/sécurité, bulk, charge asymétrique, Docker + CI. Reste : Next.js multi-tenant complet, reporting avancé.

🤝 Contribuer & communauté

Les contributions sont les bienvenues ! 🎉

🙏 Crédits / dépendances notables

Playwright, FastAPI, SQLAlchemy, web-vitals (Apache-2.0), axe-core (MPL-2.0), extruct, protego, trafilatura, httpx, typer, loguru. Voir NOTICE.

📄 Licence

MIT © SoClose Society.

About

⚡ Open-source platform for load testing, synthetic monitoring, SEO/accessibility audits & defensive security scanning — Playwright-powered, self-hosted.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages