ΔΩΣΕ ΩΘΗΣΗ ΣΤΗΝ ΕΠΙΧΕΙΡΗΣΗ ΣΟΥ ΞΕΚΙΝΑ ΜΕ ΕΝΑΝ ΔΩΡΕΑΝ ΕΛΕΓΧΟ ΙΣΤΟΣΕΛΙΔΑΣ
ΔΩΣΕ ΩΘΗΣΗΣΤΗΝ ΕΠΙΧΕΙΡΗΣΗ ΣΟΥ
ΞΕΚΙΝΑ ΜΕ ΕΝΑΝ ΔΩΡΕΑΝ ΕΛΕΓΧΟ ΙΣΤΟΣΕΛΙΔΑΣ
// full-stack web developer
Γιάννης Καπέρδας
Σχεδιάζω και αναπτύσσω ιστοσελίδες και web εφαρμογές υψηλών επιδόσεων. Από τη στρατηγική έως την κυκλοφορία.
εργαλεία & λογισμικό
σχεδιασμός · ανάπτυξη · παράδοση
επιλεγμένα έργα: Τα πιο πρόσφατα έργα μου
Μερικά πρόσφατα έργα: το πρόβλημα, η υλοποίηση και το αποτέλεσμα.
Επαναλαμβανόμενες ομαδικές παραγγελίες · 2026
CafeScoop
αποτέλεσμα
Ένα άμεσο κανάλι που βοηθά τις καφετέριες γειτονιάς να μετατρέπουν τα κοντινά γραφεία σε τακτικούς πελάτες, ενώ κάθε γραφείο παραγγέλνει γρήγορα από έναν σύνδεσμο και η καφετέρια λαμβάνει ένα καθαρό δελτίο αντί για χάος μηνυμάτων.
1 σύνδεσμος → 1 δελτίο καφετέριας
λεπτομέρειες έργου
- πρόβλημα
- Οι καφετέριες γειτονιάς χάνουν επαναλαμβανόμενες παραγγελίες γραφείων μέσα σε διάσπαρτα τηλεφωνήματα και μηνύματα WhatsApp: οι ίδιες λεπτομέρειες συλλέγονται καθημερινά, οι προθεσμίες δεν είναι σαφείς και το προσωπικό πρέπει να συνδυάζει χειροκίνητα τις επιλογές όλων.
- υλοποίηση
- Μια δίγλωσση πλατφόρμα επαναλαμβανόμενων παραγγελιών με Next.js 15, TypeScript και Supabase. Ένας διοργανωτής δημιουργεί την ομάδα και το πρόγραμμα, οι συνάδελφοι συμμετέχουν από σύνδεσμο χωρίς υποχρεωτική εγγραφή, η ζωντανή παραγγελία κλειδώνει αυτόματα και η καφετέρια λαμβάνει ένα συγκεντρωτικό δελτίο. Η ροή ολοκληρώνεται με kitchen board, ειδοποιήσεις email, αναφορά εσόδων και Sentry.
- Next.js 15
- TypeScript
- Supabase
- Realtime
- EL / EN
κώδικας: Πρόσφατες πρωτοβουλίες κώδικα
Μοτίβα που χρησιμοποιώ σε πραγματικά έργα. Κάθε ένα λύνει ένα γνώριμο πρόβλημα. Διάλεξε ένα για να το διαβάσεις.
Modal.tsx
Modal dialogs that trap focus and restore it, without pulling in a UI library.
// Problem: accessible modal dialogs that trap focus and restore it on close,
// without pulling in a whole UI library.
import { useEffect, useRef } from "react";
export function Modal({ open, onClose, title, children }: {
open: boolean;
onClose: () => void;
title: string;
children: React.ReactNode;
}) {
const ref = useRef<HTMLDivElement>(null);
useEffect(() => {
if (!open) return;
const previouslyFocused = document.activeElement as HTMLElement | null;
const focusables = ref.current!.querySelectorAll<HTMLElement>(
'a[href], button:not([disabled]), input, [tabindex]:not([tabindex="-1"])',
);
focusables[0]?.focus();
function onKeyDown(e: KeyboardEvent) {
if (e.key === "Escape") return onClose();
if (e.key !== "Tab" || focusables.length === 0) return;
const first = focusables[0];
const last = focusables[focusables.length - 1];
// Wrap focus so Tab never escapes the dialog.
if (e.shiftKey && document.activeElement === first) {
e.preventDefault();
last.focus();
} else if (!e.shiftKey && document.activeElement === last) {
e.preventDefault();
first.focus();
}
}
document.addEventListener("keydown", onKeyDown);
return () => {
document.removeEventListener("keydown", onKeyDown);
previouslyFocused?.focus(); // restore focus to the trigger element
};
}, [open, onClose]);
if (!open) return null;
return (
<div className="overlay" onClick={onClose}>
<div
ref={ref}
role="dialog"
aria-modal="true"
aria-label={title}
onClick={(e) => e.stopPropagation()}
>
{children}
</div>
</div>
);
}σχετικά: Ολοκληρωμένη υλοποίηση
Είμαι ο Γιάννης Καπέρδας, full-stack web developer με πρακτική εμπειρία στην υλοποίηση ιστοσελίδων και web εφαρμογών μέσα από ένα ευρύ φάσμα έργων. Διαθέτω MSc in Business Information Technology Systems από το University of Strathclyde και MSc in IT and Applications από το Πανεπιστήμιο Δυτικής Αττικής.
Με νοιάζουν όσα κάνουν το λογισμικό πραγματικά καλό: γρήγορη φόρτωση, προσβάσιμο markup, τυποποιημένος και συντηρήσιμος κώδικας, και καθαρή επικοινωνία χωρίς περιττή ορολογία.
Τα εργαλεία είναι το μέσο, όχι ο σκοπός. Επιλέγω τα κατάλληλα για κάθε δουλειά και κρατώ τον κώδικα φιλικό για τον επόμενο άνθρωπο που θα τον δουλέψει.
τι κάνω
- Web εφαρμογές και dashboards
- /Ιστοσελίδες marketing και landing pages
- /Επιδόσεις και SEO
- /Από design σε κώδικα
- βάση
- Αθήνα, Ελλάδα · Εξ αποστάσεως
- τεχνολογίες
- TypeScript · React · Next.js
- συνεργασίες
- Startups, agencies και ιδρυτές
// εργαλειοθήκη
- TypeScript
- React
- Next.js
- Node.js
- Tailwind CSS
- PostgreSQL
- REST & GraphQL
- Figma → Code
- Web Vitals
- Vercel / CI
επικοινωνία: Ας συνεργαστούμε
Πες μου λίγα πράγματα για την ιδέα ή το πρόβλημά σου και θα απαντήσω μέσα σε λιγότερο από 24 ώρες.

