🏛️ Επιχειρήσεις
Guild registry — κάθε νέα εταιρεία αποκτά αυτόματα owner
Πελάτες
Απλοί χρήστες — δεν είναι staff ή owner κάπου
| Χρήστης | Τηλέφωνο | Εταιρείες | Τελ. σύνδεση | Κατάσταση / Ενέργειες |
|---|
Admins
Διαχειριστές της πλατφόρμας
| Χρήστης | Τελ. σύνδεση | Κατάσταση | Ενέργειες |
|---|
Τύποι Επιχειρήσεων & Κατηγορίες Υπηρεσιών
Κάθε επιχείρηση ανήκει σε 1 τύπο. Κάθε τύπος έχει κατηγορίες υπηρεσιών — η επιχείρηση διαλέγει κατηγορία και βάζει δικό της όνομα υπηρεσίας.
CMS / Περιεχόμενο
Κείμενα και εικόνες δημόσιας σελίδας
Ρυθμίσεις
Λογαριασμός, ειδοποιήσεις & τιμολόγηση
📋 Πλάνο & Roadmap
Τι είναι το BookingApp και πού πάμε — ζωντανό σχέδιο (συγχρονισμένο με το README.md)
🎮 Μοντέλο v3 + Solo Leveling (2026-06-14): services ΕΠΑΝΗΛΘΑΝ — πρώτα ΥΠΗΡΕΣΙΑ (κατηγορία+mode+ωράριο), μετά ΕΓΓΡΑΦΕΣ ανά υπηρεσία (μέσα στο προφίλ της) + λίστα μελών + manual enroll. ΟΛΟ το business panel σε Solo Leveling (Dashboard status window, Υπηρεσίες gates, Ημερολόγιο session-roster, Ραντεβού quest log, Πελατολόγιο guild roster, Hunter Profile). Admin: Monarch Dashboard + Επιχειρήσεις Guild Registry. Νέα endpoints: members/usersearch/day/customer/overview. ΜΕΝΕΙ: admin πελάτες/τύποι/ρυθμίσεις SL· gamification growth rules· σβήσιμο test data.
🚚 Μεταφορά + Workflows (2026-06-15): μεταφέρθηκε σε https://mylvlup.gr (νέο cPanel, DB mylvlup_db4731, W:\ = docroot, backup μέσω dev action=dump)· όλα τα Workflows διαγράμματα → v3. Go-live που μένει: Google OAuth origin, cron URL, κλείσιμο dev endpoint, gym→301.
- Πελάτης — βρίσκει επιχειρήσεις, κλείνει ραντεβού, συνδρομές
- Επιχείρηση (owner/manager/staff) — ραντεβολόγιο, πελάτες, υπηρεσίες
- Admin — επιχειρήσεις, χρήστες, πλάνα, CMS
- cPanel + LiteSpeed · PHP 7.4 · MySQL 5.7+
- Static SPA + REST API (χωρίς framework)
- Custom JWT auth + Google Sign-In
- Multi-tenant με
company_idisolation
🔴 Φάση Α Σταθεροποίηση — ✅ ρόλοι DB↔κώδικα · ✅ parse error · ✅ καθάρισμα debug αρχείων · ✅ end-to-end smoke test (A4) · ✅ A5 dev DB endpoint (έτοιμο) · ✅ A6 fix login persistence (auto-refresh token)
🟠 Φάση Β Ασφάλεια ✅ — ✅ strong JWT secret · ✅ ενιαίο CORS · ✅ security headers (HSTS/Referrer/Permissions) · ✅ rate-limit auth (429) · ✅ Google verify fail-closed
🟡 Φάση Γ Core — ✅ ωράρια/slots (#1) · ✅ email SMTP + SMS + reminders (#2) · ✅ υπηρεσίες v3 + εγγραφές/πακέτα (ανά υπηρεσία) + purchase · ✅ reviews/stats (#3) · ⬜ πλήρες ραντεβολόγιο
🟢 Φάση Δ Features — 🔄 ραντεβολόγιο (Ημέρα/Εβδ/Μήνας ✅· drag/staff εκκρεμεί) · 🔄 πληρωμές (per-business settings ✅· checkout εκκρεμεί) · ✅ ειδοποιήσεις · ✅ reviews/stats · 🔄 τιμολόγηση/myDATA (settings ✅· έκδοση εκκρεμεί) · ⬜ multi-staff · ⬜ reports · ✅ μοντέλο v3 (service-based) · ✅ Solo Leveling UI (business+admin) · ✅ μεταφορά mylvlup.gr · ⬜ gamification growth rules
🔵 Φάση Ε Ποιότητα — ⬜ testing · ⬜ deploy + backups · ⬜ τεκμηρίωση API
✅ F1. CRM / πελατολόγιο — ✅ Πελατολόγιο (guild roster) + 🧙 Hunter Profile (καρτέλα/ιστορικό πελάτη) + badge ● ΕΝΕΡΓΗ/○ ΑΝΕΝΕΡΓΗ· μένει σημειώσεις/tags (προαιρετικά)
✅ F2. Τύποι επιχειρήσεων & κατηγορίες υπηρεσιών — DB layer ✅ (business_types 6 + service_categories 25, companies.business_type_id, services.service_category_id). ✅ admin «Τύποι & Κατηγορίες» CRUD + business επιλογή κατηγορίας στην υπηρεσία — ΟΛΟΚΛΗΡΩΘΗΚΕ
✅ F3. Δικές του υπηρεσίες ανά επιχείρηση — λειτουργεί
🔄 F4. Ραντεβολόγιο — ✅ προβολές Ημέρα/Εβδομάδα/Μήνας + session-roster (ποιοι μέσα) → Hunter Profile· μένει drag-reschedule + ανά staff (μελλοντική φάση)
✅ F5. Πρόγραμμα/ωράριο υπηρεσιών — ✅ service_hours ανά υπηρεσία (weekday/από–έως) + θέσεις/session (capacity)
⬜ F6. Public API (να δέχεται API calls) — API keys + webhooks · differentiator
🔄 F7. Gamification τελικού πελάτη — ✅ Solo Leveling UI live (LV/RANK/EXP/quests/leaderboard/achievements σε business+admin)· ⬜ growth rules: πώς μεγαλώνουν stats/EXP/streaks/rewards — επόμενο
✅ F8. Rebrand «mylvlup» — ✅ Solo Leveling UI εφαρμόστηκε σε ΟΛΟ το app (live) + ✅ μεταφορά σε domain https://mylvlup.gr
Ανταγωνιστές: Fresha & Booksy (υβριδικό: συνδρομή + προμήθεια σε νέους πελάτες marketplace) · SimplyBook.me/Vagaro/GlossGenius/Mangomint (καθαρή συνδρομή).
Ελλάδα: Spotable (fitness/wellness — ο βασικός ανταγωνιστής) & VYNE (beauty, μοντέλο Fresha). Το υβριδικό μοντέλο ήρθε ήδη στην Ελλάδα.
Standard (table-stakes): online booking 24/7, ραντεβολόγιο, CRM, πληρωμές, SMS/email reminders, συνδρομές, analytics.
Διαφοροποίηση: API-first (μόνο SimplyBook το έχει σοβαρά) + gamification (κανείς ως standard) → εκεί ποντάρουμε.
⚠️ Spikes πριν την υλοποίηση: S1. myDATA/ΑΑΔΕ & ΑΦΜ (νομικά — με λογιστή) · S2. gamification best practices · S3. πληρωμές Ελλάδας (Viva/Stripe).
📝 Changelog
Τι έχει γίνει μέχρι τώρα — ιστορικό αλλαγών
- ✅ Ξαναζωγραφίστηκαν όλα τα διαγράμματα ροής (tab Workflows) στο μοντέλο v3 + Solo Leveling — δεν αντιστοιχούσαν πια στις λειτουργίες
- ✅ 1️⃣ Admin Panel: 👑 MONARCH Dashboard + 7 προορισμοί (Επιχειρήσεις/Πελάτες/Admins/Τύποι & Κατηγορίες/CMS/Ρυθμίσεις/Αλλαγές Συστήματος) + Προβολή ως
- ✅ 2️⃣ Setup Owner: υπηρεσία (κατηγορία+mode+ωράριο+θέσεις) → 🎟️ εγγραφές/πακέτα ΑΝΑ υπηρεσία + 👥 μέλη/manual enroll
- ✅ 5️⃣ Διαχείριση: Ημερολόγιο session-roster + popup · Ραντεβού quest log · Πελατολόγιο active/inactive → 🧙 Hunter Profile
- ✅ 4️⃣ Κράτηση: open=ελεύθερη είσοδος vs session=membership+ωράριο-window+θέσεις<capacity+frequency · η κάρτα «4 τύπων» σημάνθηκε ως προηγούμενο μοντέλο
- ✅ Το project μεταφέρθηκε gym.vasis.online → https://mylvlup.gr (ίδιος WHM, νέο cPanel account)· νέα DB mylvlup_db4731· W:\ = mylvlup docroot
- ✅ Άλλαξαν μόνο config/app.php (APP_URL → mylvlup, διορθώνει & CORS) + config/database.php (creds)· JWT_SECRET ίδιο· smoke test ΟΚ (site/admin/business/dashboard/API/DB)
- ✅ Νέο dev tool action=dump → one-click πλήρες .sql backup (schema+data, FK-safe)· πλάνο μεταφοράς στο MIGRATION_mylvlup.md
- ⬜ Μένει go-live: Google OAuth origin (mylvlup.gr)· cron URL· κλείσιμο dev endpoint· σβήσιμο test data + junk· gym→301 redirect
- ✅ ΜΟΝΤΕΛΟ v3 (ΤΟ ΣΩΣΤΟ): services ΕΠΑΝΗΛΘΑΝ (κατηγορία+mode+ωράριο)· εγγραφές = πακέτα ΑΝΑ υπηρεσία (service_id)· migration 2026-06-14_enrollment_v3_service_based.sql
- ✅ MERGE: μενού «Εγγραφές» καταργήθηκε → κλικ υπηρεσία → προφίλ με πακέτα (level bars από member_count) + λίστα εγγεγραμμένων + «Εγγραφή πελάτη» (αναζήτηση email)· ο πελάτης μπαίνει αυτόματα στο πελατολόγιο
- ✅ SOLO LEVELING όλο το business panel: Dashboard (status LV/RANK/EXP+quests), Υπηρεσίες (gates+RANK), Ημερολόγιο (session-slot roster με avatars), Ραντεβού (quest log chips), Πελατολόγιο (guild roster), Hunter Profile πελάτη (κλικ από slots/πελατολόγιο/ραντεβού), Προφίλ (system panels)
- ✅ ADMIN Solo Leveling: Dashboard «Monarch» (system status + TOP GUILDS leaderboard + activity) + Επιχειρήσεις «Guild Registry» (rank cards)· νέο endpoint /admin/overview
- ✅ Νέα backend resources: members (roster/enroll/cancel), usersearch, day (slots+rosters), customer (hunter profile)· +member_count σε services/plans/companies
- ✅ Ημερολόγιο: session-slot roster popup (Solo Leveling «System notification»)· κλικ slot→ποιοι είναι μέσα→κλικ→Hunter Profile· scrollbar στο day panel
- ✅ Πελατολόγιο: ο πελάτης ΜΕΝΕΙ μετά λήξη/ακύρωση/διαγραφή συνδρομής· badge ● ΕΝΕΡΓΗ / ○ ΑΝΕΝΕΡΓΗ (active_subs)
- 🐛 Fix: clients query only_full_group_by (GROUP BY +cu.company_id)· popup styling authentic SL frame
- 🐛 Διορθώσεις: appointments join rollback (enrollment_plan_id→service_id), serviceModeFields/saveServiceHours rollback, plans company_id fallback, διπλό const WD_NAMES· διαγνωστικό api/error_log
- ✅ Ο πίνακας services ΔΙΑΓΡΑΦΗΚΕ εντελώς — κάθε εγγραφή (plan) είναι πλέον το κεντρικό πωλούμενο (απόφαση owner)
- ✅ enrollment_plans += mode (open/session) + session_duration + session_capacity · νέος πίνακας enrollment_plan_hours (εβδομαδιαίο ωράριο μέρες+ώρες) · appointments → enrollment_plan_id
- ✅ Business: plan modal με τρόπο πρόσβασης + διάρκεια/θέσεις session + ωράριο editor· όλο το «Υπηρεσίες» UI αφαιρέθηκε
- ✅ Customer: «Κάνε εγγραφή» → membership· open = ελεύθερη είσοδος, session = κράτηση slot με έλεγχο ωραρίου + θέσεων + frequency
- ✅ Public flow τεσταρισμένο live (company profile → plans, slots ?plan_id=&date=)
- Λύθηκε η εγγραφή στο W:\ (rclone mount αντί sshfs-win + chown/Normal Shell) — δημιουργία αρχείων πλέον αξιόπιστη
- AGENDA → DB-backed (πίνακες meetings + meeting_topics, MeetingController) με TinyMCE rich-text σημειώσεις
- Rebrand «mylvlup» — Solo Leveling fitness-leveling UI: mockups landing/dashboard/booking/profile (ξεχωριστά αρχεία, ΟΧΙ live)
- Main banner με anime artwork (uploads/mainBanner.png), κοινό mvl.css, responsive fixes, nav «↗ Live app», ονομασίες GUILD/Overall Capacity
- Φάση Α: A1 ρόλοι (η DB ήταν ήδη ΟΚ + ευθυγράμμιση schema.sql) · A5 dev DB endpoint (/api/devtool) · A6 login persistence (refresh-token flow)
- Φάση Α: ✅ A1 (DB είχε ήδη ρόλους) · ✅ A2 (error_log καθαρό) · ✅ A3 (debug αρχεία→410) · ✅ A5 (/api/devtool) · ✅ A6 (refresh-token flow)
- ✅ A4 end-to-end smoke test ΟΛΟΚΛΗΡΩΘΗΚΕ (live): register→login→admin εταιρεία+owner→service→πελάτης έκλεισε ραντεβού (appointment id 1, confirmed) → Φάση Α κλειστή
- 🐛 Routing fix (.htaccess): /api/appointments ήταν ΚΑΙ module ΚΑΙ φάκελος → mod_dir 301 → -Indexes 403, ο router δεν καλούνταν (έσπαγε booking/λίστα ραντεβού). Fix: χωρισμός σε -f (αρχεία) + -d εκτός /api (φάκελοι)
- Register backend δουλεύει (POST /api/auth/register → customer)· λείπει μόνο UI φόρμα (μπαίνει στο mylvlup redesign)
- 🔄 F2 DB layer: πίνακες business_types (6 seed) + service_categories (25 seed) · companies.business_type_id · services.service_category_id (migration 2026-06-14)
- 🔄 Μοντέλο κρατήσεων DB layer: services.booking_type (single/subscription/session/package) + params· subscriptions γενίκευση (kind/period/visits_per_week)
- 🔄 Admin menu «Τύποι & Κατηγορίες»: CRUD τύπων/κατηγοριών (api/types/TypeController.php, routes types+categories)· schema.sql ευθυγραμμίστηκε
- ✅ Business UI: company modal παίρνει «Τύπος επιχείρησης» (business_type_id)· φόρμα υπηρεσίας διαλέγει κατηγορία + booking_type (single/subscription/session/package) + dynamic params (χωρητικότητα/περίοδος/credits)· validation κατηγορίας↔τύπου
- ✅ Booking enforcement (AppointmentController): single=slot conflict· session=capacity + no-overlap ίδιας κατηγορίας· package=απαιτεί credits→decrement (price 0)· subscription=απαιτεί ενεργή + εβδομαδιαίο όριο. Όλα τεσταρισμένα live — μοντέλο κρατήσεων ΠΛΗΡΕΣ
- ✅ Purchase flow: POST /api/subscriptions (αγορά πακέτου/συνδρομής)· public profile επιστρέφει booking_type· dashboard προτείνει αγορά πριν την κράτηση. ⚠️ Χωρίς payment gateway ακόμα (Φάση Δ)
- 📌 Πλάνο (Φάση Δ): per-business payment credentials — κάθε επιχείρηση βάζει στα settings της δικά της Viva/Stripe/PayPal & εισπράττει στον λογαριασμό της (πίνακας company_payment_providers, encrypted secrets, test/live, default). Spec στο README D2
- ✅ #1 Ωράριο λειτουργίας + πραγματικά slots: πίνακας company_hours (εβδομαδιαίο ανά εταιρεία)· business Προφίλ→editor ωραρίου· slots endpoint /api/companies/{slug}/slots· dashboard booking χρησιμοποιεί πλέον πραγματικά διαθέσιμα slots (τέλος τα demo). Τεσταρισμένο live
- ✅ #2a Ειδοποιήσεις (in-app): πίνακας notifications· Notifier dispatcher (in-app + email/SMS gated)· NotificationController (list/count/read)· trigger στην κράτηση· 🔔 bell στο dashboard με unread badge. Τεσταρισμένο. Μένει: email SMTP, SMS, business bell, reminders cron
- ✅ #2b Email μέσω SMTP: Notifier::sendSmtp (socket client, AUTH LOGIN + STARTTLS/SSL)· admin Ρυθμίσεις→κάρτα Email (host/port/user/pass/from) + κουμπί Test email· στέλνει αυτόματα email επιβεβαίωσης σε κάθε κράτηση. Χρειάζεται ο owner να βάλει SMTP credentials στο admin. SMS card έτοιμη (μένει η υλοποίηση provider-specific)
- ✅ #2 ΟΛΟΚΛΗΡΩΘΗΚΕ: 2c SMS (configurable HTTP gateway — URL template στο admin)· business bell + owner notification (new_booking)· reminders cron (/api/cron/reminders?key= — στήσε cPanel cron κάθε ώρα, reminder_hours=24). In-app/email/SMS/reminders όλα έτοιμα. Εξαρτήσεις χρήστη: SMTP creds, SMS gateway URL, cPanel cron
- ✅ #3 Reviews + Στατιστικά: πίνακας reviews· ReviewController (POST πελάτης / GET public avg+list)· business/stats endpoint· business dashboard κάρτα «Αξιολόγηση ⭐»· public profile +rating· dashboard booking «Άσε κριτική». Όλα τα functional features (#1-#3) ΕΤΟΙΜΑ.
- 🎨 GRAPHICS: Landing staged (mylvlup design εγκεκριμένο) — index-mylvlup.html live με πλήρη λειτουργικότητα (login/register modal, Google, δυναμικά businesses, CMS). Προς επαλήθευση → μετά swap σε index.html. Ακολουθούν dashboard/business/admin
- 🎨 GRAPHICS LIVE: όλο το app στο mylvlup design. index.html swapped (backup index-old.html)· dashboard/business/admin retinted στην neon παλέτα (μπλε/cyan/μωβ). Register UI live (#4). Όλα 200.
- 🎟️ Μοντέλο Εγγραφών (CANONICAL) — Βήμα 1+2a: νέοι πίνακες enrollment_plans + enrollment_plan_categories· services.access_type (oneoff/open/session, αντικατέστησε booking_type)· subscriptions→membership· αφαιρέθηκε κατηγορία «Συνδρομή». Backend Εγγραφές CRUD (/api/business/plans). Βήμα 2b: service form «Τρόπος πρόσβασης» (oneoff/open/session). Βήμα 3: business menu «🎟️ Εγγραφές» (CRUD πακέτων εβδομάδων/τιμή/συχνότητα/κατηγορίες). Business πλευρά πλήρης. Μένει: αγορά εγγραφής (customer) + enforcement rewrite.
- 🗑️ Refinement — real delete υπηρεσιών & ραντεβού (business): υπηρεσίες: ξεχωριστά κουμπιά Απενεργ./Ενεργ. (toggle is_active) + 🗑️ οριστική διαγραφή (cascade). Ραντεβού: ✕ ακύρωση + 🗑️ οριστική διαγραφή. Backend DELETE → πραγματικό DELETE FROM (όχι soft).
- 📅 Δ3 Ραντεβολόγιο (business): προβολές Ημέρα / Εβδομάδα / Μήνας με view switcher· time-grid 08-22 με appointment chips· click chip→edit, click κενό→νέο ραντεβού. Μένει: drag-reschedule + ανά staff.
- 💳 Δ1 Payment settings (per-business): tab «Πληρωμές» σε admin (site_settings pay_*) & business Προφίλ (/api/business/payment → company_content)· generic credentials Viva/Stripe/PayPal (provider/mode/merchant/client/secret/webhook). Checkout/charging = επόμενη φάση.
- 🗂️ Settings σε tabs (admin/company/user): οι ρυθμίσεις δεν είναι πια στοιβαγμένες — admin Ρυθμίσεις (Λογαριασμός/Email/SMS/Τιμολόγηση)· business Προφίλ (Στοιχεία/Ωράριο/Τιμολόγηση)· dashboard Προφίλ (Στοιχεία/Ασφάλεια).
- 📄 Τιμολόγηση/myDATA: έρευνα S1 ✅ + settings UI. myDATA REST API καλύπτει 2.1 (B2B τιμολόγιο) & 11.2 (B2C απόδειξη). Admin Ρυθμίσεις «Τιμολόγηση/myDATA» (μόνο 2.1)· business Προφίλ «Τιμολόγηση» (2.1+11.2· /api/business/invoice). Πεδία/αποθήκευση έτοιμα· έκδοση/διαβίβαση + λογιστής = επόμενη φάση. (B2B ηλ. τιμολόγηση υποχρεωτική 2/2/2026)
- 🔒 Φάση Β Ασφάλεια (B1-B5): strong JWT secret (64-hex, έφυγε placeholder)· ενιαίο CORS· security headers (HSTS/Referrer/Permissions)· rate-limit login/register/forgot (429)· Google verify fail-closed + email_verified. dev endpoint = αναμονή ολοκλήρωσης (ο χρήστης ορίζει).
- 👁 Impersonation («Προβολή ως»): admin → Πελάτες/Επιχειρήσεις → κουμπί ανοίγει το dashboard/business panel του καθενός σε νέο tab (POST /api/admin/impersonate → προσωρινό token μέσω URL hash· η σύνδεση admin στο localStorage μένει ανέγγιχτη· banner «Προβολή ως»).
- 🗂️ Admin UI αναδιοργάνωση: το «Αλλαγές Συστήματος» έγινε ΕΝΑ sidebar menu με tabs (Πλάνο/Changelog/Workflows/AGENDA/Design)· η Τεκμηρίωση ενώθηκε μέσα στα Workflows (κουμπί «Συνέχεια →»). Όλο το app στο νέο design.
- Test data: Test Gym (company 1) · owner@test.gr (company_owner) · Personal Training service (1)
- Σχεδίαση μετά Φάση Α: F2 τύποι επιχειρήσεων + κατηγορίες υπηρεσιών (1/εταιρεία) · μοντέλο κρατήσεων 4 τύποι (single/subscription/session/package)
- ⚠️ TODO πριν production: αφαίρεση dev endpoint (api/dev, route devtool, DEV_DB_KEY)
- Δημιουργία Master Plan & Roadmap (Φάσεις Α–Ε) στο README.md
- Feature backlog F1–F7 (CRM, κατηγορίες, ραντεβολόγιο, ωράρια, public API, gamification)
- Ανταγωνιστική έρευνα αγοράς (διεθνώς + Ελλάδα) με πηγές
- Προσθήκη menu «Πλάνο / Roadmap» & «Changelog» στο admin
- Menu Τεκμηρίωση, Workflows, AGENDA (DB-backed: πίνακες meetings + meeting_topics, MeetingController)
- Admin panel: επιχειρήσεις, χρήστες, admins, CMS, ρυθμίσεις
- Google Sign-In (GoogleAuthController)
- Ρόλοι company_owner / company_user στο AuthMiddleware & controllers
- MySQL schema (11 πίνακες) + Database layer (PDO)
- Auth: register/login/refresh/me/forgot-password (JWT)
- Controllers: business, companies, appointments, settings, users
- Frontend SPAs: public, admin, business, dashboard
📖 Τεκμηρίωση (συνέχεια του Workflow)
Αρχιτεκτονική, swimlanes, έρευνα αγοράς, workflow ανάπτυξης & προτάσεις — αναλυτικά
Πώς ταξιδεύει ένα request από τον browser μέχρι τη βάση και πίσω.
Κύκλος εργασίας για κάθε task, μέσα σε φάσεις με «gate».
Πώς συνδέονται Admin · Επιχειρήσεις · Πελάτες · Σύστημα, σε όλη τη ροή. ✅ υπάρχει · 🧩 μερικώς · ⬜ να προστεθεί (βάσει έρευνας)
📌 Βήμα-βήμα (από το 0 μέχρι την τελική υποβολή)
0. Onboarding (ADMIN): Ο admin από τη σελίδα Επιχειρήσεις δημιουργεί εταιρεία· αυτόματα φτιάχνεται λογαριασμός owner (αν το email υπάρχει, αναβαθμίζεται). Ορίζει plan & κάνει Έγκριση (is_verified). ✅
1. Setup (COMPANY): Ο owner κάνει login → συμπληρώνει προφίλ, προσθέτει staff (σελίδα Χρήστες της εταιρείας ↔ company_users), δημιουργεί υπηρεσίες. ✅ Λείπουν: κατηγορίες υπηρεσιών (F2), ωράριο/διαθεσιμότητα (F5).
2. Δημοσίευση (SYSTEM): Όταν is_active + is_verified, η εταιρεία εμφανίζεται δημόσια στο /api/companies (+ /{slug} με υπηρεσίες/gallery). Το CMS (admin) ελέγχει το landing. ✅
3. Κράτηση (CUSTOMER → SYSTEM): Ο πελάτης βρίσκει επιχείρηση, κάνει register/login/Google, επιλέγει υπηρεσία & ώρα και υποβάλλει. Το σύστημα ελέγχει JWT + σύγκρουση ώρας και δημιουργεί το ραντεβού (auto-confirm). ✅ Λείπουν: slots βάσει ωραρίου, auto-confirm ως ρύθμιση.
4. Διαχείριση (COMPANY): Το ραντεβού εμφανίζεται στο ραντεβολόγιο της εταιρείας· διαχειρίζεται status/σημειώσεις/πελάτες. 🧩 Λείπουν: reminders email/SMS, online πληρωμή, πλήρες ημερολόγιο (F4).
5. Ολοκλήρωση (COMPANY): Μετά τη συνεδρία → completed / no_show, ενημέρωση πληρωμής. ✅ Λείπει: μείωση sessions_used συνδρομής (C3).
6. Retention / API: Ο πελάτης ξαναμπαίνει — εδώ μπαίνουν gamification (πόντοι/streaks/rewards) & reviews για να επιστρέφει· η εταιρεία βλέπει CRM/analytics· το public API + webhooks ανοίγει integrations. ⬜ Όλα νέα (F1 partial, F6, F7).
🔗 Πώς συνδέονται (data relationships)
- Admin → Company: δημιουργία εταιρείας + owner (
companies+users+company_users.role=owner). - Company → Staff/Services:
company_users(owner/manager/staff) &servicesμεcompany_id. - Company → Public → Customer: δημόσιο μόνο όταν verified· ο πελάτης βλέπει μέσω
/companies. - Customer → Appointment → Company: το
appointmentsδένειuser_id(πελάτης) +company_id+service_id(+ optionalstaff_user_id,subscription_id) — το ίδιο record το βλέπουν και οι δύο πλευρές. - Isolation: κάθε query φιλτράρει με
company_id· ο admin παρακάμπτει. Κάθε ενέργεια →activity_log.
users— χρήστες (role: customer/admin + company roles)companies— επιχειρήσεις (plan, κατηγορία, ΑΦΜ)company_users— M2M χρήστες↔εταιρείες + ρόλοςservices— υπηρεσίες ανά εταιρείαsubscriptions— πακέτα/συνδρομές συνεδριώνappointments— ραντεβούauth_tokens— refresh / reset / verifysite_settings— CMS δημόσιου sitecompany_content— CMS ανά εταιρείαcompany_gallery— φωτογραφίεςactivity_log— audit trailmeetings— ατζέντες (AGENDA)meeting_topics— θέματα + σημειώσεις
- auth register · login · logout · refresh · me · forgot/reset · google
- admin companies · users · company-users (CRUD)
- settings GET /settings · GET/PUT /admin/settings
- companies GET λίστα · GET /{slug} (δημόσια)
- appointments GET/POST/PUT · subscriptions
- business company · appointments · clients · services
- users PUT /profile
Δύο μοντέλα μονετισμού:
• Καθαρή συνδρομή (0% προμήθεια): SimplyBook.me (€0→€59.9), Vagaro (~$24-30/calendar), GlossGenius (~$28 solo), Mangomint ($165-375 μεγάλα σαλόνια).
• Υβριδικό (συνδρομή + commission σε νέους πελάτες marketplace): Fresha (~$15-20 + 20%), Booksy (~$30 + ~30% Boost).
Ελλάδα: Fresha & Booksy ενεργές. Ελληνικές: Spotable (fitness/wellness — κύριος ανταγωνιστής, καλύπτει όλο το standard set) & VYNE (beauty marketplace, μοντέλο Fresha «0% στους δικούς σου πελάτες»).
Standard (table-stakes): 24/7 booking · ραντεβολόγιο ανά staff · CRM · online πληρωμές · SMS/email reminders · συνδρομές · analytics.
Differentiators (ευκαιρία): API-first (μόνο SimplyBook το έχει σοβαρά — JSON-RPC 2.0) · gamification τελικού πελάτη (κανείς ως standard).
Πηγές: fresha.com/help-center · simplybook.me/pricing & developer-api · mangomint.com · glossgenius.com · spotable.gr · partners.vyne.gr · vyne.gr · goodcall.com · thesalonbusiness.com
R1 Μονετισμός: ξεκίνα με συνδρομή (το plan trial/basic/pro υπάρχει ήδη) και κράτα αρχιτεκτονικά ανοιχτό το υβριδικό (marketplace commission) à la VYNE/Fresha για το μέλλον.
R2 API-first = 1η διαφοροποίηση (F6): public API με API keys ανά εταιρεία + webhooks (νέο/ακύρωση ραντεβού). Πρότυπο: SimplyBook (book/reschedule/cancel/availability).
R3 Gamification (F7): πόντοι/ραντεβού · streaks συνέπειας · badges/επίπεδα · referral bonus · progress bar προς συνδρομή · εξαργύρωση σε εκπτώσεις. Πρώτα S2 ανάλυση.
R4 Κλείσε το κενό parity: τα reminders (email/SMS) είναι standard παντού αλλά λείπουν → προτεραιότητα (Φάση Γ).
R5 Ραντεβολόγιο + ωράρια μαζί (F4+F5): πλήρες ημερολόγιο με slots βάσει ωραρίου — βασικό ανταγωνιστικό vs Spotable.
R6 Ελληνική εστίαση: myDATA (S1), Viva Wallet/Stripe (S3), πλήρης ελληνική γλώσσα — τοπικό πλεονέκτημα έναντι διεθνών.
R7 CRM για retention (F1): καρτέλα πελάτη + ιστορικό + σημειώσεις — δένει άμεσα με gamification.
🎯 Προτεινόμενη σειρά:
Φάση Α (fix) → reminders + ωράρια/ραντεβολόγιο (parity) → API-first (διαφοροποίηση) → gamification (μετά S2 ανάλυση).
🔧 Workflows & Τεκμηρίωση
Ροές ανά στάδιο/ρόλο της λογικής — και στη συνέχεια η αναλυτική τεκμηρίωση (αρχιτεκτονική, swimlanes, έρευνα). Ξεκινά εδώ.
🛠️ Υπηρεσία ΠΡΩΤΑ: Owner → προφίλ υπηρεσίας: κατηγορία + mode (open/session) + (session) διάρκεια + θέσεις/session (ταυτόχρονα άτομα στο 1ωρο) + ωράριο (νέος service_hours, ανά weekday 1=Δευ..7=Κυρ) + χρώμα ✅
🎟️ Εγγραφές = πακέτα ΑΝΑ υπηρεσία: μέσα στο προφίλ υπηρεσίας → enrollment_plans (εβδομάδες/τιμή/frequency)· δεν υπάρχει πια ξεχωριστό μενού «Εγγραφές». Bar πακέτου = LEVEL από αριθμό μελών (0-5=Lv1, 5-10=Lv2…) ✅
👥 Μέλη υπηρεσίας: λίστα εγγεγραμμένων μέσα στο προφίλ + manual enroll με αναζήτηση email (POST /business/members) ✅
💳 Αγορά εγγραφής: πελάτης → POST /subscriptions {plan_id} → membership (ισχύς = weeks×7) → μπαίνει αυτόματα στο πελατολόγιο ✅
📅 Κράτηση v3: session → ενεργή membership + έλεγχος ωραρίου-window + θέσεων/session + frequency · open → ελεύθερη είσοδος, ΧΩΡΙΣ slot/κράτηση ✅
🗓️ Ημερολόγιο: μήνας → επιλογή μέρας → session slots + roster (ποιοι είναι μέσα) με avatars → Hunter Profile· popup SL «System notification»· scrollbar στη λίστα μέρας ✅
🟢 Πελατολόγιο: ο πελάτης ΜΕΝΕΙ μετά λήξη/ακύρωση/διαγραφή συνδρομής + badge ● ΕΝΕΡΓΗ / ○ ΑΝΕΝΕΡΓΗ ✅
🎮 UI Solo Leveling: όλο το business panel (Dashboard status window LV/RANK/EXP, Υπηρεσίες gates, Ραντεβού quest log, Hunter Profiles) + admin (Monarch dashboard + TOP GUILDS leaderboard, Guild Registry) ✅
🚚 Μεταφορά: gym.vasis.online → https://mylvlup.gr (ίδιος WHM, νέο cPanel account· DB mylvlup_db4731· W:\ = mylvlup docroot)· backup files+DB μέσω /api/devtool?action=dump ✅
⬜ Go-live που μένει: Google OAuth origin (mylvlup.gr)· cron URL → mylvlup.gr· κλείσιμο dev endpoint· σβήσιμο test data + junk· gym→301· gamification growth rules (πώς μεγαλώνουν stats/EXP/RANK)
🏷️ Setup τύπων: Admin → «Τύποι & Κατηγορίες» → admin ορίζει τύπο σε εταιρεία → εταιρεία διαλέγει κατηγορία + όνομα + booking_type υπηρεσίας ✅
🕐 Ωράριο → slots: εταιρεία ορίζει ωράριο (Προφίλ) → πελάτης βλέπει πραγματικά διαθέσιμα slots (open→close μείον κλεισμένα/capacity) ✅
📅 Κράτηση (4 τύποι): single=ελεύθερο slot · session=θέσεις < capacity · package=ενεργό πακέτο→credit −1 · subscription=ενεργή + εβδ. όριο → confirmed ✅
💳 Αγορά: πελάτης κλείνει package/subscription χωρίς plan → confirm αγοράς → POST /subscriptions → retry κράτηση ✅ (χωρίς payment gateway ακόμα)
🔔 Ειδοποιήσεις: κράτηση → Notifier → in-app (🔔 bell πελάτη + owner) + email (SMTP) + SMS (gateway)· cron → reminders X ώρες πριν ✅
⭐ Reviews: πελάτης αξιολογεί (μετά από επίσκεψη) → ⭐ public profile + business stats ✅
👁 Impersonation: admin → Πελάτες/Επιχειρήσεις → «Προβολή ως» → νέο tab με το panel του target (προσωρινό token· η σύνδεση admin μένει) ✅
📄 Τιμολόγηση: admin/company βάζουν myDATA creds (settings) → κράτηση → 2.1 Τιμολόγιο (ΑΦΜ) ή 11.2 Απόδειξη (ιδιώτης) → διαβίβαση myDATA 🔄 (settings ✅, έκδοση εκκρεμεί)
⬜ Επόμενα: payment gateway (per-business Viva/Stripe/PayPal)· έκδοση/διαβίβαση τιμολογίων· push· gamification UI
📅 AGENDA
Ραντεβού & θέματα προς συζήτηση — αποθηκεύονται στη βάση (meetings + meeting_topics)
🎨 Design / Μακέτα
Τρέχουσα ταυτότητα (live) + προδιαγραφές παράδοσης νέων μακετών
uploads/mainBanner.png. Backup παλιού landing: index-old.html.- ✅ Figma — κορυφαία: Dev Mode/Inspect, copy CSS, export SVG/PNG/WebP, design tokens
- ✔️ Penpot (open-source, παρόμοιο με Figma)
- ✔️ Adobe XD / Sketch (με δυνατότητα export & specs)
- ⚠️ Photoshop/Illustrator → μόνο αν δοθούν layers + exported assets + specs
- ❌ Σκέτο screenshot/flat εικόνα χωρίς specs
Α) Figma (ιδανικό): share link «can view» με Dev Mode ON · κάθε οθόνη = ξεχωριστό Frame με Auto-layout · components/variants για κουμπιά, καρτέλες κ.λπ.
Β) Exported (αν όχι Figma): φάκελος με τα γραφικά (SVG/WebP) + ένα αρχείο specs (χρώματα/fonts/μεγέθη/spacing) — PDF ή PNG με annotations.
| Τύπος | Μορφή | Σημείωση |
|---|---|---|
| Λογότυπα · εικονίδια · illustrations · σχήματα | SVG | vector, optimized, χωρίς raster μέσα — μπαίνει inline (όπως τα διαγράμματα) |
| Φωτογραφίες · raster εικόνες | WebP (+PNG/JPG fallback) | σε @2x (retina), βελτιστοποιημένα |
| Backgrounds · patterns | SVG ή WebP | tileable αν είναι pattern |
| Εικονίδια UI | SVG (ή να πούμε ποιο icon-set) | σταθερό grid (π.χ. 24×24) |
❌ Όχι τεράστια PNG · ❌ όχι κείμενο «μέσα» στην εικόνα (το κείμενο ως κείμενο, για να είναι responsive/μεταφράσιμο).
- Χρώματα: ακριβή HEX/RGBA (+ states)
- Typography: font, weight, size (px/rem), line-height, letter-spacing
- Spacing: paddings/margins/gaps σε px
- Radius & shadows: ακριβείς τιμές
- Breakpoints: mobile ≤768px · tablet · desktop — πώς αλλάζει το layout
- States: default / hover / active / focus / disabled
- Empty / loading / error όπου υπάρχουν
- Frames με όνομα ανά οθόνη:
customer-booking,business-calendarκ.λπ. - Filenames σε kebab-case:
hero-bg.webp,icon-calendar.svg - Χωρίς κενά / ελληνικά / κεφαλαία στα ονόματα αρχείων
- Ένας φάκελος ανά οθόνη/ενότητα
- Γραμματοσειρές: δηλωμένες (Google Fonts ή αρχεία font)
Γραμματοσειρές: Inter (300–600) για κείμενο · Bricolage Grotesque (700–800) για τίτλους. Radius βάσης: 10px · Sidebar: 224px · Theme: dark.
Αν η μακέτα φέρνει νέα γλώσσα χρωμάτων, να παραδοθεί ως πλήρες set tokens (μεταβλητές) για να ενημερωθεί το theme κεντρικά.
- 🥇 Γραφικό/illustration/hero → SVG (μπαίνει inline αμέσως, scalable, χρωματίζεται με τις μεταβλητές)
- 🥈 Ολόκληρη ενότητα/σελίδα → καθαρό HTML/CSS export ή Figma frame που το μεταφράζω σε κώδικα
- 🥉 Μόνο εικόνα μακέτας → την ξαναχτίζω στο χέρι· τότε απαραίτητα τα specs (χρώματα/fonts/μεγέθη/spacing)
- ☐ Figma link με Inspect/Dev Mode (ή assets + specs)
- ☐ SVG για γραφικά · WebP @2x για φωτογραφίες
- ☐ Όλα τα tokens: χρώματα (HEX/RGBA), γραμματοσειρές, μεγέθη, spacing, radius, shadows
- ☐ Responsive: mobile (≤768px) + desktop
- ☐ States: hover / active / focus / disabled + empty / loading / error
- ☐ Γραμματοσειρές δηλωμένες (Google Fonts ή αρχεία)
- ☐ Filenames kebab-case, χωρίς κενά/ελληνικά