{"id":18153771,"url":"https://github.com/dlesbre/site-interludes","last_synced_at":"2025-08-17T19:44:19.637Z","repository":{"id":67652686,"uuid":"376546157","full_name":"dlesbre/site-interludes","owner":"dlesbre","description":"Site web des interENS ludiques 2021 - 2025, en ligne à l'adresse https://interludes.ens.fr","archived":false,"fork":false,"pushed_at":"2025-02-17T13:55:57.000Z","size":17783,"stargazers_count":2,"open_issues_count":0,"forks_count":3,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-30T16:11:29.914Z","etag":null,"topics":["django","python","website"],"latest_commit_sha":null,"homepage":"https://interludes.ens.fr","language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dlesbre.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2021-06-13T13:06:18.000Z","updated_at":"2025-02-17T13:56:01.000Z","dependencies_parsed_at":null,"dependency_job_id":"7350ff84-8215-40e3-8045-3bb5e1e4aef3","html_url":"https://github.com/dlesbre/site-interludes","commit_stats":null,"previous_names":[],"tags_count":27,"template":false,"template_full_name":null,"purl":"pkg:github/dlesbre/site-interludes","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dlesbre%2Fsite-interludes","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dlesbre%2Fsite-interludes/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dlesbre%2Fsite-interludes/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dlesbre%2Fsite-interludes/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dlesbre","download_url":"https://codeload.github.com/dlesbre/site-interludes/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dlesbre%2Fsite-interludes/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":267093929,"owners_count":24034958,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-25T02:00:09.625Z","response_time":70,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["django","python","website"],"created_at":"2024-11-02T03:08:04.399Z","updated_at":"2025-07-26T00:39:40.958Z","avatar_url":"https://github.com/dlesbre.png","language":"HTML","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Site des interludes\n\n[![website](https://img.shields.io/website?url=https%3A%2F%2Finterludes.ens.fr%2F)](https://interludes.ens.fr)\n[![forks](https://img.shields.io/badge/forks-5-blue)](#forks)\n\nCe répo contient le code source du site des interludes. Codé initialement pour les interludes 2021,\nil a été mis-à-jour et adapté pour les éditions suivantes. La dernière en date, 2025 est en ligne à\n[https://interludes.ens.fr](https://interludes.ens.fr). Il est disponible sur le\n[git interne de l'ENS Ulm](https://git.eleves.ens.fr/dlesbre/site-interludes) et\nsur [github](https://github.com/dlesbre/site-interludes). Il est diffusé sous\nune [licence MIT](https://choosealicense.com/licenses/mit/).\n\n**Ce site permet de :**\n- Afficher de l'information sur l'événement (page d'accueil et FAQ, modifiable\n  directement depuis l'admin du site)\n- Recenser les activités proposées (page activités)\n- Un formulaire pour permettre aux gens de proposer des activités\n  qui envoie un mail aux administrateurs à chaque fois qu'une nouvelle activité\n\test proposée.\n- Un formulaire d'inscription où chaque inscrit peut renseigner des infos\n  personnelles (repas/dormir) et les activités qu'il souhaite\n- Afficher un planning dynamique des différentes activités\n- Une fois la répartition faite, envoyer un mail à tous les inscrits pour leur\n  communiquer les activités obtenues et un mail aux orgas pour leur communiquer\n  la liste des participants\n- Un formulaire pour envoyer un mail à tous (à utiliser avec modération)\n- Exporter les tables intéressantes au format CSV\n\n\n**Il n'est PAS capable de :**\n- vendre des tickets - différentes solutions ont été utilisées pour ça par le passé :\n  - utiliser une billetterie externe (ex [HelloAsso](https://www.helloasso.com/))\n  - recruter les BdE/BdL des autres écoles pour qu'ils gèrent les paiements\n  - paiement en espèces/CB sur place le jour J\n- répartir les activités - nous faisons un premier jet avec le [ce\n  code](https://github.com/Lamakaio/InterludesMatchings) (en prenant l'export\n  CSV de la table de choix d'activités), puis l'adaptons à la main et le\n  renseignons dans ce site.\n\n**Contenu:**\n- [Forks](#forks)\n- [Lancement rapide](#lancement-rapide)\n- [Installation pas à pas](#installation-pas-à-pas)\n- [Lancer le serveur](#lancer-le-serveur)\n- [Guide de l'administrateur](#guide-de-ladministrateur)\n- [En production](#en-production)\n- [Idées de développement](#idées-de-développement)\n- [Liens divers](#liens-divers)\n\n## Forks\n\nCe serveur a été repris pour plusieurs événements similaires :\n\n| Site Web                                                      | Code source                                                                                                                  | Notes                                                              | État                                                                                                                                           |\n| :------------------------------------------------------------ | :--------------------------------------------------------------------------------------------------------------------------- | :----------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- |\n| [Interludes 2025 Ulm](https://interludes.ens.fr/)             | [github](https://github.com/dlesbre/site-interludes/) ou [gitlab ENS Ulm](https://git.eleves.ens.fr/dlesbre/site-interludes) | tag v3.0.8                                       | ![website](https://img.shields.io/website?url=https%3A%2F%2Finterludes.ens.fr%2F\u0026down_message=hors%20ligne\u0026label\u0026up_message=en%20ligne)        |\n| [Interludes 2021 Ulm](https://interludes.ens.fr/static/archive/2021/index.html)             | [github](https://github.com/dlesbre/site-interludes/) ou [gitlab ENS Ulm](https://git.eleves.ens.fr/dlesbre/site-interludes) | Version initiale, tag v1.2.8                                       | ![website](https://img.shields.io/website?url=https%3A%2F%2Finterludes.ens.fr%2Fstatic%2Farchive%2F2021%2Findex.html\u0026down_message=hors%20ligne\u0026label\u0026up_message=en%20ligne)        |\n| [48h des jeux](https://48hdesjeux.cof.ens.fr/)                | [gitlab ENS Ulm](https://git.eleves.ens.fr/dlesbre/48h-des-jeux)                                                             | Rentrée ludique d'Ulm 2021 (48h-v2.3.1), 2022, 2023 (48h-v3.0.1) et 2024 (48h-v3.1.0) | ![website](https://img.shields.io/website?url=https%3A%2F%2F48hdesjeux.cof.ens.fr%2F\u0026down_message=hors%20ligne\u0026label\u0026up_message=en%20ligne)    |\n| [Interludes 2022 Lyon](https://interludes.assos-ensl.fr/)     | [github](https://github.com/Pantoofle/site-interludes)                                                                       | Branche Lyon-2022, tag v2.1.0                                      | ![website](https://img.shields.io/website?url=https%3A%2F%2Finterludes.assos-ensl.fr%2F\u0026down_message=hors%20ligne\u0026label\u0026up_message=en%20ligne) |\n| [KWEI](https://kwei.crans.org/)                               | [gitlab Paris Saclay](https://gitlab.crans.org/aeltheos/site-kwei)                                                           | Rentrée ludique Paris-Saclay 2022 et 2023                          | ![website](https://img.shields.io/website?url=https%3A%2F%2Fkwei.crans.org%2F\u0026down_message=hors%20ligne\u0026label\u0026up_message=en%20ligne)           |\n| [Interludes 2023 Paris-Saclay](https://interludes.crans.org/) | [gitlab Paris Saclay](https://gitlab.crans.org/mediatek/site-interludes/)                                                    | Branche Saclay-2023                                                | ![website](https://img.shields.io/website?url=https%3A%2F%2Finterludes.crans.org%2F\u0026down_message=hors%20ligne\u0026label\u0026up_message=en%20ligne)     |\n\nLe code de l'algorithme de répartition est aussi disponible [sur github](https://github.com/Imakoala/InterludesMatchings).\n\n## Lancement rapide\n\nPour installer toutes les dépendances et lancer le serveur :\n\n```console\ngit clone https://github.com/dlesbre/site-interludes.git \u0026\u0026\nsudo apt-get install libsasl2-dev python-dev-is-python3 libldap2-dev libssl-dev \u0026\u0026\ncd site-interlude \u0026\u0026\npython3 -m venv venv \u0026\u0026\nsource venv/bin/activate \u0026\u0026\nmake start\n```\n\nLe site devrait être accessible à [http://localhost:8000](http://localhost:8000).\n\nPar la suite vous pouvez relancer le site simplement avec `make serve`.\n\n## Installation pas à pas\n\nPour tester et modifier le répo, après l'avoir cloné :\n\n1. Créer un [environement\n   virtuel](https://docs.python.org/3/tutorial/venv.html) (`python3-venv`)\n\n\t```console\n\tpython3 -m venv venv\n\t```\n\n\t(si vous le nommez autre chose que venv, ajouter le dossier correspondant\n    au `.gitignore`)\n\n2. Lancer l'environnement virtuel\n\n\t```console\n\tsource venv/bin/activate\n\t```\n\n3. Installer la dernière version de pip\n\n\t```console\n\tpython3 -m pip install --upgrade pip\n\t```\n\n4. Installer les dépendance externes (nécessaire pour `python-ldap`, qui est nécessaire\n\tpour la connexion clipper):\n\n\t```console\n\tsudo apt-get install libsasl2-dev python-dev-is-python3 libldap2-dev libssl-dev\n\t```\n\n5. Installer les dépendances\n\n\t```console\n\tpip3 install -r requirements.txt\n\t```\n\n6. Copier/linker le fichier `interludes/secret_example.py` dans `interludes/secret.py`\n\n\t```console\n\tln -s interludes/secret_example.py interludes/secret.py\n\t```\n\n7. Faire les migrations\n\n\t```console\n\tpython3 manage.py makemigrations\n\tpython3 manage.py migrate\n\t```\n\nPour l'aide au développement et maintenir un code propre, j'utilise :\n- les formateurs/linter [ruff](https://github.com/astral-sh/ruff),\n\tà installer via `pip install ruff` puis lancer par `make format`\n- le type-checker [mypy](https://pypi.org/project/mypy/)\n\tà installer via `pip install mypy django-stubs` puis lancer par `make mypy`. Normalement\n\ttous les fichiers sont bien typés, sauf `shared/forms.py` qui utilisent trop de hacks.\n\n## Lancer le serveur\n\nPour pouvoir afficher et tester le site (après avoir tout installé)\n\n1. Lancer l'environnement virtuel si ce n'est pas déjà fait (si le prompt du\n   terminal ne commence pas par `(venv)`)\n\n\t```console\n\tsource venv/bin/activate\n\t```\n\n2. Lancer le serveur avec `make serve` ou\n\n\t```console\n\tpython3 manage.py runserver\n\t```\n\n\tCette commande bloque le terminal, le serveur tourne tant qu'elle n'est pas\n\tinterrompue (par `Ctrl+C` ou autre).\n\n3. Dans un navigateur, le site se trouve à l'adresse\n   [http://localhost:8000/](http://localhost:8000/)\n\n4. Créer un compte super-utilisateur avec `make adduser`. Les réglages se modifient depuis les pages d'admin de Django [http://localhost:8000/admin](http://localhost:8000/admin).\n\n## Guide de l'administrateur\n\nLe site inclus un guide de l'administrateur accessible aux super-utilisateurs\na [http://localhost:8000/admin_pages/info](http://localhost:8000/admin_pages/info)\n\nLe site se gère depuis deux pages d'administration :\n\n**Page d'administration Django :**\n[http://localhost:8000/admin](http://localhost:8000/admin) (autogénérée) permet de modifier\ndirectement la base de donnée. Descriptif rapide des tables intéressantes :\n\n- Utilisateurs - contient tous les utilisateurs et leurs permissions. Pour\n  donner les droits d'administrateur à quelqu'un il faut lui donner le statut\n  superuser (accès à l'admin du site) ET le statut équipe (accès à l'admin\n  django).\n\n- Pages HTML - contient les pages d'informations (notamment home, activités et\n  FAQ). Cela permet aux administrateurs de modifier leur contenu facilement\n  depuis le site en ligne, sans avoir à accéder au serveur. Ces pages ont un nom\n  (uniquement visible dans l'admin), un URL d'accès et un contenu (format HTML\n  avec tags de templates django).\n\n\tLes pages `home` (url vide) `activites` et `faq` sont spéciales. Elles\n  apparaissent sur la barre de navigation et sont régénérées à partir de\n  fichiers de base dans [pages/default/](./pages/default/) si quelqu'un tente\n  d'y accéder après leur suppression.\n\n\tVous pouvez créer d'autres pages sur des URL libres si ça vous semble pertinent.\n\n\tLes autres pages du site (formulaires, pages de connexion...) sont des\n\ttemplates django plus classiques et ne peuvent être modifié que depuis le code\n\tsource.\n\n- Paramètres - les réglages du site, ils permettent :\n\t- ouvrir/fermer la création de compte, les inscriptions\n\t- renseigner l'ENS d'accueil\n\t- renseigner un lien de la billetterie et de serveur discord\n\t- ouvrir/fermer le formulaire de proposition d'activités\n\t- afficher/cacher le planning\n\t- renseigner l'email de contact, les dates de l'événement, les dates d'inscription\n\t- ajouter un message global au-dessus de toutes les pages\n\t- bloquer/autoriser l'envoi d'email globaux\n\t- Ajouter une version PDF/PNG du planning (pour mobiles)\n\t- Ajouter l'affiche (visible sur la page d'accueil)\n\n\n\tDe nombreux champs dans les paramètres sont purement informationnels et ne servent\n\tqu'à mettre à jour l'affichage dans certaines pages, mais certains servent\n\tà activer/désactiver des fonctionnalités du site (inscription, soumission d'activités, ...).\n\n- Activités - liste des activités prévues. C'est ici que vous pouvez\n\trajouter/modifier les activités qui s'affichent sur la page activité. Un\n\tformulaire permet aux utilisateurs de proposer des activités directement. Il\n\tvous faudra les relire et les valider ensuite manuellement pour qu'elles\n\tsoient affichées sur le site.\n\n- Créneaux - place une activité sur le planning. Une activité peut avoir\n  plusieurs créneaux si elle a lieu plusieurs fois. Noter que les inscriptions\n  se font à des créneaux et non a des activités.\n\n\tNote : le planning généré par le site (en JS) est difficilement lisible sur\n\tmobile. Le site permet d'uploader une version PDF ou PNG propre pour mobiles.\n\tPersonnellement je faisais une capture d'écran du planning (vu sur un grand\n\técran) que j'exportais en PDF.\n\n- Participant - liste des gens inscrits et des informations sur leur inscription\n  (ENS, repas choisi...)\n\n- Choix d'activité - Liste de (participant, priorité, activité) indiquant les\n  vœux des participants. Une fois que vous avez fait l'attribution, cocher les\n  case \"Obtenues\" pour indiquer qui a eu quelle activité.\n\n\n**Page d'administration du site :** [http://localhost:8000/admin_pages/](http://localhost:8000/admin_pages/)\n- permet d'exporter les différentes tables au format CSV\n- affiche l'état du site (version, réglages actuels, différentes métriques)\n- une prévisualisation du planning\n- permet l'écriture d'un mail à tous\n- permet d'envoyer deux séries d'emails :\n\t- une aux inscrits pour leur communiquer les activités qu'ils ont obtenus\n\t- une aux orgas qui ont besoin de connaître la liste des participants à\n\t\tl'avance pour préparer leurs activités.\n\n## En production\n\nLe serveur a besoin d'être configuré pour HTTPS et d'être configuré pour livrer directement les fichiers situés dans `/static/` et `/media/`.\n\n1. Installer les dépendances `make install`\n\n2. Initialiser les variables d'environnement secrètes (tous les variables initialisées\n    par un `credentials` dans [settings.py](./interludes/settings.py)). Par exemple,\n    (les variables d'environnement doivent avoir un préfixe `INTERLUDE_`).\n\n3. Faire les migrations `make migrate`\n\n4. Faire un `make preprod` pour générer les fichiers statiques et vérifier les réglages\n\n## Idées de développement\n\nA.K.A. la liste des trucs utiles que je n'ai pas eu le temps d'ajouter :\n\n- Intégrer l'[algorithme de répartition](https://github.com/Imakoala/InterludesMatchings) dans le site au lieu de le faire tourner en externe à partir des exports CSV et de remplir les résultats à la main\n- Envoyer une concaténation de tous les emails aux admins (pour vérification, et pas juste en copie pour éviter le spam...)\n- Générer la version PDF du planning automatiquement au lieu de la faire à base de captures d'écran\n- ~~Remplacer les templates HTML statiques par du rendu de fichier markdown\n  éditable depuis la page d'admin (afin d'éviter de devoir refaire un pull à\n  chaque petit changement)~~ fait\n- Réutiliser les comptes élèves pour éviter aux gens de devoir créer des\n  comptes. À Ulm, nous avons un système de compte clipper fourni par l'admin\n  qu'on réutilise dans quasi tous les sites étudiants. Je ~~peux facilement le\n  rajouter à ce site~~ fait, mais je ne sais pas comment faire pour les autres écoles.\n- Rajouter des tests unitaires...\n\n## Liens divers\n\n- [Le site des interludes 2021 et 2025](https://interludes.ens.fr) (contient aussi en archive les vielles version du site)\n- [Le site des interludes 2022](https://interludes.assos-ensl.fr/)\n- [le site des interludes 2023](https://interludes.crans.org/)\n- [Le github de l'algorithme de répartition](https://github.com/Imakoala/InterludesMatchings)\n- [Le wiki de Paris-Saclay](https://wiki.crans.org/VieBdl/InterLudes) qui recense les visuels, sites webs et photos des interludes passées.\n- [Le site des 48h des jeux](https://48hdesjeux.cof.ens.fr/) et son [gitlab](https://git.eleves.ens.fr/dlesbre/48h-des-jeux), un événement très similaire intra-ENS Ulm, c'est fork de ce répo.\n- [Le site du KWEI](https://kwei.crans.org/) et son [gitlab](https://gitlab.crans.org/mediatek/site-kwei), un événement similaire intra-ENS Paris-Saclay\n- [Le site du club jeu d'Ulm](https://jeux.cof.ens.fr/)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdlesbre%2Fsite-interludes","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdlesbre%2Fsite-interludes","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdlesbre%2Fsite-interludes/lists"}