Skip to content

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

4 Commits

Folders and files

Repository files navigation

Auphine — objectifs à deux

Avancer à deux, chaque jour. A.U.P.H.I.N.É : Avancer Unis, Progresser Humblement, Inspirer, Nourrir l'Élan. Comme les dauphins, qui nagent en duo et s'entraident sans cesse, on avance plus loin quand quelqu'un avance à côté de nous.

Une appli légère pour binômes : chaque jour, tu fixes des objectifs à ton binôme et il ou elle t'en fixe. Chacun coche ce qu'il a fait, ajoute une preuve photo, l'autre réagit et encourage, et chaque semaine vous avez un bilan complet : taux de réussite, jour par jour, compétences travaillées, évolution, badges et bilan écrit.

  • Mobile d'abord : PWA installable sur l'écran d'accueil (Android et iPhone), navigation par onglets en bas, notifications push.
  • Web aussi : sur grand écran, la navigation passe dans une barre latérale.
  • Zéro dépendance : Node.js et SQLite intégré, HTML/CSS/JS sans framework ni étape de build. Icônes dessinées en SVG, aucun emoji.

En ligne : https://auphine.lbcorporation.dev

Démarrer

Prérequis : Node.js 22.13 ou plus récent (SQLite est intégré à Node).

npm run seed   # facultatif : crée 2 comptes de démo avec 5 semaines d'historique
npm start      # lance le serveur sur http://localhost:3210

Comptes de démo : [email protected] et [email protected], mot de passe demo1234.

Pendant le développement, npm run dev relance le serveur à chaque modification. npm run backup sauvegarde la base et les photos.

Tester sur ton téléphone

Au démarrage, le serveur affiche aussi une adresse du réseau local (ex. http://192.168.1.20:3210). Ouvre-la depuis ton téléphone connecté au même Wi-Fi. Pour l'installation en appli, les notifications et le mode hors ligne, il faut du HTTPS : en ligne (voir Déployer) ou via un tunnel comme cloudflared ou ngrok.

Variables d'environnement

Variable Défaut Rôle
PORT 3210 Port HTTP
HOST 0.0.0.0 Interface d'écoute (127.0.0.1 derrière un proxy)
DB_FILE data/auphine.db Base SQLite (les photos vont dans uploads/ à côté)
TRUST_PROXY (vide) 1 derrière un proxy (Apache, Caddy, Nginx) pour lire la vraie IP du client
VAPID_SUBJECT URL du dépôt Contact transmis aux services de notification
BACKUP_DIR ~/backups/auphine Destination de npm run backup

Fonctionnalités

Écran Ce qu'on y fait
Aujourd'hui Mes objectifs du jour et de la semaine : ceux fixés par mon binôme et mes objectifs perso. Je coche d'un geste, j'indique « partiel », ou je fais avancer un objectif chiffré (« 6 / 10 km »).
Binôme Je fixe ses objectifs : suggestions rapides, compétence liée, difficulté (10/20/30 XP), objectif du jour ou de la semaine, chiffré ou non, répétition sur 1, 2 ou 4 semaines. Je vois aussi ses objectifs perso.
Fiche objectif Progression, preuve photo (réduite automatiquement avant l'envoi), réactions (Bravo, En feu, Costaud, J'adore, Courage, Au top) et discussion entre binômes.
Bilan Le rendu hebdomadaire, pour moi ou mon binôme : taux de réussite et écart avec la semaine précédente, XP, série de journées parfaites, jour par jour, objectifs de la semaine, compétences, évolution sur 8 semaines, réussites et points à retravailler. Bilan écrit noté sur 5. Partage en un clic.
Progrès Niveau global, compétences (niveaux à 100, 300, 600, 1000 XP…), badges (15 succès à débloquer) et calendrier mensuel de régularité.
Profil Liaison par code à 6 caractères, notifications (activation par appareil et choix des alertes), prénom, mot de passe, thème, installation de l'appli, « À propos d'Auphine ».
Barre du haut Cloche avec pastille de non-lus (centre de notifications dans l'appli) et bouton de thème en un geste (auto → clair → sombre).
Administration Réservée aux comptes admin : vue d'ensemble (comptes, activité, réussite, santé du serveur), gestion des comptes (mot de passe, déconnexion, binôme, désactivation, suppression, droits admin), annonces à tous, journal des actions. L'admin ne lit ni les messages ni les photos.

Mises à jour : quand une nouvelle version est déployée, l'appli ouverte affiche « Une nouvelle version d'Auphine est disponible » avec un bouton pour l'appliquer.

Fluidité : les écrans déjà visités s'affichent instantanément depuis un cache puis se mettent à jour en arrière-plan ; les onglets sont préchargés ; cocher un objectif est immédiat.

Notifications : nouvel objectif fixé, réaction, message, preuve photo, journée bouclée par ton binôme, nouveau badge, rappel à 20 h s'il reste des objectifs, bilan le dimanche à 18 h (à l'heure locale de chacun).

Règles de calcul

  • Un objectif échu non coché compte comme manqué (le jour même pour un objectif du jour, le dimanche pour un objectif de la semaine). Le taux de réussite ne compte que les objectifs échus.
  • Partiel = moitié des XP et moitié dans le taux de réussite. Un objectif chiffré est « partiel » dès qu'il a commencé, « fait » une fois la quantité atteinte.
  • Série : jours consécutifs où tous les objectifs du jour sont faits. Les jours sans objectif ne cassent pas la série.

Structure

server/
  index.js     serveur HTTP : fichiers statiques et en-têtes de sécurité
  api.js       routes de l'API JSON, validation, bilan hebdo, rappels programmés
  db.js        schéma SQLite et migrations automatiques
  push.js      notifications Web Push (chiffrement RFC 8291 + VAPID), sans dépendance
  badges.js    définition et calcul des badges
  lib.js       dates, XP et niveaux, mots de passe (scrypt), jetons
public/
  index.html   point d'entrée de la PWA
  css/app.css  styles (mobile d'abord, thème sombre)
  js/app.js    navigation et rendu des vues
  js/ui.js     icônes SVG, feuilles modales, toasts
  js/push.js   abonnement de l'appareil aux notifications
  js/views/    un fichier par écran (+ fiche et formulaire d'objectif)
  sw.js        service worker (cache, réception des notifications)
scripts/
  seed.js      données de démo
  backup.js    sauvegarde de la base et des photos
  admin.js     nommer / retirer un administrateur
  keepalive.sh garde l'appli allumée sans pm2 (cron)
  gen-icons.js génère les icônes PNG sans dépendance
deploy/        fichiers d'exemple pour un VPS avec droits admin

API

Toutes les routes sont sous /api et échangent du JSON. Une fois connecté, ajoute l'en-tête Authorization: Bearer <jeton>. Le paramètre who vaut me (par défaut) ou partner. Les en-têtes facultatifs X-Local-Day et X-Timezone donnent le jour et le fuseau du client.

Méthode Route Description
POST /register · /login · /logout Compte et session
GET / PATCH /me Profil (+ binôme) / prénom, préférences de notification
POST /me/invite-code Générer un nouveau code de liaison
POST / DELETE /pair Se lier avec { code } / se délier
GET /goals?who=&from=&to= Objectifs sur une période (62 jours max)
POST /goals { who, title, details, skillId, difficulty, period, target, unit, days: [...] }
PATCH /goals/:id Réalisateur : status ou progress. Auteur : contenu. Binôme : reaction
DELETE /goals/:id[?scope=series] L'auteur supprime (et éventuellement les répétitions à venir)
PUT / DELETE /goals/:id/photo Preuve photo (JPEG, PNG ou WebP, 4 Mo max)
GET /photos/:nom Photo (réservée au réalisateur et à son binôme)
GET / POST /goals/:id/messages Discussion sur un objectif
GET / POST /skills Compétences avec XP et niveaux / en créer une
DELETE /skills/:id Supprimer une compétence
GET /badges?who= Badges et progression vers chacun
GET /calendar?who=&month=AAAA-MM Régularité jour par jour sur un mois
GET /report?who=&week= Bilan hebdomadaire complet
PUT /reviews Bilan écrit { who, week, rating, comment }
POST /me/password Changer son mot de passe { current, next }
GET · POST /notifications · /notifications/read Centre de notifications (la cloche)
GET /meta Nom, version et empreinte de l'interface déployée
GET /admin/overview · /admin/users · /admin/log Administration : statistiques, comptes, journal
POST /admin/users/:id/(password|logout|unpair|disabled|admin) Actions sur un compte
DELETE /admin/users/:id Supprimer un compte (objectifs, messages, photos)
POST /admin/broadcast Annonce à tous les comptes
GET /push/key Clé publique VAPID
POST /push/subscribe · /push/unsubscribe · /push/test Abonnement de l'appareil

Déployer

Guide pas à pas dans DEPLOY.md : serveur avec panneau sans droits admin (nvm, pm2, Apache), ou VPS avec droits admin (systemd, Caddy), sauvegardes et mises à jour.

Mise à jour du serveur en ligne : cd ~/apps/auphine && git pull && source ~/.nvm/nvm.sh && NODE=$(which node) sh scripts/keepalive.sh restart (la base est migrée automatiquement).

Feuille de route : idées d'amélioration

Organisation

  • Modèles d'objectifs et programmes types (« Remise en forme 4 semaines », « Lecture quotidienne »).
  • Contre-proposition : la personne peut demander d'ajuster un objectif jugé trop dur.
  • Messages non lus signalés dans la liste des objectifs.

Suivi

  • Export du bilan hebdo en PDF ou en image à partager.
  • Résumé hebdo rédigé automatiquement et suggestions d'objectifs adaptés à la progression.

Plateforme

  • Groupes (plus de 2 personnes) ou plusieurs binômes : coach + élèves, équipe, famille.
  • Publication sur les stores via Capacitor (même code) si besoin d'une vraie appli native.
  • Mot de passe oublié par e-mail, connexion Google/Apple.
  • Multilingue.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages