Μετάβαση στο περιεχόμενο
210 440 8777

Case study, E-commerce, Λιανική

Anastasia Fakli, από παλιό eshop σε pshop.gr: Lighthouse 95+, μηδέν downtime, μηδέν overselling

Μετάβαση της anastasiafakli.com στο pshop.gr: Lighthouse 95+, μηδέν downtime, cookieless analytics, δόσεις Alpha Bank και Klarna, reservation inventory με μηδέν overselling.

Το site του Anastasia Fakli μετά την ανακατασκευή

Ένα eshop δεν πεθαίνει από τη μια μέρα στην άλλη. Γερνάει σιγά σιγά: το κινητό γίνεται λίγο πιο αργό κάθε μήνα, η αναζήτηση δεν βρίσκει αυτό που γράφει ο πελάτης, το checkout ζητάει εγγραφή, και κάπου εκεί μια παραγγελία πουλάει τεμάχιο που δεν υπάρχει. Η anastasiafakli.com είχε φτάσει σε αυτό το σημείο. Τη μεταφέραμε στο pshop.gr, τη δική μας πλατφόρμα για ελληνικά καταστήματα: Lighthouse 95+, μηδέν λεπτά downtime στη μετάβαση, δόσεις Alpha Bank και Klarna στο ταμείο, και ένα σύστημα αποθέματος όπου το overselling είναι μαθηματικά αδύνατο.

  • Lighthouse Performance

    παλαιά95+

  • Downtime κατά τη μετάβαση

    0 λεπτά

  • Pixels ενεργοί

    0TikTok + Meta + GA4

  • CLS (Layout Shift)

    0 (width/height σε όλες τις εικόνες)

  • Overselling

    πιθανό0 (reservation model)

Το πρόβλημα, ένα eshop που είχε γεράσει

Η anastasiafakli.com έτρεχε σε μια παλιά εγκατάσταση που δεν είχε χαλάσει — απλώς είχε σταματήσει να βοηθάει. Κάθε μία από τις παρακάτω τριβές μόνη της είναι ανεκτή. Μαζί, κόστιζαν παραγγελίες κάθε μέρα.

  • Χαμηλό performance score σε κινητό. Και επειδή σχεδόν όλη η κίνηση ενός eshop μόδας είναι κινητό, αυτό χτυπούσε ταυτόχρονα το SEO και το ποσοστό μετατροπής.
  • Cookie banner πριν από κάθε αλληλεπίδραση. Τριβή στην πιο κρίσιμη στιγμή, για ελάχιστο πραγματικό όφελος στα analytics.
  • Κανένα σύγχρονο pixel. Χωρίς Meta ή TikTok pixel και χωρίς Conversion API, το paid social δεν ήταν «ακριβό», ήταν αδύνατο να μετρηθεί.
  • Στατικό checkout. Καμία επιλογή δόσεων ή BNPL, με το abandonment που περιμένεις σε αγορές πάνω από τα εβδομήντα ευρώ.
  • Αναζήτηση που δεν έβρισκε. Οι πελάτες πληκτρολογούσαν Greeklish, η μηχανή έψαχνε ελληνικά, τα αποτελέσματα έβγαιναν μηδέν. Η πιο ακριβή αποτυχία σε ένα eshop είναι ο πελάτης που ήξερε τι ήθελε και δεν το βρήκε.
  • Απόθεμα που μπορούσε να πουληθεί δύο φορές. Δύο πελάτες στο ταμείο ταυτόχρονα, ένα τεμάχιο στην αποθήκη, δύο επιβεβαιωμένες παραγγελίες. Και μετά ένα τηλέφωνο συγγνώμης.

Η λύση, μετάβαση στο pshop.gr χωρίς να το καταλάβει κανείς

Μεταφέραμε ολόκληρο το eshop στο pshop.gr, την πλατφόρμα που χτίζουμε και συντηρούμε εμείς για ελληνικά καταστήματα. Η μετάβαση έγινε με παράλληλη υποδομή: το νέο σύστημα έτρεχε πλήρες και δοκιμασμένο πριν αλλάξει μία εγγραφή DNS. Το cutover κράτησε δευτερόλεπτα, οι παραγγελίες που ήταν σε εξέλιξη ολοκληρώθηκαν στο νέο σύστημα, και κανένας πελάτης δεν είδε σελίδα συντήρησης.

Το κρίσιμο σημείο μιας μετάβασης eshop δεν είναι τα προϊόντα. Είναι το χρήμα σε κίνηση: καλάθια μισοτελειωμένα, πληρωμές που περιμένουν επιβεβαίωση, webhooks που έρχονται δεύτερη φορά. Αυτά σχεδιάστηκαν πρώτα.

Απόθεμα με κρατήσεις, το overselling ως μαθηματικό αδύνατο

Το παλιό σύστημα μείωνε το απόθεμα όταν ολοκληρωνόταν η παραγγελία. Ακούγεται λογικό, και είναι λάθος: ανάμεσα στο «ξεκινώ πληρωμή» και στο «η πληρωμή επιβεβαιώθηκε» μεσολαβούν δεκάδες δευτερόλεπτα, και σε αυτά τα δευτερόλεπτα το τεμάχιο φαίνεται ελεύθερο σε όλους.

Στο pshop.gr το απόθεμα δεσμεύεται τη στιγμή που ο πελάτης μπαίνει στο ταμείο, όχι όταν βγαίνει:

Πώς δεσμεύεται το απόθεμα στο pshop.gr Ο πελάτης πατά πληρωμή και το τεμάχιο δεν έχει πουληθεί ακόμη. Αμέσως δημιουργείται κράτηση, δηλαδή το δεσμευμένο αυξάνεται κατά ένα χωρίς να μειωθεί το απόθεμα. Από εκεί υπάρχουν δύο καταλήξεις: αν η πληρωμή επιβεβαιωθεί, το απόθεμα μειώνεται κατά ένα και η κράτηση κλείνει· αν το καλάθι εγκαταλειφθεί, μετά από είκοσι λεπτά μια προγραμματισμένη εργασία λήγει την κράτηση και το τεμάχιο επιστρέφει στη διάθεση. Σε κάθε στιγμή, το διαθέσιμο που βλέπει ο επόμενος πελάτης ισούται με το απόθεμα μείον το δεσμευμένο. ΚΡΑΤΗΣΗ ΑΠΟΘΕΜΑΤΟΣ, ΒΗΜΑ ΠΡΟΣ ΒΗΜΑ 1 Ο πελάτης πατά «Πληρωμή» το τεμάχιο είναι ακόμη διαθέσιμο για όλους 2 Κράτηση, δεσμευμένο +1 το απόθεμα δεν μειώνεται, σταματά όμως να προσφέρεται ΠΛΗΡΩΜΗ OK απόθεμα −1 δεσμευμένο −1 η παραγγελία γράφεται, το τεμάχιο φεύγει ΛΗΞΗ ΣΕ 20' απόθεμα ±0 δεσμευμένο −1 scheduled command ελευθερώνει το τεμάχιο ΤΙ ΒΛΕΠΕΙ Ο ΕΠΟΜΕΝΟΣ ΠΕΛΑΤΗΣ διαθέσιμο = απόθεμα − δεσμευμένο χωρίς race condition, χωρίς διπλή πώληση

Ο κώδικας που το εγγυάται είναι μικρός, και η ουσία του είναι σε δύο σημεία: το διαθέσιμο δεν διαβάζεται ποτέ σκέτο από το stock, και η κράτηση γράφεται μέσα σε κλείδωμα γραμμής, ώστε δύο ταυτόχρονα checkouts να μπαίνουν στη σειρά αντί να πατάνε το ένα το άλλο.

// app/Services/Inventory.php — το απόθεμα που βλέπει ο πελάτης
public function available(Variant $v): int
{
    // Ποτέ σκέτο stock: αφαιρούμε ό,τι κρατάει κάποιος άλλος αυτή τη στιγμή.
    return $v->stock - $v->reservations()->active()->sum('qty');
}

public function reserve(Variant $v, int $qty, string $cartId): Reservation
{
    return DB::transaction(function () use ($v, $qty, $cartId) {
        // Κλείδωμα γραμμής: δύο ταυτόχρονα checkouts μπαίνουν στη σειρά.
        $v = Variant::lockForUpdate()->findOrFail($v->id);

        abort_if($this->available($v) < $qty, 409, 'Δεν υπάρχει διαθέσιμο');

        return $v->reservations()->create([
            'cart_id'    => $cartId,
            'qty'        => $qty,
            'expires_at' => now()->addMinutes(20), // εγκαταλελειμμένο καλάθι
        ]);
    });
}

Η επιβεβαίωση της πληρωμής μειώνει το stock και κλείνει την κράτηση στην ίδια συναλλαγή, και μια προγραμματισμένη εργασία λήγει τις κρατήσεις που ξεπέρασαν τα είκοσι λεπτά. Όλα αυτά ανά παραλλαγή — μέγεθος και χρώμα, όχι ανά προϊόν, γιατί το «medium μαύρο» δεν είναι το ίδιο απόθεμα με το «large μπεζ».

Αναζήτηση, από «pantofles» στο σωστό ράφι

Η εσωτερική αναζήτηση είναι το πιο υποτιμημένο κανάλι μετατροπής σε eshop: ο επισκέπτης που ψάχνει έχει ήδη αποφασίσει να αγοράσει. Το πρόβλημα στα ελληνικά καταστήματα είναι διαχρονικό — ο μισός κόσμος γράφει Greeklish από συνήθεια ή από ξένο πληκτρολόγιο.

Η διαδρομή ενός Greeklish ερωτήματος Ο πελάτης γράφει pantofles gynaikeies με λατινικούς χαρακτήρες. Το ερώτημα κανονικοποιείται σε πεζά χωρίς τόνους, με ανώτατο όριο δέκα λέξεις ως φράγμα σε ερωτήματα spam. Έπειτα μεταγράφεται στα ελληνικά, δηλαδή pantofles γίνεται παντόφλες και gynaikeies γίνεται γυναικείες. Η αναζήτηση εκτελείται σε τρία περάσματα, ακριβές ταίριασμα, ταίριασμα αρχής λέξης και τέλος περιεχόμενο, και το πρώτο πέρασμα που φέρνει αποτελέσματα κερδίζει. Τα αποτελέσματα κατατάσσονται κατά σχετικότητα, με τον τίτλο να βαραίνει περισσότερο από την κατηγορία και την περιγραφή. Το αποτέλεσμα είναι δώδεκα παντόφλες με την πιο σχετική πρώτη. ΤΙ ΣΥΜΒΑΙΝΕΙ ΣΕ ΕΝΑ ΕΡΩΤΗΜΑ ΤΙ ΓΡΑΦΕΙ Ο ΠΕΛΑΤΗΣ pantofles gynaikeies 1. Κανονικοποίηση πεζά, χωρίς τόνους, το πολύ 10 λέξεις — φράγμα σε ερωτήματα spam 2. Μεταγραφή Greeklish pantofles → παντόφλες gynaikeies → γυναικείες 3. Τρία περάσματα ακριβές → αρχή λέξης → περιεχόμενο το πρώτο που φέρνει αποτέλεσμα κερδίζει 4. Κατάταξη κατά σχετικότητα τίτλος > κατηγορία > περιγραφή, όχι απλό ταίριασμα κειμένου ΑΠΟΤΕΛΕΣΜΑ 12 παντόφλες, η πιο σχετική πρώτη

Η μεταγραφή δεν είναι λεξικό, είναι χάρτης χαρακτήρων — και η μόνη λεπτομέρεια που έχει σημασία είναι η σειρά. Τα δίψηφα πρέπει να δοκιμαστούν πριν από τα μονά, αλλιώς το th γίνεται «τη» αντί για «θ» και το ch γίνεται «χη» αντί για «χ». Το strtr της PHP με πίνακα κάνει ακριβώς αυτό: ταιριάζει πρώτα τα μεγαλύτερα κλειδιά.

// app/Support/Greeklish.php — «pantofles» και «παντόφλες» να είναι το ίδιο
private const MAP = [
    // Δίψηφα πρώτα, το strtr προτιμά πάντα το μεγαλύτερο κλειδί.
    'th' => 'θ', 'ch' => 'χ', 'ps' => 'ψ', 'ks' => 'ξ', 'ou' => 'ου',
    'mp' => 'μπ', 'nt' => 'ντ', 'gk' => 'γκ', 'ts' => 'τσ', 'tz' => 'τζ',
    'a' => 'α', 'v' => 'β', 'g' => 'γ', 'd' => 'δ', 'e' => 'ε',
    'z' => 'ζ', 'i' => 'ι', 'k' => 'κ', 'l' => 'λ', 'm' => 'μ',
    'n' => 'ν', 'o' => 'ο', 'p' => 'π', 'r' => 'ρ', 's' => 'σ',
    't' => 'τ', 'f' => 'φ', 'y' => 'υ', 'w' => 'ω', 'u' => 'ου',
];

public static function variants(string $term): array
{
    // Χωρίς τόνους και σε πεζά: «Παντόφλες» και «παντοφλες» ίδιο ερώτημα.
    $term = self::fold($term);

    // Ψάχνουμε και τα δύο — ο πελάτης μπορεί να έγραψε ήδη ελληνικά.
    return array_values(array_unique([$term, strtr($term, self::MAP)]));
}

Πάνω από αυτό κάθεται η κατάταξη κατά σχετικότητα και μια ασφαλιστική δικλείδα με LIKE για τις περιπτώσεις που τίποτα δεν ταιριάζει ακριβώς, ώστε ο πελάτης να παίρνει πάντα κάτι αντί για μια άδεια σελίδα. Υπάρχει και φωνητική αναζήτηση, σε ελληνικά και αγγλικά, που στο κινητό είναι πιο γρήγορη από το πληκτρολόγιο.

Απόδοση, Lighthouse 95+ χωρίς τερτίπια

Το νέο eshop πιάνει Lighthouse Performance 95+ σε κινητό και σε desktop, και ο λόγος είναι βαρετός: οι εικόνες δεν αφήνονται στην τύχη τους.

Το Image Engine του pshop.gr δουλεύει με μία κίνηση από την πλευρά της Anastasia. Ανεβάζει τη φωτογραφία μία φορά, και η πλατφόρμα παράγει αυτόματα τρία μεγέθη — 1200, 600 και 150 pixel — και τα μετατρέπει σε WebP. Κάθε <img> βγαίνει με width και height ορισμένα, οπότε ο browser κρατάει τον χώρο πριν κατεβεί το αρχείο και το CLS μένει στο μηδέν. Η κύρια εικόνα του brand σερβίρεται με srcset 2x για retina οθόνες.

Πέρα από τις εικόνες: υποστήριξη iOS safe area για το checkout σε iPhone, και σταθερό κουμπί «Προσθήκη στο καλάθι» στις σελίδες προϊόντος, που στο κινητό είναι η διαφορά ανάμεσα στο «θα το ψάξω μετά» και στην παραγγελία.

Analytics χωρίς cookies, με πλήρες attribution

Καταργήσαμε τα παρεμβατικά cookies χωρίς να χάσουμε τη μέτρηση. Το GA4 τροφοδοτείται server-side μέσω Conversion API, οπότε τα δεδομένα φτάνουν ολόκληρα ανεξάρτητα από ad blockers. Το Meta Pixel και το TikTok Pixel είναι plug-and-play: ο πελάτης βάζει το ID στο dashboard και τελείωσε. Το feed για Google Shopping και Merchant Center παράγεται αυτόματα σε XML και ενημερώνεται σε κάθε αλλαγή τιμής ή αποθέματος, το ίδιο και το feed για Skroutz. Και επειδή το attribution είναι προϋπόθεση, όχι πολυτέλεια, υπάρχει έτοιμο affiliate tracking και δυναμικές διαφημίσεις προϊόντων.

Το ουσιαστικό όφελος δεν είναι τεχνικό. Είναι ότι το κατάστημα μπορεί πλέον να διαφημιστεί σοβαρά, γιατί για πρώτη φορά ξέρει τι αποδίδει.

Ταμείο σχεδιασμένο για μετατροπή

Το checkout ξαναχτίστηκε από το μηδέν με ένα μόνο κριτήριο: λιγότερη τριβή. Guest checkout χωρίς υποχρεωτική εγγραφή. Αυτοσυμπλήρωση διεύθυνσης από τρεις χαρακτήρες. Αγορά με ένα κλικ για επαναλαμβανόμενους πελάτες, με αποθηκευμένη κάρτα και γνωστή διεύθυνση. Η πληρωμή γίνεται σε σελίδα Stripe, άρα η συμμόρφωση PCI δεν μας αγγίζει και καμία κάρτα δεν αποθηκεύεται από εμάς. Δίπλα στην κάρτα υπάρχουν δόσεις Alpha Bank για την ελληνική αγορά και Klarna για τη διεθνή. Το συρτάρι του καλαθιού δείχνει μπάρα προόδου προς τη δωρεάν αποστολή, που είναι το πιο ήπιο upsell που υπάρχει.

Και μια λεπτομέρεια που φαίνεται μόνο όταν λείπει: η επεξεργασία των webhook του Stripe είναι idempotent. Το ίδιο callback που έρχεται δύο φορές δεν δημιουργεί δύο παραγγελίες.

Προσβασιμότητα WCAG 2.2, από την αρχή

Η προσβασιμότητα μπήκε ως απαίτηση στον σχεδιασμό, όχι ως διόρθωση στο τέλος. Όλα τα σημεία αφής είναι τουλάχιστον 44×44 pixel (WCAG 2.5.5), κάθε διαδραστικό στοιχείο έχει ορατό focus ring, οι ενημερώσεις του καλαθιού ανακοινώνονται μέσω aria-live, τα drawers και τα modals κρατούν σωστά το focus και κλείνουν με πληκτρολόγιο, και το prefers-reduced-motion τηρείται. Δοκιμάστηκε με VoiceOver και NVDA, όχι μόνο με automated checks.

Το πλευρικό όφελος: ένα eshop που δουλεύει με πληκτρολόγιο και screen reader είναι ένα eshop που δουλεύει και για τους crawlers.

Ό,τι χρειάζεται ένα ώριμο eshop, από την πρώτη μέρα

Πάνω από τον πυρήνα μπήκε το πλήρες πακέτο: wishlist με συρτάρι και μεταφορά στο καλάθι με ένα κλικ, σύγκριση προϊόντων πλάι-πλάι, επιλογέας παραλλαγών με swatches που αλλάζουν την εικόνα, φίλτρα και σελιδοποίηση με AJAX χωρίς reload — μέγεθος, χρώμα, brand, slider τιμής — blog με κατηγορίες και meta για content marketing, δομημένα δεδομένα JSON-LD σε κάθε σελίδα για rich results, sitemaps, OG tags και canonical URLs, και δύο γλώσσες με Spatie translatable.

Στο κομμάτι του marketing, ενεργά από την πρώτη μέρα: μηχανή κουπονιών και δυναμικές εκπτώσεις, δωροκάρτες, πρόγραμμα πόντων πιστότητας, exit intent popups, upsell στο καλάθι, και custom σενάρια παραγγελιών — αυτόματη αναβάθμιση σε premium αποστολή πάνω από ένα ποσό, ή δώρο πάνω από ένα άλλο.

Το κατάστημα από το iPhone

Το admin dashboard σχεδιάστηκε mobile-first και δουλεύει πλήρως από κινητό. Η Anastasia διαχειρίζεται παραγγελίες, προϊόντα, τιμές και απόθεμα από το τηλέφωνό της, όπου κι αν βρίσκεται. Δεν είναι εντυπωσιακό χαρακτηριστικό, είναι πραγματικότητα της δουλειάς: οι παραγγελίες δεν περιμένουν να γυρίσει κανείς σε γραφείο.

Γιατί pshop.gr

Η μετάβαση στο pshop.gr δεν είναι «νέα έκδοση του site». Είναι μετάβαση σε πλατφόρμα που τη συντηρούμε εμείς: οι ενημερώσεις, η απόδοση και η ασφάλεια είναι δική μας δουλειά, όχι δικό σας ραντεβού με έναν developer κάθε φορά που κάτι σπάει. Ο πελάτης παίρνει συνεχείς βελτιώσεις σε απόδοση και λειτουργίες χωρίς επιπλέον χρέωση, υποστήριξη από άνθρωπο και όχι από ουρά αιτημάτων, και όλο το stack της Symbols House of Brands — branding, SEO, AI ops — έτοιμο να ενεργοποιηθεί όταν το χρειαστεί.

Έχετε eshop που χτίστηκε πριν από τρία με πέντε χρόνια; Το μήνυμα είναι το ίδιο που είπαμε και στην Anastasia Fakli: αξίζει να δείτε τι κερδίζετε από τη μετάβαση σε σύγχρονη πλατφόρμα, πριν το κόστος γίνει συνήθεια. Δείτε την υπηρεσία μας κατασκευή eshop ή ζητήστε προσφορά και το συζητάμε με νούμερα.

CASE STUDIES

Άλλα έργα που ίσως σας ενδιαφέρουν

Παρόμοιες υπηρεσίες, ίδια δομή: πρόβλημα, στρατηγική, before/after, μετρήσεις.

Όλα τα case studies →

Παρόμοιο έργο στο μυαλό σας;

Πες μας τι θέλεις να πετύχεις και θα σου στείλουμε σταθερή προσφορά σε 24 ώρες.