Skip to main content

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:

AspecteEventClasse
DuradaHoresSetmanes/mesos
Vincle"Hi va o no"Inscripció amb compromís
ContingutSetlist (un cop)Temari (evoluciona)
HistòriaNo reté progrésReté progrés per ítem
Cicle de vidaPre/Live/PostPlanning → Open enrollment → Active → Completed

Què pot ensenyar una Classe

Suportem multi-disciplina (ampliable):

DisciplinaQuè cobreix avuiCatàleg
DANCELine dance, country, two-step, west-coast-swing, salsa, bachata…Dance del catàleg LDP
MUSICCançons (pre-existents al catàleg)Song del catàleg LDP
OTHERCant, instrument, idiomes, teatre, qualsevol disciplinaEl 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:

VisibilityApareix a /coursesURL públicaInscripció
🌍 PUBLICLliureLliure (mentre hi hagi vacants)
🔗 UNLISTEDNoSí amb enllaç directeLliure amb enllaç
🔒 PRIVATENoNomés alumnes + teacherNomé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 Aprenent quan el teacher el marca TAUGHT a una sessió
  • Si el teacher marca MASTERED globalment, passa a Ja 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_override opcional.
  • 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 disciplina VOCAL + nou tipus d'item REPERTOIRE
  • 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).