commit 7cedb3e50b1acbd6396e0de9b0dab94190fd96da Author: toine Date: Sun Oct 5 16:52:22 2025 +0200 premier commit diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..13566b8 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml new file mode 100644 index 0000000..105ce2d --- /dev/null +++ b/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..1d3ce46 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..fc50a0d --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/site-pour-voyageur.iml b/.idea/site-pour-voyageur.iml new file mode 100644 index 0000000..d8b3f6c --- /dev/null +++ b/.idea/site-pour-voyageur.iml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..a95194d --- /dev/null +++ b/README.md @@ -0,0 +1,102 @@ +Voici une **todo list claire et organisée** pour lancer ta plateforme collaborative, étape par étape. J’ai tout découpé en tâches concrètes, avec des priorités et des outils suggérés pour chaque partie. Tu peux cocher au fur et à mesure ! + +--- + +## **📌 Todo List : Lancement de la Plateforme Collaborative** + +### **1️⃣ Définition du Projet (1 semaine)** + + +| Tâche | Détails | Outils/Notes | +|--------------------------------------------|---------------------------------------------------------------------------------------------|-----------------------------------------------| +| Choisir le nom et le slogan | Ex : « Wayfarer Quest – Le voyage se construit à plusieurs » | Brainstorming + vérification disponibilité domaine | +| Définir l’identité visuelle | Logo, palette de couleurs (style 16-bit/cyberpunk), typographie | Figma, Canva, ou demande-moi des idées de design | +| Rédiger la charte de la communauté | Règles de contribution, modération, valeurs (ex : bienveillance, partage) | Google Doc ou Notion | +| Lister les fonctionnalités MVP | Cartes collaboratives, forum, système de votes, badges | Tableau Trello ou GitHub Projects | + +--- + +### **2️⃣ Préparation Technique (2-3 semaines)** + + +| Tâche | Détails | Outils/Notes | +|--------------------------------------------|---------------------------------------------------------------------------------------------|-----------------------------------------------| +| Choisir la stack technique | Ex : Frontend (Vue.js), Backend (Node.js), Base de données (PostgreSQL) | Docker pour l’auto-hébergement | +| Configurer l’environnement de dev | Installer les outils locaux (VS Code, Git, Docker) | Forgejo pour le versioning | +| Créer un repo Git | Pour le code source (public ou privé) | git.toine-server.eu | +| Mettre en place la base de données | Schéma pour les lieux, utilisateurs, votes, badges | PostgreSQL ou MongoDB | +| Développer le MVP des cartes collaboratives | Intégrer Leaflet ou Mapbox + système d’ajout de lieux par les utilisateurs | Tutorial Leaflet + API open source | +| Configurer le forum ou le wiki | Installer Discourse ou Wiki.js | Auto-hébergé sur ton serveur | +| Créer un système d’authentification | Inscription/connexion (email ou OAuth) | Firebase Auth ou solution maison | + +--- + +### **3️⃣ Développement du MVP (4-6 semaines)** + + +| Tâche | Détails | Outils/Notes | +|--------------------------------------------|---------------------------------------------------------------------------------------------|-----------------------------------------------| +| Développer la page d’accueil | Présentation du projet + appel à contribution | HTML/CSS ou framework frontend | +| Intégrer la carte interactive | Permettre aux utilisateurs d’ajouter des lieux | Leaflet + base de données | +| Ajouter un système de votes | Upvote/downvote pour les lieux et commentaires | JavaScript + backend | +| Créer les premiers badges | Design et logique d’attribution (ex : « Premier contributeur ») | SVG pour les icônes, code backend | +| Tester en local | Vérifier que tout fonctionne (ajout de lieux, votes, inscription) | Navigateur + console | + +--- + +### **4️⃣ Lancement et Recrutement (2 semaines)** + + +| Tâche | Détails | Outils/Notes | +|--------------------------------------------|---------------------------------------------------------------------------------------------|-----------------------------------------------| +| Déployer une version bêta | Sur un sous-domaine (ex : beta.community.toine-traveller.org) | Nginx + Let’s Encrypt pour le HTTPS | +| Rédiger un post de lancement | Présenter le projet sur ton blog, Reddit, groupes Facebook | Canva pour les visuels | +| Inviter les premiers membres | Amis voyageurs, communauté de ton blog, groupes de backpackers | Email, Discord, réseaux sociaux | +| Organiser un événement de lancement | Ex : « Concours – Le meilleur spot de street food » | Meetup ou événement virtuel | + +--- + +### **5️⃣ Animation et Amélioration (En continu)** + + +| Tâche | Détails | Outils/Notes | +|--------------------------------------------|---------------------------------------------------------------------------------------------|-----------------------------------------------| +| Lancer des défis communautaires | Ex : « Ajoutez 5 lieux cette semaine pour gagner un badge » | Annonces sur le forum/Discord | +| Recueillir les feedbacks | Sondage ou fil de discussion dédié | Google Forms ou Typeform | +| Ajouter des fonctionnalités | Wiki, événements IRL, système de messagerie | Roadmap publique (Trello/GitHub) | +| Automatiser la modération | Filtres anti-spam, signalements | Bots Discord ou outils maison | + +--- + +### **6️⃣ Monétisation (Optionnel, 3-6 mois après lancement)** + + +| Tâche | Détails | Outils/Notes | +|--------------------------------------------|---------------------------------------------------------------------------------------------|-----------------------------------------------| +| Lancer un abonnement « Supporter » | Avantages : badges exclusifs, accès early aux nouvelles fonctionnalités | Stripe ou PayPal | +| Négocier des partenariats | Avec des hébergements ou restaurants locaux | Contact direct ou plateforme comme Upfluence | +| Créer une boutique de goodies | Stickers, t-shirts avec des designs collaboratifs | Printful ou Redbubble | + +--- + +### **📅 Calendrier Type** +- **Semaines 1-2** : Définition + préparation technique +- **Semaines 3-7** : Développement du MVP +- **Semaine 8** : Lancement bêta + recrutement +- **À partir de la semaine 10** : Animation et améliorations + +--- + +### **🔧 Outils Recommandés** +- **Design** : Figma, Canva, Inkscape (pour les badges) +- **Développement** : VS Code, Docker, Forgejo +- **Communication** : Discord, Mailchimp (newsletter) +- **Analyse** : Matomo (auto-hébergé) ou Google Analytics + +--- +**Question** : +- **Par où veux-tu commencer en priorité** ? (Ex : le nom/design, la technique, ou la communauté ?) +- **As-tu besoin d’aide sur une tâche en particulier** ? (Ex : configuration Docker, design du logo, rédaction de la charte ?) +- **Veux-tu que je te génère des idées de noms ou des maquettes de logo** pour t’inspirer ? 🎨 + +*(PS : Si tu veux, je peux aussi te faire un template Trello ou Notion pour suivre tout ça !)* \ No newline at end of file diff --git a/datas/losmejoresdatos.sqlite3 b/datas/losmejoresdatos.sqlite3 new file mode 100644 index 0000000..e69de29 diff --git a/manage.py b/manage.py new file mode 100755 index 0000000..ac2f90c --- /dev/null +++ b/manage.py @@ -0,0 +1,22 @@ +#!/usr/bin/env python +"""Django's command-line utility for administrative tasks.""" +import os +import sys + + +def main(): + """Run administrative tasks.""" + os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'website.settings') + try: + from django.core.management import execute_from_command_line + except ImportError as exc: + raise ImportError( + "Couldn't import Django. Are you sure it's installed and " + "available on your PYTHONPATH environment variable? Did you " + "forget to activate a virtual environment?" + ) from exc + execute_from_command_line(sys.argv) + + +if __name__ == '__main__': + main() diff --git a/users/__init__.py b/users/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/users/admin.py b/users/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/users/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/users/apps.py b/users/apps.py new file mode 100644 index 0000000..72b1401 --- /dev/null +++ b/users/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class UsersConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'users' diff --git a/users/migrations/__init__.py b/users/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/users/models.py b/users/models.py new file mode 100644 index 0000000..71a8362 --- /dev/null +++ b/users/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/users/tests.py b/users/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/users/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/users/urls.py b/users/urls.py new file mode 100644 index 0000000..8f810b0 --- /dev/null +++ b/users/urls.py @@ -0,0 +1,7 @@ +from django.urls import path +from django.conf.urls.static import static +from django.contrib.auth import views as auth_views + +urlpatterns = [ + path('login/', auth_views.LoginView.as_view(template_name='users/login.html'), name='login'), +] \ No newline at end of file diff --git a/users/views.py b/users/views.py new file mode 100644 index 0000000..91ea44a --- /dev/null +++ b/users/views.py @@ -0,0 +1,3 @@ +from django.shortcuts import render + +# Create your views here. diff --git a/website/__init__.py b/website/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/website/asgi.py b/website/asgi.py new file mode 100644 index 0000000..67dfb4d --- /dev/null +++ b/website/asgi.py @@ -0,0 +1,16 @@ +""" +ASGI config for website project. + +It exposes the ASGI callable as a module-level variable named ``application``. + +For more information on this file, see +https://docs.djangoproject.com/en/5.2/howto/deployment/asgi/ +""" + +import os + +from django.core.asgi import get_asgi_application + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'website.settings') + +application = get_asgi_application() diff --git a/website/settings.py b/website/settings.py new file mode 100644 index 0000000..90a6dca --- /dev/null +++ b/website/settings.py @@ -0,0 +1,124 @@ +""" +Django settings for website project. + +Generated by 'django-admin startproject' using Django 5.2.7. + +For more information on this file, see +https://docs.djangoproject.com/en/5.2/topics/settings/ + +For the full list of settings and their values, see +https://docs.djangoproject.com/en/5.2/ref/settings/ +""" + +from pathlib import Path + +# Build paths inside the project like this: BASE_DIR / 'subdir'. +BASE_DIR = Path(__file__).resolve().parent.parent + + +# Quick-start development settings - unsuitable for production +# See https://docs.djangoproject.com/en/5.2/howto/deployment/checklist/ + +# SECURITY WARNING: keep the secret key used in production secret! +SECRET_KEY = 'django-insecure--$$71*cy*1w0bs8cl)*x09dk5%jd#4f%26&qjd0xmz3!ifuy6*' + +# SECURITY WARNING: don't run with debug turned on in production! +DEBUG = True + +ALLOWED_HOSTS = [] + + +# Application definition + +INSTALLED_APPS = [ + 'django.contrib.admin', + 'django.contrib.auth', + 'django.contrib.contenttypes', + 'django.contrib.sessions', + 'django.contrib.messages', + 'django.contrib.staticfiles', + + 'users', +] + +MIDDLEWARE = [ + 'django.middleware.security.SecurityMiddleware', + 'django.contrib.sessions.middleware.SessionMiddleware', + 'django.middleware.common.CommonMiddleware', + 'django.middleware.csrf.CsrfViewMiddleware', + 'django.contrib.auth.middleware.AuthenticationMiddleware', + 'django.contrib.messages.middleware.MessageMiddleware', + 'django.middleware.clickjacking.XFrameOptionsMiddleware', +] + +ROOT_URLCONF = 'website.urls' + +TEMPLATES = [ + { + 'BACKEND': 'django.template.backends.django.DjangoTemplates', + 'DIRS': [], + 'APP_DIRS': True, + 'OPTIONS': { + 'context_processors': [ + 'django.template.context_processors.request', + 'django.contrib.auth.context_processors.auth', + 'django.contrib.messages.context_processors.messages', + ], + }, + }, +] + +WSGI_APPLICATION = 'website.wsgi.application' + + +# Database +# https://docs.djangoproject.com/en/5.2/ref/settings/#databases + +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.sqlite3', + 'NAME': BASE_DIR / 'datas/losmejoresdatos.sqlite3', + } +} + + +# Password validation +# https://docs.djangoproject.com/en/5.2/ref/settings/#auth-password-validators + +AUTH_PASSWORD_VALIDATORS = [ + { + 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', + }, +] + + +# Internationalization +# https://docs.djangoproject.com/en/5.2/topics/i18n/ + +LANGUAGE_CODE = 'en-us' + +TIME_ZONE = 'UTC' + +USE_I18N = True + +USE_TZ = True + + +# Static files (CSS, JavaScript, Images) +# https://docs.djangoproject.com/en/5.2/howto/static-files/ + +STATIC_URL = 'static/' + +# Default primary key field type +# https://docs.djangoproject.com/en/5.2/ref/settings/#default-auto-field + +DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' diff --git a/website/urls.py b/website/urls.py new file mode 100644 index 0000000..2f86f0f --- /dev/null +++ b/website/urls.py @@ -0,0 +1,24 @@ +""" +URL configuration for website project. + +The `urlpatterns` list routes URLs to views. For more information please see: + https://docs.djangoproject.com/en/5.2/topics/http/urls/ +Examples: +Function views + 1. Add an import: from my_app import views + 2. Add a URL to urlpatterns: path('', views.home, name='home') +Class-based views + 1. Add an import: from other_app.views import Home + 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') +Including another URLconf + 1. Import the include() function: from django.urls import include, path + 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) +""" +from django.contrib import admin +from django.urls import path +from django.urls.conf import include + +urlpatterns = [ + path('admin/', admin.site.urls), + path('users/', include("users.urls")), +] diff --git a/website/wsgi.py b/website/wsgi.py new file mode 100644 index 0000000..bd14695 --- /dev/null +++ b/website/wsgi.py @@ -0,0 +1,16 @@ +""" +WSGI config for website project. + +It exposes the WSGI callable as a module-level variable named ``application``. + +For more information on this file, see +https://docs.djangoproject.com/en/5.2/howto/deployment/wsgi/ +""" + +import os + +from django.core.wsgi import get_wsgi_application + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'website.settings') + +application = get_wsgi_application()