Επίπεδο γιορτασμού¶
Το επίπεδο γιορτασμού (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 κάθε φορά. |
Ροή¶
- Μια άσκηση αποδίδει
<AnswerCelebration isCorrect>· εκτελεί απτικό παλμό, επιλέγει φράση (με κλιμάκωση ανά ένταση + συχνότητα) και εκπέμπειanswer_correct/answer_wrongστο bus. - Το
emitCelebrationαναπαράγει τον αντιστοιχισμένο ήχο (αυτο-κλιμακωμένο βάσει προτίμησης ήχου) και ειδοποιεί τους συνδρομητές. - Κατά την ολοκλήρωση μαθήματος η σελίδα λαμβάνει στιγμιότυπο
του gamification, εκτελεί την απονομή, και έπειτα το
celebrateProgressSinceεντοπίζει ορόσημα + badges και τα δρομολογεί μέσωcelebrateMilestone, που βάζει ένα overlay στην ουρά και εκπέμπει ήχο. ΤοMilestoneHostεμφανίζει τα overlays διαδοχικά.
Κανόνες¶
- Όλες οι κινούμενες εικόνες είναι CSS (transform + opacity)·
χωρίς βιβλιοθήκες κινούμενων εικόνων. Το
prefers-reduced-motionκαταργεί κάθε κινούμενη εικόνα και αναγκάζει την πραγματική ένταση σεsubtle. - Οι ήχοι συντίθενται κατά την εκτέλεση από προσθετικές
συνταγές (
renderSamplesείναι ο αμιγής, δοκιμάσιμος πυρήνας)· τοAudioContextδημιουργείται τεμπέλικα κατά την πρώτη αναπαραγωγή εντός χειρονομίας χρήστη. - Το επίπεδο γιορτασμού είναι συμπληρωματικό: κάθε ένδειξη είναι επίσης ορατή. Μια αποτυχία σε αυτό δεν πρέπει να διακόπτει ποτέ τη ροή του μαθήματος (οι αναγνώσεις στατιστικών είναι αμυντικές).