Monolito em Next.js (App Router) com 28 ferramentas para produtividade de desenvolvimento.
O projeto foi estruturado para ser:
- modular
- testável
- seguro por padrão
- pronto para deploy
- 28 ferramentas em uma única aplicação
- App Router + TypeScript
- validação com Zod em todas as rotas API
- rate limit simples por IP (in-memory)
- Node runtime nas rotas que usam libs Node
- tema light/dark com toggle
- testes unitários (Vitest) e smoke e2e (Playwright)
- encurtador local com redirecionamento em
/s/:slug
- Next.js 16 (App Router)
- React + TypeScript
- TailwindCSS
- Zod
- jsonwebtoken
- sharp
- sql-formatter
- pdf-lib (+ Ghostscript opcional no host)
- @faker-js/faker
- qrcode
- Vitest
- Playwright
- ESLint + Prettier
src/
app/ # Rotas de página e route handlers (/api)
components/ # UI reutilizável e componentes das ferramentas
lib/ # Funções puras por domínio
server/ # Serviços e utilitários server-only
types/ # Tipos compartilhados
tests/
unit/ # Vitest
e2e/ # Playwright smoke- Gerador de CPF
- Gerador de CNPJ
- Hash generator (md5/sha1/sha256/sha512)
- UUID/ULID generator
- Lorem Ipsum
- JWT encoder/decoder (decode local + sign/verify server)
- Base64 encode/decode
- Encurtador de links (local)
- Formatador de JSON
- Formatador de SQL
- Testador de Regex
- Comparação de texto (diff)
- Visualizador Markdown
- Conversor de cor
- Compressão de imagens
- Compressão de PDFs
- Gerador de nomes
- Gerador de senhas
- Meu IP
- Gerador de QR Code
- Remover acentos
- Conversor de maiúsculas e minúsculas
- Contador de palavras e caracteres
- Contador de dias entre datas
- Somar dias em data
- Subtrair dias em data
- Ordenar e desduplicar lista
- Conversor de unidades CSS
- Node.js 22+ (veja
.nvmrc) - Yarn 1.22+
- para compressão de PDF de melhor qualidade:
ghostscript(gs) no host
yarn install
yarn devApp em http://localhost:3000.
yarn build
yarn startO script de build usa
next build --webpackpara maior estabilidade no ambiente atual.
Copie .env.example para .env.local:
cp .env.example .env.localVariáveis:
NEXT_PUBLIC_APP_URL(URL pública da aplicação)RATE_LIMIT_WINDOW_MS(padrão:60000)RATE_LIMIT_MAX(padrão:120)SHORTENER_DATABASE_URL(opcional: URL dedicada do Postgres para o shortener)SUPABASE_DB_URL(opcional: atalho para URL do Postgres do Supabase)SHORTENER_DATABASE_TABLE(opcional: tabela do shortener, padrãoshort_links, aceitaschema.tabela)POSTGRES_URL(auto-detectado do Vercel/Supabase Integration)POSTGRES_PRISMA_URL(fallback auto-detectado)POSTGRES_URL_NON_POOLING(fallback auto-detectado)DATABASE_URL(fallback do shortener quandoSHORTENER_DATABASE_URLnão está definida)POSTGRES_USER+POSTGRES_HOST+POSTGRES_DATABASE+POSTGRES_PASSWORD(+POSTGRES_PORTopcional) para montar URL automaticamenteSHORTENER_DATABASE_SSL_NO_VERIFY(opcional e temporário: desabilita validação TLS do certificado do shortener)SHORTENER_STORAGE_FILE(opcional: fallback JSON local sem Postgres)
GET /api/my-ipPOST /api/hashPOST /api/jwt/signPOST /api/jwt/verifyPOST /api/shortenPOST /api/sql/formatPOST /api/image/compressPOST /api/pdf/compressGET /s/:slug(redireciona para URL curta criada localmente)
yarn test # unit
yarn test:e2e # smoke e2e
yarn typecheck
yarn lintyarn devyarn buildyarn startyarn lintyarn lint:fixyarn typecheckyarn formatyarn format:checkyarn testyarn test:watchyarn test:e2eyarn test:e2e:ui
- validação Zod em rotas API
- rate limit in-memory por IP
- headers de segurança em
next.config.ts - JWT secrets não são persistidos
- shortener aceita apenas URL
http/https - shortener usa Postgres quando encontra uma URL de DB (
SHORTENER_DATABASE_URL,SUPABASE_DB_URL,POSTGRES_URL,POSTGRES_PRISMA_URL,POSTGRES_URL_NON_POOLINGouDATABASE_URL) - uploads com limite:
- imagem: 10MB (
png/jpeg/webp/gif) - PDF: 20MB
- compressão de PDF prioriza ghostscript com fallback em
pdf-lib
- imagem: 10MB (