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

Case study, Sports & Recreation, Αθλητικές εγκαταστάσεις

Kavouri Tennis Club, νέο site σε Symbols CMS με Lighthouse 95+ και live weather widget

Νέο site για το Kavouri Tennis Club σε Symbols CMS με Cloudflare: Lighthouse 95+, φόρτωση κάτω από 300ms, live weather widget με δείκτη «παίξιμα γήπεδα» και cookieless analytics.

Το site του Kavouri Tennis Club μετά την ανακατασκευή

Το Kavouri Tennis Club είναι ιστορικό αθλητικό σωματείο στο Καβούρι Αττικής, με δεκαετίες παρουσίας στο ελληνικό τένις. Το site του όμως απαντούσε σε λάθος ερώτηση: έλεγε ποιο είναι το club, ενώ ο παίκτης που το άνοιγε ήθελε να μάθει αν θα παίξει σήμερα. Χτίσαμε νέο site σε Symbols CMS πάνω από Cloudflare, με Lighthouse 95+, φόρτωση κάτω από 300ms και ένα live weather widget που δίνει καθαρή απάντηση: παίξιμα γήπεδα, οριακά, ή όχι. Χωρίς cookie banner, γιατί δεν υπάρχει ούτε ένα cookie να ζητήσει συγκατάθεση.

  • Lighthouse Performance

    παλαιό site95+

  • Loading time (TTFB + first paint)

    < 300ms

  • Cookies στον browser

    διάφορα0 (cookieless)

  • Cookie consent banner

    ναικαταργήθηκε

  • Live weather widget

    δεν υπήρχεναι, δεδομένα ενημερωμένα ανά 15 λεπτά

Το πρόβλημα, ένα site που είχε σταματήσει στο 2016

Το παλιό site δεν ήταν κακό για την εποχή του. Απλώς η εποχή του είχε περάσει, και τα συμπτώματα ήταν τα κλασικά.

  • Αργή φόρτωση, με Lighthouse σε κινητό στα χαμηλά εξήντα. Για έναν σύλλογο που τον ψάχνουν από το τηλέφωνο, έξω, πριν μπουν στο αυτοκίνητο, αυτό είναι το πρώτο εμπόδιο.
  • Cookie banner στην είσοδο, το τίμημα για analytics που δεν χρησιμοποιούσε κανείς.
  • Καμία δυναμική πληροφορία. Οι παίκτες τηλεφωνούσαν στη ρεσεψιόν για να ρωτήσουν αν παίζονται τα γήπεδα. Η ίδια ερώτηση, δεκάδες φορές την ημέρα, από ανθρώπους που ήθελαν απλώς ένα ναι ή ένα όχι.
  • Στατικό περιεχόμενο χωρίς blog, χωρίς ανακοινώσεις, χωρίς λόγο να επιστρέψει κανείς.
  • Παλιές εικόνες χωρίς WebP και χωρίς responsive μεγέθη, με το layout να αναπηδά σε κάθε φόρτωση.

Η λύση, Symbols CMS πάνω από το Cloudflare edge

Χτίσαμε το νέο site σε Symbols CMS, τη δική μας πλατφόρμα διαχείρισης περιεχομένου, με φιλοξενία σε Cloudflare Pages. Δύο στόχοι, με αυτή τη σειρά: ταχύτητα, και χρήσιμη πληροφορία στον επισκέπτη. Το δεύτερο είναι εκείνο που άλλαξε τη συμπεριφορά του κόσμου.

Ο δείκτης «παίξιμα γήπεδα»

Ένα weather widget που δείχνει θερμοκρασία και υγρασία είναι διακοσμητικό. Ο παίκτης του τένις δεν θέλει μετεωρολογικά δεδομένα, θέλει απόφαση. Οπότε δεν δείξαμε τον καιρό, δείξαμε τι σημαίνει ο καιρός για τα συγκεκριμένα γήπεδα:

Πώς βγαίνει ο δείκτης «παίξιμα γήπεδα» Διαβάζουμε τέσσερα μεγέθη: τη βροχή σε χιλιοστά του τελευταίου διώρου, τις ριπές του ανέμου σε χιλιόμετρα την ώρα, τη θερμοκρασία μαζί με την αίσθηση, και τον δείκτη υπεριώδους. Τα κατώφλια είναι του συλλόγου, προσαρμοσμένα σε χωμάτινα γήπεδα δίπλα στη θάλασσα. Το αποτέλεσμα είναι ένα από τρία: παίξιμα, όταν δεν έχει βρέξει το τελευταίο δίωρο και ο άνεμος είναι κάτω από είκοσι πέντε χιλιόμετρα την ώρα· οριακά, όταν ο άνεμος είναι μεταξύ είκοσι πέντε και σαράντα ή ο δείκτης υπεριώδους είναι οκτώ και πάνω· μη παίξιμα, όταν βρέχει τώρα ή έβρεξε στο τελευταίο δίωρο, ή ο άνεμος ξεπερνά τα σαράντα χιλιόμετρα την ώρα. ΤΙ ΔΙΑΒΑΖΟΥΜΕ ΚΑΙ ΤΙ ΒΓΑΖΟΥΜΕ ΒΡΟΧΗ mm τελευταίου διώρου ΑΝΕΜΟΣ ριπές σε km/h ΘΕΡΜΟΚΡΑΣΙΑ °C και αίσθηση UV INDEX δείκτης 0 έως 11 ΚΑΝΟΝΕΣ ΤΟΥ ΣΥΛΛΟΓΟΥ κατώφλια για χωμάτινα γήπεδα δίπλα στη θάλασσα ΠΑΙΞΙΜΑ χωρίς βροχή το τελευταίο δίωρο, άνεμος κάτω από 25 km/h ΟΡΙΑΚΑ άνεμος 25 έως 40 km/h ή UV 8+, παίζεις, αλλά διάλεξε ώρα ΜΗ ΠΑΙΞΙΜΑ βροχή τώρα ή στο τελευταίο δίωρο, ή άνεμος πάνω από 40 km/h

Δίπλα στον δείκτη υπάρχουν και τα αναλυτικά: τρέχουσες συνθήκες με θερμοκρασία, αίσθηση, υγρασία, πίεση και δείκτη υπεριώδους, η κατεύθυνση και η ένταση του ανέμου — που στο outdoor τένις μετράει περισσότερο από τη θερμοκρασία — και ωριαία πρόβλεψη για τις επόμενες ώρες, ώστε να διαλέξει κανείς πότε θα κατεβεί.

Το αποτέλεσμα ήταν μετρήσιμο εκεί που δεν το περιμέναμε: σημαντική μείωση των τηλεφωνημάτων στη ρεσεψιόν. Οι παίκτες εξυπηρετούνται μόνοι τους, και το προσωπικό κάνει τη δουλειά του.

Γιατί ο ζωντανός καιρός δεν επιβραδύνει τη σελίδα

Το προφανές λάθος σε ένα τέτοιο widget είναι να καλεί το μετεωρολογικό API σε κάθε φόρτωση σελίδας. Τότε η ταχύτητα του site γίνεται όμηρος ενός τρίτου server, και το κόστος του API μεγαλώνει με την επισκεψιμότητα. Η τιμή γράφεται μία φορά στο Cloudflare KV και σερβίρεται από το edge:

// functions/api/weather.ts — ο καιρός του Καβουρίου, μία φορά ανά 15 λεπτά
const TTL = 15 * 60; // δευτερόλεπτα

export const onRequest: PagesFunction<Env> = async ({ env }) => {
  // Πρώτα το edge: αν υπάρχει φρέσκια τιμή, δεν αγγίζουμε καθόλου το API.
  const cached = await env.WEATHER.get('kavouri', 'json');
  if (cached) return Response.json(cached);

  const obs = await fetchObservation(env.METEO_KEY);

  const payload = {
    ...obs,
    playable: playability(obs), // 'ok' | 'marginal' | 'no' — οι κανόνες του συλλόγου
    updatedAt: new Date().toISOString(),
  };

  // Η λήξη είναι δουλειά του KV, όχι δική μας με cron.
  await env.WEATHER.put('kavouri', JSON.stringify(payload), { expirationTtl: TTL });

  return Response.json(payload);
};

Δύο γραμμές κάνουν όλη τη διαφορά. Το get πρώτα, ώστε ο επισκέπτης να παίρνει απάντηση από τον κόμβο που του είναι πιο κοντά. Και το expirationTtl, που σημαίνει ότι κανείς δεν χρειάζεται να θυμάται να καθαρίσει την παλιά τιμή.

Η διαδρομή ενός αιτήματος για τον καιρό Ο επισκέπτης ζητά τη σελίδα και εξυπηρετείται από τον κόμβο του Cloudflare στην Αθήνα. Στη συντριπτική πλειοψηφία των αιτημάτων η τιμή υπάρχει ήδη στο KV, οπότε η απάντηση δίνεται από τον κόμβο σε λιγότερο από τριακόσια χιλιοστά του δευτερολέπτου, χωρίς να βγει το αίτημα προς τα έξω. Όταν έχουν περάσει δεκαπέντε λεπτά και η τιμή έχει λήξει, ένας Worker καλεί το μετεωρολογικό API, γράφει τη νέα τιμή στο KV για τα επόμενα δεκαπέντε λεπτά και απαντά. Συνολικά το API δέχεται περίπου ενενήντα έξι κλήσεις την ημέρα, όχι μία ανά επισκέπτη. ΠΟΥ ΠΑΕΙ ΤΟ ΑΙΤΗΜΑ ΓΙΑ ΤΟΝ ΚΑΙΡΟ Επισκέπτης ανοίγει τη σελίδα από κινητό, συνήθως λίγο πριν κατεβεί CF Κόμβος Cloudflare, Αθήνα κοιτάζει πρώτα το KV KV HIT έτοιμη απάντηση από τον κόμβο, χωρίς να βγει το αίτημα έξω < 300 ms ΜΕΤΑ ΑΠΟ 15' ο Worker καλεί το meteo API γράφει τη νέα τιμή στο KV και απαντά ΤΟ ΑΠΟΤΕΛΕΣΜΑ 96 κλήσεις στο API την ημέρα όχι μία ανά επισκέπτη, ούτε κόστος ούτε αναμονή

Απόδοση, Lighthouse 95+ και φόρτωση κάτω από 300ms

Το νέο site κρατάει σταθερά Lighthouse Performance πάνω από 95, και η αρχική φορτώνει σε λιγότερο από 300ms. Δεν υπάρχει κάποιο τρικ, υπάρχουν πέντε βαρετές αποφάσεις.

Οι σελίδες είναι προ-παραγόμενες και σερβίρονται από το δίκτυο του Cloudflare, δηλαδή από το κοντινότερο data center και όχι από «κάπου στο cloud». Δυναμικά μένουν μόνο εκείνα που πρέπει: ο καιρός και οι ανακοινώσεις. Οι εικόνες περνούν από το Image Engine, που παράγει αυτόματα τρία responsive μεγέθη και WebP, με width και height πάντα ορισμένα ώστε το CLS να μένει στο μηδέν. Το κρίσιμο CSS είναι inline, η JavaScript σπασμένη και φορτώνεται με καθυστέρηση, και οι γραμματοσειρές σερβίρονται με font-display: swap.

Cookieless analytics, και το banner φεύγει

Καταργήσαμε εντελώς το cookie consent banner — όχι κρύβοντάς το, αλλά αφαιρώντας τον λόγο ύπαρξής του. Η μέτρηση επισκεψιμότητας γίνεται μέσω της xolqy.com, της cookieless πλατφόρμας analytics της Symbols House of Brands: μηδέν cookies στον browser του επισκέπτη, καμία συγκατάθεση να ζητηθεί, φιλοξενία δεδομένων στην Ευρώπη, και — το πιο πρακτικό — πλήρης εικόνα της κίνησης αντί για το σαράντα με εξήντα τοις εκατό που χάνεται όταν ο κόσμος πατά «απόρριψη».

Blog και δυναμικό περιεχόμενο

Ένα site που δεν αλλάζει δεν έχει λόγο να το επισκεφθεί κανείς δεύτερη φορά. Το νέο έχει blog με κατηγορίες για τεχνική τένις, νέα διοργανώσεων και ανακοινώσεις του συλλόγου, δυναμικό πρόγραμμα και διαθεσιμότητα γηπέδων, και feed ανακοινώσεων. Είναι έτοιμο για ελληνικά και αγγλικά, που στο Καβούρι δεν είναι πολυτέλεια: η περιοχή έχει σημαντικό κοινό από πρεσβείες και μόνιμους κατοίκους από το εξωτερικό.

SEO, με δομημένα δεδομένα που λένε την αλήθεια

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

// src/pages/index.astro — τι λέμε στη Google για το σωματείο
const schema = {
  '@context': 'https://schema.org',
  '@type': 'SportsClub', // υποκατηγορία του LocalBusiness, δεν χρειάζονται και τα δύο
  name: 'Kavouri Tennis Club',
  sport: 'Tennis',
  url: 'https://kavouritennisclub.gr/',
  address: {
    '@type': 'PostalAddress',
    addressLocality: 'Καβούρι',
    addressRegion: 'Αττική',
    addressCountry: 'GR',
  },
  // Οι ανέσεις είναι ό,τι ρωτάει ο παίκτης, άρα και ό,τι γράφει στην αναζήτηση.
  amenityFeature: [
    { '@type': 'LocationFeatureSpecification', name: 'Γήπεδα με φωτισμό', value: true },
    { '@type': 'LocationFeatureSpecification', name: 'Προπονητές', value: true },
  ],
  openingHoursSpecification: OPENING_HOURS,
};

Το SportsClub είναι υποκατηγορία του LocalBusiness, οπότε δηλώνοντας το ένα παίρνεις και τη σημασία του άλλου — διπλή δήλωση απλώς μπερδεύει τους crawlers. Το amenityFeature απαντά στα ερωτήματα που όντως γράφει ο κόσμος, τύπου «γήπεδα τένις με φωτισμό κοντά μου».

Πάνω από αυτό: sitemaps, OG tags και canonical URLs σε κάθε σελίδα, landing pages για τις γειτονικές περιοχές —Βούλα, Γλυφάδα, Βάρκιζα— στρατηγική περιεχομένου γύρω από long-tail αναζητήσεις για τένις στην Αττική, περιγραφικό alt text σε κάθε εικόνα, και εσωτερική διασύνδεση που στέλνει authority στις σελίδες που φέρνουν εγγραφές: μαθήματα, μέλη, διοργανώσεις.

Σχεδιασμός που ταιριάζει στον σύλλογο

Δεν χρησιμοποιήθηκε template. Το design φτιάχτηκε για το συγκεκριμένο brand: σκούρα, premium αισθητική που τιμά την ιστορικότητα του σωματείου, λεπτή τυπογραφία με άπλετο λευκό χώρο, και το ίδιο το γήπεδο ως βασικό οπτικό στοιχείο — γιατί είναι όμορφο και δεν χρειάζεται stock φωτογραφία. Η αισθητική παραμένει ίδια σε κινητό, tablet και desktop, και όλα είναι συμβατά με WCAG 2.2: σημεία αφής 44×44 pixel, ορατά focus rings, φιλικό σε screen readers.

Τι κερδίζει ένας σύλλογος από τέτοιο stack

Η μετάβαση δεν είναι μόνο ταχύτητα. Είναι μηδέν downtime στο cutover, με την αλλαγή DNS να κρατάει δευτερόλεπτα. Είναι μηδέν πάγια έξοδα σε third-party εργαλεία, γιατί analytics, cookie banner SaaS και CDN έφυγαν από τον προϋπολογισμό. Είναι συντήρηση από άνθρωπο και όχι από ουρά αιτημάτων. Και είναι συνεχείς βελτιώσεις σε απόδοση και λειτουργίες χωρίς επιπλέον χρέωση, γιατί την πλατφόρμα τη συντηρούμε εμείς.

Έχετε αθλητικό σωματείο, σχολή ή τοπική επιχείρηση στα Νότια Προάστια με site που έμεινε στο 2015; Δείτε την υπηρεσία μας κατασκευή ιστοσελίδων ή ζητήστε προσφορά, να δούμε μαζί τι κερδίζετε.

CASE STUDIES

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

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

Όλα τα case studies →

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

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