Monorepo oficial do ecossistema Emprely, começando pelo produto Emprely Orçamentos.
apps/
api/ ASP.NET Core Web API em Clean Architecture
web/ SaaS web em React, Vite, TypeScript e Tailwind
mobile/ Placeholder do app Expo futuro
landing/ Referência para a landing atual
packages/
design-tokens/
shared-types/
config/
docs/
adr/
architecture/
operations/
product/
specs/
infra/
docker/
lightsail/
terraform/
pipelines/- API: .NET 9, ASP.NET Core, Clean Architecture.
- Web: React 19, Vite, TypeScript, Tailwind CSS.
- Banco local: PostgreSQL via Docker Compose.
- Mobile futuro: React Native com Expo.
- Cloud oficial planejada: AWS com custo baixo para o primeiro beta real.
Ambiente principal recomendado: Windows/PowerShell em D:\Emprely\Projetos\Emprely.
pnpm install
pnpm dev:web
pnpm lint:web
pnpm build:web
pnpm test:e2e:web
pnpm landing:check
pnpm landing:build
pnpm build:api
pnpm test:api
pnpm beta:env:new
pnpm beta:env:domains
pnpm beta:env:validate
pnpm beta:env:validate:public
pnpm validate:deploy
pnpm validate:deploy:runtime
pnpm validate:lightsail
pnpm lightsail:api:build
pnpm web:build:beta
powershell -ExecutionPolicy Bypass -File scripts/deploy-web-s3.ps1 -BucketName "emprely-app-web"
pnpm validate:beta
pnpm validate:mvp
docker compose config
dotnet ef database update --project apps/api/src/Emprely.Infrastructure --startup-project apps/api/src/Emprely.ApiQuando a automação estiver rodando pelo WSL/OpenCode, prefira chamar o gate pelo ambiente Windows para evitar conflito entre node_modules/Corepack do Linux e do Windows:
cmd.exe /c "pnpm validate:mvp"O script scripts/run-web-e2e.mjs detecta Windows, WSL e Linux para escolher o comando correto do pnpm no E2E.
Antes de rodar pnpm validate:beta ou pnpm validate:mvp, feche qualquer instância local da API/Visual Studio que esteja usando DLLs de apps/api/src/Emprely.Api/bin, porque o dotnet build precisa sobrescrever esses arquivos.
Use docs/product/beta-mvp-runbook.md para subir PostgreSQL, aplicar migrations, rodar API/web e executar o aceite local do MVP.
Use docs/operations/manutencao-projetos-emprely.md como manual central de manutencao, deploy, configuracao, acesso a dados, banco, secrets e operacao dos projetos Emprely, incluindo a landing externa.
Use docs/product/checklist-final-beta-mvp.md para decidir prontidao do MVP, separar bloqueantes reais de beta e manter prints/imagens/polimento visual adiados para a etapa final.
Use docs/testing/arquitetura-testes.md como guia oficial de arquitetura de testes do Emprely e docs/testing/roteiros-testes.md para decidir quais suites rodar em PR, nightly, pre-release, producao e pos-incidente.
Use spec/2026-06-14-deploy-lightsail-api-baixo-custo.md para a spec SDD atual do primeiro beta real barato: web em S3 + CloudFront, API em Lightsail Linux US$7/mes e banco Neon Free.
Use spec/2026-06-17-emails-transacionais-html-retencao.md para a spec atual dos e-mails transacionais: Amazon SES, contato@emprely.com.br, template central com logo real, botao de acao e copy pt-BR revisada.
Use docs/product/beta-staging-deploy.md como runbook operacional do deploy beta/staging. O kit infra/lightsail e o caminho oficial da API; infra/docker permanece util para imagem base, validacao local, smoke e fallback.
Use docs/product/webapp-s3-cloudfront-deploy.md como runbook operacional do proximo passo: publicar o webapp React/Vite em S3 + CloudFront com VITE_API_BASE_URL=https://api.emprely.com.br.
Use apps/landing/README.md para operar a landing externa pelo workspace. O projeto real permanece em D:\Emprely\Projetos\LandingPage\EmprelyLandingPage-WebApp e pode ser validado por pnpm landing:check.
Use docs/architecture/dominios-ambientes.md para o mapa oficial de dominios: landing em www.emprely.com.br, SaaS web em app.emprely.com.br e API em api.emprely.com.br.
Use spec/2026-05-23-regras-proposta-trial-watermark.md para as regras V1 implementadas de ciclo de proposta, trial expirado, bloqueios comerciais e marca d'água.
O primeiro ambiente fora da maquina local deve seguir a decisao de custo minimo:
- Web: S3 + CloudFront em
https://app.emprely.com.br. - API: AWS Lightsail Linux US$7/mes com Docker Compose + Caddy em
https://api.emprely.com.br. - Banco: Neon Free PostgreSQL.
- Arquivos/logos: S3 privado + CloudFront em
https://dz3i7ivpc873w.cloudfront.net. - E-mails transacionais: Amazon SES em
us-east-1comcontato@emprely.com.br. - Caixa de entrada: Zoho Mail em
contato@emprely.com.br. - Landing: manter como esta em S3 + CloudFront.
Estado real em 2026-06-17:
- API publicada e validada em
https://api.emprely.com.br/health/livee/health/ready. - Revisao local de 2026-06-16 validou
pnpm validate:mvpe build beta web com API real. - Bucket S3 privado
emprely-app-webcriado e build do webapp publicado nele. - Webapp publicado em
https://app.emprely.com.brvia CloudFront/OAC, com HTTP 200 validado em 2026-06-17. - Amazon SES em producao para
emprely.com.brconfigurado e envio real funcionando porcontato@emprely.com.br. - API compila com templates transacionais revisados em 2026-06-17.
- Proximo passo: validar fluxo real completo pelo dominio
https://app.emprely.com.br, revalidar emails reais apos deploy da API revisada e criar alertas de custo.
Configure variaveis de ambiente em vez de reutilizar secrets dev:
ConnectionStrings__EmprelyDbJwt__IssuerJwt__AudienceJwt__SigningKeyJwt__ExpirationMinutesCors__OrigensPermitidas__0App__PublicWebUrlAdminOperacoes__OperationsKeyRateLimit__AuthPermitLimitRateLimit__AdminPermitLimitRateLimit__WindowSecondsEmailTransacional__ProviderEmailTransacional__FromEmailEmailTransacional__FromNameEmailTransacional__SesRegionEmailTransacional__SuporteDestinoEmailLogoPerfilStorage__ProviderLogoPerfilStorage__S3BucketNameLogoPerfilStorage__S3KeyPrefixLogoPerfilStorage__S3PublicBaseUrlLogoPerfilStorage__S3RegionRateLimit__PublicSupportPermitLimitVITE_API_BASE_URL
Para a API em Lightsail, use LogoPerfilStorage__Provider=S3 com bucket/CDN configurados. Local e apenas para desenvolvimento/testes, e Disabled serve apenas como fallback temporario sem upload.
O email oficial inicial da API e contato@emprely.com.br; configure EmailTransacional__FromEmail e EmailTransacional__SuporteDestinoEmail com esse endereco no beta. Para envio automatico real, use EmailTransacional__Provider=SES e EmailTransacional__SesRegion=us-east-1.
Zoho Mail continua sendo a caixa de entrada/resposta manual. Amazon SES fica como provedor de e-mails automaticos do SaaS.
O formulario publico de suporte/interesse fica em /suporte no webapp e envia para POST /api/support/public, sem login, com destino em contato@emprely.com.br.
As Data Protection keys da API sao persistidas no Postgres pela tabela data_protection_keys; aplique as migrations no Neon antes do beta para preservar links de confirmacao/reset apos restart ou deploy.
Deploy da API no Lightsail:
- build local da imagem:
pnpm lightsail:api:build; - validar env example:
pnpm validate:lightsail; - runbook: infra/lightsail/README.md.
Deploy do webapp:
- build beta apontando para API real:
pnpm web:build:beta; - upload para S3:
powershell -ExecutionPolicy Bypass -File scripts/deploy-web-s3.ps1 -BucketName "emprely-app-web"; - runbook: docs/product/webapp-s3-cloudfront-deploy.md.
Health operacional da API:
GET /healthGET /health/liveGET /health/ready
Toda feature deve seguir:
US ou ideia -> analise -> perguntas -> spec -> implementacaoAntes de código, crie ou atualize:
.cursor/analise/{data}-{slug}.mdspec/{data}-{slug}.md
Cada app e package também possui seus próprios templates SDD.
Use verbos técnicos em inglês e domínio do produto em português sem acentos para funções, arquivos e variáveis:
FindByUsuarioAsyncFindCatalogoProdutosUsuarioAsyncGetPessoaAsyncCreatePropostaAsyncusuarioIdcatalogoProdutosUsuario
Nomes exigidos por frameworks continuam válidos, como src, tests, Controllers, Program.cs, index.html e components.