Travel & Transportation
JK Tours
Booking platform 13 οχημάτων με Stripe checkout & dynamic pricing
Από Excel πινακάκια σε self-service booking με 4-layer sync
Challenge
Τι έπρεπε να λυθεί
Ο πελάτης δούλευε με Excel + email για 13 οχήματα στην Αγία Πελαγία. 8 ομάδες χρεώσεων × 2 εποχές (LOW/HIGH), διαφορετικά rates για 5d package και 6+ ημέρες, και υποχρεωτική ασφάλιση που εξαρτιόταν από τον τύπο οχήματος. Κάθε λάθος έκλεινε ή χάλαγε booking.
Solution
Τι χτίσαμε
Χτίσαμε ολοκληρωμένο booking engine πάνω σε WordPress με custom child theme `jk-tours-child` και δικό μας PHP Bridge. Stripe checkout σε branded overlay χωρίς redirect, real-time τιμές με LOW/HIGH και 6+day κανόνες από Excel-driven matrix, ασφάλιση ανά κλάση οχήματος, 489/489 audit checkpoints regression-tested.
Custom Modules
Τι το κάνει διαφορετικό
4-layer sync (events ↔ calendar metadata ↔ ACF ↔ theme)
Custom PHP Bridge v1.14.1 με REST hooks. Αλλαγή σε events αντανακλάται σε calendar metadata, ACF fields του οχήματος, theme display, panel και iOS app, χωρίς manual sync. Single source of truth = events.price.
Excel 8-group LOW/HIGH dynamic pricing
Excel-driven price matrix με 13 οχήματα σε 8 ομάδες × 2 εποχές. Per group: 1day rate, 5d package, 6th-day-and-over rate, full insurance/day. HIGH 15/6-30/9, LOW το υπόλοιπο. Admin updates μέσω wp-cli scripts, system re-syncs ACF + events σε ένα run.
Stripe checkout overlay χωρίς redirect
Branded full-page Stripe overlay εντός site, με Πίσω και Close buttons που κρατάνε το modal state. Cost breakdown dropdown με per_day rates, 5d package, 6+ days extras, ασφάλιση, Spring -20% line, VAT-included note.
Δυναμική ασφάλιση ανά τύπο οχήματος
Αυτόματος υπολογισμός ασφαλιστικής με βάση το group + διάρκεια κράτησης. Βγαίνει ως ξεχωριστή γραμμή στο checkout, με rates που τραβιούνται από το ίδιο group config (single source of truth).
Multi-language (EL/EN) + premium polish
Έξι-step booking modal (Dates, Location, Contact, Review, Payment, Success), τιμοκατάλογος με per-day variance transparency, mobile-first vehicle cards. Stripe overlay σε EL/EN.
Semantic versioning + 489-test audit
Custom child theme jk-tours-child v2.18.2 + premium JS v2.13.1, deployment via SCP + opcache flush. 489-test audit suite τρέχει end-to-end pricing parity (modal, Stripe, panel, iOS app, ασφάλιση), 489/489 pass post-migration.
Live από production
Πώς δείχνει στην πράξη
Screenshots από το ζωντανό site. Τιμές, ονόματα πελατών και ευαίσθητα στοιχεία είναι μασκαρισμένα με skeleton blur ώστε να φαίνεται μόνο το functionality.

Mobile
Hero σε mobile με quick search booking

Desktop
Hero desktop με στοιχεία trust και 4 USPs

Mobile
Fleet card mobile με τύπο, χωρητικότητα, transmission

Desktop
Στόλος desktop με filter chips και 4-column grid

Mobile
Booking modal step 1 σε mobile, επιλογή pickup/return

Desktop
Booking modal step 1 σε desktop με 12 πιθανά σημεία

Mobile
Booking step 2 mobile με date pickers και ώρες

Desktop
Booking step 2 desktop με checkmark σε ολοκληρωμένο στάδιο
Tech Stack
Με τι χτίστηκε
Όλο το stack είναι τυποποιημένο. Δεν βασίζεται σε κρυφά παραμετροποιημένα plugins ή proprietary cloud services. Μπορεί να μεταφερθεί ή να συντηρηθεί από οποιαδήποτε ομάδα γνωρίζει το stack.
Στις παραδόσεις και επιστροφές οχημάτων δεν έχω laptop στο χέρι. Όταν σκάει push για νέα κράτηση, την επιβεβαιώνω σε δύο taps στο Wide Book Admin και φεύγει αυτόματα το confirmation email στον πελάτη. Από laptop δεν θα προλάβαινα.
Χαρούλα Κληρονόμου · JK Tours
Σχετικά case studies
E-commerce / Retail (beauty)
GoHair
E-shop με custom theme + Prosvasis Go ERP + Skroutz, BestPrice, Shopflix, Trendyol
Δες το case studyE-commerce / Φίλτρα νερού (multi-country)
Center Plus S.A. / Olympus Plus
3 ανεξάρτητα WordPress installs σε GR / CY / BG με ERP bridge & custom payment work
Δες το case studyFAQ
Συχνές ερωτήσεις
Πόσο διαρκεί η κατασκευή ενός booking system με Stripe checkout για στόλο οχημάτων;
Το αρχικό build του JK Tours χρειάστηκε 8 εβδομάδες για 13 οχήματα σε 8 ομάδες χρέωσης, με Stripe overlay checkout, LOW/HIGH seasonal pricing και per-vehicle ασφάλιση. Στις 8 εβδομάδες περιλαμβάνεται όλο το pricing matrix, ο 4-layer sync και 489 audit checkpoints. Από εκεί και μετά τρέχει ongoing maintenance όταν αλλάζει στόλος ή τιμές.
Πώς γίνεται sync μεταξύ booking site, panel και iOS app για να μην εμφανίζονται διπλές κρατήσεις;
Στήσαμε δικό μας PHP Bridge v1.14.1 που κρατάει ένα single source of truth (events.price) και μέσω REST hooks κρατάει σε sync τα events, το calendar metadata, τα ACF fields του οχήματος, το theme display, το panel και το iOS app. Όταν αλλάζει τιμή ή διαθεσιμότητα από οποιοδήποτε σημείο, οι υπόλοιπες 5 πηγές ενημερώνονται αυτόματα στο ίδιο write. Δεν υπάρχει manual sync ή cron που να αφήνει παράθυρο για double booking.
Πώς διαχειρίζεται το σύστημα διαφορετικές τιμές για 5ήμερο πακέτο και 6+ ημέρες ενοικίασης;
Κάθε από τις 8 ομάδες οχημάτων έχει configured rates για 1day, 5d package, 6th day and over, και full insurance per day, σε 2 εποχές (LOW και HIGH 15/6 ως 30/9). Όταν ο πελάτης διαλέγει ημερομηνίες, ο calculator εφαρμόζει το σωστό tier αυτόματα και το breakdown φαίνεται στο checkout dropdown με per_day rates, 5d package, extras για 6+ ημέρες, ασφάλιση και VAT-included note. Έτσι αποφεύγεται η λάθος χρέωση που προκύπτει σε Excel-based tariffs.
Είναι το Stripe checkout overlay branded ή κάνει redirect σε εξωτερική σελίδα;
Ο χρήστης δε φεύγει ποτέ από το jk-tours.gr. Το Stripe checkout τρέχει σε branded full-page overlay μέσα στο site, με Πίσω και Close buttons που κρατάνε το modal state ώστε αν φύγει ο πελάτης από το payment step να μη χάσει τις επιλογές του. Το ίδιο overlay δουλεύει σε EL/EN, με transparent cost breakdown για να βλέπει ο πελάτης ακριβώς γιατί πληρώνει το ποσό που πληρώνει.
Πώς ξέρετε ότι δε σπάει η λογική τιμολόγησης μετά από αλλαγές;
Έχουμε φτιάξει 489-test audit suite που τρέχει end-to-end pricing parity σε modal, Stripe, panel και iOS app, για όλα τα οχήματα και τις 2 εποχές, με και χωρίς ασφάλιση. Μετά από κάθε deployment η suite τρέχει και απαιτούμε 489/489 pass πριν θεωρηθεί stable. Έτσι αλλαγή σε ένα group δεν μπορεί να σπάσει σιωπηλά τιμολόγηση σε άλλο.