@kaikybrofc/omnizap-system 2.2.10 → 2.3.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 (119) hide show
  1. package/README.md +20 -18
  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 +13 -34
  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/init.js +1 -8
  63. package/docker-compose.yml +27 -27
  64. package/docs/seo/omnizap-seo-playbook-br-2026-02-28.md +26 -0
  65. package/docs/seo/satellite-page-template.md +2 -0
  66. package/docs/seo/satellite-pages-phase1.json +40 -177
  67. package/eslint.config.js +2 -15
  68. package/index.js +8 -36
  69. package/ml/clip_classifier/README.md +4 -6
  70. package/observability/alert-rules.yml +12 -12
  71. package/observability/grafana/provisioning/dashboards/dashboards.yml +1 -1
  72. package/package.json +6 -3
  73. package/public/api-docs/index.html +220 -193
  74. package/public/bot-whatsapp-para-grupo/index.html +291 -261
  75. package/public/bot-whatsapp-sem-programar/index.html +291 -261
  76. package/public/comandos/index.html +421 -406
  77. package/public/como-automatizar-avisos-no-whatsapp/index.html +291 -261
  78. package/public/como-criar-comandos-whatsapp/index.html +291 -261
  79. package/public/como-evitar-spam-no-whatsapp/index.html +291 -261
  80. package/public/como-moderar-grupo-whatsapp/index.html +291 -261
  81. package/public/como-organizar-comunidade-whatsapp/index.html +291 -261
  82. package/public/css/github-project-panel.css +13 -8
  83. package/public/css/stickers-admin.css +25 -9
  84. package/public/css/styles.css +23 -16
  85. package/public/index.html +1117 -994
  86. package/public/js/apps/apiDocsApp.js +17 -167
  87. package/public/js/apps/createPackApp.js +69 -332
  88. package/public/js/apps/homeApp.js +94 -74
  89. package/public/js/apps/loginApp.js +3 -12
  90. package/public/js/apps/stickersAdminApp.js +190 -181
  91. package/public/js/apps/stickersApp.js +496 -1397
  92. package/public/js/catalog.js +11 -74
  93. package/public/js/github-panel/components/ErrorState.js +1 -8
  94. package/public/js/github-panel/components/GithubProjectPanel.js +2 -9
  95. package/public/js/github-panel/components/SkeletonPanel.js +1 -11
  96. package/public/js/github-panel/components/StatCard.js +1 -7
  97. package/public/js/github-panel/vendor/react.js +1 -9
  98. package/public/js/runtime/react-runtime.js +1 -9
  99. package/public/licenca/index.html +104 -86
  100. package/public/login/index.html +315 -325
  101. package/public/melhor-bot-whatsapp-para-grupos/index.html +291 -261
  102. package/public/stickers/admin/index.html +14 -19
  103. package/public/stickers/create/index.html +39 -44
  104. package/public/stickers/index.html +96 -107
  105. package/public/termos-de-uso/index.html +142 -115
  106. package/public/user/index.html +347 -350
  107. package/scripts/cache-bust.mjs +5 -24
  108. package/scripts/generate-seo-satellite-pages.mjs +10 -13
  109. package/scripts/run-prettier-all.mjs +25 -0
  110. package/scripts/sticker-catalog-loadtest.mjs +13 -11
  111. package/scripts/sticker-worker-task.mjs +1 -4
  112. package/scripts/sync-readme-snapshot.mjs +3 -2
  113. package/server/controllers/stickerCatalogController.js +67 -5
  114. package/server/http/httpServer.js +2 -10
  115. package/server/routes/stickerCatalog/catalogHandlers/catalogAdminHttp.js +1 -8
  116. package/server/routes/stickerCatalog/catalogHandlers/catalogAuthHttp.js +1 -9
  117. package/server/routes/stickerCatalog/catalogHandlers/catalogPublicHttp.js +10 -11
  118. package/server/routes/stickerCatalog/catalogHandlers/catalogUploadHttp.js +1 -10
  119. package/server/routes/stickerCatalog/catalogRouter.js +11 -13
@@ -1,230 +1,260 @@
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 WhatsApp sem programar | OmniZap</title>
7
- <meta name="description" content="Use bot para WhatsApp sem programar. Adicione no grupo, ative recursos prontos e automatize moderacao, avisos e organizacao em poucos passos." />
8
- <meta name="keywords" content="bot whatsapp sem programar, bot pronto whatsapp, automacao whatsapp sem codigo" />
9
- <meta name="robots" content="index, follow" />
10
- <link rel="canonical" href="https://omnizap.shop/bot-whatsapp-sem-programar/" />
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 WhatsApp sem programar | OmniZap" />
17
- <meta property="og:description" content="Use bot para WhatsApp sem programar. Adicione no grupo, ative recursos prontos e automatize moderacao, avisos e organizacao em poucos passos." />
18
- <meta property="og:url" content="https://omnizap.shop/bot-whatsapp-sem-programar/" />
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 WhatsApp sem programar | OmniZap" />
23
- <meta name="twitter:description" content="Use bot para WhatsApp sem programar. Adicione no grupo, ative recursos prontos e automatize moderacao, avisos e organizacao em poucos passos." />
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 WhatsApp sem programar | OmniZap","description":"Use bot para WhatsApp sem programar. Adicione no grupo, ative recursos prontos e automatize moderacao, avisos e organizacao em poucos passos.","inLanguage":"pt-BR","url":"https://omnizap.shop/bot-whatsapp-sem-programar/","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":"Sem programar significa sem personalizacao?","acceptedAnswer":{"@type":"Answer","text":"Nao. Voce pode ajustar fluxo e mensagens sem precisar escrever codigo."}},{"@type":"Question","name":"Esse modelo atende lojas e comunidades?","acceptedAnswer":{"@type":"Answer","text":"Sim. E um modelo versatil para operacoes diferentes dentro do WhatsApp."}},{"@type":"Question","name":"Posso usar stickers nesse fluxo sem codigo?","acceptedAnswer":{"@type":"Answer","text":"Sim. O modulo de stickers pode ser usado como recurso de engajamento complementar."}}]}</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">Sem codigo</span>
211
- <h1>Bot para WhatsApp sem programar: resultado rapido</h1>
212
- <p>Nem toda equipe tem tempo para setup tecnico. Por isso o modelo sem codigo e o caminho mais rapido para automatizar grupos e comunidades.</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>Por que sem codigo acelera</h2>
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
6
+ <title>Bot para WhatsApp sem programar | OmniZap</title>
7
+ <meta name="description" content="Use bot para WhatsApp sem programar. Adicione no grupo, ative recursos prontos e automatize moderacao, avisos e organizacao em poucos passos." />
8
+ <meta name="keywords" content="bot whatsapp sem programar, bot pronto whatsapp, automacao whatsapp sem codigo" />
9
+ <meta name="robots" content="index, follow" />
10
+ <link rel="canonical" href="https://omnizap.shop/bot-whatsapp-sem-programar/" />
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 WhatsApp sem programar | OmniZap" />
17
+ <meta property="og:description" content="Use bot para WhatsApp sem programar. Adicione no grupo, ative recursos prontos e automatize moderacao, avisos e organizacao em poucos passos." />
18
+ <meta property="og:url" content="https://omnizap.shop/bot-whatsapp-sem-programar/" />
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 WhatsApp sem programar | OmniZap" />
23
+ <meta name="twitter:description" content="Use bot para WhatsApp sem programar. Adicione no grupo, ative recursos prontos e automatize moderacao, avisos e organizacao em poucos passos." />
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 WhatsApp sem programar | OmniZap", "description": "Use bot para WhatsApp sem programar. Adicione no grupo, ative recursos prontos e automatize moderacao, avisos e organizacao em poucos passos.", "inLanguage": "pt-BR", "url": "https://omnizap.shop/bot-whatsapp-sem-programar/", "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": "Sem programar significa sem personalizacao?", "acceptedAnswer": { "@type": "Answer", "text": "Nao. Voce pode ajustar fluxo e mensagens sem precisar escrever codigo." } },
35
+ { "@type": "Question", "name": "Esse modelo atende lojas e comunidades?", "acceptedAnswer": { "@type": "Answer", "text": "Sim. E um modelo versatil para operacoes diferentes dentro do WhatsApp." } },
36
+ { "@type": "Question", "name": "Posso usar stickers nesse fluxo sem codigo?", "acceptedAnswer": { "@type": "Answer", "text": "Sim. O modulo de stickers pode ser usado como recurso de engajamento complementar." } }
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">Sem codigo</span>
241
+ <h1>Bot para WhatsApp sem programar: resultado rapido</h1>
242
+ <p>Nem toda equipe tem tempo para setup tecnico. Por isso o modelo sem codigo e o caminho mais rapido para automatizar grupos e comunidades.</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>Por que sem codigo acelera</h2>
222
252
  <p>Quando o foco e operacao, velocidade vale mais do que arquitetura complexa.</p>
223
253
  <p>Com bot pronto, voce elimina barreiras tecnicas e entra em producao no mesmo dia.</p>
224
- </section>
254
+ </section>
225
255
 
226
- <section class="card">
227
- <h2>Aplicacoes imediatas</h2>
256
+ <section class="card">
257
+ <h2>Aplicacoes imediatas</h2>
228
258
  <p>Moderar spam, enviar avisos e padronizar respostas sao as tres aplicacoes mais comuns.</p>
229
259
  <p>Esses ganhos aparecem rapido, mesmo em grupos pequenos.</p>
230
260
  <ul>
@@ -232,45 +262,45 @@
232
262
  <li>Menos dependencia tecnica</li>
233
263
  <li>Escala com baixo atrito</li>
234
264
  </ul>
235
- </section>
265
+ </section>
236
266
 
237
- <section class="card">
238
- <h2>Evolucao futura</h2>
267
+ <section class="card">
268
+ <h2>Evolucao futura</h2>
239
269
  <p>Se no futuro voce precisar de integracoes avancadas, pode usar a API.</p>
240
270
  <p>Assim voce comeca simples e evolui sem trocar de ecossistema.</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>Sem programar significa sem personalizacao?</summary>
248
- <p>Nao. Voce pode ajustar fluxo e mensagens sem precisar escrever codigo.</p>
249
- </details>
250
- <details class="faq-item">
251
- <summary>Esse modelo atende lojas e comunidades?</summary>
252
- <p>Sim. E um modelo versatil para operacoes diferentes dentro do WhatsApp.</p>
253
- </details>
254
- <details class="faq-item">
255
- <summary>Posso usar stickers nesse fluxo sem codigo?</summary>
256
- <p>Sim. O modulo de stickers pode ser usado como recurso de engajamento complementar.</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="/bot-whatsapp-para-grupo/">Bot para grupos</a>
270
- <a href="/como-evitar-spam-no-whatsapp/">Evitar spam</a>
271
- <a href="/como-criar-comandos-whatsapp/">Comandos no WhatsApp</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>Sem programar significa sem personalizacao?</summary>
278
+ <p>Nao. Voce pode ajustar fluxo e mensagens sem precisar escrever codigo.</p>
279
+ </details>
280
+ <details class="faq-item">
281
+ <summary>Esse modelo atende lojas e comunidades?</summary>
282
+ <p>Sim. E um modelo versatil para operacoes diferentes dentro do WhatsApp.</p>
283
+ </details>
284
+ <details class="faq-item">
285
+ <summary>Posso usar stickers nesse fluxo sem codigo?</summary>
286
+ <p>Sim. O modulo de stickers pode ser usado como recurso de engajamento complementar.</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="/bot-whatsapp-para-grupo/">Bot para grupos</a>
300
+ <a href="/como-evitar-spam-no-whatsapp/">Evitar spam</a>
301
+ <a href="/como-criar-comandos-whatsapp/">Comandos no WhatsApp</a>
302
+ </div>
303
+ </section>
304
+ </main>
305
+ </body>
306
+ </html>