2025.04.13 (Dim)

✹ RĂ©sumĂ© de GPT  

Une journĂ©e Ă  Ă©tendre avec prĂ©cision le plan d’exĂ©cution du projet Secret Messenger jusqu’aux phases 1 Ă  6, Ă  faire Ă©voluer la stack de dĂ©veloppement vers Flutter Web + Django, et Ă  systĂ©matiser l’interface dĂ©guisĂ©e ainsi que le flux de dĂ©ploiement serveur.

🚀 Roadmap

Plan d’exĂ©cution pour une messagerie Flutter Web + Django sĂ©curisĂ©e et dĂ©guisĂ©e, destinĂ©e Ă  des personnes trĂšs surveillĂ©es et Ă  haut risque en Chine continentale — en particulier des Ă©vadĂ©s nord-corĂ©ens sans papiers — oĂč la dissimulation et la protection des donnĂ©es sont primordiales. L’application est camouflĂ©e en calculatrice en ligne basique tout en fournissant, en dessous, du chat en temps rĂ©el, du partage de fichiers et des diffusions d’informations Ă  sens unique.


✅ Phase 1 — Planification et architecture

  • 🧠 DĂ©finir l’objectif du projet et le modĂšle de menace
    • Public : Ă©vadĂ©s nord-corĂ©ens sans papiers en Chine
    • Mission : outil de messagerie sĂ©curisĂ©, dĂ©guisĂ©, basĂ© sur le navigateur et sans installation
    • DĂ©guisement UX : interface de style calculatrice
  • đŸ€– SĂ©lectionner un workflow de dev pilotĂ© par AI
    • Utiliser GPT-4o + o1 pour la conception, le codegen et l’itĂ©ration
    • Suivre le “Vibe Coding” -> dev rapide en langage naturel via AI
  • ⚙ Finaliser la stack technique
    • Frontend : Flutter Web (Material 3, go_router, Riverpod, http)
    • Backend : Django + Django REST Framework (Django 5.x)
    • DĂ©ploiement : conteneur VPS unique (statique + API), avec proxy Cloudflare optionnel
  • 🌐 AcquĂ©rir le domaine
    • Domaine : ___.net
    • CoĂ»t : ₩18,000/an via un bureau d’enregistrement corĂ©en
    • Objectif : camouflage visuel en calculatrice en ligne

✅ Phase 2 — Configuration VPS et dĂ©ploiement de base

  • 💳 CrĂ©er un compte Vultr et payer $10.

  • 🛒 CrĂ©er une instance VPS
    • RĂ©gion : Singapore (meilleure performance GFW sur Vultr)
    • OS : Ubuntu 22.04 x64
    • Plan : 1vCPU / 1 Go RAM ($5/mois)
    • Configuration par clĂ© SSH ou mot de passe
  • 🔐 AccĂ©der et initialiser

    ssh root@<IP>
    apt update && apt upgrade -y
    apt install python3-pip python3-venv nginx git ufw -y
    ufw allow OpenSSH && ufw allow 'Nginx Full' && ufw enable
    
  • 📁 PrĂ©parer le rĂ©pertoire projet et le virtualenv

    mkdir /srv/___ && cd /srv/___
    python3 -m venv venv && source venv/bin/activate
    pip install django djangorestframework whitenoise gunicorn
    

Note : Un proxy Cloudflare est recommandĂ© pour masquer l’IP du VPS et absorber les DDoS.


✅ Phase 3 — Initialisation du projet (Django + Flutter)

🔧 Configuration Django

  • django-admin startproject stealthcore .
    • CrĂ©e le dossier stealthcore/ et manage.py dans /srv/___.
  • python manage.py startapp api
    • CrĂ©e le dossier api/ pour votre logique personnalisĂ©e (gestion des messages, uploads de fichiers, annonces de diffusion, etc.).
  • Ajouter 'api', 'rest_framework' Ă  INSTALLED_APPS
    • Dans stealthcore/stealthcore/settings.py, par exemple :

      INSTALLED_APPS = [
          'django.contrib.admin',
          'django.contrib.auth',
          'django.contrib.contenttypes',
          'django.contrib.sessions',
          'django.contrib.messages',
          'django.contrib.staticfiles',
          'rest_framework',  ## Add
          'api',            ## Add
      ]
      
  • python manage.py migrate
    • CrĂ©e les tables initiales de la base de donnĂ©es (SQLite par dĂ©faut).
  • python manage.py createsuperuser
    • Permet d’accĂ©der au panneau d’administration de Django (optionnel mais recommandĂ©).

Extensions futures :

  • /api/messages/ pour le chat de groupe avec TTL
  • /api/upload/ pour le partage de fichiers (suppression automatique)
  • /api/notice/ pour les messages de diffusion administrateur

đŸ› ïž Configuration Flutter Web

  • flutter create ___web
    • Produit un projet Flutter Web de base.
  • Remplacer l’UI par une mise en page de style calculatrice
    • Exemple minimal dans main.dart :

      TextField(
        onChanged: (val) {
          // store user input
        },
      );
      ElevatedButton(
        onPressed: () {
          // call /api/check-trigger/
        },
        child: Text("Send"),
      );
      
    • En pratique, implĂ©menter un pavĂ© numĂ©rique, de l’arithmĂ©tique basique, etc.

  • Connecter la requĂȘte POST Ă  /api/check-trigger/
    • Avec http :

      final response = await http.post(
        Uri.parse('/api/check-trigger/'),
        body: {'input': userInput},
      );
      
    • Si valide, le backend Ă©met un jeton -> Flutter charge l’UI cachĂ©e de la messagerie.

  • flutter build web
    • Compile votre app Flutter vers build/web/.
  • Copier les fichiers :

    mkdir frontend_static/
    cp -r build/web/* frontend_static/
    
    • Ceux-ci peuvent ĂȘtre servis par Nginx ou par WhiteNoise de Django.

✅ Phase 4 — API de dĂ©clenchement et intĂ©gration Flutter

  • Dans Django api/views.py :

    from rest_framework.decorators import api_view
    from rest_framework.response import Response
    import os
    
    @api_view(['POST'])
    def check_trigger(request):
        ## Production: store real trigger in os.environ or DB
        valid_trigger = os.environ.get('___TRIGGER', '1004')
        if request.data.get('input') == valid_trigger:
            return Response({'status': 'success', 'token': 'XYZ'})
        return Response({'status': 'denied'})
    
  • CrĂ©er /api/urls.py et enregistrer la route

    from django.urls import path
    from .views import check_trigger
    
    urlpatterns = [
        path('check-trigger/', check_trigger, name='check-trigger'),
    ]
    
  • Connecter depuis Flutter avec http.post(...)
    • Si "success", stocker le jeton en mĂ©moire (Riverpod) -> afficher l’UI cachĂ©e
    • Si "denied", rester une simple calculatrice
  • VĂ©rifier qu’aucune logique sensible n’existe dans le frontend
    • Toutes les valeurs secrĂštes (comme le code de dĂ©clenchement) vivent sur le serveur.

✅ Phase 5 — HĂ©bergement Nginx & HTTPS

  • CrĂ©er la config Nginx :

    server {
        listen 80;
        server_name ___.net;
    
        location /static/ {
            alias /srv/___/frontend_static/;
        }
    
        location / {
            proxy_pass http://127.0.0.1:8000;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }
    }
    
  • Activer la config et redĂ©marrer :

    ln -s /etc/nginx/sites-available/___/etc/nginx/sites-enabled/
    nginx -t && systemctl restart nginx
    
  • Activer HTTPS :

    apt install certbot python3-certbot-nginx -y
    certbot --nginx -d ___.net
    
    • Installe un certificat Let’s Encrypt pour ___.net.
    • Ensuite, https://___.net doit servir la calculatrice dĂ©guisĂ©e.

Gunicorn & systemd

  • En production, exĂ©cuter Django avec Gunicorn derriĂšre Nginx :

    gunicorn stealthcore.wsgi:application --bind 127.0.0.1:8000
    
  • CrĂ©er un /etc/systemd/system/gunicorn.service pour redĂ©marrer automatiquement au reboot.


✅ Phase 6 — Tests finaux et durcissement du dĂ©guisement

  • đŸ§Ș Tester l’UI et le dĂ©clencheur
    • Visiter https://___.net
    • Saisir 1004 (ou le vrai dĂ©clencheur) -> vĂ©rifier {"status":"success"} + jeton
    • Saisie invalide -> {"status":"denied"}
  • 🔒 Nettoyer le frontend
    • Retirer toutes les rĂ©fĂ©rences Ă  “chat” ou “trigger”
    • Aucun secret ni jeton hardcodĂ©
    • Usage minimal de localStorage pour les sessions Ă©phĂ©mĂšres
  • 🧊 Peaufiner le dĂ©guisement final
    • Fausse identitĂ© visuelle de calculatrice (titre, icĂŽne, etc.)
    • ArithmĂ©tique rĂ©elle (optionnelle), pour qu’elle soit pleinement plausible comme calculatrice
    • Alignement UI, thĂšme et style final
  • 🧠 CrĂ©er deploy.md (doc interne)
    • DĂ©ployer, mettre Ă  jour, rollback et vĂ©rifier
    • RĂ©sumer les variables d’environnement (___TRIGGER, SECRET_KEY)
    • Inclure les bonnes pratiques de sĂ©curitĂ© et de journalisation

🔼 FonctionnalitĂ©s futures

  • đŸ“„ Info Board (annonces en lecture seule)
  • 💬 Group Chat avec suppression des messages basĂ©e sur TTL
  • 📁 File Sharing (expiration automatique pour la sĂ©curitĂ©)
  • đŸ”„ Auto-Deletion via cron/commande de gestion pour les donnĂ©es expirĂ©es
  • 🌐 Cloudflare Proxy pour masquer l’IP du VPS et attĂ©nuer les DDoS

Utiliser cette roadmap pour guider le dĂ©veloppement de bout en bout de ___ — de la configuration initiale du VPS jusqu’à la production finale.


💭 Journal

Il ne faut pas que j’arrĂȘte de dĂ©velopper. L’habitude se dĂ©truit. Dix jours sont dĂ©jĂ  passĂ©s.

MĂȘme si ce n’est que dix minutes par jour, il faut absolument dĂ©velopper, et mĂȘme s’il n’y a eu que le plus petit changement, Ă©crire un journal de dĂ©veloppement.


👀 Git Log

Date Type Message
25.04.13 Sun docs(roadmap) refine and finalize Phase 1–6 plan for secure disguised messenger (HEAD → main, origin/main)
25.04.03 Thu docs(roadmap) edit full Phase 0–3 checklist for Flutter Web + Django deployment
25.04.03 Thu docs add dev-principles and roadmap with links from README
25.04.03 Thu docs(README) add more details to roadmap
25.04.03 Thu docs(README) change backend from Node to Django, and change from Kor to Eng
25.04.02 Wed docs(README) add minor details for user
25.04.01 Tue docs(README) add description, tech stack, features, roadmap, 

25.04.01 Tue - Initial commit

Laisser un commentaire