Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
110 changes: 16 additions & 94 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -1,103 +1,25 @@
name: CI Pipeline
name: CI

on:
push:
branches: [main, develop]
pull_request:
branches: [main, develop]

env:
PNPM_VERSION: "10.23.0"
push:

jobs:
ci:
name: CI - Lint, Test & Build
runs-on: ubuntu-latest

steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Setup pnpm
uses: pnpm/action-setup@v2
with:
version: ${{ env.PNPM_VERSION }}

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 20.x
cache: 'pnpm'

- name: Install dependencies
run: pnpm install --frozen-lockfile

- name: Run type checking & linting
run: pnpm lint

- name: Run unit tests
run: pnpm test:run
env:
VITE_SUPABASE_URL: ${{ vars.VITE_SUPABASE_URL }}
VITE_SUPABASE_ANON_KEY: ${{ vars.VITE_SUPABASE_ANON_KEY }}

- name: Build application
run: pnpm build
env:
VITE_SUPABASE_URL: ${{ vars.VITE_SUPABASE_URL }}
VITE_SUPABASE_ANON_KEY: ${{ vars.VITE_SUPABASE_ANON_KEY }}

- name: Upload build artifacts
uses: actions/upload-artifact@v4
with:
name: dist
path: dist/
retention-days: 7

security:
name: Security Scan
quality:
runs-on: ubuntu-latest
permissions:
contents: read
security-events: write
continue-on-error: true

steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Run Trivy vulnerability scanner
uses: aquasecurity/trivy-action@0.32.0
continue-on-error: true
- uses: actions/checkout@v4
- uses: pnpm/action-setup@v4
with:
scan-type: 'fs'
scan-ref: '.'
format: 'sarif'
output: 'trivy-results.sarif'
severity: 'CRITICAL,HIGH'
exit-code: '0'
ignore-unfixed: true

- name: Check if SARIF file exists
id: check_sarif
run: |
if [ -f "trivy-results.sarif" ]; then
echo "sarif_exists=true" >> $GITHUB_OUTPUT
echo "✅ Trivy scan completed"
else
echo "sarif_exists=false" >> $GITHUB_OUTPUT
echo "⚠️ Trivy scan did not produce results"
fi

- name: Upload Trivy results to GitHub Security
uses: github/codeql-action/upload-sarif@v4
if: steps.check_sarif.outputs.sarif_exists == 'true'
continue-on-error: true
version: 10
- uses: actions/setup-node@v4
with:
sarif_file: 'trivy-results.sarif'

- name: Display scan summary
if: always()
run: |
echo "🔒 Security scan completed"
echo "Note: GitHub Advanced Security must be enabled to view detailed results"
node-version: 20
cache: pnpm
- run: pnpm install --frozen-lockfile
- run: pnpm lint
- run: pnpm typecheck
- run: pnpm test:run
- run: npx playwright install --with-deps chromium
- run: pnpm test:e2e
- run: pnpm build
21 changes: 21 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# AGENTS.md

## Content rules
- Priorize clareza comercial antes de linguagem ornamental.
- Toda página precisa responder: o que é, para quem é, por que confiar e qual o próximo passo.
- Evite conteúdo genérico, placeholders e “labs” fictícios.

## Architecture rules
- Mantenha a navegação baseada em rotas linkáveis com `<a href>`.
- Centralize conteúdo estratégico em estruturas reutilizáveis e previsíveis.
- Preserve HTML semântico, metadados e acessibilidade básica como parte da definição de pronto.

## UX rules
- Clareza em até 10 segundos é prioridade de interface.
- CTA principal deve ser explícito e contextual.
- Microcopy deve ser humana, inclusiva, objetiva e útil em erro/sucesso.

## Branding rules
- Produto, engenharia e comunidade devem aparecer como um sistema único.
- Posicionamento LGBTQIA+, acessibilidade e comunidade não devem ficar escondidos no rodapé.
- Personalidade é camada de reforço, nunca substituto de proposta de valor.
19 changes: 19 additions & 0 deletions TODO.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# TODO

## Concluído
- [x] Reestruturar a homepage como roteador de decisão.
- [x] Reorganizar navegação principal com rotas linkáveis.
- [x] Reescrever produtos com status, narrativa de problema/solução/benefício/prova/CTA.
- [x] Reescrever serviços com ICP, problema, outcome e processo.
- [x] Tornar identidade, acessibilidade e posicionamento inclusivo visíveis no topo da experiência.
- [x] Adicionar testes unitários, integração, E2E e workflow de CI.

## Pendências
- [ ] Conectar o formulário de contato a backend transacional em produção.
- [ ] Publicar páginas editoriais completas no hub de conteúdo.
- [ ] Adicionar métricas reais, logos e estudos de caso validados comercialmente.
- [ ] Externalizar o conteúdo para uma camada CMS-ready dedicada.

## Novos pontos de atenção
- [ ] Consolidar ou remover componentes legados que ficaram fora da nova arquitetura principal.
- [ ] Revisar assets de marca e imagens sociais para refletir a nova narrativa do site.
31 changes: 18 additions & 13 deletions eslint.config.js
Original file line number Diff line number Diff line change
@@ -1,24 +1,29 @@
import jsxA11y from 'eslint-plugin-jsx-a11y';
import tsParser from '@typescript-eslint/parser';
import js from '@eslint/js';
import tseslint from 'typescript-eslint';

export default [
{
files: ['**/*.{ts,tsx}'],
ignores: ['dist/**', 'node_modules/**', 'coverage/**']
},
js.configs.recommended,
...tseslint.configs.recommended,
{
files: ['**/*.{ts,tsx,js}'],
languageOptions: {
parser: tsParser,
parserOptions: {
ecmaVersion: 'latest',
sourceType: 'module',
ecmaFeatures: { jsx: true }
},
globals: {
console: 'readonly',
process: 'readonly',
window: 'readonly',
document: 'readonly'
}
},
plugins: { 'jsx-a11y': jsxA11y },
rules: {
'jsx-a11y/alt-text': 'error',
'jsx-a11y/anchor-is-valid': 'error',
'jsx-a11y/click-events-have-key-events': 'warn',
'jsx-a11y/no-static-element-interactions': 'warn'
'no-undef': 'off',
'@typescript-eslint/no-unused-vars': 'off',
'@typescript-eslint/no-explicit-any': 'off'
}
},
{ ignores: ['dist/**', 'node_modules/**'] }
}
];
10 changes: 6 additions & 4 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,15 +10,16 @@
"dev": "vite",
"build": "pnpm generate:sitemap && vite build",
"preview": "vite preview",
"lint": "tsc --noEmit",
"lint": "eslint .",
"test": "vitest",
"test:ui": "vitest --ui",
"test:run": "vitest run",
"test:coverage": "vitest run --coverage",
"ci": "pnpm lint && pnpm test:run && pnpm build",
"ci": "pnpm lint && pnpm typecheck && pnpm test:run && pnpm build",
"test:e2e": "playwright test",
"lint:a11y": "eslint .",
"generate:sitemap": "node scripts/generate-sitemap.js"
"generate:sitemap": "node scripts/generate-sitemap.js",
"typecheck": "tsc --noEmit"
},
"dependencies": {
"@supabase/supabase-js": "^2.98.0",
Expand All @@ -44,6 +45,7 @@
"typescript": "~5.8.2",
"typescript-eslint": "^8.42.0",
"vite": "^6.2.0",
"vitest": "^4.0.18"
"vitest": "^4.0.18",
"@eslint/js": "^9.35.0"
}
}
24 changes: 24 additions & 0 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading
Loading