Μετάβαση στο περιεχόμενο

Επίπεδο γιορτασμού

Το επίπεδο γιορτασμού (EXP-008, Phase 55) προσθέτει συναισθηματική ανατροφοδότηση επάνω στην ήδη υπάρχουσα μηχανική παρακολούθηση. Είναι αποκλειστικά frontend και λειτουργεί και στις δύο λειτουργίες αποθήκευσης.

Στοιχεία

Ενότητα Ρόλος
lib/praise/phrase-picker.ts Κύκλος φράσεων επαίνου χωρίς επανάληψη, διαβάζει το data/praise/{lang}.json (συγκεντρωμένο από το backend/config/praise/*.yaml μέσω make sync-praise).
lib/feedback/feedbackPref.ts Ένταση (subtle/normal/enthusiastic) + προτιμήσεις ήχου στο localStorage· παράκαμψη reduced-motion· κλιμάκωση ανά επίπεδο + βοηθητικά συχνότητας.
hooks/useFeedbackIntensity.ts Ενεργή πραγματική ένταση (επαναδιαβάζει όταν αλλάζουν οι προτιμήσεις ή το reduced-motion).
lib/feedback/milestones.ts Αμιγής ανίχνευση κατωφλίων (streak/mastery/επίπεδο).
lib/feedback/celebrationQueue.ts FIFO σε επίπεδο ενότητας με απο-αντικατάσταση id· ένας ακροατής (ο host).
lib/praise/celebration-bus.ts emitCelebration (αναπαράγει τον αντιστοιχισμένο ήχο + ειδοποιεί τους συνδρομητές) και τα βοηθητικά ορόσημου celebrate*.
lib/feedback/celebration-stats.ts Στιγμιότυπο gamification + κινητήρας γιορτασμού ορόσημου/badge κατά την ολοκλήρωση.
lib/audio/sound-effects.ts Ήχοι συντιθέμενοι κατά την εκτέλεση (χωρίς αρχεία ήχου).
components/exercises/AnswerCelebration.tsx Απτικός παλμός + έπαινος + εκπομπή στο bus ανά απάντηση.
components/feedback/Confetti.tsx Έκρηξη confetti αμιγώς με CSS.
components/feedback/MilestoneHost.tsx + MilestoneOverlay.tsx Αδειάζει την ουρά, εμφανίζει ένα overlay κάθε φορά.

Ροή

  1. Μια άσκηση αποδίδει <AnswerCelebration isCorrect>· εκτελεί απτικό παλμό, επιλέγει φράση (με κλιμάκωση ανά ένταση + συχνότητα) και εκπέμπει answer_correct/answer_wrong στο bus.
  2. Το emitCelebration αναπαράγει τον αντιστοιχισμένο ήχο (αυτο-κλιμακωμένο βάσει προτίμησης ήχου) και ειδοποιεί τους συνδρομητές.
  3. Κατά την ολοκλήρωση μαθήματος η σελίδα λαμβάνει στιγμιότυπο του gamification, εκτελεί την απονομή, και έπειτα το celebrateProgressSince εντοπίζει ορόσημα + badges και τα δρομολογεί μέσω celebrateMilestone, που βάζει ένα overlay στην ουρά και εκπέμπει ήχο. Το MilestoneHost εμφανίζει τα overlays διαδοχικά.

Κανόνες

  • Όλες οι κινούμενες εικόνες είναι CSS (transform + opacity)· χωρίς βιβλιοθήκες κινούμενων εικόνων. Το prefers-reduced-motion καταργεί κάθε κινούμενη εικόνα και αναγκάζει την πραγματική ένταση σε subtle.
  • Οι ήχοι συντίθενται κατά την εκτέλεση από προσθετικές συνταγές (renderSamples είναι ο αμιγής, δοκιμάσιμος πυρήνας)· το AudioContext δημιουργείται τεμπέλικα κατά την πρώτη αναπαραγωγή εντός χειρονομίας χρήστη.
  • Το επίπεδο γιορτασμού είναι συμπληρωματικό: κάθε ένδειξη είναι επίσης ορατή. Μια αποτυχία σε αυτό δεν πρέπει να διακόπτει ποτέ τη ροή του μαθήματος (οι αναγνώσεις στατιστικών είναι αμυντικές).