From 27093a26ebd2b398c156d24100f9d03539e0b164 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A1rio=20Idival?= Date: Fri, 17 Apr 2026 11:56:26 -0300 Subject: [PATCH] feat: initial landing page with K8s deploy config - Nginx static serving with APP_URL env var - K8s manifests for prod and staging - Gitea Actions CI/CD pipeline --- .gitea/workflows/deploy.yml | 52 + Dockerfile | 9 + index.html | 1828 +++++++++++++++++++++++++++++++++++ k8s/prod.yaml | 52 + k8s/staging.yaml | 52 + 5 files changed, 1993 insertions(+) create mode 100644 .gitea/workflows/deploy.yml create mode 100644 Dockerfile create mode 100644 index.html create mode 100644 k8s/prod.yaml create mode 100644 k8s/staging.yaml diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml new file mode 100644 index 0000000..5296d19 --- /dev/null +++ b/.gitea/workflows/deploy.yml @@ -0,0 +1,52 @@ +name: Deploy + +on: + push: + branches: [main] + +jobs: + build-and-push-prod: + name: Build & Push (Prod) + runs-on: heavy + container: git.batida.io/batida/ci-node:latest + steps: + - uses: https://git.batida.io/batida/actions-checkout@v4 + - name: Login to registry + run: echo "${{ secrets.REGISTRY_PASSWORD }}" | docker login git.batida.io -u "${{ secrets.REGISTRY_USER }}" --password-stdin + - name: Build and push + run: | + docker build \ + --build-arg APP_URL=https://app.batida.io \ + -t git.batida.io/batida/batida-landing:${{ github.sha }} \ + -t git.batida.io/batida/batida-landing:latest \ + . + docker push git.batida.io/batida/batida-landing:${{ github.sha }} + docker push git.batida.io/batida/batida-landing:latest + + deploy-staging: + name: Deploy Staging + runs-on: heavy + needs: [build-and-push-prod] + container: git.batida.io/batida/ci-node:latest + steps: + - name: Deploy to staging + run: | + echo "$KUBECONFIG_CONTENT" > /tmp/kubeconfig + kubectl --kubeconfig /tmp/kubeconfig set image deployment/batida-landing batida-landing=git.batida.io/batida/batida-landing:${{ github.sha }} -n staging + kubectl --kubeconfig /tmp/kubeconfig rollout status deployment/batida-landing -n staging --timeout=120s + env: + KUBECONFIG_CONTENT: ${{ secrets.KUBECONFIG }} + + deploy-prod: + name: Deploy Prod + runs-on: heavy + needs: [deploy-staging] + container: git.batida.io/batida/ci-node:latest + steps: + - name: Deploy to prod + run: | + echo "$KUBECONFIG_CONTENT" > /tmp/kubeconfig + kubectl --kubeconfig /tmp/kubeconfig set image deployment/batida-landing batida-landing=git.batida.io/batida/batida-landing:${{ github.sha }} -n prod + kubectl --kubeconfig /tmp/kubeconfig rollout status deployment/batida-landing -n prod --timeout=120s + env: + KUBECONFIG_CONTENT: ${{ secrets.KUBECONFIG }} diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..0f9726d --- /dev/null +++ b/Dockerfile @@ -0,0 +1,9 @@ +FROM nginx:alpine + +ARG APP_URL=https://app.batida.io + +COPY index.html /tmp/index.html +RUN sed -i "s|{{APP_URL}}|${APP_URL}|g" /tmp/index.html +RUN mv /tmp/index.html /usr/share/nginx/html/index.html + +EXPOSE 80 diff --git a/index.html b/index.html new file mode 100644 index 0000000..40a61b9 --- /dev/null +++ b/index.html @@ -0,0 +1,1828 @@ + + + + + + Batida — Gerencie Incidentes. Mantenha a Calma. + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
B
+ Batida +
+ +
+ + + +
+ Login + +
+ +
+ + + + Deslize para fechar → +
+
+
+ + +
+
+ + +
+
+ +
+
+ +
+ +
+ + + + + + Alternativa inteligente ao PagerDuty • Feito no 🇧🇷 + +
+ + +

+ Gerencie Incidentes.
+ Mantenha a Calma. +

+ + +

+ Plataforma de incident management para times DevOps que precisam + responder rápido, coordenar sem caos e aprender com cada problema. +

+ + +
+ + +
+ + +
+

Built by SREs, for SREs

+
+ + + Open Source Core + + + + Early Access + + + + Free to Start + +
+
+
+ + +
+
+ +
+ + +
+ +
+
+
+
+
+
+
+
+ app.batida.io/dashboard +
+
+
+ + +
+ +
+
+
+ Ativos +
+
+
3
+
2 críticos
+
+ +
+
+ MTTR + + + +
+
23min
+
↓ 40%
+
+ +
+
+ On-Call +
+
+
João S.
+
Platform Team
+
+
+ + +
+
+ Recentes + Ver todos → +
+
+
+
+
+
+
#INC-1243 · API Timeout
+
Há 12 min · Production
+
+
+ P1 +
+ +
+
+
+
+
#INC-1242 · DB Latency
+
Há 45 min · Production
+
+
+ P2 +
+ +
+
+
+
+
#INC-1241 · Memory Warning
+
Há 2h · Staging
+
+
+ P3 +
+
+
+
+
+ + + +
+
+
+
+
+ + +
+
+ +
+
+

+ O caos do incident management real +

+

+ Reconhece alguma dessas situações? Você não está sozinho. +

+
+ +
+ +
+
🚨
+

Alertas Infinitos

+

+ Sua equipe recebe centenas de alertas por dia. Noise demais, signal de menos. Ninguém sabe o que é crítico até ser tarde demais. +

+
+ Result: Alert Fatigue → Missed Incidents +
+
+ + +
+
💬
+

Coordenação Caótica

+

+ Quando um incidente acontece, vira bagunça geral. Quem está on-call? Quem já foi escalonado? Informações perdidas em threads infinitas. +

+
+ Result: Slow Response → Longer Outages +
+
+ + +
+
📝
+

Postmortems Ignorados

+

+ Depois do incêndio apagado, ninguém tem tempo para documentar. Mesmos erros acontecem de novo. Zero aprendizado estruturado. +

+
+ Result: Repeated Failures → No Improvement +
+
+
+ + +
+
+ Não precisa ser assim. + O Batida transforma caos em processo. + +
+
+
+
+ + +
+
+
+ +
+
+ +
+
+ + All-in-One Platform +
+ +

+ Tudo que você precisa para
+ incident management +

+ +

+ Uma plataforma completa para detectar, responder, coordenar e aprender com incidentes. + Sem complexidade. Sem preço de enterprise. +

+ +
+
+
+ + + +
+ On-call inteligente com escalonamento automático +
+ +
+
+ + + +
+ Centralização de alertas de qualquer ferramenta +
+ +
+
+ + + +
+ Comunicação integrada (Slack, Teams, SMS) +
+ +
+
+ + + +
+ Runbooks automatizados & postmortems +
+ +
+
+ + + +
+ Analytics avançados de MTTR e SLAs +
+
+
+ + +
+
+ Analytics Dashboard +
+
+
+
+ + +
+
+ +
+
+

+ Recursos poderosos.
+ Interface simples. +

+

+ Tudo que você precisa para gerenciar incidentes como empresa Fortune 500. +

+
+ +
+ +
+
+ + + +
+

Gestão de On-call Inteligente

+
    +
  • Escalações automáticas configuráveis
  • +
  • Calendários com múltiplas camadas
  • +
  • Handoffs entre timezones
  • +
  • Integração Google/Outlook
  • +
+
+ +
+
+ + + +
+

Alerting & Correlação AI

+
    +
  • +200 fontes conectáveis
  • +
  • Redução automática de noise via ML
  • +
  • Deduplication & suppression
  • +
  • Políticas customizáveis
  • +
+
+ +
+
+ + + +
+

Resposta Orquestrada

+
    +
  • Canais automáticos Slack/Teams
  • +
  • War rooms virtuais colaborativos
  • +
  • Runbooks & checklists
  • +
  • Status pages públicas/privadas
  • +
+
+ +
+
+ + + +
+

Pós-Incidente & Aprendizado

+
    +
  • Templates blameless postmortems
  • +
  • Análise automática MTTA/MTTR
  • +
  • Action items rastreáveis
  • +
  • Base de conhecimento evolutiva
  • +
+
+ +
+
+ + + +
+

Analytics & Observability

+
    +
  • Dashboards tempo real
  • +
  • Relatórios customizáveis
  • +
  • Trend analysis & predição
  • +
  • Exportação para BI tools
  • +
+
+ + +
+
🎯
+

Quer ver tudo em ação?

+

+ Agende uma demo personalizada de 15 minutos. +

+ +
+
+
+
+ + +
+
+
+ +
+
+

+ De caos a controle em
+ 3 passos simples +

+

+ Setup em menos de 15 minutos. Sem complexidade. +

+
+ +
+ + + + +
+
+
1
+
+
+
+

Conecte suas ferramentas

+

+ Integre Datadog, Prometheus, CloudWatch, ou qualquer ferramenta via webhook/API. +

+
~5 min setup
+
+ +
+
+
2
+
+
+
🎯
+

Configure workflows

+

+ Defina políticas de escalonamento, runbooks, canais de comunicação. Ou use templates prontos. +

+
Templates incluídos
+
+ +
+
+
3
+
+
+
🚀
+

Responda & aprenda

+

+ Receba alerts inteligentes, coordene equipe, resolva mais rápido, construa knowledge base. +

+
Contínuo improvement
+
+
+ + +
+ +

Setup < 15 min • Sem cartão • Suporte PT-BR

+
+
+
+ + +
+
+ +
+
+

+ Conecte com tudo que você
+ já usa +

+

+ Integrações nativas com o stack moderno. +200 conectores disponíveis. +

+
+ +
+
+ Datadog +
+
+ Slack +
+
+ Prometheus +
+
+ Jira +
+
+ Grafana +
+
+ Teams +
+
+ Sentry +
+
+ CloudWatch +
+
+ New Relic +
+
+ GitHub +
+
+ Linear +
+
+ +190 mais +
+
+ + +
+
+ + +
+
+
+ +
+
+
+ + + + + Early Access Aberto +
+

+ Construido por SREs,
+ para SREs +

+

+ Nascemos da frustracao real com ferramentas caras e complexas. O Batida e open source no core, com recursos enterprise sem preco de enterprise. +

+
+ + +
+
+
200+
+
Integracoes disponiveis
+
+
+
<15min
+
Setup time
+
+
+
100%
+
Open source core
+
+
+
$0
+
Para comecar
+
+
+ +
+

+ Filosofia: Incident management nao deveria custar o salario de um engenheiro. + On-call, alerting, AI Scribe e status pages — tudo incluido por + $12/user/mes. +

+
+
+
+ + +
+
+ +
+
+

+ Por que Batida? +

+

Comparação honesta. Sem marketing enganoso.

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FeatureBatida ✨PagerDutyincident.ioOpsGenie
Preço$12/user$21/user$25/user (efetivo)$20/user
Setup Time< 15 min ⚡Dias/SemanasHorasHoras
UI/UXModerna & IntuitivaComplexaBoaDatada
On-callIncluidoIncluido+ $10/userIncluido
AI ScribeIncluidoNao disponivelPro only ($25)Nao disponivel
Call Routing1 numero incluidoIncluidoPro onlyNao disponivel
Status Pages5 incluidasNao disponivel1 incluidaNao disponivel
+
+ +
+

+ Nossa Promessa: On-call, AI Scribe, call routing e status pages — tudo incluido por + $12/user/mes. Sem surpresas. +

+
+
+
+ + +
+
+
+ +
+
+

+ Preços simples &
+ transparentes +

+

+ Escolha o plano ideal. Comece grátis, escale quando precisar. +

+
+ +
+ +
+
+
FREE
+
+ $0 +
+
Free tier permanente
+
+ +
    +
  • + + Até 5 usuarios +
  • +
  • + + Incidentes ilimitados +
  • +
  • + + 1 schedule + 1 escalation policy +
  • +
  • + + 1 status page +
  • +
  • + + AI Scribe (5/mes) +
  • +
  • + + Slack + 3 webhooks +
  • +
  • + + Community support +
  • +
+ + Comecar Gratis +
+ + + + + +
+
+
ENTERPRISE
+
+ Custom +
+
Sob medida
+
+ +
    +
  • + + Tudo do Pro + +
  • +
  • + + SSO/SAML/SCIM (Okta, Azure AD) +
  • +
  • + + Custom RBAC + audit logs +
  • +
  • + + SLA garantido 99.99% +
  • +
  • + + Dedicated success manager +
  • +
  • + + Custom data residency +
  • +
  • + + SOC 2 + compliance +
  • +
+ + +
+
+ +

+ Free tier permanente. Sem cartao de credito. Upgrade quando quiser. +

+
+
+ + +
+
+ +
+
+

+ Perguntas frequentes +

+

Tire suas dúvidas antes de começar

+
+ +
+
+ + O Batida substitui completamente o PagerDuty/OpsGenie? + + + + +
+ Sim! Cobrimos 100% dos casos de uso core: alerting, on-call, escalation, incident coordination, postmortems, e analytics. Migração guiada disponível. +
+
+ +
+ + Quanto tempo leva para configurar? + + + + +
+ A maioria começa a receber alertas em menos de 15 minutos. Integrações complexas podem levar algumas horas. Temos templates prontos. +
+
+ +
+ + Meus dados ficam onde? + + + + +
+ Oferecemos opcao de servidores em US-East para compliance GDPR e baixa latencia global. Mais regioes em breve. +
+
+ +
+ + Em qual moeda sao cobrados os planos? + + + + +
+ Todos os planos sao cobrados em USD ($12/user/mes no plano Pro anual). Aceitamos cartao de credito via Stripe. +
+
+ +
+ + Posso cancelar a qualquer momento? + + + + +
+ Claro. Sem contratos anuais forçados (exceto Enterprise). Cancele com um clique. Dados disponíveis por 30 dias pós-cancelamento. +
+
+ +
+ + É seguro? LGPD/GDPR compliant? + + + + +
+ Sim. Criptografia AES-256, backups diarios. LGPD/GDPR compliant. SOC 2 audit em andamento. +
+
+
+
+
+ + +
+
+
+
+ +
+

+ Pronto para acabar com o
+ caos de incidentes? +

+ +

+ Junte-se aos times que estao transformando sua resposta a incidentes. +

+ +
+ + +
+ +

+ Setup < 15 min • Sem cartão • Suporte PT-BR nativo +

+ +
+

Ainda tem dúvidas? Fale conosco:

+ +
+
+
+ + + + + + + + + diff --git a/k8s/prod.yaml b/k8s/prod.yaml new file mode 100644 index 0000000..f691cc2 --- /dev/null +++ b/k8s/prod.yaml @@ -0,0 +1,52 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: batida-landing + namespace: prod +spec: + replicas: 1 + selector: + matchLabels: + app: batida-landing + template: + metadata: + labels: + app: batida-landing + spec: + tolerations: + - key: prod + operator: Equal + value: "true" + effect: NoSchedule + nodeSelector: + dedicated: prod + containers: + - name: batida-landing + image: git.batida.io/batida/batida-landing:latest + ports: + - containerPort: 80 + livenessProbe: + httpGet: + path: / + port: 80 + initialDelaySeconds: 5 + periodSeconds: 30 + resources: + requests: + memory: "16Mi" + cpu: "10m" + limits: + memory: "64Mi" + cpu: "100m" +--- +apiVersion: v1 +kind: Service +metadata: + name: batida-landing + namespace: prod +spec: + selector: + app: batida-landing + ports: + - port: 80 + targetPort: 80 diff --git a/k8s/staging.yaml b/k8s/staging.yaml new file mode 100644 index 0000000..cb54221 --- /dev/null +++ b/k8s/staging.yaml @@ -0,0 +1,52 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: batida-landing + namespace: staging +spec: + replicas: 1 + selector: + matchLabels: + app: batida-landing + template: + metadata: + labels: + app: batida-landing + spec: + tolerations: + - key: staging + operator: Equal + value: "true" + effect: NoSchedule + nodeSelector: + dedicated: staging + containers: + - name: batida-landing + image: git.batida.io/batida/batida-landing:staging-latest + ports: + - containerPort: 80 + livenessProbe: + httpGet: + path: / + port: 80 + initialDelaySeconds: 5 + periodSeconds: 30 + resources: + requests: + memory: "16Mi" + cpu: "10m" + limits: + memory: "64Mi" + cpu: "100m" +--- +apiVersion: v1 +kind: Service +metadata: + name: batida-landing + namespace: staging +spec: + selector: + app: batida-landing + ports: + - port: 80 + targetPort: 80