PlanningSup
Un planning universitaire moderne réalisé par @kernoeb.

Fonctionnalités
- PWA hors connexion avec installation sur bureau et mobile
- Couleurs par catégorie ou UE, thèmes clair/sombre
- Vues jour / semaine / mois, zoom sur un cours, sélection multiple
- Rafraîchissement automatique (chargement, focus, toutes les 2 minutes)
- Liste de blocage (cacher un cours) et mise en avant de l’enseignant
- Changement d’université/spécialité via cookie ou paramètres
N’hésitez pas à créer une issue ou à me contacter sur Telegram (@kernoeb) ou Discord (kernoeb) pour plus d’infos, pour me notifier d’une erreur ou proposer une fonctionnalité !
Extension navigateur
Ajouter une spécialité ou une université
Si votre université (ou autre !) accepte le format ICS pour les calendriers, vous pouvez ouvrir une Pull Request en modifiant le fichier .json correspondant dans resources/plannings.
Avec @matissePe et @ShockedPlot7560, nous avons réalisé un script pour générer automatiquement le JSON dans la bonne forme, situé dans le dossier scripts du projet.
Stack & architecture
- Monorepo Bun workspaces :
apps/ (API, PWA, desktop/mobile, extension) et packages/ (config, libs), assets dans resources/.
- API
apps/api : Elysia + Drizzle, base PostgreSQL (plus de MongoDB). Les plannings ICS sont lus depuis resources/plannings/*.json, convertis à la volée et sauvegardés en backup dans Postgres.
- Front
apps/web : Vue 3 + Vite + DaisyUI (Tailwind). Sert la PWA et consomme l’API (/plannings, /plannings/:fullId?events=true).
- Jobs : runner Bun avec fenêtres de silence configurables (
RUN_JOBS, JOBS_QUIET_HOURS), notamment pour le backup des plannings.
- Partagé : presets Vite/TS (
packages/config) et utilitaires ESLint/TS (packages/libs).
Structure du dépôt
apps/api : service Elysia, migrations/ORM Drizzle.
apps/web : PWA Vue 3.
apps/app : cibles desktop/mobile (Tauri).
apps/extension : extension navigateur.
packages/libs, packages/config : outillage partagé.
resources/plannings : JSON ICS par établissement.
test/ : unitaires, intégration, E2E (Playwright).
Pré-requis
- Bun (version indiquée dans
.bun-version)
- Node.js ≥ 24 (pour certains outils)
- Docker + Docker Compose (PostgreSQL 18 fourni dans
docker-compose.yml)
Démarrage rapide (développement)
# 1. Dépendances
bun install
# 2. Variables d'environnement API
cp apps/api/.env.example apps/api/.env
# DATABASE_URL par défaut : postgres://planningsup:mysecretpassword@localhost:5432/planningsup
# 3. Lancer tout le stack
bun dev
# -> démarre Postgres via docker compose puis API (http://localhost:20000) et PWA (http://localhost:4444)
- Les migrations Drizzle et la synchronisation des plannings sont exécutées au démarrage de l’API.
bun dev passe par scripts/run dev et ignore apps/app/apps/extension pour un démarrage rapide.
Commandes utiles
bun run build : build de tous les packages applicables.
bun run lint · bun run lint-fix : ESLint.
bun run typecheck : vérification TS.
bun run test:unit : tests unitaires Bun.
bun run test:integration : tests d’intégration (Docker requis).
bun run test:e2e (+ variantes :safari, :headed, :debug) : Playwright.
Plus de détails dans TESTING.md.
Déploiement Docker
- Image publique :
ghcr.io/kernoeb/planningsup.
- Exemple
docker-compose.prod.yml (Postgres + webapp).
Créez db.env (POSTGRES_USER/PASSWORD/DB) et webapp.env avec au minimum :
DATABASE_URL=postgres://planningsup:mysecretpassword@postgres:5432/planningsup
PORT=20000
RUN_JOBS=true
PUBLIC_ORIGIN=https://planningsup.app
TRUSTED_ORIGINS=https://planningsup.app
Donateurs
(merci à vous ! ❤️)
Si vous souhaitez me faire un petit don :


评论