@kaikybrofc/omnizap-system 2.2.10 → 2.3.1

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 (123) hide show
  1. package/README.md +13 -13
  2. package/app/config/adminIdentity.js +1 -3
  3. package/app/connection/socketController.js +10 -20
  4. package/app/controllers/messageController.js +7 -28
  5. package/app/modules/aiModule/catCommand.js +29 -192
  6. package/app/modules/broadcastModule/noticeCommand.js +28 -97
  7. package/app/modules/gameModule/diceCommand.js +6 -32
  8. package/app/modules/playModule/playCommand.js +57 -258
  9. package/app/modules/quoteModule/quoteCommand.js +2 -4
  10. package/app/modules/rpgPokemonModule/rpgPokemonRepository.js +1 -13
  11. package/app/modules/statsModule/noMessageCommand.js +16 -84
  12. package/app/modules/statsModule/rankingCommand.js +5 -25
  13. package/app/modules/statsModule/rankingCommon.js +1 -9
  14. package/app/modules/stickerModule/convertToWebp.js +4 -27
  15. package/app/modules/stickerModule/stickerCommand.js +13 -24
  16. package/app/modules/stickerModule/stickerTextCommand.js +13 -25
  17. package/app/modules/stickerPackModule/autoPackCollectorService.js +16 -7
  18. package/app/modules/stickerPackModule/domainEventOutboxRepository.js +20 -36
  19. package/app/modules/stickerPackModule/domainEvents.js +2 -11
  20. package/app/modules/stickerPackModule/semanticReclassificationEngine.js +13 -50
  21. package/app/modules/stickerPackModule/semanticReclassificationEngine.test.js +2 -15
  22. package/app/modules/stickerPackModule/semanticThemeClusterService.js +14 -41
  23. package/app/modules/stickerPackModule/stickerAssetClassificationRepository.js +25 -95
  24. package/app/modules/stickerPackModule/stickerAssetRepository.js +12 -31
  25. package/app/modules/stickerPackModule/stickerAssetReprocessQueueRepository.js +13 -18
  26. package/app/modules/stickerPackModule/stickerAutoPackByTagsRuntime.js +284 -709
  27. package/app/modules/stickerPackModule/stickerClassificationBackgroundRuntime.js +27 -106
  28. package/app/modules/stickerPackModule/stickerClassificationService.js +46 -77
  29. package/app/modules/stickerPackModule/stickerDedicatedTaskWorkerRuntime.js +13 -53
  30. package/app/modules/stickerPackModule/stickerDomainEventBus.js +10 -16
  31. package/app/modules/stickerPackModule/stickerDomainEventConsumerRuntime.js +40 -39
  32. package/app/modules/stickerPackModule/stickerMarketplaceDriftService.js +1 -4
  33. package/app/modules/stickerPackModule/stickerObjectStorageService.js +26 -26
  34. package/app/modules/stickerPackModule/stickerPackCommandHandlers.js +32 -187
  35. package/app/modules/stickerPackModule/stickerPackInteractionEventRepository.js +6 -15
  36. package/app/modules/stickerPackModule/stickerPackItemRepository.js +6 -32
  37. package/app/modules/stickerPackModule/stickerPackMarketplaceService.js +12 -36
  38. package/app/modules/stickerPackModule/stickerPackMessageService.js +12 -40
  39. package/app/modules/stickerPackModule/stickerPackRepository.js +23 -66
  40. package/app/modules/stickerPackModule/stickerPackScoreSnapshotRepository.js +9 -21
  41. package/app/modules/stickerPackModule/stickerPackScoreSnapshotRuntime.js +10 -40
  42. package/app/modules/stickerPackModule/stickerPackService.js +50 -115
  43. package/app/modules/stickerPackModule/stickerPackServiceRuntime.js +2 -21
  44. package/app/modules/stickerPackModule/stickerPackUtils.js +13 -3
  45. package/app/modules/stickerPackModule/stickerStorageService.js +16 -65
  46. package/app/modules/stickerPackModule/stickerWorkerPipelineRuntime.js +4 -22
  47. package/app/modules/stickerPackModule/stickerWorkerTaskQueueRepository.js +14 -29
  48. package/app/modules/systemMetricsModule/pingCommand.js +9 -39
  49. package/app/modules/tiktokModule/tiktokCommand.js +17 -109
  50. package/app/modules/userModule/userCommand.js +2 -88
  51. package/app/observability/metrics.js +5 -16
  52. package/app/services/captchaService.js +1 -6
  53. package/app/services/dbWriteQueue.js +3 -18
  54. package/app/services/featureFlagService.js +2 -8
  55. package/app/services/newsBroadcastService.js +0 -1
  56. package/app/services/queueUtils.js +2 -4
  57. package/app/services/whatsappLoginLinkService.js +7 -9
  58. package/app/store/premiumUserStore.js +1 -2
  59. package/app/utils/antiLink/antiLinkModule.js +3 -233
  60. package/app/utils/logger/loggerModule.js +9 -34
  61. package/app/utils/systemMetrics/systemMetricsModule.js +1 -4
  62. package/database/index.js +1 -0
  63. package/database/init.js +1 -8
  64. package/database/migrations/20260228_0027_web_visit_event.sql +15 -0
  65. package/docker-compose.yml +27 -27
  66. package/docs/seo/omnizap-seo-playbook-br-2026-02-28.md +26 -0
  67. package/docs/seo/satellite-page-template.md +2 -0
  68. package/docs/seo/satellite-pages-phase1.json +40 -177
  69. package/eslint.config.js +2 -15
  70. package/index.js +8 -36
  71. package/ml/clip_classifier/README.md +4 -6
  72. package/observability/alert-rules.yml +12 -12
  73. package/observability/grafana/provisioning/dashboards/dashboards.yml +1 -1
  74. package/package.json +6 -3
  75. package/public/api-docs/index.html +220 -193
  76. package/public/bot-whatsapp-para-grupo/index.html +291 -261
  77. package/public/bot-whatsapp-sem-programar/index.html +291 -261
  78. package/public/comandos/index.html +421 -406
  79. package/public/como-automatizar-avisos-no-whatsapp/index.html +291 -261
  80. package/public/como-criar-comandos-whatsapp/index.html +291 -261
  81. package/public/como-evitar-spam-no-whatsapp/index.html +291 -261
  82. package/public/como-moderar-grupo-whatsapp/index.html +291 -261
  83. package/public/como-organizar-comunidade-whatsapp/index.html +291 -261
  84. package/public/css/github-project-panel.css +13 -8
  85. package/public/css/stickers-admin.css +25 -9
  86. package/public/css/styles.css +23 -16
  87. package/public/index.html +1106 -993
  88. package/public/js/apps/apiDocsApp.js +17 -167
  89. package/public/js/apps/createPackApp.js +69 -332
  90. package/public/js/apps/homeApp.js +274 -101
  91. package/public/js/apps/loginApp.js +3 -12
  92. package/public/js/apps/stickersAdminApp.js +190 -181
  93. package/public/js/apps/stickersApp.js +482 -1411
  94. package/public/js/apps/userApp.js +217 -1
  95. package/public/js/catalog.js +11 -74
  96. package/public/js/github-panel/components/ErrorState.js +1 -8
  97. package/public/js/github-panel/components/GithubProjectPanel.js +2 -9
  98. package/public/js/github-panel/components/SkeletonPanel.js +1 -11
  99. package/public/js/github-panel/components/StatCard.js +1 -7
  100. package/public/js/github-panel/vendor/react.js +1 -9
  101. package/public/js/runtime/react-runtime.js +1 -9
  102. package/public/licenca/index.html +200 -86
  103. package/public/login/index.html +315 -325
  104. package/public/melhor-bot-whatsapp-para-grupos/index.html +291 -261
  105. package/public/stickers/admin/index.html +14 -19
  106. package/public/stickers/create/index.html +39 -44
  107. package/public/stickers/index.html +96 -107
  108. package/public/termos-de-uso/index.html +369 -122
  109. package/public/user/index.html +527 -350
  110. package/scripts/cache-bust.mjs +5 -24
  111. package/scripts/generate-seo-satellite-pages.mjs +10 -13
  112. package/scripts/run-prettier-all.mjs +25 -0
  113. package/scripts/sticker-catalog-loadtest.mjs +13 -11
  114. package/scripts/sticker-worker-task.mjs +1 -4
  115. package/scripts/sync-readme-snapshot.mjs +3 -2
  116. package/server/auth/googleWebAuth/googleWebAuthService.js +614 -0
  117. package/server/controllers/stickerCatalogController.js +297 -632
  118. package/server/http/httpServer.js +2 -10
  119. package/server/routes/stickerCatalog/catalogHandlers/catalogAdminHttp.js +1 -8
  120. package/server/routes/stickerCatalog/catalogHandlers/catalogAuthHttp.js +1 -9
  121. package/server/routes/stickerCatalog/catalogHandlers/catalogPublicHttp.js +10 -11
  122. package/server/routes/stickerCatalog/catalogHandlers/catalogUploadHttp.js +1 -10
  123. package/server/routes/stickerCatalog/catalogRouter.js +11 -13
@@ -1,224 +1,254 @@
1
1
  <!doctype html>
2
2
  <html lang="pt-BR">
3
- <head>
4
- <meta charset="utf-8" />
5
- <meta name="viewport" content="width=device-width, initial-scale=1" />
6
- <title>Bot para Grupo de WhatsApp | OmniZap pronto para usar</title>
7
- <meta name="description" content="Descubra como usar um bot para grupo de WhatsApp sem configuracao tecnica. Adicione o OmniZap, organize conversas e ative automacoes em minutos." />
8
- <meta name="keywords" content="bot para grupo whatsapp, bot whatsapp pronto, automacao para grupos, moderacao grupo whatsapp" />
9
- <meta name="robots" content="index, follow" />
10
- <link rel="canonical" href="https://omnizap.shop/bot-whatsapp-para-grupo/" />
11
- <link rel="icon" type="image/png" href="/assets/images/brand-icon-192.png" />
12
-
13
- <meta property="og:type" content="article" />
14
- <meta property="og:locale" content="pt_BR" />
15
- <meta property="og:site_name" content="OmniZap System" />
16
- <meta property="og:title" content="Bot para Grupo de WhatsApp | OmniZap pronto para usar" />
17
- <meta property="og:description" content="Descubra como usar um bot para grupo de WhatsApp sem configuracao tecnica. Adicione o OmniZap, organize conversas e ative automacoes em minutos." />
18
- <meta property="og:url" content="https://omnizap.shop/bot-whatsapp-para-grupo/" />
19
- <meta property="og:image" content="https://omnizap.shop/assets/images/hero-banner-1280.jpg" />
20
-
21
- <meta name="twitter:card" content="summary_large_image" />
22
- <meta name="twitter:title" content="Bot para Grupo de WhatsApp | OmniZap pronto para usar" />
23
- <meta name="twitter:description" content="Descubra como usar um bot para grupo de WhatsApp sem configuracao tecnica. Adicione o OmniZap, organize conversas e ative automacoes em minutos." />
24
- <meta name="twitter:image" content="https://omnizap.shop/assets/images/hero-banner-1280.jpg" />
25
-
26
- <script type="application/ld+json">{"@context":"https://schema.org","@type":"WebPage","name":"Bot para Grupo de WhatsApp | OmniZap pronto para usar","description":"Descubra como usar um bot para grupo de WhatsApp sem configuracao tecnica. Adicione o OmniZap, organize conversas e ative automacoes em minutos.","inLanguage":"pt-BR","url":"https://omnizap.shop/bot-whatsapp-para-grupo/","isPartOf":{"@type":"WebSite","name":"OmniZap System","url":"https://omnizap.shop"}}</script>
27
- <script type="application/ld+json">{"@context":"https://schema.org","@type":"FAQPage","mainEntity":[{"@type":"Question","name":"Preciso saber programacao para usar o bot?","acceptedAnswer":{"@type":"Answer","text":"Nao. O uso padrao do OmniZap e pronto para usuario final e nao exige codigo."}},{"@type":"Question","name":"Em quanto tempo o bot fica ativo no grupo?","acceptedAnswer":{"@type":"Answer","text":"Em geral, em menos de 1 minuto apos adicionar e autorizar."}},{"@type":"Question","name":"Onde vejo os stickers disponiveis?","acceptedAnswer":{"@type":"Answer","text":"O catalogo fica em /stickers/ e pode ser usado como recurso extra no grupo."}}]}</script>
28
-
29
- <style>
30
- :root {
31
- --bg: #0f172a;
32
- --bg-2: #111827;
33
- --line: rgba(255, 255, 255, 0.05);
34
- --text: #f8fafc;
35
- --muted: #94a3b8;
36
- --card: #1e293bd9;
37
- --accent: #2563eb;
38
- --accent-2: #7c3aed;
39
- --cta: #22c55e;
40
- --cta-hover: #16a34a;
41
- }
42
-
43
- * { box-sizing: border-box; }
44
- body {
45
- margin: 0;
46
- font-family: "Manrope", system-ui, -apple-system, sans-serif;
47
- color: var(--text);
48
- background:
49
- radial-gradient(58rem 22rem at -10% -8%, #2563eb24, transparent 60%),
50
- radial-gradient(62rem 26rem at 112% -12%, #7c3aed22, transparent 58%),
51
- linear-gradient(165deg, var(--bg), var(--bg-2));
52
- }
53
-
54
- .wrap { width: min(980px, 92vw); margin: 0 auto; padding: 22px 0 42px; }
55
-
56
- .top {
57
- display: flex;
58
- flex-wrap: wrap;
59
- gap: 8px;
60
- margin-bottom: 14px;
61
- }
62
-
63
- .top a {
64
- color: var(--text);
65
- text-decoration: none;
66
- border: 1px solid var(--line);
67
- border-radius: 10px;
68
- padding: 8px 11px;
69
- background: #111827;
70
- font-size: 14px;
71
- font-weight: 700;
72
- }
73
-
74
- .hero,
75
- .card {
76
- border: 1px solid rgba(255, 255, 255, 0.05);
77
- border-radius: 16px;
78
- background: var(--card);
79
- padding: 16px;
80
- margin-bottom: 12px;
81
- }
82
-
83
- .pill {
84
- display: inline-flex;
85
- border: 1px solid #45689f;
86
- border-radius: 999px;
87
- padding: 5px 10px;
88
- font-size: 12px;
89
- font-weight: 800;
90
- text-transform: uppercase;
91
- letter-spacing: .3px;
92
- color: #cde4ff;
93
- background: #16274a96;
94
- margin-bottom: 10px;
95
- }
96
-
97
- h1, h2 {
98
- margin: 0 0 8px;
99
- font-family: "Sora", "Manrope", sans-serif;
100
- letter-spacing: -0.02em;
101
- }
102
-
103
- h1 {
104
- font-size: clamp(29px, 4vw, 42px);
105
- line-height: 1.08;
106
- background: linear-gradient(92deg, #f3f8ff 0%, #60a5fa 45%, #a78bfa 100%);
107
- -webkit-background-clip: text;
108
- background-clip: text;
109
- color: transparent;
110
- }
111
-
112
- h2 { font-size: clamp(22px, 2.8vw, 30px); }
113
-
114
- p, li {
115
- margin: 0 0 10px;
116
- color: var(--muted);
117
- line-height: 1.65;
118
- font-size: 16px;
119
- }
120
-
121
- ul { margin: 0; padding-left: 18px; }
122
-
123
- .cta {
124
- display: flex;
125
- flex-wrap: wrap;
126
- gap: 8px;
127
- margin-top: 12px;
128
- }
129
-
130
- .btn {
131
- text-decoration: none;
132
- border: 1px solid rgba(255, 255, 255, 0.05);
133
- border-radius: 11px;
134
- padding: 10px 13px;
135
- color: var(--text);
136
- background: #111827;
137
- font-weight: 800;
138
- font-size: 14px;
139
- }
140
-
141
- .btn.primary {
142
- border-color: transparent;
143
- color: #0f172a;
144
- background: var(--cta);
145
- }
146
-
147
- .btn.primary:hover { background: var(--cta-hover); }
148
-
149
- .faq-list {
150
- display: grid;
151
- gap: 9px;
152
- }
153
-
154
- .faq-item {
155
- border: 1px solid rgba(255, 255, 255, 0.05);
156
- border-radius: 12px;
157
- background: #1e293bb8;
158
- padding: 0 12px;
159
- }
160
-
161
- .faq-item summary {
162
- cursor: pointer;
163
- list-style: none;
164
- font-weight: 800;
165
- color: #ebf4ff;
166
- padding: 12px 0;
167
- }
168
-
169
- .faq-item summary::-webkit-details-marker { display: none; }
170
-
171
- .faq-item p {
172
- margin: 0;
173
- padding: 0 0 12px;
174
- font-size: 15px;
175
- }
176
-
177
- .links-grid {
178
- display: grid;
179
- grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
180
- gap: 8px;
181
- }
182
-
183
- .links-grid a {
184
- text-decoration: none;
185
- color: #dbecff;
186
- border: 1px solid #365686;
187
- border-radius: 10px;
188
- padding: 9px 10px;
189
- background: #10203d;
190
- font-weight: 700;
191
- }
192
-
193
- .meta {
194
- margin-top: 8px;
195
- font-size: 13px;
196
- color: #95b2d8;
197
- }
198
- </style>
199
- </head>
200
- <body>
201
- <main class="wrap">
202
- <nav class="top" aria-label="Navegação interna">
203
- <a href="/">Início</a>
204
- <a href="/stickers/">Stickers</a>
205
- <a href="/api-docs/">API Docs</a>
206
- <a href="/login/">Adicionar Bot</a>
207
- </nav>
208
-
209
- <header class="hero">
210
- <span class="pill">Solucao pronta</span>
211
- <h1>Bot para grupo de WhatsApp: adicione e use em minutos</h1>
212
- <p>Se voce administra grupo no WhatsApp, o principal desafio e manter organizacao sem perder tempo com tarefas repetidas. Com OmniZap, voce adiciona o bot e comeca a automatizar de forma imediata.</p>
213
- <div class="cta">
214
- <a class="btn primary" href="/login/">Adicionar ao meu grupo</a>
215
- <a class="btn" href="/">Conhecer OmniZap</a>
216
- </div>
217
- <p class="meta">Página atualizada em 2026-02-28</p>
218
- </header>
219
-
220
- <section class="card">
221
- <h2>O que voce ganha com um bot pronto</h2>
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
6
+ <title>Bot para Grupo de WhatsApp | OmniZap pronto para usar</title>
7
+ <meta name="description" content="Descubra como usar um bot para grupo de WhatsApp sem configuracao tecnica. Adicione o OmniZap, organize conversas e ative automacoes em minutos." />
8
+ <meta name="keywords" content="bot para grupo whatsapp, bot whatsapp pronto, automacao para grupos, moderacao grupo whatsapp" />
9
+ <meta name="robots" content="index, follow" />
10
+ <link rel="canonical" href="https://omnizap.shop/bot-whatsapp-para-grupo/" />
11
+ <link rel="icon" type="image/png" href="/assets/images/brand-icon-192.png" />
12
+
13
+ <meta property="og:type" content="article" />
14
+ <meta property="og:locale" content="pt_BR" />
15
+ <meta property="og:site_name" content="OmniZap System" />
16
+ <meta property="og:title" content="Bot para Grupo de WhatsApp | OmniZap pronto para usar" />
17
+ <meta property="og:description" content="Descubra como usar um bot para grupo de WhatsApp sem configuracao tecnica. Adicione o OmniZap, organize conversas e ative automacoes em minutos." />
18
+ <meta property="og:url" content="https://omnizap.shop/bot-whatsapp-para-grupo/" />
19
+ <meta property="og:image" content="https://omnizap.shop/assets/images/hero-banner-1280.jpg" />
20
+
21
+ <meta name="twitter:card" content="summary_large_image" />
22
+ <meta name="twitter:title" content="Bot para Grupo de WhatsApp | OmniZap pronto para usar" />
23
+ <meta name="twitter:description" content="Descubra como usar um bot para grupo de WhatsApp sem configuracao tecnica. Adicione o OmniZap, organize conversas e ative automacoes em minutos." />
24
+ <meta name="twitter:image" content="https://omnizap.shop/assets/images/hero-banner-1280.jpg" />
25
+
26
+ <script type="application/ld+json">
27
+ { "@context": "https://schema.org", "@type": "WebPage", "name": "Bot para Grupo de WhatsApp | OmniZap pronto para usar", "description": "Descubra como usar um bot para grupo de WhatsApp sem configuracao tecnica. Adicione o OmniZap, organize conversas e ative automacoes em minutos.", "inLanguage": "pt-BR", "url": "https://omnizap.shop/bot-whatsapp-para-grupo/", "isPartOf": { "@type": "WebSite", "name": "OmniZap System", "url": "https://omnizap.shop" } }
28
+ </script>
29
+ <script type="application/ld+json">
30
+ {
31
+ "@context": "https://schema.org",
32
+ "@type": "FAQPage",
33
+ "mainEntity": [
34
+ { "@type": "Question", "name": "Preciso saber programacao para usar o bot?", "acceptedAnswer": { "@type": "Answer", "text": "Nao. O uso padrao do OmniZap e pronto para usuario final e nao exige codigo." } },
35
+ { "@type": "Question", "name": "Em quanto tempo o bot fica ativo no grupo?", "acceptedAnswer": { "@type": "Answer", "text": "Em geral, em menos de 1 minuto apos adicionar e autorizar." } },
36
+ { "@type": "Question", "name": "Onde vejo os stickers disponiveis?", "acceptedAnswer": { "@type": "Answer", "text": "O catalogo fica em /stickers/ e pode ser usado como recurso extra no grupo." } }
37
+ ]
38
+ }
39
+ </script>
40
+
41
+ <style>
42
+ :root {
43
+ --bg: #0f172a;
44
+ --bg-2: #111827;
45
+ --line: rgba(255, 255, 255, 0.05);
46
+ --text: #f8fafc;
47
+ --muted: #94a3b8;
48
+ --card: #1e293bd9;
49
+ --accent: #2563eb;
50
+ --accent-2: #7c3aed;
51
+ --cta: #22c55e;
52
+ --cta-hover: #16a34a;
53
+ }
54
+
55
+ * {
56
+ box-sizing: border-box;
57
+ }
58
+ body {
59
+ margin: 0;
60
+ font-family:
61
+ 'Manrope',
62
+ system-ui,
63
+ -apple-system,
64
+ sans-serif;
65
+ color: var(--text);
66
+ background: radial-gradient(58rem 22rem at -10% -8%, #2563eb24, transparent 60%), radial-gradient(62rem 26rem at 112% -12%, #7c3aed22, transparent 58%), linear-gradient(165deg, var(--bg), var(--bg-2));
67
+ }
68
+
69
+ .wrap {
70
+ width: min(980px, 92vw);
71
+ margin: 0 auto;
72
+ padding: 22px 0 42px;
73
+ }
74
+
75
+ .top {
76
+ display: flex;
77
+ flex-wrap: wrap;
78
+ gap: 8px;
79
+ margin-bottom: 14px;
80
+ }
81
+
82
+ .top a {
83
+ color: var(--text);
84
+ text-decoration: none;
85
+ border: 1px solid var(--line);
86
+ border-radius: 10px;
87
+ padding: 8px 11px;
88
+ background: #111827;
89
+ font-size: 14px;
90
+ font-weight: 700;
91
+ }
92
+
93
+ .hero,
94
+ .card {
95
+ border: 1px solid rgba(255, 255, 255, 0.05);
96
+ border-radius: 16px;
97
+ background: var(--card);
98
+ padding: 16px;
99
+ margin-bottom: 12px;
100
+ }
101
+
102
+ .pill {
103
+ display: inline-flex;
104
+ border: 1px solid #45689f;
105
+ border-radius: 999px;
106
+ padding: 5px 10px;
107
+ font-size: 12px;
108
+ font-weight: 800;
109
+ text-transform: uppercase;
110
+ letter-spacing: 0.3px;
111
+ color: #cde4ff;
112
+ background: #16274a96;
113
+ margin-bottom: 10px;
114
+ }
115
+
116
+ h1,
117
+ h2 {
118
+ margin: 0 0 8px;
119
+ font-family: 'Sora', 'Manrope', sans-serif;
120
+ letter-spacing: -0.02em;
121
+ }
122
+
123
+ h1 {
124
+ font-size: clamp(29px, 4vw, 42px);
125
+ line-height: 1.08;
126
+ background: linear-gradient(92deg, #f3f8ff 0%, #60a5fa 45%, #a78bfa 100%);
127
+ -webkit-background-clip: text;
128
+ background-clip: text;
129
+ color: transparent;
130
+ }
131
+
132
+ h2 {
133
+ font-size: clamp(22px, 2.8vw, 30px);
134
+ }
135
+
136
+ p,
137
+ li {
138
+ margin: 0 0 10px;
139
+ color: var(--muted);
140
+ line-height: 1.65;
141
+ font-size: 16px;
142
+ }
143
+
144
+ ul {
145
+ margin: 0;
146
+ padding-left: 18px;
147
+ }
148
+
149
+ .cta {
150
+ display: flex;
151
+ flex-wrap: wrap;
152
+ gap: 8px;
153
+ margin-top: 12px;
154
+ }
155
+
156
+ .btn {
157
+ text-decoration: none;
158
+ border: 1px solid rgba(255, 255, 255, 0.05);
159
+ border-radius: 11px;
160
+ padding: 10px 13px;
161
+ color: var(--text);
162
+ background: #111827;
163
+ font-weight: 800;
164
+ font-size: 14px;
165
+ }
166
+
167
+ .btn.primary {
168
+ border-color: transparent;
169
+ color: #0f172a;
170
+ background: var(--cta);
171
+ }
172
+
173
+ .btn.primary:hover {
174
+ background: var(--cta-hover);
175
+ }
176
+
177
+ .faq-list {
178
+ display: grid;
179
+ gap: 9px;
180
+ }
181
+
182
+ .faq-item {
183
+ border: 1px solid rgba(255, 255, 255, 0.05);
184
+ border-radius: 12px;
185
+ background: #1e293bb8;
186
+ padding: 0 12px;
187
+ }
188
+
189
+ .faq-item summary {
190
+ cursor: pointer;
191
+ list-style: none;
192
+ font-weight: 800;
193
+ color: #ebf4ff;
194
+ padding: 12px 0;
195
+ }
196
+
197
+ .faq-item summary::-webkit-details-marker {
198
+ display: none;
199
+ }
200
+
201
+ .faq-item p {
202
+ margin: 0;
203
+ padding: 0 0 12px;
204
+ font-size: 15px;
205
+ }
206
+
207
+ .links-grid {
208
+ display: grid;
209
+ grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
210
+ gap: 8px;
211
+ }
212
+
213
+ .links-grid a {
214
+ text-decoration: none;
215
+ color: #dbecff;
216
+ border: 1px solid #365686;
217
+ border-radius: 10px;
218
+ padding: 9px 10px;
219
+ background: #10203d;
220
+ font-weight: 700;
221
+ }
222
+
223
+ .meta {
224
+ margin-top: 8px;
225
+ font-size: 13px;
226
+ color: #95b2d8;
227
+ }
228
+ </style>
229
+ </head>
230
+ <body>
231
+ <main class="wrap">
232
+ <nav class="top" aria-label="Navegação interna">
233
+ <a href="/">Início</a>
234
+ <a href="/stickers/">Stickers</a>
235
+ <a href="/api-docs/">API Docs</a>
236
+ <a href="/login/">Adicionar Bot</a>
237
+ </nav>
238
+
239
+ <header class="hero">
240
+ <span class="pill">Solucao pronta</span>
241
+ <h1>Bot para grupo de WhatsApp: adicione e use em minutos</h1>
242
+ <p>Se voce administra grupo no WhatsApp, o principal desafio e manter organizacao sem perder tempo com tarefas repetidas. Com OmniZap, voce adiciona o bot e comeca a automatizar de forma imediata.</p>
243
+ <div class="cta">
244
+ <a class="btn primary" href="/login/">Adicionar ao meu grupo</a>
245
+ <a class="btn" href="/">Conhecer OmniZap</a>
246
+ </div>
247
+ <p class="meta">Página atualizada em 2026-02-28</p>
248
+ </header>
249
+
250
+ <section class="card">
251
+ <h2>O que voce ganha com um bot pronto</h2>
222
252
  <p>Um bot pronto reduz o trabalho manual de quem cuida do grupo todos os dias.</p>
223
253
  <p>Em vez de repetir avisos, apagar spam e responder sempre as mesmas perguntas, o grupo passa a operar com regras e fluxos automaticos.</p>
224
254
  <ul>
@@ -226,51 +256,51 @@
226
256
  <li>Avisos recorrentes sem trabalho manual</li>
227
257
  <li>Grupo mais organizado e profissional</li>
228
258
  </ul>
229
- </section>
259
+ </section>
230
260
 
231
- <section class="card">
232
- <h2>Como comecar sem configuracao tecnica</h2>
261
+ <section class="card">
262
+ <h2>Como comecar sem configuracao tecnica</h2>
233
263
  <p>O processo e simples: abrir o bot, adicionar no grupo e autorizar.</p>
234
264
  <p>Depois disso, recursos como moderacao e automacao ja podem ser usados sem programar.</p>
235
- </section>
265
+ </section>
236
266
 
237
- <section class="card">
238
- <h2>Quando usar stickers dentro do bot</h2>
267
+ <section class="card">
268
+ <h2>Quando usar stickers dentro do bot</h2>
239
269
  <p>Stickers ajudam no engajamento e fazem parte do ecossistema OmniZap.</p>
240
270
  <p>Voce pode combinar organizacao do grupo com recursos de interacao para manter a comunidade ativa.</p>
241
- </section>
242
-
243
- <section class="card">
244
- <h2>Perguntas frequentes</h2>
245
- <div class="faq-list">
246
- <details class="faq-item">
247
- <summary>Preciso saber programacao para usar o bot?</summary>
248
- <p>Nao. O uso padrao do OmniZap e pronto para usuario final e nao exige codigo.</p>
249
- </details>
250
- <details class="faq-item">
251
- <summary>Em quanto tempo o bot fica ativo no grupo?</summary>
252
- <p>Em geral, em menos de 1 minuto apos adicionar e autorizar.</p>
253
- </details>
254
- <details class="faq-item">
255
- <summary>Onde vejo os stickers disponiveis?</summary>
256
- <p>O catalogo fica em /stickers/ e pode ser usado como recurso extra no grupo.</p>
257
- </details>
258
- </div>
259
- </section>
260
-
261
- <section class="card">
262
- <h2>Links úteis</h2>
263
- <div class="links-grid">
264
- <a href="/">OmniZap Home</a>
265
- <a href="/stickers/">Catálogo de Stickers</a>
266
- <a href="/comandos/">Biblioteca de Comandos</a>
267
- <a href="/api-docs/">Área de Desenvolvedor</a>
268
- <a href="/login/">Adicionar bot agora</a>
269
- <a href="/como-moderar-grupo-whatsapp/">Como moderar grupo no WhatsApp</a>
270
- <a href="/como-evitar-spam-no-whatsapp/">Como evitar spam no WhatsApp</a>
271
- <a href="/melhor-bot-whatsapp-para-grupos/">Melhor bot para grupos: guia rapido</a>
272
- </div>
273
- </section>
274
- </main>
275
- </body>
276
- </html>
271
+ </section>
272
+
273
+ <section class="card">
274
+ <h2>Perguntas frequentes</h2>
275
+ <div class="faq-list">
276
+ <details class="faq-item">
277
+ <summary>Preciso saber programacao para usar o bot?</summary>
278
+ <p>Nao. O uso padrao do OmniZap e pronto para usuario final e nao exige codigo.</p>
279
+ </details>
280
+ <details class="faq-item">
281
+ <summary>Em quanto tempo o bot fica ativo no grupo?</summary>
282
+ <p>Em geral, em menos de 1 minuto apos adicionar e autorizar.</p>
283
+ </details>
284
+ <details class="faq-item">
285
+ <summary>Onde vejo os stickers disponiveis?</summary>
286
+ <p>O catalogo fica em /stickers/ e pode ser usado como recurso extra no grupo.</p>
287
+ </details>
288
+ </div>
289
+ </section>
290
+
291
+ <section class="card">
292
+ <h2>Links úteis</h2>
293
+ <div class="links-grid">
294
+ <a href="/">OmniZap Home</a>
295
+ <a href="/stickers/">Catálogo de Stickers</a>
296
+ <a href="/comandos/">Biblioteca de Comandos</a>
297
+ <a href="/api-docs/">Área de Desenvolvedor</a>
298
+ <a href="/login/">Adicionar bot agora</a>
299
+ <a href="/como-moderar-grupo-whatsapp/">Como moderar grupo no WhatsApp</a>
300
+ <a href="/como-evitar-spam-no-whatsapp/">Como evitar spam no WhatsApp</a>
301
+ <a href="/melhor-bot-whatsapp-para-grupos/">Melhor bot para grupos: guia rapido</a>
302
+ </div>
303
+ </section>
304
+ </main>
305
+ </body>
306
+ </html>