Desenvolvimento local
Introdução
O Madmail é construído sobre um código aberto no GitHub. O repositório se chama usesend: é o nome do projeto open-source de origem, e é ele que você clona.
A estrutura é esta:
apps
├── docs
├── marketing
├── smtp-server
├── web
packages
├── analytics
├── email-editor
├── eslint-config
├── lib
├── python-sdk
├── sdk
├── typescript-config
├── ui
Em apps ficam:
-
web: o painel e a infraestrutura de envio; -
marketing: o site institucional e a documentação que você está lendo agora; -
smtp-server: o proxy SMTP; -
docs: a documentação antiga, ainda no repositório.
Em packages ficam:
-
analytics: instrumentação e métricas; -
email-editor: o editor de emails; -
eslint-config: configuração de ESLint compartilhada; -
lib: código compartilhado entre os apps; -
python-sdkesdk: os SDKs Python e TypeScript da API REST; -
typescript-config: configuração de TypeScript compartilhada; -
ui: componentes de interface reutilizáveis, como botões e badges.
O que você precisa
Para rodar o projeto localmente, tenha:
-
uma conta na AWS — a camada gratuita dá conta;
-
uma conta na Cloudflare — a camada gratuita dá conta;
-
Docker, recomendado mas não obrigatório.
Fazer o fork e clonar
- Fazer o fork
Clique em fork no GitHub.
- Clonar o repositório
Com o fork criado, clone na sua máquina:
git clone https://github.com/<seu-usuario>/usesend.git
Instalar as dependências
corepack enablepnpm install
Configurar as variáveis de ambiente
- Copiar o .env.example para .env
cp .env.example .env - Segredo do NextAuth
Gere uma chave com o comando abaixo e coloque em
NEXTAUTH_SECRET:openssl rand -base64 32 - Criar o symlink para o Next.js
Crie um symlink para o Next.js enxergar o
.envda raiz:ln -s ../../.env apps/web/.env - Configurar o OAuth do GitHub (opcional)
Depois, crie um GitHub App para conseguir entrar com a sua conta do GitHub.
Use como homepage:
http://localhost:3000/logine como callback URL:
http://localhost:3000/api/auth/callback/githubCriado o app, coloque o Client ID em
GITHUB_IDe o Client Secret emGITHUB_SECRET. - Configurar as credenciais AWS (opcional)
Agora entram as credenciais AWS. Siga o guia detalhado para gerar as credenciais com as permissões certas e coloque em:
AWS_ACCESS_KEY_ID=<access-key-id> AWS_SECRET_ACCESS_KEY=<secret-access-key>
Rodar na sua máquina
O setup usa um PostgreSQL e um Redis locais. Sem Docker, você pode subir os dois na mão.
Opção 1: com Docker (recomendado)
- Subir o painel
pnpm d - O painel e o site sobem juntos
O painel sobe em
http://localhost:3000O site institucional sobe em
http://localhost:3001 - Depois do login pelo GitHub, o app pede a configuração do SES — para informar a callback URL você precisa de um túnel da Cloudflare
Rode o comando abaixo para obter a URL. O guia detalhado é este, da Cloudflare.
cloudflared tunnel --url http://localhost:3000Cole a URL devolvida pela Cloudflare no campo de callback URL.
Opção 2: com um banco seu ou hospedado
- Aponte o seu PostgreSQL e o seu Redis nas variáveis de ambiente
DATABASE_URL="" REDIS_URL="" - Rodar as migrations
pnpm db:migrate-dev - Subir o servidor de desenvolvimento
pnpm dev - Depois do login pelo GitHub, o app pede a configuração do SES — para informar a callback URL você precisa de um túnel da Cloudflare
Rode o comando abaixo para obter a URL. O guia detalhado é este, da Cloudflare.
cloudflared tunnel --url http://localhost:3000Cole a URL devolvida pela Cloudflare no campo de callback URL.
Rodar a documentação
A documentação faz parte do site institucional. Para subir só ela:
pnpm dev:marketing
Depois abra http://localhost:3001/docs.