Full-Stack Project — 2024/2025

Fast
Delivery

Πλήρης πλατφόρμα διαχείρισης παραδόσεων για τοπικές επιχειρήσεις. Web admin panel, store dashboards, driver & customer mobile apps — με real-time order tracking.

GitHub Repo Δες την Αρχιτεκτονική →
4
User Roles
3
Platforms
40+
API Endpoints
13
Order Statuses
01 — Tech Stack

Τεχνολογίες
& Εργαλεία

Modern full-stack architecture με proven technologies για production-ready εφαρμογές.

🟩
Backend
Node.js + Express
RESTful API με MVC pattern, JWT auth, middleware pipeline και modular route structure.
🍃
Database
MongoDB Atlas
NoSQL με Mongoose ODM. Geospatial indexes (2dsphere), compound indexes, denormalization για performance.
⚛️
Frontend Web
React.js
SPA με Context API, React Bootstrap, Recharts για dashboards. PWA support με service worker.
📱
Mobile
React Native (Expo)
Cross-platform mobile apps για Customer & Driver. Expo prebuild για native Android APK builds.
🔌
Real-time
Socket.IO
Bidirectional event-based communication. Room-based architecture για targeted notifications per order/role.
🗺️
Maps & Location
Google Maps API
Geocoding διευθύνσεων, react-native-maps για live driver tracking. GeoJSON για location storage.
🔐
Security
JWT + bcrypt
Role-based access control, token expiry (30d), bcrypt password hashing, email verification flow.
☁️
Hosting
Render
Backend ως Web Service, Frontend ως Static Site. CI/CD μέσω GitHub integration.
02 — Αρχιτεκτονική

System
Architecture

Monorepo με 3 ανεξάρτητα packages: backend, frontend web, και mobile apps. Κοινό API — διαφορετικά clients.

📱
Mobile Apps
  • Customer App
  • Driver App
  • React Native Expo
  • Expo Push Notifications
⚙️
API Server
  • Node.js + Express
  • Socket.IO
  • JWT Auth
  • Controllers / Routes
🌐
Web App
  • Admin Dashboard
  • Store Panel
  • React.js + PWA
  • Recharts Graphs
🍃
MongoDB Atlas
  • 8 Collections
  • Geospatial indexes
  • Mongoose ODM
  • Auto-snapshots
📧
Email Service
  • Brevo (Sendinblue)
  • Resend (fallback)
  • Email Verification
  • Password Reset
🗺️
External APIs
  • Google Maps Geocoding
  • Google Maps Navigation
  • Expo Push Service
  • Firebase Storage
03 — Features

4 Roles,
1 Platform

Κάθε τύπος χρήστη έχει το δικό του tailored interface με ακριβώς αυτά που χρειάζεται.

📊
Real-time Dashboard
Στατιστικά παραγγελιών, εσόδων και drivers σε πραγματικό χρόνο. Recharts για visualizations.
Approval Workflows
Έγκριση/απόρριψη νέων stores και drivers πριν αποκτήσουν πρόσβαση στο σύστημα.
🚗
Driver Assignment
Ανάθεση παραγγελιών σε διαθέσιμους drivers χειροκίνητα ή αυτόματα.
💰
Financial Reports
Μηνιαία έσοδα, delivery fees, έξοδα. Λογιστικά αρχεία 5 ετών.
⚙️
System Settings
Delivery fees, ωράρια λειτουργίας, τύποι καταστημάτων με dynamic emoji icons.
👥
User Management
Διαχείριση stores, drivers, customers. Soft delete για GDPR compliance.
📦
Order Management
Accept/reject παραγγελίες, ορισμός τιμής προϊόντων, ενημέρωση status (preparing / ready).
🔔
Real-time Notifications
Socket.IO push για νέες παραγγελίες. Instant ειδοποίηση χωρίς refresh.
📋
Order History
Πλήρες ιστορικό παραγγελιών με status timeline και χρονοσήμανση.
👤
Profile Management
Διαχείριση επιχειρηματικού προφίλ, ωρών λειτουργίας, περιοχών εξυπηρέτησης.
📍
GPS Order Assignment
Παραγγελίες βάσει τοποθεσίας. Real-time GPS tracking με broadcast στον πελάτη.
🗺️
Turn-by-Turn Navigation
Google Maps navigation για pickup και delivery locations απευθείας από την εφαρμογή.
📡
Live Location Broadcast
Συνεχής αποστολή τοποθεσίας μέσω Socket.IO. Ο πελάτης βλέπει τον driver live στον χάρτη.
💼
Availability Toggle
On/Off για διαθεσιμότητα. Ένας driver = μία παραγγελία τη φορά.
🏪
Browse Stores
Εξερεύνηση τοπικών καταστημάτων με φιλτράρισμα ανά τύπο (φαγητό, φαρμακείο, κ.α.).
📝
Voice & Text Orders
Παραγγελίες με κείμενο ή φωνή (voice recording → Firebase Storage URL).
🗺️
Live Driver Tracking
Real-time χάρτης με τη θέση του driver κατά τη διάρκεια της παράδοσης.
🔔
Push Notifications
Expo push notifications για κάθε αλλαγή status παραγγελίας.
04 — Database Design

MongoDB
Schema Design

8 collections με strategic denormalization, geospatial indexes και Singleton pattern για settings.

orders
Κεντρική collection
orderNumberString (unique)
customerEmbedded
deliveryLocationGeoJSON
storeId→ stores
driverId→ drivers
statusEnum (13)
statusHistoryArray
totalPriceNumber
stores
Επιχειρήσεις
businessNameString
afmString (9 ψηφία)
location2dsphere
storeTypeDynamic
statuspending/approved
isEmailVerifiedBoolean
drivers
Διανομείς
vehicleString
licensePlateString
isOnlineBoolean
currentOrder→ orders
pushTokenExpo token
statuspending/approved
settings
Singleton
key'main' (unique)
defaultDeliveryFeeNumber
storeTypesArray (11)
serviceHoursEnabledBoolean
serviceHoursStartHH:MM
customers
Εγγεγραμμένοι
phone10 ψηφία
locationGeoJSON
isDeletedSoft Delete
pushTokenExpo token
isEmailVerifiedBoolean
monthlyexpenses
Λογιστικά
yearNumber
month1–12
amountNumber
updatedBy→ admins
notesmax 500 chars
05 — Order Lifecycle

13-Step
Order Flow

Κάθε παραγγελία περνά από 13 πιθανά statuses με πλήρες audit trail (statusHistory) και role-based transitions.

📝
pending_store
system
💰
pricing
store
👨‍💼
pending_admin
admin
pending_customer
customer
confirmed
customer
📋
assigned
admin
🚗
accepted_driver
driver
👨‍🍳
preparing
store
🛵
in_delivery
driver
🏁
completed
driver
06 — REST API

40+ Endpoints
Documented

Versioned API (/api/v1) με role-based access control και JWT authentication.

Method Endpoint Περιγραφή Role
POST/auth/loginLogin (όλοι οι ρόλοι)Public
POST/auth/customer/registerΕγγραφή πελάτηPublic
POST/auth/store/registerΕγγραφή καταστήματοςPublic
GET/admin/statsDashboard statisticsAdmin
PUT/admin/stores/:id/approveApprove/reject storeAdmin
PUT/admin/orders/:id/assign-driverΑνάθεση driverAdmin
POST/ordersΔημιουργία παραγγελίαςCustomer
GET/orders/:num/statusΠαρακολούθηση παραγγελίαςPublic
PUT/store/orders/:id/acceptAccept/reject παραγγελίαStore
PUT/store/orders/:id/priceΟρισμός τιμήςStore
PUT/driver/orders/:id/statusΕνημέρωση statusDriver
PUT/driver/availabilityToggle διαθεσιμότηταDriver
07 — Real-time

Socket.IO
Events

Room-based architecture: κάθε user συνδέεται στο δικό του room για targeted, efficient communication.

Client → Server
join
Είσοδος σε room (role:userId)
join_order
Παρακολούθηση συγκεκριμένης παραγγελίας
driver:location_update
GPS coordinates από driver app
Server → Client
driver:location
Live θέση driver → customer map
order:status_updated
Status αλλαγή σε όλους τους participants
new_order
Νέα παραγγελία → store notification