[๐ ] Secret Messenger Dev Log #2: Flutter Web + Django, Roadmap, English
โจ GPT Summary ใ
A day spent switching the tech stack to Flutter Web + Django, then establishing the overall development roadmap and an English-based development environment.
๐ Roadmap
Step-by-step To-Do List for Phase 1โ4 โ covering:
- ๐ง Project planning, tech stack selection, and domain purchase
- ๐ ๏ธ Flutter Web build + Django static integration (local dev)
- ๐ Basic trigger API implementation
- ๐ VPS deployment, Nginx setup, and secure domain serving
โ PHASE 1 โ Initial Planning & Strategic Decisions
-
๐ง Define project scope & security strategy
- Target audience: undocumented North Korean defectors living in China
- Objective: provide a secure, disguised, browser-based communication tool
- UX strategy: mimic a calculator interface to conceal real functionality
-
๐ค Choose AI-assisted development approach
- Use GPT-4o and o1 to assist with design and implementation
- Apply a โVibe Codingโ workflow โ using natural language and iterative prototyping with AI
-
โ๏ธ Choose tech stack
- Frontend: Flutter Web (for a polished, app-like UI disguised as a calculator)
- Backend: Django + Django REST Framework (for structured APIs, built-in admin, and security)
- Deployment: Single VPS container serving both Flutter static files and Django API
-
๐ Purchase disguise domain
-
Domain:
___.net - Purpose: plausible calculator utility appearance
- Price: โฉ18,000/year via Korean registrar
-
Domain:
โ PHASE 2 โ Local Development: Flutter Web + Django Integration
๐ง 1. Project Environment Setup
-
๐งฑ Create Django project
-
django-admin startproject stealthcore .
-
-
โ๏ธ Create Django app (for API)
-
python manage.py startapp api
-
-
๐งฉ Add
'api'and'rest_framework'toINSTALLED_APPS -
๐ Create virtual environment and install dependencies
-
python -m venv venv && source venv/bin/activate -
pip install django djangorestframework whitenoise
-
๐ ๏ธ 2. Flutter Web Build
-
๐ป Initialize Flutter app
-
flutter create ____web -
Replace default UI with a
TextFieldandSendbutton
-
-
๐งช Send input via
http.post()to/api/check-trigger/ -
๐จ Build Web output
-
flutter build web
-
-
๐ Move build files
-
Create
frontend_static/folder in Django root -
cp -r build/web/* frontend_static/
-
Create
โ๏ธ 3. Django Static File Serving
-
๐งท Update
settings.py:STATIC_URL = '/static/' STATICFILES_DIRS = [ BASE_DIR / 'frontend_static' ] -
(Optional) Enable WhiteNoise
-
Add
'whitenoise.middleware.WhiteNoiseMiddleware'toMIDDLEWARE
-
Add
-
๐๏ธ Copy
build/web/index.htmltotemplates/index.html -
๐ ๏ธ Fix asset paths in
index.html:<script src="/static/main.dart.js"></script>
๐ 4. Connect Flutter to Django
-
๐งช Create
/api/check-trigger/endpoint-
Accepts POST
{ input: "..." } -
Returns
{ status: "success" }if input is'1004'
-
Accepts POST
- ๐ Ensure no trigger strings exist in frontend source
-
๐งช Confirm frontend integration with
http.post(...)
โ PHASE 3 โ VPS Deployment (Vultr)
๐ 1. Server Setup
- Create a Vultr instance (Ubuntu 22.04, 1GB RAM)
-
๐ Set up SSH access (
ssh root@<ip>) -
๐ฆ Install dependencies:
-
sudo apt update && sudo apt upgrade -
sudo apt install python3 python3-pip nginx git -
sudo apt install certbot python3-certbot-nginx
-
๐ 2. Deploy Django
-
Upload your project (
scporgit clone) -
Set up virtual environment
-
python3 -m venv venv && source venv/bin/activate -
pip install -r requirements.txt
-
-
๐ซ Install and test Gunicorn
-
pip install gunicorn -
gunicorn stealthcore.wsgi:application
-
๐ 3. Serve with Nginx
-
Create Nginx config:
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; } } -
๐ Enable HTTPS with Letโs Encrypt
-
sudo certbot --nginx -d ___.net
-
-
๐ Restart Nginx:
-
sudo systemctl restart nginx
-
โ PHASE 4 โ Final Testing & Hardening
-
๐ป Visit
https://___.net- Confirm calculator UI loads successfully
-
๐ Enter
'1004'in Flutter input and send-
Django should respond with
{ "status": "success" }
-
Django should respond with
- ๐งช Test invalid input returns denial message
โ Final Notes
- ๐งผ Remove all sensitive logic from frontend
- ๐ Protect future API endpoints with session token validation
- ๐ง Polish disguise: update app icon, page title, and add fake utility elements
-
๐ง Write internal docs (
deploy.md) for repeatable deployments
๐ญ Diary
There were several major changes.
- I changed course to Flutter Web (Frontend) + Django (Backend).
- Because I plan to keep using this combination when building apps in the future.
- And because both are frameworks I have used before, so I can expect much faster productivity.
- I decided to write all documentation, comments, and commit messages in English.
- Because writing prompts in English may bring even a small performance improvement.
- Because most of the worldโs latest knowledge is handled in English.
- Because I need to build the habit of using English often so it becomes more familiar.
- I decided that Git commit message conventions must follow the standard format used in the development industry.
-
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 - Because unless I plan to live as a solo developer forever, it is right to build the habit of following industry standards early.
- Because later, if I use a change log-related tool, it will need the standard format to parse the messages properly.
-
Looking only at the roadmap itself, I think it came out as a guide that should be good enough to follow.
Tomorrow I should keep getting GPT feedback, refine it, and then just follow it as-is.
Leave a comment