Courses (Classes regulars) — el reglament
Estat: 📝 Disseny aprovat el 2026-04-25, no implementat encara. Aquest document és el contracte conceptual fins a la fase d'implementació (Fase 4 del pla mestre).
Què és una Classe a LDP
Una activitat formativa periòdica amb compromís bidireccional:
- El teacher es compromet a donar X sessions
- L'alumne es compromet a venir i aprendre
- Hi ha un temari que avança al llarg del temps
- L'alumne acumula història de què ha après
És diferent d'un Event:
| Aspecte | Event | Classe |
|---|---|---|
| Durada | Hores | Setmanes/mesos |
| Vincle | "Hi va o no" | Inscripció amb compromís |
| Contingut | Setlist (un cop) | Temari (evoluciona) |
| Història | No reté progrés | Reté progrés per ítem |
| Cicle de vida | Pre/Live/Post | Planning → Open enrollment → Active → Completed |
Què pot ensenyar una Classe
Suportem multi-disciplina (ampliable):
| Disciplina | Què cobreix avui | Catàleg |
|---|---|---|
| DANCE | Line dance, country, two-step, west-coast-swing, salsa, bachata… | Dance del catàleg LDP |
| MUSIC | Cançons (pre-existents al catàleg) | Song del catàleg LDP |
| OTHER | Cant, instrument, idiomes, teatre, qualsevol disciplina | El teacher escriu el temari lliure |
El sistema està dissenyat per crèixer: quan apareguin necessitats reals (ex: 50 escoles de cant amb repertori propi), s'afegeix una nova disciplina i un catàleg dedicat sense canviar res del que ja funciona.
Visibility — qui veu la classe
3 nivells:
| Visibility | Apareix a /courses | URL pública | Inscripció |
|---|---|---|---|
| 🌍 PUBLIC | Sí | Lliure | Lliure (mentre hi hagi vacants) |
| 🔗 UNLISTED | No | Sí amb enllaç directe | Lliure amb enllaç |
| 🔒 PRIVATE | No | Només alumnes + teacher | Només teacher afegeix manualment |
Casos d'ús reals de cada nivell:
- PUBLIC → "Curs Country Iniciació, dimarts 19h" — qualsevol pot veure i inscriure's
- UNLISTED → curs limitat a membres d'una associació, compartit per email; no surt al catàleg
- PRIVATE → curs particular del teacher amb 4 amics, classe d'empresa, curs experimental
Estructura d'una Classe
Una Classe (Course) té:
- Informació de base: nom, descripció, imatge, disciplina, nivell (BEGINNER/INTERMEDIATE/ADVANCED/MIXED)
- Qui l'imparteix: teacher principal + co-teachers opcionals
- On: venue (lloc físic) — opcionalment vinculada a una Organització (escola/club/associació)
- Quan: rang de dates (inici i fi del curs) + recurrència ("dimarts 19h-21h")
- Quants: límit d'alumnes opcional
- Preu: text informatiu ("60€/mes", "donació", "100€ trimestre")
- Visibility: PUBLIC / UNLISTED / PRIVATE
- Estat del cicle: PLANNING → OPEN_ENROLLMENT → ACTIVE → COMPLETED → (CANCELLED)
- Tags: mateix sistema que Events (estil, nivell, públic, format, lliures)
I 4 conceptes interns:
Temari (CurriculumItem)
La llista del que s'ensenyarà al curs. Cada ítem és un ball, una cançó o un text lliure (segons disciplina). Pot tenir un ordre planificat ("setmana 3 farem aquest"). Té estat global: PENDING / IN_PROGRESS / COMPLETED.
Sessions (CourseSession)
Cada classe real (cada dimarts 19h). El teacher hi pot anotar:
- Estat (PLANNED / DONE / CANCELLED)
- Notes públiques per als alumnes
- Quins ítems del temari s'han treballat
Per defecte, una sessió NO apareix al calendari públic d'Events. Si el teacher vol obrir una sessió a tothom (ex: "última classe oberta a la comunitat"), pot crear un Event vinculat manualment.
Inscripcions (StudentEnrollment)
Un alumne inscrit al Course. Té estat: ACTIVE / UNSUBSCRIBED / COMPLETED / EXPELLED.
Tots els alumnes han de tenir compte LDP — sense excepcions. El teacher pot afegir alumnes per email; si l'alumne no té compte encara, rep un convit i es crea quan el confirma.
Progrés individual (StudentItemProgress)
Per cada ítem del temari, cada alumne té el seu propi estat:
NOT_YET_TAUGHT(encara no s'ha vist a classe)LEARNING(en aprenentatge)KNOWS(l'alumne diu que ja el sap)MASTERED(dominat completament)NEEDS_REVIEW(cal repassar)
Aquest progrés és privat per defecte: només l'alumne i el teacher el veuen. L'alumne pot triar fer-lo públic agregat ("X cursos completats") o detallat ("aquests són els balls que sé").
Vista d'usuari per rol
👨🏫 Teacher (a /courses/{id}/manage)
Dashboard amb:
- Temari amb estat global
- Propera sessió + què es planifica fer
- Historial de sessions (què s'ha fet a cadascuna)
- Llista d'alumnes amb el seu progrés agregat
Accions:
- Planificar sessió, registrar què s'ha fet
- Afegir/treure ítems del temari
- Afegir alumnes per email (si no tenen compte, reben convit)
- Marcar progrés general d'un ítem
🧑🎓 Alumne (a /me/courses/{id})
- Llista de cursos on és (o ha estat) alumne
- Per cada course: el SEU temari amb estat individual de cada ítem
- Calendari de sessions del curs + historial
- Notes privades pròpies
👁️ Visitant públic (només a Course PUBLIC)
- Info pública: nom, teacher, venue, dies, nivell, descripció, preu
- Botó "M'inscric" si OPEN_ENROLLMENT i hi ha vacants
- NO veu el temari complet, NO veu els alumnes
🛠️ Admin
- Llistat de tots els courses (incloent privates)
- Gestió de moderació, intervenció en disputes
Integració amb l'espai personal
Una sinergia clau:
L'usuari té al seu espai personal una llista de balls (Ja sé / Aprenent / Vull aprendre / Arxivat).
Quan és alumne d'un Course de DANCE:
- Cada ball del temari → s'afegeix automàticament a la seva llista com a
Aprenentquan el teacher el marcaTAUGHTa una sessió - Si el teacher marca
MASTEREDglobalment, passa aJa séautomàticament - L'alumne pot promocionar manualment quan se senti preparat
- L'historial queda al perfil de l'alumne per sempre, fins i tot quan deixa el curs
L'espai personal esdevé un portfoli d'aprenentatge que es nodreix automàticament de les classes.
Pagaments — de moment només informatius
Course té un camp de preu informatiu (text lliure: "60€/mes", "donació", etc.). De moment LDP no gestiona pagaments — qualsevol cobrament passa fora de la plataforma (Bizum, transferència, efectiu, etc.).
En el futur (post-MVP): integració amb Stripe per inscripcions amb pagament automàtic, cobrament de quotes mensuals, certificats de finalització, etc.
Sobre el finançament de la plataforma: LDP és un projecte personal mantingut per una sola persona. Per seguir afegint funcionalitats com inscripcions amb pagament integrat, certificats, sistema de notificacions automàtiques i altres avantatges, necessitarem suport de la comunitat (donacions, subscripcions professionals, sponsorship). Si veus valor al que estem construint i tens possibilitats, ens pots ajudar a continuar.
Què NO és una Classe
- Un workshop puntual (1 dia, 1 ocasió) → és un Event WORKSHOP
- Una banda que toca cada dimarts al mateix bar → són Events SHOW recurrents (no classes)
- Una organització que ofereix múltiples cursos → és una Organization
- Un grup d'amics que queden a ballar → no és necessari modelar-ho
Què passa si la classe canvia
- Cancel·lació de sessió puntual: el teacher la marca CANCELLED + nota. L'alumne rep notificació (futur).
- Canvi de venue puntual: la sessió té
location_overrideopcional. - Cancel·lació del curs sencer: passa a CANCELLED, els alumnes reben notificació, queden les inscripcions a estat congelat per història.
- Teacher deixa el curs: cal "transferir" a un altre teacher o cancel·lar el curs.
Privadesa i GDPR
- El progrés individual és dada sensible (educativa) → privat per defecte, l'alumne en té control
- Si l'alumne demana esborrat (Art. 17 GDPR): es supr el seu progrés, queda 1 alumne menys al curs
- Si el teacher demana esborrat: els seus courses queden orfes — cal transferir o cancel·lar
- Les notes privades de l'alumne (
student_notes) no les veu ningú més, ni el teacher
Multi-disciplina extensible
El sistema neix amb 3 valors de disciplina (DANCE / MUSIC / OTHER), però està dissenyat per crèixer:
- Quan apareguin 50+ escoles de cant amb necessitat de catàleg propi → es crea entitat
VocalRepertoire+ nova disciplinaVOCAL+ nou tipus d'itemREPERTOIRE - Per a piano:
Piece+INSTRUMENT+PIECE - Etc.
L'arquitectura no es bloqueja per cap nou cas — només cal afegir valors, no migrar.
Resum executiu
✅ Domini propi separat d'Events (cicle de vida diferent) ✅ 3 nivells de visibility (PUBLIC / UNLISTED / PRIVATE) ✅ Multi-disciplina extensible (DANCE / MUSIC / OTHER, ampliable) ✅ Tots els alumnes registrats (sense excepcions, control total) ✅ Progrés privat per defecte (l'alumne tria si exposa al perfil públic) ✅ Pagaments informatius ara, integrats Stripe en el futur ✅ Pertany opcionalment a una Organització (escola, club, associació) ✅ Reutilitza Person, Venue, Organization, User, Dance/Song, Tags — no duplica res
Implementació prevista: Fase 4 del pla mestre, després del bloc de Governance (Claims Module + Trust Levels + Organizations).