# MyZenBnB — Roadmap

SaaS λειτουργίας καταλυμάτων · Laravel 13 + Filament 5

Τελευταία ενημέρωση: 26/10/2026  
Επόμενο βήμα: **Βάρδιες & Πρόγραμμα (τύπου 7shifts): πρότυπα βαρδιών και εβδομαδιαίο board**

> Πηγή αλήθειας: `public/dev/roadmap/roadmap.json`. Το ίδιο αρχείο τροφοδοτεί το HTML progress roadmap στο https://manage.myzenbnb.gr/dev/roadmap/ (με κωδικό). Μετά από κάθε αλλαγή: `python3 scripts/roadmap.py`.

## Stack

| Πακέτο | Έκδοση |
|---|---|
| PHP | 8.4 |
| Laravel | 13.x |
| Filament | 5.x |
| Livewire | 4.x |
| spatie/laravel-permission | 7.x (teams) |
| MariaDB | 10.11 |

## Αρχιτεκτονικές αποφάσεις

- **Panels**: `Tatooine` (admin πλατφόρμας, `/tatooine`, μόνο για `TATOOINE_ADMINS`) και `Company` (επιχειρήσεις, `/company`· στον κώδικα panel `backstage`).
- **Tenancy**: tenant = `Business`. Ένας λογαριασμός ανήκει σε **πολλές** επιχειρήσεις (`business_user`: ρόλος εργασίας, ενεργός ανά επιχείρηση) και αλλάζει από τον tenant switcher. Ανοίγει η τελευταία που χρησιμοποίησε.
- **Δικαιώματα**: Spatie με teams (`business_id`): ρόλοι κοινοί, ανάθεση ανά επιχείρηση. Όπως στο MyTabloo, ο ρόλος είναι πρότυπο και τα πραγματικά δικαιώματα είναι direct permissions· κανείς δεν δίνει ό,τι δεν έχει (έλεγχος και στον server).
- **Μέλη**: υπάρχον email → ο λογαριασμός προστίθεται στην επιχείρηση. Όνομα/email λογαριασμού που ανήκει και αλλού τα αλλάζει μόνο ο ίδιος. Η «διαγραφή» αφαιρεί από την επιχείρηση· ο λογαριασμός σβήνεται μόνο αν δεν ανήκει πουθενά αλλού.
- **Καταλύματα** (`Property`) στη θέση των Αιθουσών του MyTabloo· τμήματα και χρήστες συνδέονται με καταλύματα.
- **Εκτός scope**: κρατήσεις, πληρωμές πελατών, channel management. Οι κρατήσεις διαβάζονται μόνο από iCal.
- **Μονάδες & χώροι** (`units`): `kind=unit` κλείνεται και είναι γραμμή του ενιαίου ημερολογίου· οι κρατήσεις και τα iCal feeds θα δείχνουν σε `unit_id` (ένα ή περισσότερα feeds ανά μονάδα, π.χ. Airbnb + Booking). `kind=area`: κοινόχρηστος χώρος για καθαριότητα/βλάβες. `parent_id` (ένα επίπεδο): μονάδα που αποτελείται από άλλες· η διπλοκράτηση ελέγχεται στο `Unit::conflictingUnitIds()`. Νέο κατάλυμα εκτός ξενοδοχείου παίρνει αυτόματα μία μονάδα «ολόκληρο».
- **Τρέχον κατάλυμα**: `App\Support\CurrentProperty`, αποθηκεύεται στο `business_user.current_property_id` (ανά χρήστη και επιχείρηση, null = όλα). Ο διαχειριστής επιλέγει ανάμεσα σε όλα τα ενεργά καταλύματα, οι υπόλοιποι σε όσα τους έχουν ανατεθεί. Φιλτράρει μόνο τις λίστες (όχι το άνοιγμα εγγραφής)· κάθε νέα λίστα με κατάλυμα το εφαρμόζει με `CurrentProperty::apply()` / `applyThrough()`.
- **Ιδιοκτήτες καταλυμάτων** (`property_owners`): επαφή της επιχείρησης, όχι λογαριασμός· ένα κατάλυμα έχει το πολύ έναν ιδιοκτήτη (`properties.property_owner_id`), κενό = της ίδιας της επιχείρησης. Πρόσβαση ιδιοκτήτη (portal / magic link) αργότερα, μαζί με τις αναφορές.
- **Νέα δικαιώματα**: το `PermissionsSeeder` τα δίνει και στους υπάρχοντες διαχειριστές κάθε επιχείρησης (direct permissions), ώστε να μπορούν να τα δώσουν σε άλλους.

## 1. Θεμέλια & υποδομή  ·  🔵 Σε εξέλιξη  ·  10/14  ·  εβδ. 26/10

Εγκατάσταση με τις ίδιες εκδόσεις με το MyTabloo, server, βάση, panels, repository και roadmap.

- [x] Laravel 13 + PHP 8.4 στο manage.myzenbnb.gr (docroot: public/) `Server`
- [x] Βάση MariaDB myzenbnb_app, drivers database για session / cache / queue `Server`
- [x] Filament 5 + Livewire 4 + spatie/laravel-permission 7 `Stack`
- [x] Panels: Tatooine (admin, /tatooine) και Company (επιχειρήσεις, /company) `Stack`
- [x] Locale el / fallback en, ζώνη ώρας Europe/Athens `Stack`
- [x] Nginx vhost (cpnginx) για το subdomain `Server`
- [x] Git repository + ROADMAP.md + HTML progress roadmap `Docs`
- [x] DNS: Cloudflare (proxied), A record manage.myzenbnb.gr → 91.229.23.12 `DNS`
- [ ] SSL: AutoSSL στον server (τώρα self-signed, Cloudflare σε Full) `Server`
- [x] Πρόσβαση push του server στο GitHub repo (token) `Git`
- [x] Email: noreply@myzenbnb.gr μέσω SMTP του server `Server`
- [ ] DNS email: SPF με ip4 του server + DKIM στο Cloudflare `DNS`
- [ ] Cron scheduler + queue worker `Server`
- [ ] Ημερήσια backups βάσης `Server`

## 2. Port από MyTabloo: επιχείρηση, προσωπικό, δικαιώματα  ·  ✅ Ολοκληρώθηκε  ·  14/14

Μεταφορά των κοινών λειτουργιών διαχείρισης επιχείρησης από το MyTabloo, προσαρμοσμένων σε πολλές επιχειρήσεις ανά χρήστη.

- [x] Business ως tenant του Backstage (HasTenants) `Tenancy`
- [x] Πολλές επιχειρήσεις ανά χρήστη + tenant switcher + «Νέα επιχείρηση» `Tenancy`
- [x] Δικαιώματα ανά επιχείρηση (Spatie teams) `Δικαιώματα`
- [x] Πολυγλωσσία el/en, language switcher, SetLocale middleware `i18n`
- [x] Themes / branding ανά επιχείρηση (5 παλέτες) `UI`
- [x] Cascading permissions (Spatie) + direct permissions ανά χρήστη `Δικαιώματα`
- [x] Create / Edit / Delete ανά δικαίωμα σε κάθε resource `Δικαιώματα`
- [x] Χρήστες: πρόσκληση, υπάρχων λογαριασμός, ορισμός κωδικού, password reset, προφίλ `Χρήστες`
- [x] Τμήματα (Departments) και Ρόλοι προσωπικού (Staff Roles) `Προσωπικό`
- [x] Database notifications (καμπανάκι) `UI`
- [x] Tatooine: επιχειρήσεις + ιδιοκτήτης, ειδοποιήσεις πλατφόρμας, ρυθμίσεις `Admin`
- [x] ΑΦΜ με έλεγχο ψηφίου και επαλήθευση ΑΑΔΕ (χρειάζεται κωδικούς AADE στο .env) `Admin`
- [x] Σειρά μενού ($navigationSort ανά 10), όπως στο MyTabloo `UI`
- [x] Tests: πολλές επιχειρήσεις, δικαιώματα, μέλη, όλες οι σελίδες (el/en) `Tests`

## 3. Πολλαπλά καταλύματα  ·  ✅ Ολοκληρώθηκε  ·  7/7

Μία επιχείρηση διαχειρίζεται πολλά καταλύματα (ξενοδοχείο, βίλες, Airbnb) από έναν λογαριασμό.

- [x] Property (κατάλυμα): τύπος, διεύθυνση, GPS, ώρες check-in/out `Model`
- [x] Πρόσβαση χρηστών και τμημάτων ανά κατάλυμα `Δικαιώματα`
- [x] Μονάδες (κλείνονται) και κοινόχρηστοι χώροι ανά κατάλυμα, μαζική προσθήκη δωματίων `Model`
- [x] Συνδυασμοί μονάδων (π.χ. «Ολόκληρη βίλα» = δωμάτια 1–3) για τον έλεγχο διπλοκράτησης `Ημερολόγιο`
- [x] QR token ανά μονάδα, χρώμα και σειρά γραμμής στο ενιαίο ημερολόγιο `Ημερολόγιο`
- [x] Επιλογέας «τρέχον κατάλυμα» στη μπάρα, φίλτρο στις λίστες (χρήστες, τμήματα) και προεπιλογή στις φόρμες `UI`
- [x] Ιδιοκτήτες καταλυμάτων (property managers): επαφή, τιμολόγηση, IBAN, γλώσσα αναφορών, καταλύματα `Model`

## 4. Ημερολόγιο & βάρδιες προσωπικού (τύπου 7shifts)  ·  🔵 Σε εξέλιξη  ·  0/10

Βάση: Shifts / Πρόγραμμα / Αμοιβές / Clock scans του MyTabloo, επεκταμένα σε πλήρες scheduling.

- [ ] Πρότυπα βαρδιών ανά κατάλυμα / τμήμα `Βάρδιες`
- [ ] Εβδομαδιαίο board προγράμματος με drag & drop `Βάρδιες`
- [ ] Διαθεσιμότητα προσωπικού `Βάρδιες`
- [ ] Αιτήματα άδειας με έγκριση `Βάρδιες`
- [ ] Ανοιχτές βάρδιες και ανταλλαγές βαρδιών `Βάρδιες`
- [ ] Δημοσίευση προγράμματος + ειδοποιήσεις `Βάρδιες`
- [ ] Έλεγχοι: επικαλύψεις, υπερωρίες, όρια ωρών `Βάρδιες`
- [ ] Clock in/out (QR / συσκευή) και timesheets `Ώρες`
- [ ] Αμοιβές (pay rates) και κόστος εργασίας ανά κατάλυμα `Ώρες`
- [ ] Διερεύνηση: ψηφιακή κάρτα εργασίας ΕΡΓΑΝΗ `Συμμόρφωση`

## 5. PWA προσωπικού  ·  🟡 Επόμενο  ·  0/5

Η εφαρμογή προσωπικού του MyTabloo ως βάση: χωρίς app store, με push.

- [ ] PWA shell, login, εγκατάσταση στην αρχική οθόνη `PWA`
- [ ] Web push (minishlink/web-push) `PWA`
- [ ] «Τι έχω σήμερα»: βάρδιες και tasks `PWA`
- [ ] Πρωινή σύνοψη ημέρας `PWA`
- [ ] Το πρόγραμμά μου, άδειες, ανταλλαγές από το κινητό `PWA`

## 6. MVP λειτουργίας (Φάση 1 του spec)  ·  🟡 Επόμενο  ·  0/19

Ο βασικός κύκλος: κράτηση → καθαρισμός → αίτημα/βλάβη → επίλυση.

- [ ] Εισαγωγή iCal (Booking, Airbnb, Expedia, VRBO) σε ενιαίο ημερολόγιο `Ημερολόγιο`
- [ ] Ειδοποίηση διπλοκράτησης / επικάλυψης `Ημερολόγιο`
- [ ] Χειροκίνητα blocks: ιδιοκτήτης, συντήρηση, κλειστό `Ημερολόγιο`
- [ ] Σήμανση «αναχώρηση και άφιξη την ίδια μέρα» `Ημερολόγιο`
- [ ] Ακύρωση κράτησης → ακύρωση task + ειδοποίηση `Ημερολόγιο`
- [ ] Αυτόματο task καθαρισμού ανά αναχώρηση `Καθαριότητα`
- [ ] Checklists ανά κατάλυμα με φωτογραφίες αναφοράς `Καθαριότητα`
- [ ] Φωτογραφίες ολοκλήρωσης, χρονοσφραγίδα, προαιρετικό GPS `Καθαριότητα`
- [ ] Ροή: βρώμικο → σε εξέλιξη → καθαρό → επιθεωρήθηκε `Καθαριότητα`
- [ ] Αναφορά ζημιάς και ξεχασμένων αντικειμένων `Καθαριότητα`
- [ ] Εξωτερικοί συνεργάτες με δικούς τους χρήστες `Συνεργάτες`
- [ ] Συνεργάτες χωρίς λογαριασμό: email + magic link `Συνεργάτες`
- [ ] Εσωτερικά μηνύματα σε threads ανά κατάλυμα / task `Επικοινωνία`
- [ ] Βασικά tickets βλαβών `Συντήρηση`
- [ ] QR δωματίου: αιτήματα με ταύτιση τηλεφώνου (τελευταία 6 ψηφία) `QR`
- [ ] Δρομολόγηση κατηγορία → ρόλος / ομάδα / συνεργάτης, escalation, ώρες σιωπής `QR`
- [ ] Rate limiting, «ψευδές αίτημα», GDPR διαγραφή τηλεφώνων `QR`
- [ ] Εκτυπώσιμες κάρτες QR σε PDF `QR`
- [ ] Πιλοτική χρήση σε λίγα καταλύματα `Pilot`

## 7. Property managers (Φάση 2 του spec)  ·  ⚪ Αργότερα  ·  0/8

Πλήρες εργαλείο για property managers.

- [ ] Λινά και αναλώσιμα: αποθέματα, κύκλος πλυντηρίου, λίστα αναπλήρωσης `Αποθήκη`
- [ ] Προληπτική συντήρηση (επαναλαμβανόμενες εργασίες) `Συντήρηση`
- [ ] Μητρώο εξοπλισμού: ιστορικό, εγγυήσεις, εγχειρίδια `Συντήρηση`
- [ ] Κανόνας εισόδου με επιβεβαίωση ιδιοκτήτη `Συντήρηση`
- [ ] Κωδικοί πρόσβασης ορατοί μόνο την ημέρα του task `Πρόσβαση`
- [ ] Έξοδα ανά κατάλυμα `Αναφορές`
- [ ] Αναφορές προς ιδιοκτήτες `Αναφορές`
- [ ] Μηνιαία αναφορά εργασιών συνεργατών `Αναφορές`

## 8. Διαφοροποίηση (Φάση 3 του spec)  ·  ⚪ Αργότερα  ·  0/5

Ελληνική συμμόρφωση και ενσωματώσεις.

- [ ] Ημερολόγια λεγιονέλλας, χλωρίου πισίνας, HACCP, πυρασφάλειας `Συμμόρφωση`
- [ ] Λήξεις αδειών και πιστοποιητικών (ΑΜΑ, ΜΗΤΕ, ασφάλειες) `Συμμόρφωση`
- [ ] Αναφορά επιθεώρησης με ένα κλικ `Συμμόρφωση`
- [ ] Ηλεκτρονικές κλειδαριές: Nuki, TTLock, igloohome `Ενσωματώσεις`
- [ ] Αυτόματη μετάφραση μηνυμάτων και αιτημάτων `Ενσωματώσεις`

## 9. Εμπορική διάθεση  ·  ⚪ Αργότερα  ·  0/7

Από pilot σε προϊόν.

- [ ] Απόφαση ονόματος προϊόντος και μοντέλου τιμολόγησης `Business`
- [ ] Έλεγχος πραγματικού iCal export Airbnb / Booking `Έρευνα`
- [ ] Πακέτα / modules / συνδρομές (μοντέλο του MyTabloo, προσαρμοσμένο) `Billing`
- [ ] Συνεντεύξεις με 5–10 ξενοδόχους / ιδιοκτήτες / εταιρείες καθαρισμού `Έρευνα`
- [ ] Πακέτα, συνδρομές, πληρωμές `Billing`
- [ ] Website myzenbnb.gr `Marketing`
- [ ] APP_ENV=production, monitoring, backups `Server`
