E-commerce / Retail (beauty)
GoHair
E-shop με custom theme + Prosvasis Go ERP + Skroutz, BestPrice, Shopflix, Trendyol
Ένα admin, 4 marketplaces, real-time stock από ERP, δικό μας theme
Challenge
Τι έπρεπε να λυθεί
Η επιχείρηση πουλάει σε 4 marketplaces ταυτόχρονα και έπρεπε καθένα να βλέπει σωστό stock. Manual updates κάθε πρωί καθυστερούσαν παραγγελίες, διπλοπωλήσεις γέμιζαν customer service, και η μη συγχρονισμένη τιμολόγηση δημιουργούσε λάθη myDATA. Παράλληλα χρειαζόταν checkout που να μη σπάει όταν ο πελάτης διαλέγει BoxNow locker.
Solution
Τι χτίσαμε
Χτίσαμε δικό μας theme `gohair-theme` v2.0.0 πάνω σε WooCommerce, με custom 3-step checkout (multistep-checkout.css + multistep-checkout.js), custom ERP bridge προς Prosvasis Go που γράφει direct στο SoftOne cloud (go.s1cloud.net) και απογράφει σε myDATA, και product feed generator ανά marketplace. Country mapping 28 EU + TR για σωστό VAT μέσω Prosvasis seira 7075.
Custom Modules
Τι το κάνει διαφορετικό
Custom theme `gohair-theme` v2.0.0
Φτιαγμένο from scratch αντί για page-builder bloat. 13 ACF field groups για admin visibility (General, Header, Footer, Social, Homepage, Features, Product Features, Popups & Bars), custom blocks (fleet-grid, hair-quiz, mega-menu), 3 mu-plugins (admin-http-throttle, wholesale-sync, sales-dashboard), centralized free shipping threshold, FAB position controls, brand mega nav. Πρώην Woodmart αντικαταστάθηκε στο go-live 2026-04-02.
Prosvasis Go ERP bridge με myDATA
Custom plugin που μιλάει στο SoftOne cloud (go.s1cloud.net) μέσω Prosvasis Go. Παραγγελία → API call → άμεση τιμολόγηση + stock decrement + myDATA submission. Receipt series map: 7078 GR receipt, 7075 non-GR (auto-VAT μέσω country mapping 28 EU + TR), 7062 invoices. Bidirectional: stock changes στο ERP propagate πίσω.
Skroutz feed + plugin patches
Custom XML feed generator. Πατσάραμε επίσης το επίσημο Skroutz cart plugin (4 patches: unique email per order, σωστό unit_price/total_price, country από payload αντί hardcoded GR, kept on-hold status). Καλύπτει 7 affected legacy orders.
BestPrice + Shopflix συγχρονισμός
Δύο επιπλέον feeds με διαφορετικά XML schemas και κατηγοριοποιήσεις. Centralized config ώστε να αλλάζει mapping χωρίς redeploy.
Trendyol kickoff (cross-border to Turkey)
Trendyol API integration για τουρκική αγορά. Currency conversion EUR→TRY με daily rates, προσαρμοσμένο shipping, διαφορετικά tax rules.
Custom 3-step checkout με BoxNow handling
Custom checkout template form-checkout.php με .gh-ms-step pattern, locker validation στο step 2. BoxNow gotcha: cloneNode δεν διατηρεί jQuery handlers, οπότε moveBoxNowElements μετακινεί το original button στο cloned step. Mobile sidebar peek bottom-bar.
Sales dashboard mu-plugin (4 channels)
Custom mu-plugin v1.3.0 με admin bar Sales button → modal με revenue breakdown ανά κανάλι (Skroutz, BestPrice, Site, Shopflix), 7 περίοδοι, daily breakdown table, channel bars. Detection μέσω _wc_order_attribution_utm_source + skroutz-dispatched status.
Live από production
Πώς δείχνει στην πράξη
Screenshots από το ζωντανό site. Τιμές, ονόματα πελατών και ευαίσθητα στοιχεία είναι μασκαρισμένα με skeleton blur ώστε να φαίνεται μόνο το functionality.

Mobile
Hero mobile με promo banner και brand strip

Desktop
Hero desktop με sticky search και mega-menu κατηγοριών

Mobile
Category mobile με add-to-cart και brand badges

Desktop
Category desktop με brand/price/availability filters
Tech Stack
Με τι χτίστηκε
Όλο το stack είναι τυποποιημένο. Δεν βασίζεται σε κρυφά παραμετροποιημένα plugins ή proprietary cloud services. Μπορεί να μεταφερθεί ή να συντηρηθεί από οποιαδήποτε ομάδα γνωρίζει το stack.
Σχετικά case studies
FAQ
Συχνές ερωτήσεις
Πώς γίνεται sync με Skroutz, BestPrice, Shopflix και Trendyol ταυτόχρονα χωρίς λάθη stock;
Έχουμε ξεχωριστό custom XML feed generator για κάθε marketplace, καθένας με το δικό του schema και τις δικές του κατηγοριοποιήσεις. Το stock είναι single source of truth από το ERP (Prosvasis Go προς SoftOne cloud), οπότε όταν αλλάζει σε WC, ενημερώνεται κεντρικά και τα 4 feeds διαβάζουν την ίδια τιμή. Έτσι δεν εμφανίζεται sold-out προϊόν σαν διαθέσιμο σε κάποιο marketplace.
Πόσο γρήγορα ενημερώνεται το stock μετά από παραγγελία ή τιμολόγηση;
Παραγγελία στο site → άμεσο API call στο Prosvasis Go → instant invoicing + stock decrement + myDATA submission. Δεν τρέχει cron κάθε ώρα, η ενημέρωση είναι real-time. Έτσι το επόμενο feed read από Skroutz βλέπει σωστό απόθεμα σε λεπτά αντί για ώρες.
Πώς γίνεται σωστή τιμολόγηση myDATA για παραγγελίες εκτός Ελλάδας;
Έχουμε στήσει country mapping 28 EU + Τουρκία, και ο receipt series mapping στέλνει 7078 για ελληνικές αποδείξεις, 7075 για non-GR με auto-VAT calculation, και 7062 για τιμολόγια. Έτσι το myDATA submission γίνεται με σωστό ΦΠΑ ανά χώρα χωρίς manual παρέμβαση από το λογιστήριο.
Γιατί φτιάξατε δικό σας theme αντί για κάποιο ready solution;
Το παλιό theme έβαζε page-builder bloat σε κάθε φόρτωση και έσπαγε σε κάθε plugin update. Το gohair-theme v2.0.0 είναι γραμμένο from scratch με 13 ACF field groups για admin visibility, custom blocks (fleet-grid, hair-quiz, mega-menu) και 3 mu-plugins (admin-http-throttle, wholesale-sync, sales-dashboard). Έτσι η εμπορική ομάδα αλλάζει banner, free shipping threshold ή product features χωρίς να αγγίζει developer, και το stack δε φοβάται να ενημερώσει WordPress core.
Λειτουργεί το checkout αν ο πελάτης διαλέξει BoxNow locker σε mobile;
Ναι. Το custom 3-step checkout έχει BoxNow validation στο step 2 και έχουμε λύσει το γνωστό issue ότι το cloneNode δε διατηρεί τα jQuery handlers του BoxNow widget. Φτιάξαμε moveBoxNowElements function που μετακινεί το original button στο cloned step αντί να το αντιγράφει. Το mobile sidebar peek bottom-bar φροντίζει να βλέπει ο πελάτης το ποσό σε όλη τη διάρκεια.
Πώς βλέπει ο owner revenue per channel χωρίς να μπαίνει σε 4 dashboards;
Φτιάξαμε mu-plugin Sales Dashboard v1.3.0 που προσθέτει button στο WP admin bar, και ανοίγει modal με revenue breakdown ανά κανάλι (Skroutz, BestPrice, Site, Shopflix), 7 περιόδους, daily breakdown table και channel bars. Το detection γίνεται μέσω _wc_order_attribution_utm_source και skroutz-dispatched status, οπότε δε χρειάζεται manual tagging από τον admin.