Σε δύο σειρές

Μετέφερα το Heartbeat Pharmacy από προγραμματισμένο launch σε Shopify Plus σε Medusa.js. Ο λόγος δεν ήταν το developer experience: ήταν το margin. Το Shopify Plus παίρνει ποσοστό σε κάθε συναλλαγή πάνω από το platform fee. Ένα φαρμακείο που μεγαλώνει, με χιλιάδες χαμηλού περιθωρίου SKUs, δεν μπορεί να συνεχίζει να πληρώνει αυτό το ποσοστό χρόνο με τον χρόνο για λογισμικό που δεν του ανήκει. Το Medusa.js δίνει το ίδιο checkout, το ίδιο admin UI, την ίδια fulfillment ροή, σε ένα stack που η επιχείρηση ελέγχει εξ ολοκλήρου.

Παρακάτω τα πραγματικά δεδομένα της απόφασης και πώς έγινε η μετάβαση.

Το πρόβλημα του Shopify Plus (δεν είναι μόνο η τιμή)

Το Shopify Plus διαφημίζεται ως enterprise-tier headless commerce πλατφόρμα. Για τους περισσότερους retailers σε ΗΠΑ ή ΗΒ είναι λογική επιλογή. Για ένα ελληνικό φαρμακείο συγκεκριμένα, υπάρχουν τρία ζητήματα που μαζεύονται:

  1. Per-transaction fees. Το Plus χρεώνει σταθερό platform fee συν ποσοστό σε κάθε παραγγελία που δεν περνά μέσα από Shopify Payments. Στην Ελλάδα το Shopify Payments δεν είναι διαθέσιμο, οπότε κάθε συναλλαγή πέφτει στο tier «third-party gateway» και πληρώνει το ψηλότερο ποσοστό. Σε χιλιάδες παραγγελίες, αυτό είναι πραγματικό margin που χάνεται σε προμηθευτή.
  2. Καμία native ελληνική ενσωμάτωση. Το ελληνικό ecosystem courier (ACS, BoxNow, Courier Center, ELTA, Geniki) και τα ελληνικά τραπεζικά payment gateways (Piraeus Bank, Alpha Bank) δεν υπάρχουν στο stock Shopify app store. Τα third-party apps που υπάρχουν είναι πληρωμένα, συχνά χωρίς συντήρηση, και σπάνε σε κάθε Shopify version bump.
  3. Κανένα regulatory pharma master-data. Η ελληνική φαρμακευτική ρύθμιση απαιτεί πραγματική σύνδεση με τη regulatory master-data μέσω SOAP. Η Shopify δεν θα κυκλοφορήσει ποτέ first-party ενσωμάτωση γι’ αυτό. Ένα custom Shopify app θα έπρεπε ούτως ή άλλως να χτιστεί και να φιλοξενηθεί χωριστά, ακυρώνοντας το argument του «δεν χρειάζεται να φιλοξενήσουμε τίποτα».

Το πρώτο ζήτημα είναι αυτό που παρατηρούν οι περισσότερες επιχειρήσεις. Το δεύτερο και τρίτο είναι αυτά που σκοτώνουν την πλατφόρμα σε verticals όπως το φαρμακείο.

Τι σου δίνει το Medusa.js

Το Medusa.js είναι ένα open-source, TypeScript-first headless commerce backend. Η αρχιτεκτονική είναι:

  • Node.js + PostgreSQL backend που τρέχεις μόνος σου, με cart, checkout, products, inventory, fulfillment, payments και customer modules υλοποιημένα ως ένα καθαρό δέντρο από services.
  • Next.js storefront starter που μιλά στο backend μέσω typed SDK.
  • React-based admin UI για τη καθημερινή διαχείριση καταλόγου + παραγγελιών.

Το κομμάτι που μετράει: τα δεδομένα σου ανήκουν. Η Postgres βάση είναι δική σου. Ο κατάλογος δικός σου. Η λίστα πελατών δική σου. Δεν υπάρχει ποσοστό ανά συναλλαγή που πηγαίνει κάπου, γιατί δεν υπάρχει πλατφόρμα ανάμεσα σε εσένα και τον payment processor — το payment plugin μιλάει απευθείας με το API της τράπεζας.

Το Medusa 2.x έρχεται με ένα module system που κάνει idiomatic την προσθήκη custom modules για πράγματα που η stock πλατφόρμα δεν καλύπτει. Στο pharmacy build πρόσθεσα πέντε custom modules πάνω από το stock catalog: brands, bundles, wishlist, reviews, και newsletter. Κανένα δεν χρειάστηκε fork του Medusa — απλώς το επεκτείνουν.

Πραγματική υλοποίηση: το stack του Heartbeat Pharmacy

Το πλήρες stack του Heartbeat build είναι:

  • Storefront: Next.js 16 App Router + Medusa SDK 2.14, Meilisearch μέσω InstantSearch, PayPal checkout, Turnstile spam protection.
  • Storefront API (Medusa backend): Medusa 2.14 με PostgreSQL + Redis + Meilisearch, PayPal payment, Resend email με React Email templates, PostHog analytics, την ενσωμάτωση regulatory pharma-data SOAP για master-data lookups.
  • PIM backend: Express 5 + TypeORM + Postgres, ένας embedded MCP server που επιτρέπει σε Claude agents να εμπλουτίζουν περιγραφές προϊόντων μέσω direct tool calls, Anthropic SDK + Google GenAI για AI-augmented enrichment, BullMQ + Redis queues, S3 για assets.
  • PIM admin frontend: React 19 + Vite + TanStack Router/Query/Table/Virtual, πλήρες σετ Radix/shadcn primitives, Tiptap rich-text editor, dnd-kit drag-and-drop, kbar command palette, Recharts dashboards.
  • product-sync Windows Service: Node 22 daemon που συγχρονίζει το on-site SQL Server (stock + παραγγελίες) με το remote Medusa API + Skroutz XML feed κάθε 15 λεπτά, με transactional idempotency, DRY_RUN mode, LockManager, CircuitBreaker και Winston logging.

Όλα τρέχουν σε ένα Coolify-managed VPS για τον dev κύκλο και είναι έτοιμα να scale-άρουν οριζόντια σε managed Postgres + CDN όταν ο όγκος των παραγγελιών το δικαιολογήσει.

Ελληνικές ενσωματώσεις που δεν έχει το stock checkout

Ένα ελληνικό φαρμακείο χρειάζεται όλα τα παρακάτω για να είναι πραγματικό online store. Κανένα δεν έρχεται με το Shopify ή με vanilla Medusa.

Payment gateway Piraeus Bank

Οι ελληνικές τράπεζες παρέχουν τα δικά τους merchant gateways με redirect-and-callback flow συν signed webhook callbacks. Έγραψα ένα Medusa payment plugin που:

  • Ξεκινά την πληρωμή, redirect-άροντας τον πελάτη στη hosted σελίδα της τράπεζας
  • Λαμβάνει το callback μετά το authorization, επικυρώνει την υπογραφή, και ολοκληρώνει την παραγγελία ατομικά
  • Διαχειρίζεται refunds idempotent μέσω του refund endpoint της τράπεζας

Το ίδιο pattern δουλεύει για Alpha Bank, Eurobank ή NBG — γράφεις το plugin μία φορά ανά acquirer, το διανέμεις ως private package.

ACS Courier (και τα άλλα τέσσερα)

Κάθε ελληνικός courier εκθέτει ελαφρώς διαφορετικό API. Οι shipping providers που σύνδεσα είναι ACS, BoxNow, Courier Center, ELTA, και Geniki. Η ενσωμάτωση ACS Courier κυκλοφόρησε ως open-source στο GitHub ως WooCommerce plugin, αφού αρκετά άλλα ελληνικά καταστήματα τη ζήτησαν. Η Medusa version ακολουθεί το ίδιο σχήμα.

Το shipping plugin για κάθε courier διαχειρίζεται: rate quotes στο checkout, label generation κατά το order fulfillment, και tracking-number write-back στην παραγγελία.

Regulatory pharma master-data (SOAP)

Η ελληνική φαρμακευτική ρύθμιση απαιτεί σύνδεση με το εθνικό regulatory master-data API. Παρά τη χρονιά, αυτό είναι ακόμα SOAP API. Η ενσωμάτωση είναι read-only και τραβάει master-data για τον κατάλογο σε προγραμματισμένα intervals, δεν στέλνει τίποτα ευαίσθητο. Η σύνδεση επαληθεύεται με dedicated test scripts σε isolation πριν την παραγωγή.

Skroutz XML feed

Το Skroutz είναι το κυρίαρχο ελληνικό price-comparison marketplace. Η καταχώρηση εκεί απαιτεί αυστηρό XML feed με per-SKU διαθεσιμότητα + τιμή + courier. Παράγω το feed κάθε νύχτα από τον κατάλογο και το σερβίρω από cached endpoint που το Skroutz crawl-άρει.

Πότε ΔΕΝ να επιλέξεις Medusa.js

Το Medusa είναι η σωστή επιλογή για:

  • B2C καταστήματα που έχουν ξεπεράσει τα fees του Shopify
  • B2B πλατφόρμες με quote workflows, εταιρικές ιεραρχίες, και approval flows (Medusa B2B framework)
  • Specialty retailers (φαρμακείο, ιατρικά, οδοντιατρικά εφόδια, ελεγχόμενα αγαθά) όπου απαιτείται industry-specific regulatory integration
  • Καταστήματα που θέλουν να ελέγχουν το checkout και τα catalog data αντί να τα νοικιάζουν

Το Medusa είναι λάθος επιλογή για:

  • Καταστήματα που χρειάζονται απλώς γρήγορο launch με 5 SKUs — το Shopify Basic στήνεται πιο γρήγορα
  • Καταστήματα χωρίς dedicated developer — το Medusa χρειάζεται Node.js engineer για deploy και συντήρηση
  • Operations teams που χρειάζονται no-code marketplace install για κάθε ενσωμάτωση — το ecosystem του Medusa είναι πραγματικό αλλά μικρότερο από του Shopify

Για ένα ελληνικό φαρμακείο με χιλιάδες SKUs και επαναλαμβανόμενες συναλλαγές, η αριθμητική βγαίνει καθαρά υπέρ της κατοχής του stack. Για μια one-person dropshipping επιχείρηση όχι.

Πώς να ξεκινήσεις

Αν είσαι Έλληνας (ή any-non-US) retailer που σκέφτεται τη μετάβαση από Shopify Plus, η σειρά που θα πρότεινα:

  1. Audit-άρισε τα transaction fees σου. Πρόσθεσε το platform percentage στις παραγγελίες της προηγούμενης χρονιάς. Αυτό είναι το ετήσιο budget για να αποκτήσεις το stack.
  2. Λίστα των ενσωματώσεων που πραγματικά χρειάζεσαι. Οι περισσότεροι παραθέτουν κάθε Shopify app που έχουν εγκαταστήσει και υποθέτουν ότι όλα πρέπει να μεταφερθούν. Όχι. Τα περισσότερα είναι vestigial.
  3. Σχεδίασε τη μετάβαση καταλόγου. Το product, image και customer export από το Shopify είναι καλά documented. Side-by-side launch με τη νέα storefront να δείχνει στα exported data του παλιού admin είναι low-risk τρόπος επαλήθευσης.
  4. Επίλεξε Έλληνα developer που το έχει ξανακάνει. Είναι λεπτή δουλειά και το κόστος μιας λάθος επιλογής (signature validation στο bank callback, idempotency στα refunds, locking στο inventory sync) είναι πραγματικό.

Έχω κάνει τη μετάβαση πριν, μαζί με όλες τις ελληνικές ενσωματώσεις που αναφέρονται παραπάνω. Αν το σκέφτεσαι, επικοινώνησε.

Παρόμοια έργα

  • Heartbeat Pharmacy Platform — το πλήρες case study του build παραπάνω
  • Kleidarakos B2B & Papanikolaou Doors — Medusa B2B build για ελληνικό δίκτυο κλειδαράδων, με quote workflows και 3D door configurator
  • pooq.gr WooCommerce plugins — όταν η μετάβαση από WooCommerce δεν είναι η σωστή επιλογή, οι ίδιες ελληνικές ενσωματώσεις ως custom WooCommerce plugins αντί