🏛️ Επιχειρήσεις
Guild registry — κάθε νέα εταιρεία αποκτά αυτόματα owner
Πελάτες
Απλοί χρήστες — δεν είναι staff ή owner κάπου
| Χρήστης | Τηλέφωνο | Εταιρείες | Τελ. σύνδεση | Κατάσταση / Ενέργειες |
|---|
Admins
Διαχειριστές της πλατφόρμας
| Χρήστης | Τελ. σύνδεση | Κατάσταση | Ενέργειες |
|---|
Τύποι Επιχειρήσεων & Κατηγορίες Υπηρεσιών
Κάθε επιχείρηση ανήκει σε 1 τύπο. Κάθε τύπος έχει κατηγορίες υπηρεσιών — η επιχείρηση διαλέγει κατηγορία και βάζει δικό της όνομα υπηρεσίας.
CMS / Περιεχόμενο
Κείμενα και εικόνες δημόσιας σελίδας
Ρυθμίσεις
Λογαριασμός, ειδοποιήσεις & τιμολόγηση
🏭 ERP — Κεντρική Διαχείριση
Ενοποιημένη εικόνα όλων των επιχειρήσεων + master κατάλογος & κοινοί προμηθευτές
📋 Πλάνο & 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.
🏢 Business βελτιώσεις (2026-06-20): δημιουργία πελάτη από πελατολόγιο (modal +προαιρετικός κωδικός)· fix staff (owners+προσθήκη)· αφαίρεση περιττού «Ωράριο»· Ιστορικό υπηρεσιών/πακέτων + εγγραφών πελατών· δομημένη διεύθυνση Χώρα→Νομός→Πόλη→Περιοχή (cascading, για Google Maps· migrations +country/+street_number/+area)· fix logo avatar. Νέο πλάνο Mobile App ↓.
- Πελάτης — βρίσκει επιχειρήσεις, κλείνει ραντεβού, συνδρομές
- Επιχείρηση (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
🟣 Φάση ΣΤ Mobile App (Android + iOS) — ⬜ PWA (quick win) · ⬜ Capacitor wrapper (επαναχρήση web) · ⬜ push (FCM/APNs) · ⬜ Android build (Windows) · ⬜ iOS build (cloud macOS — Codemagic) · ⬜ stores. Πλήρες πλάνο → tab «📱 Mobile» & MOBILE_APP_PLAN.md
🟢 Φάση Ζ ERP (Αποθήκη + Παραγγελιοληψία + Πάγια) — ✅ E1 core inventory · ✅ E2 προμηθευτές+αγορές · ✅ E3 POS/πωλήσεις (live) · ✅ E3b e-shop + δημόσια σελίδα /c/{slug} (live) · ✅ E4 πάγια/εξοπλισμός+συντήρηση+QR (live) · ✅ E5 κεντρικό admin ERP (live). ΟΛΟΚΛΗΡΩΜΕΝΟ ✅ Πλήρες πλάνο → tab «📦 ERP» & ERP_PLAN.md
✅ 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).
📱 Mobile App
Πλάνο για native Android & iOS — όλη η ανάπτυξη από Windows (χωρίς Mac). Πλήρες: MOBILE_APP_PLAN.md
MOBILE_APP_PLAN.md.🧩 Frameworks — σύγκριση
• PWA — το web app εγκαθίσταται από browser. ✅ καμία build, 0 fees, ~100% επαναχρήση. Μέτριο native feel. (Φάση 0 — quick win)
• Capacitor ⭐ — τυλίγει το υπάρχον web app σε native + plugins (push/biometrics/κάμερα). iOS μέσω cloud Mac. ~90-95% επαναχρήση. (ΣΥΣΤΑΣΗ)
• React Native + Expo (EAS) — native UI ξαναγραμμένο σε JS· iOS build στο cloud (EAS). Άριστο feel, αλλά ξαναχτίζουμε UI.
• Flutter — νέα γλώσσα (Dart) + νέο UI· iOS μέσω Codemagic. Υψηλό κόστος, ~0% επαναχρήση.
💻 IDE — τι χρειαζόμαστε
• VS Code (δωρεάν) — κύριος editor για όλο τον κώδικα web/Capacitor/JS. Αυτό αρκεί για το 95% της δουλειάς.
• Android Studio (δωρεάν) — υποχρεωτικό· είναι ΚΑΙ το επίσημο IDE για Android ΚΑΙ φέρνει Android SDK + emulator + Gradle (το χρειαζόμαστε για build/τρέξιμο Android στο Windows).
• Xcode (IDE της Apple) — ΔΕΝ το χρειαζόμαστε τοπικά· τρέχει μόνο σε macOS και χρησιμοποιείται «αόρατα» μέσα στο cloud build (Codemagic).
🔧 Υπόλοιπα εργαλεία (Windows VPS)
Node.js LTS (npm) · JDK 17 · Capacitor CLI · Git · (iOS) λογαριασμός Codemagic · δοκιμές iOS μέσω TestFlight.
⚠️ Κρίσιμες παγίδες
• Apple 4.2: απορρίπτει «σκέτο website σε WebView» → πρέπει να βάλουμε πραγματικά native (push, biometric login, ημερολόγιο συσκευής, offline).
• iOS = εξάρτηση από cloud CI (κράτα backup: GitHub Actions macOS) · Privacy Policy υποχρεωτική · Apple review ~1-3 μέρες.
🛠️ Backend (ελάχιστες αλλαγές)
Το ίδιο PHP API — προσθήκη POST /api/devices (push token ανά χρήστη) + FCM/APNs send + CORS για το app. JWT auth υπάρχει ήδη.
🔀 Διάγραμμα ροής build (Windows → stores)
📅 Χρονοδιάγραμμα (part-time)
PWA 1-2 μέρες → Capacitor+push 1-2 βδ → Android release 2-4 μέρες → iOS (cloud) 3-6 μέρες. Σύνολο ~3-5 βδομάδες.
📦 ERP — Αποθήκη + Παραγγελιοληψία + Πάγια
Πλάνο για ERP module (απόθεμα, αγορές/πωλήσεις, εξοπλισμός) + κεντρική admin διαχείριση. Πλήρες: ERP_PLAN.md
🧩 3 είδη «προϊόντος» (πεδίο kind)
• 🛒 Προς πώληση — stock που πουλιέται σε πελάτες (συμπληρώματα, ρούχα, νερά, προϊόντα ομορφιάς) → απόθεμα + POS + τιμή/ΦΠΑ.
• 🧴 Αναλώσιμα χρήσης — stock που καταναλώνει η επιχείρηση (καθαριστικά, χαρτικά, βαφές, πετσέτες) → απόθεμα + ανάλωση + reorder.
• 🏋️ Πάγια / Εξοπλισμός — όργανα/μηχανήματα που χρησιμοποιεί (όργανα γυμναστικής, μηχανήματα) → μητρώο παγίων + συντήρηση + απόσβεση.
📋 Τι περιέχει
• Κατάλογος προϊόντων (sku/barcode/κατηγορία/μονάδα/κόστος/τιμή/ΦΠΑ).
• Αποθήκη & απόθεμα (πολλαπλές αποθήκες· min stock/reorder· απογραφή· alerts χαμηλού).
• Κινήσεις (παραλαβή/πώληση/ανάλωση/διόρθωση/μεταφορά/επιστροφή — πλήρες audit trail).
• Προμηθευτές + Παραγγελίες αγοράς (PO → παραλαβή αυξάνει απόθεμα· auto-reorder).
• Παραγγελιοληψία/POS (πώληση σε πελάτη → μειώνει απόθεμα + απόδειξη myDATA).
• 🏋️ Μητρώο εξοπλισμού (serial/τοποθεσία/εγγύηση/κατάσταση + πρόγραμμα συντήρησης + ειδοποίηση σέρβις + QR scan από κινητό).
• Αναφορές (αξία αποθέματος, χαμηλά, πωλήσεις/περιθώριο, όργανα προς σέρβις, αποσβέσεις).
👑 Κεντρική διαχείριση Admin (όλα τα ERP)
• Master κατάλογος προϊόντων (templates → οι εταιρείες τα υιοθετούν) · κοινοί προμηθευτές · ενοποιημένο απόθεμα/αξία/χαμηλά · group buying (ομαδικές αγορές πολλών gym) · fleet εξοπλισμού όλων · feature gating ανά πλάνο (ERP = pro/add-on).
🗄️ Νέοι πίνακες (multi-tenant με company_id)
erp_categories · erp_products(kind) · erp_warehouses · erp_stock · erp_stock_movements · erp_suppliers · erp_purchase_orders/_items · erp_sales_orders/_items · erp_assets · erp_asset_maintenance · (admin) erp_master_products · erp_global_suppliers
🔀 Διάγραμμα ροής (κύκλος ERP)
📅 Φάσεις
✅ ΟΛΟΚΛΗΡΩΘΗΚΕ ΤΟ ERP (E1→E5, live). E1 inventory · E2 αγορές · E3 POS · E3b e-shop+δημόσια σελίδα · E4 πάγια · E5 admin.
✅ E5 Κεντρικό Admin ERP: νέο menu «🏭 ERP Διαχείριση» — Ενοποιημένα (αξία αποθέματος/πωλήσεις/πάγια όλων + ανά εταιρεία), Master κατάλογος (templates→υιοθέτηση), Κοινοί προμηθευτές, Στόλος εξοπλισμού + Group buying (χαμηλά cross-tenant). Business: «📥 Από κατάλογο»/«📥 Κοινοί» για υιοθέτηση. 14 πίνακες erp_*.
✅ E4 Πάγια/Εξοπλισμός: μητρώο οργάνων (status σε χρήση/σέρβις/αποσυρμένο· serial/τοποθεσία/εγγύηση/αξία) + ιστορικό συντήρησης + ειδοποίηση «πλησιάζει σέρβις» + QR ανά πάγιο (deep-link /business?asset=id — scan ανοίγει την καρτέλα). 12 πίνακες erp_*.
✅ E3b + Δημόσια σελίδα: κάθε επιχείρηση έχει δωρεάν σελίδα προβολής στο /c/{slug} (responsive· ορατή login ή όχι): υπηρεσίες+πακέτα, e-shop (καλάθι→checkout για συνδεδεμένους· channel=eshop), λίγα λόγια, επικοινωνία+χάρτης. Οι παραγγελίες e-shop → στις Πωλήσεις της επιχείρησης (badge 🛒).
✅ E1: Προϊόντα (3 kinds)/Απόθεμα/Κινήσεις. ✅ E2: Προμηθευτές/Παραγγελίες αγοράς+παραλαβή+αναπλήρωση. ✅ E3: Πωλήσεις/POS (πελάτης+γραμμές → −απόθεμα + sale κινήσεις· τρόπος πληρωμής· ακύρωση=επιστροφή· σήμανση myDATA). 10 πίνακες erp_*. myDATA έκδοση = flag (πραγματική μετάδοση deferred στο invoicing module).
💡 Προτάσεις
• Ένας κατάλογος, πεδίο kind (sale/consumable/asset) — 3 συμπεριφορές. • MVP μία αποθήκη αλλά schema για πολλές. • Barcode/QR από την αρχή (συνέργεια Mobile App = κάμερα-scanner). • POS ↔ myDATA (υπάρχει). • ERP = feature του pro (νέα έσοδα). • Admin master κατάλογος = «μυστικό όπλο» + group buying.
📝 Changelog
Τι έχει γίνει μέχρι τώρα — ιστορικό αλλαγών
- 🖥️ Desktop/laptop (≥901px): εμφανίζεται μόνιμο αριστερό sidebar (Αρχική/Ραντεβού/Αναζήτηση/Εγγραφές/Αγορές/Προφίλ + logout), κρύβεται το bottom tab bar, το περιεχόμενο απλώνεται σε πλάτος (max 1680px). Η αρχική γίνεται 2 στήλες: ενέργειες (grid 3 στηλών) αριστερά + δεξιά στήλη «Επόμενο ραντεβού» + «Δημοφιλή κοντά σου» (κάθετα).
- 📱 Tablet/mobile (≤900px): αμετάβλητο — στήλη 620px + bottom tab bar όπως πριν (τα wrappers main/rail είναι
display:contentsώστε η mobile ροή να μένει ίδια). - 🐛 Fix sidebar highlight: το
goto()έκανε active-match μεtextContent.startsWith(έσπαγε λόγω emoji στα nav items) → τώρα μεdata-tab, ώστε να φωτίζεται σωστά το ενεργό μενού στο desktop. - 🖼️ Νέα μακέτα
mockup-customer-desktop.html(toggle Desktop/Tablet/Mobile) — καταχωρήθηκε στο tab «Μακέτες».
- 🎨 Business → Προϊόντα: κατηγορίες με χρώμα, chips φίλτρου (Όλα/ανά κατηγορία με πλήθος/⚠️ Χωρίς κατηγορία), ομαδοποίηση προϊόντων ανά κατηγορία, και inline αλλαγή κατηγορίας από τη λίστα (chip-select, χωρίς άνοιγμα προϊόντος). Νέος modal «🎨 Κατηγορίες» (όνομα + swatches χρωμάτων + διαγραφή).
- 🛒 Customer → δημόσια σελίδα (storefront): το e-shop έχει πλέον chips κατηγοριών (οριζόντιο scroll) + ομαδοποίηση προϊόντων ανά κατηγορία· τα χωρίς-κατηγορία μένουν αγοραστά ως «Άλλα» (το warning bucket κρυφό από πελάτες).
- 🗄️ Migration (additive):
erp_categories +color +sort_order. API: categories GET/POST/PUT += color/sort_order·GET /companies/{slug}+=category_*ανά προϊόν +product_categories(μόνο όσες έχουν ενεργό προϊόν).
- 🔄 Live polling 5s σε customer/business/admin: οι ειδοποιήσεις εμφανίζονται μόνες τους χωρίς refresh (badge + animated toast popup με ήχο· poll επίσης σε focus/visibility).
- 🐛 Root cause #1 — TDZ bug (customer): το
startNotifPoll()καλούνταν στο sync IIFE πριν τιςletδηλώσεις → ReferenceError → τοsetIntervalδεν στηνόταν ποτέ. Fix: δηλώσεις state πριν το IIFE. - 🐛 Root cause #2 — LiteSpeed cache: το HTML app-shell & τα GET API σερβίρονταν cached (stale). Fix στο
.htaccess:.html → no-cache, must-revalidate, APIindex.php → no-store(+ cache-bust_tσε κάθε poll). - 🆕 Admin bell (νέο): 🔔 στο topbar (persistent) + panel + toast. Server triggers:
Notifier::notifyAdmins()→ 👤 νέος χρήστης (email + Google) & 🏢 νέα επιχείρηση (εκτός του admin που τη δημιούργησε). Επόμενα γεγονότα: TBD.
- ➕ Δημιουργία πελάτη από Πελατολόγιο (modal popup): όνομα/email/κινητό + προαιρετικός κωδικός (κενό = ορίζει ο πελάτης μέσω reset). Αν το email υπάρχει → σύνδεση στο πελατολόγιο.
POST /business/clients. - 🐛 Fix Προσωπικό (#2/#3): το staff GET επέστρεφε
data:{data,can_manage}(διπλό nesting)· το frontend διάβαζεr.can_manage/r.data→ κρυβόταν το «+ Προσθήκη» κι έδειχνε «Κανένα μέλος». Ξετύλιγμα 1 επιπέδου → φαίνονται owners + κουμπί. - 🕐 Αφαιρέθηκε το tab «Ωράριο» (company_hours): περιττό — η διαθεσιμότητα ορίζεται από
service_hoursανά υπηρεσία/πακέτο. Σβήστηκε UI +hoursresource. - 📜 Ιστορικό (Υπηρεσίες → toggle Ενεργές|Ιστορικό): υπηρεσίες/πακέτα (από→status) + εγγραφές πελατών (πελάτης, υπηρεσία, πακέτο, valid_from→valid_until, status).
GET /business/history. Fix:subscriptionsδεν έχειservice_id→ join μέσωenrollment_plans. - 📍 Δομημένη διεύθυνση για Google Maps: cascading Χώρα → Νομός → Πόλη → Περιοχή (π.χ. Θεσσαλονίκη → Καλαμαριά) + Τ.Κ./Διεύθυνση/Αριθμός. Migrations (additive):
companies +country +street_number +area. Όλοι οι νομοί ΕΛ + κύριες πόλεις, επαρχίες ΚΥ. - 🐛 Γραφικό fix: το logo avatar του προφίλ «έφευγε» κάτω από την κάρτα (δίπλα στο Save) — abs position μετριόταν από το
.set-panel· αγκυρώθηκε μεtop:112pxπάνω στο cover. - 📱 Νέο πλάνο: Mobile App (Android+iOS από Windows χωρίς Mac) — tab «📱 Mobile» +
MOBILE_APP_PLAN.md. - 📦 Νέο πλάνο: ERP (Αποθήκη + Παραγγελιοληψία + Πάγια/Εξοπλισμός, 3 kinds· κεντρική admin διαχείριση) — tab «📦 ERP» +
ERP_PLAN.md. - ✅ ERP E1 ΥΛΟΠΟΙΗΘΗΚΕ (live): business → «📦 Αποθήκη» — Προϊόντα (3 kinds: 🛒πώληση/🧴ανάλωση/🏋️πάγια· sku/barcode/τιμές/αρχικό απόθεμα) · Απόθεμα (reorder point + 🔴 χαμηλό) · Κινήσεις (παραλαβή/ανάλωση/διόρθωση/επιστροφή → audit). 5 πίνακες
erp_*(additive) + API/business/erp/{categories,products,stock,movements}. - ✅ ERP E2 ΥΛΟΠΟΙΗΘΗΚΕ (live): + tabs Προμηθευτές (CRUD) & Παραγγελίες αγοράς (PO με γραμμές προϊόντων· κατάσταση draft/ordered/received· «Παραλαβή» → +απόθεμα + receipt κινήσεις) + προτάσεις αναπλήρωσης (κάτω από reorder). 3 πίνακες
erp_suppliers/erp_purchase_orders/_items+ API/business/erp/{suppliers,purchases,reorder}. - ✅ ERP E3 ΥΛΟΠΟΙΗΘΗΚΕ (live): + tab 💰 Πωλήσεις (POS) — πώληση σε πελάτη (αναζήτηση πελατολογίου ή περαστικός) με γραμμές προϊόντων (kind=sale, τιμή auto) → −απόθεμα + sale κινήσεις· τρόπος πληρωμής· ακύρωση = επιστροφή αποθέματος· σήμανση myDATA (flag· πραγματική έκδοση deferred). 2 πίνακες
erp_sales_orders/_items(channel pos/eshop έτοιμο για E3b) + API/business/erp/sales. - 🟡 Εκκρεμείς αγορές στις Υπηρεσίες + responsive/calendar fixes: οι εκκρεμείς αγορές φαίνονται ΚΑΙ στο service-detail (κάτω από εγγεγραμμένους· πακέτο/«πάτησε»/ποσό + ✅/✕)· στο Dashboard κουμπί «→ Υπηρεσία». Ημερολόγιο (business+customer) ξεκινά Δευτέρα→Κυριακή (header ήταν Κυριακή-first). Customer responsive hardening (overflow-x:hidden, 1-col grids ≤560px, bottom-sheet modal, search καρτές).
- 💵 Αγορά πακέτου με μετρητά + επιβεβαίωση επιχείρησης: ο πελάτης αγοράζει πακέτο → status=pending (μετρητά, πληρωμή στο χώρο)· η επιχείρηση βλέπει «🟡 Εκκρεμείς αγορές» στο Dashboard → ✅ Επιβεβαίωση (ενεργοποιεί + ξεκινά η ισχύς) / ✕ Απόρριψη. Migration: subscriptions status += pending +payment_method.
PUT /business/members/{id}action confirm/reject. Customer popup: mobile-friendly υπηρεσίες/πακέτα + modal αγοράς.+responsive search. - 🛍️ Customer «Οι αγορές μου» + storefront links: νέα σελίδα στον πελάτη με ιστορικό αγορών προϊόντων (POS + e-shop· channel badge, είδη, σύνολο, link προφίλ). Landing fix: menu παραμένει μετά login· κάρτες →
/c/{slug}. Booking popup += «🌐 Δες το προφίλ».GET /users/purchases. - ✅ ERP E5 — ΚΕΝΤΡΙΚΟ ADMIN ERP (live· ΟΛΟΚΛΗΡΩΘΗΚΕ ΤΟ ERP): νέο admin menu «🏭 ERP Διαχείριση» — Ενοποιημένα (totals + ανά εταιρεία), Master κατάλογος προϊόντων (CRUD templates), Κοινοί προμηθευτές (CRUD global), Στόλος εξοπλισμού όλων + Group buying (χαμηλά αποθέματα cross-tenant). API
/admin/erp/{master,globalsuppliers,overview,fleet,reorder}. Business:GET /business/erp/{master,globalsuppliers}+ κουμπιά «📥 Από κατάλογο»/«📥 Κοινοί» (υιοθέτηση→αντιγραφή στην εταιρεία). 2 global πίνακεςerp_master_products/erp_global_suppliers. Σύνολο 14 πίνακες erp_*. - ✅ ERP E4 ΥΛΟΠΟΙΗΘΗΚΕ (live): + tab 🏋️ Πάγια — μητρώο εξοπλισμού/οργάνων (κατάσταση σε χρήση/σέρβις/αποσυρμένο· serial/τοποθεσία/προμηθευτής/ημ.αγοράς/αξία/εγγύηση/επόμενο σέρβις) + ιστορικό συντήρησης (ημ/τύπος/τεχνικός/κόστος) + banner «🔧 πλησιάζει σέρβις» (≤7 μέρες) + QR ανά πάγιο (deep-link
/business?asset=id→ scan ανοίγει την καρτέλα· QR via api.qrserver.com, αντικαθίσταται με embedded generator αν χρειαστεί). 2 πίνακεςerp_assets/erp_asset_maintenance+ API/business/erp/{assets,maintenance}. - ✅ E3b e-shop + ΔΗΜΟΣΙΑ ΣΕΛΙΔΑ ΠΡΟΒΟΛΗΣ (live): κάθε επιχείρηση έχει δωρεάν responsive σελίδα στο
/c/{slug}(ορατή με/χωρίς login): hero, λίγα λόγια, υπηρεσίες+πακέτα, 🛒 e-shop (καλάθι· checkout για συνδεδεμένους →POST /companies/{slug}/orderchannel=eshop → −απόθεμα + σύνδεση στο πελατολόγιο), επικοινωνία+Google Maps..htaccessrewrite/c/.+ → c/index.html. CompanyController slug profile += products (kind=sale)· χαλάρωσε το is_verified. Business: badge 🛒 e-shop στις Πωλήσεις + κουμπί «Δες τη δημόσια σελίδα μου» στο Προφίλ. Πληρωμή e-shop = κατά την παραλαβή (gateway = spike S3).
- Έφυγε το sidebar + topbar-τίτλος· slim header (logo + switcher + 🔔 + avatar)· centered app column (620px)· bottom tab bar σε όλα τα πλάτη· logout/switcher → Προφίλ.
- Όλες οι σελίδες φιλικές: Search (μεγάλο input + category chips)· Calendar (single-column rounded)· Profile (friendly hero με avatar + LV/Rank).
- «Οι εγγραφές μου»: πρώτα οι συνδρομές (gym-focused κάρτες: avatar+όνομα γυμναστηρίου, κατάσταση, credits/ισχύς, «Κλείσε ραντεβού») → μετά ιστορικό. /subscriptions += company slug/category/city/logo.
- 🏠 Φιλική αρχική πελάτη (dashboard): gamified hero (LV/EXP/RANK), 4 μεγάλα κουμπιά-κάρτες με live badges, «επόμενο ραντεβού», «δημοφιλή κοντά σου», mobile bottom tab bar. Έφυγε το CRM-στυλ. (mockup-first)
- 👤 «Ο λογαριασμός μου»: tab στο business Προφίλ (όνομα/τηλ/κωδικός → PUT /users/profile)· customer & admin το είχαν ήδη. /auth/me += phone.
- 🖼️ Νέο tab «Μακέτες» εδώ: λίστα όλων των mockups + τι είναι το καθένα + link προβολής.
- 🎭 Multi-role: ένας χρήστης = πολλά καπέλα. Πελάτης = baseline για όλους· Επιχείρηση =
company_users· Admin = νέοusers.is_admin(migration). AuthMiddleware gate με is_admin + company_users (όχι single role). - 🚪 Οθόνη
/hubμετά το login: κάρτες 🏠 Πελάτης / 🏢 Εταιρεία / 👑 Admin (auto-forward αν 1 καπέλο)· link «Αλλαγή προβολής» σε κάθε panel. - 👥 Staff tab (business → Προφίλ): owners/managers/staff· owner προσθέτει υπάρχοντα χρήστη, αλλάζει ρόλο, αφαιρεί (≥1 owner). Resource
/business/staff. - 👁 Impersonation chooser (Επιχειρήσεις → 🚪): διάλεξε χρήστη + τι να δεις (🏢 Επιχείρηση / 👑 Admin αν is_admin / 🏠 Πελάτης)· διορθώνει το «admin-owner → άνοιγε /admin». Αν 0 χρήστες → διαχειριστική προβολή.
- 🐛 Fix: λίστα Επιχειρήσεων διπλασίαζε εταιρεία με 2 owners → subquery 1 owner/εταιρεία (+«+N owner»).
- 🎟️ Μοντέλο πακέτων credits/weekly_cap (αντικατέστησε «frequency»):
plan_kindperiod|credits +credits+weekly_cap·subscriptions.credits_left(−1/κράτηση, +1 refund στην ακύρωση). Migration additive· φόρμα: ΕΒΔΟΜΑΔΕΣ+ΤΙΜΗ ίδια, «Συχνότητα»→Τύπος/Credits/Όριο-εβδ. - 📅 Ημερολόγιο: ο company βάζει πελάτη σε κενή θέση session (κλικ «+ Πρόσθεσε πελάτη» → usersearch → POST /business/appointments με capacity+dup check + credit −1). Fix:
duration_min→session_duration,dayδίνειends_at. - 🎨 Γραφικά: SL popup top-line sticky→absolute (δεν πέφτει στον τίτλο)· dropdown
<option>dark σε business+dashboard· impersonation banner («Προβολή ως») σπρώχνει κάτω sidebar+topbar (body.imp) αντί να τα καλύπτει. - 🛠️ Local-first workflow: source of truth = τοπικό git
D:\projects\mylvlup→deploy.ps1(μονόδρομα→W:\). ΠΟΤΕ direct edit στο W:\. Live junk καθαρίστηκε μέσωW:\_junk\. - ⚠️
action=migrateout-of-sync μετά τη μεταφορά → migrations στοχευμένα μέσωaction=sql(DROP deferred).
- ✅ Ξαναζωγραφίστηκαν όλα τα διαγράμματα ροής (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/meeting_topics— AGENDAservice_hours— ωράριο ανά υπηρεσία ·enrollment_plans— πακέτα (plan_kind/credits)- 📦 ERP (14): erp_categories · erp_products(kind) · erp_warehouses · erp_stock · erp_stock_movements · erp_suppliers · erp_purchase_orders/_items · erp_sales_orders(channel)/_items · erp_assets · erp_asset_maintenance · (admin) erp_master_products · erp_global_suppliers
- 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 · staff · history
- business/erp categories · products · stock · movements · suppliers · purchases · reorder · sales · assets · maintenance · master · globalsuppliers
- admin/erp master · globalsuppliers · overview · fleet · reorder
- companies GET /{slug} (+products) · POST /{slug}/order (e-shop)
- users PUT /profile · GET /purchases
Δύο μοντέλα μονετισμού:
• Καθαρή συνδρομή (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, έρευνα). Ξεκινά εδώ.
➕ Νέος πελάτης (business → Πελατολόγιο): κουμπί → modal → POST /business/clients {first_name,email,phone,password?} → δημιουργία λογαριασμού (κενός κωδικός = τυχαίος, ορίζει ο πελάτης) ή σύνδεση υπάρχοντος email → company_users role=customer.
📜 Ιστορικό (business → Υπηρεσίες, toggle): GET /business/history → services (από/status) + plans + enrollments (subscriptions: πελάτης→υπηρεσία→πακέτο, valid_from→valid_until, status). Η υπηρεσία βγαίνει μέσω enrollment_plans.service_id (το subscriptions ΔΕΝ έχει service_id).
📍 Διεύθυνση (business → Προφίλ): cascading Χώρα→Νομός→Πόλη→Περιοχή (client-side dataset) + Τ.Κ./οδός/αριθμός → PUT /business/company. DB: companies +country +area +street_number (postal_code/city/prefecture υπήρχαν). Σκοπός: μελλοντικό Google Maps geocoding.
🕐 Καταργήθηκε το company_hours (UI+API) — διαθεσιμότητα μόνο από service_hours.
📱 Mobile App: πλήρες πλάνο στο tab «Πλάνο & Roadmap» (κάρτα Mobile) + έγγραφο MOBILE_APP_PLAN.md — Capacitor (επαναχρήση web), Android τοπικά στο Windows, iOS μέσω cloud macOS (Codemagic).
📦 ERP (E1→E5) ΟΛΟΚΛΗΡΩΘΗΚΕ + 🌐 Δημόσια σελίδα + 🛍️ Αγορές πελάτη: δες την κάρτα «Ροές ERP & Commerce» ↓ & tab «📦 ERP» + ERP_PLAN.md.
📥 Αγορές (E2): Προμηθευτής → POST /business/erp/purchases (PO γραμμές) → «Παραλαβή» (PUT status=received) → +απόθεμα + receipt κινήσεις. Χαμηλό απόθεμα → erp/reorder → πρόταση νέου PO.
📦 Απόθεμα (E1): erp_products(kind sale/consumable/asset) → erp_stock (ανά αποθήκη) ← κάθε κίνηση erp_stock_movements (audit). Helpers erpDefaultWarehouseId/erpApplyStock.
💰 Πωλήσεις (E3): POS POST /business/erp/sales (channel=pos) −απόθεμα + sale κινήσεις· ακύρωση → return +απόθεμα. myDATA = flag (έκδοση deferred).
🌐 Storefront + E-shop (E3b): /c/{slug} (public, responsive· GET /api/companies/{slug} += products) → καλάθι → POST /api/companies/{slug}/order (auth· channel=eshop) → −απόθεμα + σύνδεση στο πελατολόγιο.
🏋️ Πάγια (E4): erp_assets + erp_asset_maintenance + service-due banner + QR deep-link /business?asset=id.
👑 Admin κεντρικό (E5): /admin/erp/{master,globalsuppliers,overview,fleet,reorder} — ενοποιημένα + master κατάλογος + κοινοί προμηθευτές + group buying. Επιχείρηση: «📥 υιοθέτηση».
🛍️ Πελάτης: GET /users/purchases → «Οι αγορές μου» (POS + e-shop· badge καναλιού, είδη, σύνολο, link προφίλ).
🛠️ Υπηρεσία ΠΡΩΤΑ: 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, χωρίς κενά/ελληνικά
🖼️ Μακέτες
Όλα τα mockups του project — τι είναι το καθένα & link προβολής
mockup-customer-home.htmlmockup-customer-desktop.htmlmockup-mylvlup.htmlmockup-dashboard.htmlmockup-booking.htmlmockup-profile.htmlmockup-customer-profile.html