Compare commits
4 Commits
f00bd1055d
...
dbddcc40a2
| Author | SHA1 | Date | |
|---|---|---|---|
| dbddcc40a2 | |||
| 22df131b57 | |||
| de85066688 | |||
| 1ebfc0e310 |
@@ -0,0 +1,10 @@
|
||||
*.local
|
||||
.vscode
|
||||
.idea
|
||||
.DS_Store
|
||||
.env
|
||||
.env.*
|
||||
.git
|
||||
.gitignore
|
||||
README.md
|
||||
.github
|
||||
@@ -3,3 +3,8 @@ node_modules/
|
||||
output.css
|
||||
package.json
|
||||
package-lock.json
|
||||
|
||||
# Environment
|
||||
.env
|
||||
.env.*
|
||||
!.env.*.example
|
||||
|
||||
@@ -1,10 +1,21 @@
|
||||
# batida-landing
|
||||
# batida-landing — Intent Node (Root)
|
||||
|
||||
## Purpose & Scope
|
||||
Marketing/landing page for Batida. Static HTML served via Nginx.
|
||||
Separate git repository — self-contained.
|
||||
|
||||
## Structure
|
||||
**Does:** Serve static HTML landing pages (EN + PT-BR), SEO, Nginx hosting.
|
||||
**Does NOT:** Handle user data, run application logic, serve the app (→ batida-web).
|
||||
|
||||
## Entry Points
|
||||
No build step required. Just serve static files via Nginx.
|
||||
|
||||
## Dependencies
|
||||
| Depends On | Why |
|
||||
|------------|-----|
|
||||
| batida-infra | K8s deployment manifests, Dockerfile → Nginx container |
|
||||
|
||||
## Structure
|
||||
```
|
||||
index.html → English landing page
|
||||
index.pt-br.html → Portuguese landing page
|
||||
@@ -17,23 +28,23 @@ sitemap.xml → SEO sitemap
|
||||
k8s/ → Kubernetes deployment manifests
|
||||
```
|
||||
|
||||
## Deployment
|
||||
|
||||
Deployed to Kubernetes via `batida-infra`. The Dockerfile copies static HTML into an Nginx container. Manifests in `k8s/` define the deployment.
|
||||
|
||||
## Key Facts
|
||||
|
||||
## Key Patterns
|
||||
- Fully static — no build step, no JavaScript framework
|
||||
- Two languages: English and Portuguese (separate HTML files)
|
||||
- Nginx handles gzip compression and static caching
|
||||
- SEO configured via robots.txt and sitemap.xml
|
||||
|
||||
## Traps & Gotchas
|
||||
- Both language versions must be updated in sync — forgetting one leaves stale content
|
||||
- No hot reload or dev server — edit HTML, refresh browser
|
||||
|
||||
## Anti-Patterns
|
||||
- Never add server-side logic or build tools — pure static HTML
|
||||
- Never commit secrets or environment-specific values
|
||||
- Never add JavaScript frameworks — keep it static
|
||||
|
||||
## Boundaries
|
||||
|
||||
### Always
|
||||
- Keep both language versions in sync when updating content
|
||||
- Test HTML renders correctly in browser before committing
|
||||
|
||||
### Never
|
||||
- Never add server-side logic or build tools — pure static HTML
|
||||
- Never commit secrets or environment-specific values
|
||||
|
||||
+25
-4
@@ -1,14 +1,25 @@
|
||||
FROM node:20-alpine AS build
|
||||
FROM node:20-alpine AS builder
|
||||
|
||||
WORKDIR /build
|
||||
|
||||
COPY input.css tailwind.config.js ./
|
||||
COPY *.html ./
|
||||
RUN npx tailwindcss@3 -i input.css -o output.css --minify
|
||||
|
||||
RUN --mount=type=cache,target=/root/.npm \
|
||||
npx tailwindcss@3 -i input.css -o output.css --minify
|
||||
|
||||
FROM nginx:alpine
|
||||
|
||||
ARG APP_URL=https://app.batida.io
|
||||
|
||||
COPY --from=build /build/output.css /usr/share/nginx/html/output.css
|
||||
RUN addgroup -g 1000 -S nginx-user && \
|
||||
adduser -u 1000 -S nginx-user -G nginx-user
|
||||
|
||||
COPY --from=builder /build/output.css /usr/share/nginx/html/output.css
|
||||
COPY favicon.png /usr/share/nginx/html/favicon.png
|
||||
COPY og-image.png /usr/share/nginx/html/og-image.png
|
||||
COPY robots.txt /usr/share/nginx/html/robots.txt
|
||||
COPY sitemap.xml /usr/share/nginx/html/sitemap.xml
|
||||
COPY index.html /tmp/index.html
|
||||
COPY index.pt-br.html /tmp/index.pt-br.html
|
||||
COPY vs.html /tmp/vs.html
|
||||
@@ -22,8 +33,18 @@ RUN sed -i "s|{{APP_URL}}|${APP_URL}|g" /tmp/index.html && \
|
||||
mv /tmp/index.html /usr/share/nginx/html/index.html && \
|
||||
mv /tmp/index.pt-br.html /usr/share/nginx/html/pt-br/index.html && \
|
||||
mv /tmp/vs.html /usr/share/nginx/html/vs.html && \
|
||||
mv /tmp/vs.pt-br.html /usr/share/nginx/html/pt-br/vs.html
|
||||
mv /tmp/vs.pt-br.html /usr/share/nginx/html/pt-br/vs.html && \
|
||||
chown -R nginx-user:nginx-user /usr/share/nginx/html && \
|
||||
chown -R nginx-user:nginx-user /var/cache/nginx && \
|
||||
chown -R nginx-user:nginx-user /var/log/nginx && \
|
||||
chown -R nginx-user:nginx-user /etc/nginx/conf.d && \
|
||||
touch /run/nginx.pid && \
|
||||
chown -R nginx-user:nginx-user /run/nginx.pid
|
||||
|
||||
COPY nginx.conf /etc/nginx/conf.d/default.conf
|
||||
|
||||
USER nginx-user
|
||||
|
||||
EXPOSE 80
|
||||
|
||||
CMD ["nginx", "-g", "daemon off;"]
|
||||
|
||||
BIN
Binary file not shown.
|
After Width: | Height: | Size: 468 B |
@@ -8,6 +8,7 @@
|
||||
<title>Batida — Manage Incidents. Keep Your Cool.</title>
|
||||
<meta name="description" content="Intelligent alternative to PagerDuty. Incident management platform for DevOps teams that need to respond fast, coordinate without chaos, and learn from every problem.">
|
||||
<link rel="canonical" href="https://batida.io/">
|
||||
<link rel="icon" type="image/png" href="/favicon.png">
|
||||
|
||||
<!-- Open Graph -->
|
||||
<meta property="og:type" content="website">
|
||||
@@ -15,11 +16,15 @@
|
||||
<meta property="og:title" content="Batida — Manage Incidents. Keep Your Cool.">
|
||||
<meta property="og:description" content="Intelligent alternative to PagerDuty. Incident management platform for DevOps teams. Start free.">
|
||||
<meta property="og:site_name" content="Batida">
|
||||
<meta property="og:image" content="https://batida.io/og-image.png">
|
||||
<meta property="og:image:width" content="1200">
|
||||
<meta property="og:image:height" content="630">
|
||||
|
||||
<!-- Twitter Card -->
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<meta name="twitter:title" content="Batida — Manage Incidents. Keep Your Cool.">
|
||||
<meta name="twitter:description" content="Intelligent alternative to PagerDuty. Incident management platform for DevOps teams.">
|
||||
<meta name="twitter:image" content="https://batida.io/og-image.png">
|
||||
|
||||
<!-- Sitemap -->
|
||||
<link rel="sitemap" type="application/xml" href="/sitemap.xml">
|
||||
@@ -489,6 +494,9 @@
|
||||
font-size: clamp(1.5rem, 4vw, 3rem);
|
||||
}
|
||||
</style>
|
||||
<!-- Analytics: Plausible (privacy-friendly, GDPR compliant) -->
|
||||
<script defer data-domain="batida.io" src="https://plausible.io/js/script.js"></script>
|
||||
|
||||
</head>
|
||||
<body class="antialiased">
|
||||
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
<title>Batida — Gerencie Incidentes. Mantenha a Calma.</title>
|
||||
<meta name="description" content="Plataforma moderna de incident management. Alternativa inteligente ao PagerDuty. Setup em minutos. Comece grátis.">
|
||||
<link rel="canonical" href="https://batida.io/pt-br">
|
||||
<link rel="icon" type="image/png" href="/favicon.png">
|
||||
|
||||
<!-- Open Graph -->
|
||||
<meta property="og:type" content="website">
|
||||
@@ -15,11 +16,15 @@
|
||||
<meta property="og:title" content="Batida — Gerencie Incidentes. Mantenha a Calma.">
|
||||
<meta property="og:description" content="Plataforma moderna de incident management. Alternativa inteligente ao PagerDuty. Setup em minutos. Comece grátis.">
|
||||
<meta property="og:site_name" content="Batida">
|
||||
<meta property="og:image" content="https://batida.io/og-image.png">
|
||||
<meta property="og:image:width" content="1200">
|
||||
<meta property="og:image:height" content="630">
|
||||
|
||||
<!-- Twitter Card -->
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<meta name="twitter:title" content="Batida — Gerencie Incidentes. Mantenha a Calma.">
|
||||
<meta name="twitter:description" content="Plataforma moderna de incident management. Alternativa inteligente ao PagerDuty.">
|
||||
<meta name="twitter:image" content="https://batida.io/og-image.png">
|
||||
|
||||
<!-- Sitemap -->
|
||||
<link rel="sitemap" type="application/xml" href="/sitemap.xml">
|
||||
@@ -489,6 +494,9 @@
|
||||
font-size: clamp(1.5rem, 4vw, 3rem);
|
||||
}
|
||||
</style>
|
||||
<!-- Analytics: Plausible (privacy-friendly, GDPR compliant) -->
|
||||
<script defer data-domain="batida.io" src="https://plausible.io/js/script.js"></script>
|
||||
|
||||
</head>
|
||||
<body class="antialiased">
|
||||
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 27 KiB |
@@ -8,16 +8,21 @@
|
||||
<title>Batida vs PagerDuty vs Grafana OnCall — Feature Comparison</title>
|
||||
<meta name="description" content="Compare Batida with PagerDuty and Grafana OnCall. See pricing, features, LGPD compliance, and why Brazilian teams choose Batida.">
|
||||
<link rel="canonical" href="https://batida.io/vs">
|
||||
<link rel="icon" type="image/png" href="/favicon.png">
|
||||
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:url" content="https://batida.io/vs">
|
||||
<meta property="og:title" content="Batida vs PagerDuty vs Grafana OnCall — Feature Comparison">
|
||||
<meta property="og:description" content="Compare incident management platforms. See why Batida is the best choice for Brazilian DevOps teams.">
|
||||
<meta property="og:site_name" content="Batida">
|
||||
<meta property="og:image" content="https://batida.io/og-image.png">
|
||||
<meta property="og:image:width" content="1200">
|
||||
<meta property="og:image:height" content="630">
|
||||
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<meta name="twitter:title" content="Batida vs PagerDuty vs Grafana OnCall">
|
||||
<meta name="twitter:description" content="Compare incident management platforms for Brazilian teams.">
|
||||
<meta name="twitter:image" content="https://batida.io/og-image.png">
|
||||
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
@@ -70,6 +75,9 @@
|
||||
.compare-table .partial { color: #F59E0B; }
|
||||
.compare-table .batida-col { color: #F97316; font-weight: 600; }
|
||||
</style>
|
||||
<!-- Analytics: Plausible (privacy-friendly, GDPR compliant) -->
|
||||
<script defer data-domain="batida.io" src="https://plausible.io/js/script.js"></script>
|
||||
|
||||
</head>
|
||||
<body class="antialiased">
|
||||
|
||||
|
||||
@@ -8,16 +8,21 @@
|
||||
<title>Batida vs PagerDuty vs Grafana OnCall — Comparação de Recursos</title>
|
||||
<meta name="description" content="Compare o Batida com PagerDuty e Grafana OnCall. Veja preços, recursos, conformidade LGPD e por que equipes brasileiras escolhem o Batida.">
|
||||
<link rel="canonical" href="https://batida.io/vs/pt-br">
|
||||
<link rel="icon" type="image/png" href="/favicon.png">
|
||||
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:url" content="https://batida.io/vs/pt-br">
|
||||
<meta property="og:title" content="Batida vs PagerDuty vs Grafana OnCall — Comparação">
|
||||
<meta property="og:description" content="Compare plataformas de gerenciamento de incidentes. Veja por que o Batida é a melhor escolha para equipes DevOps brasileiras.">
|
||||
<meta property="og:site_name" content="Batida">
|
||||
<meta property="og:image" content="https://batida.io/og-image.png">
|
||||
<meta property="og:image:width" content="1200">
|
||||
<meta property="og:image:height" content="630">
|
||||
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<meta name="twitter:title" content="Batida vs PagerDuty vs Grafana OnCall">
|
||||
<meta name="twitter:description" content="Compare plataformas de gerenciamento de incidentes para equipes brasileiras.">
|
||||
<meta name="twitter:image" content="https://batida.io/og-image.png">
|
||||
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
@@ -70,6 +75,9 @@
|
||||
.compare-table .partial { color: #F59E0B; }
|
||||
.compare-table .batida-col { color: #F97316; font-weight: 600; }
|
||||
</style>
|
||||
<!-- Analytics: Plausible (privacy-friendly, GDPR compliant) -->
|
||||
<script defer data-domain="batida.io" src="https://plausible.io/js/script.js"></script>
|
||||
|
||||
</head>
|
||||
<body class="antialiased">
|
||||
|
||||
|
||||
Reference in New Issue
Block a user