[🛠] Diário de desenvolvimento do Secret Messenger #2: Flutter Web + Django, Roadmap, inglês
✨ Resumo do GPT
Um dia em que mudei a stack técnica para a combinação Flutter Web + Django e estabeleci o roadmap geral de desenvolvimento e um ambiente de desenvolvimento baseado em inglês.
🚀 Roadmap
Lista de tarefas passo a passo para as Fases 1-4 — cobrindo:
- 🧠 Planejamento do projeto, escolha da stack técnica e compra do domínio
- 🛠️ Build em Flutter Web + integração estática com Django (desenvolvimento local)
- 🔗 Implementação básica da API de gatilho
- 🌐 Deploy em VPS, configuração do Nginx e serviço seguro por domínio
✅ FASE 1 — Planejamento inicial e decisões estratégicas
-
🧠 Definir escopo do projeto e estratégia de segurança
- Público-alvo: desertores norte-coreanos indocumentados vivendo na China
- Objetivo: fornecer uma ferramenta de comunicação segura, disfarçada e baseada em navegador
- Estratégia de UX: imitar uma interface de calculadora para ocultar a funcionalidade real
-
🤖 Escolher abordagem de desenvolvimento assistido por IA
- Usar GPT-4o e o1 para auxiliar no desenho e na implementação
- Aplicar um fluxo de “Vibe Coding” — usando linguagem natural e prototipagem iterativa com IA
-
⚙️ Escolher stack técnica
- Frontend: Flutter Web (para uma UI polida, com aparência de app, disfarçada de calculadora)
- Backend: Django + Django REST Framework (para APIs estruturadas, admin embutido e segurança)
- Deploy: um único contêiner em VPS servindo tanto os arquivos estáticos do Flutter quanto a API Django
-
🌐 Comprar domínio de disfarce
-
Domínio:
___.net - Propósito: aparência plausível de utilitário de calculadora
- Preço: ₩18,000/ano por registrador coreano
-
Domínio:
✅ FASE 2 — Desenvolvimento local: integração Flutter Web + Django
🔧 1. Configuração do ambiente do projeto
-
🧱 Criar projeto Django
-
django-admin startproject stealthcore .
-
-
⚙️ Criar app Django (para API)
-
python manage.py startapp api
-
-
🧩 Adicionar
'api'e'rest_framework'aINSTALLED_APPS -
🐍 Criar ambiente virtual e instalar dependências
-
python -m venv venv && source venv/bin/activate -
pip install django djangorestframework whitenoise
-
🛠️ 2. Build do Flutter Web
-
💻 Inicializar app Flutter
-
flutter create ____web -
Substituir a UI padrão por um
TextFielde um botãoSend
-
-
🧪 Enviar entrada via
http.post()para/api/check-trigger/ -
🔨 Gerar build Web
-
flutter build web
-
-
📁 Mover arquivos de build
-
Criar pasta
frontend_static/na raiz do Django -
cp -r build/web/* frontend_static/
-
Criar pasta
⚙️ 3. Serviço de arquivos estáticos no Django
-
🧷 Atualizar
settings.py:STATIC_URL = '/static/' STATICFILES_DIRS = [ BASE_DIR / 'frontend_static' ] -
(Opcional) Ativar WhiteNoise
-
Adicionar
'whitenoise.middleware.WhiteNoiseMiddleware'aMIDDLEWARE
-
Adicionar
-
🎛️ Copiar
build/web/index.htmlparatemplates/index.html -
🛠️ Corrigir caminhos de assets em
index.html:<script src="/static/main.dart.js"></script>
🔗 4. Conectar Flutter ao Django
-
🧪 Criar endpoint
/api/check-trigger/-
Aceita POST
{ input: "..." } -
Retorna
{ status: "success" }se a entrada for'1004'
-
Aceita POST
- 🔐 Garantir que nenhuma string de gatilho exista no código-fonte do frontend
-
🧪 Confirmar integração do frontend com
http.post(...)
✅ FASE 3 — Deploy em VPS (Vultr)
🛒 1. Configuração do servidor
- Criar uma instância Vultr (Ubuntu 22.04, 1GB RAM)
-
🔑 Configurar acesso SSH (
ssh root@<ip>) -
📦 Instalar dependências:
-
sudo apt update && sudo apt upgrade -
sudo apt install python3 python3-pip nginx git -
sudo apt install certbot python3-certbot-nginx
-
🚀 2. Fazer deploy do Django
-
Enviar seu projeto (
scpougit clone) -
Configurar ambiente virtual
-
python3 -m venv venv && source venv/bin/activate -
pip install -r requirements.txt
-
-
🔫 Instalar e testar Gunicorn
-
pip install gunicorn -
gunicorn stealthcore.wsgi:application
-
🌐 3. Servir com Nginx
-
Criar configuração do Nginx:
server { listen 80; server_name ___.net; location /static/ { alias /home/youruser/project/frontend_static/; } location / { proxy_pass http://127.0.0.1:8000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } -
🔐 Ativar HTTPS com Let’s Encrypt
-
sudo certbot --nginx -d ___.net
-
-
🔄 Reiniciar Nginx:
-
sudo systemctl restart nginx
-
✅ FASE 4 — Testes finais e hardening
-
💻 Acessar
https://___.net- Confirmar que a UI de calculadora carrega corretamente
-
🔍 Inserir
'1004'no input do Flutter e enviar-
O Django deve responder com
{ "status": "success" }
-
O Django deve responder com
- 🧪 Testar se uma entrada inválida retorna mensagem de negação
✅ Observações finais
- 🧼 Remover toda lógica sensível do frontend
- 🔒 Proteger futuros endpoints de API com validação de token de sessão
- 🧊 Polir o disfarce: atualizar ícone do app, título da página e adicionar elementos falsos de utilitário
-
🧠 Escrever documentação interna (
deploy.md) para deploys repetíveis
💭 Diário
Houve grandes mudanças como estas.
- Mudei o rumo para Flutter Web (Frontend) + Django (Backend).
- Porque, quando eu desenvolver apps daqui em diante, pretendo seguir com essa mesma combinação.
- E porque ambos são frameworks que já usei antes, então posso esperar uma produtividade muito mais rápida.
- Decidi escrever toda Documentation, todos os Comments e todas as Commit Messages em inglês.
- Porque escrever prompts em inglês pode trazer ao menos uma pequena melhoria de desempenho.
- Porque a maior parte do conhecimento mais recente do mundo é tratada em inglês.
- Porque preciso criar o hábito de usar inglês com frequência para me acostumar mais com ele.
- Decidi que a Git Commit Message Convention deve seguir obrigatoriamente o formato padrão da indústria de desenvolvimento.
-
from
* 21adba0 25.04.03 Thu <Hyuk Min> Chore | README.md: Add more details to roadmap -
to
* 21adba0 25.04.03 Thu <Hyuk Min> docs(README): add more details to roadmap - Porque, se eu não planejo viver para sempre como desenvolvedor solo, é correto criar desde cedo o hábito de seguir o padrão da indústria.
- Porque, se no futuro eu usar algum programa relacionado a Change log, ele precisará do formato padrão para conseguir fazer parsing.
-
Olhando apenas para o roadmap em si, acho que saiu uma diretriz boa o suficiente para seguir.
Amanhã vou continuar recebendo feedback do GPT, refinar isso e depois tentar seguir exatamente assim.
Deixe um comentário