Skip to content
L O A D I N G
L O A D I N G
Property Management on a laptop, a tablet and a phone Web Development Property Management — Owner-Run Stays & a Beach Bar in Chalkidiki Bilingual site for owner-run holiday stays and a beach bar in Chalkidiki, with page transitions, an SVG map and optional sound — no third-party scripts. TrailerHome by NIKITAS on a laptop, a tablet and a phone Web Development TrailerHome by NIKITAS — Bilingual Website for a Mobile-Home Manufacturer Bilingual site for a Serres mobile-home manufacturer, with a scroll-drawn elevation and no framework. Gold P monogram behind the headline We elevate your business Prestige, on black Web Development prestigecmn.gr — Bilingual Marketing Agency Website The Greek-first website for an Athens BTL and events agency, built on the brand I designed for them — scroll-scrubbed film, their own event photography, and a casting form. Kerkini Boat on a laptop, a tablet and a phone Web Development Kerkini Boat — Accessible Lake Trips, Stay & Car Rental Bilingual site for wheelchair-accessible boat trips on Lake Kerkini, hand-built with no framework and no third-party requests. Mesogeiako on a laptop, a tablet and a phone Web Development Mesogeiako — Vocational Training Centre & Custom CMS Bilingual training-centre site rebuilt from WordPress as custom PHP, with its own CMS. WaterBaby Serres on a laptop, a tablet and a phone Web Development WaterBaby Serres — Baby & Children's Swimming School Greek-first bilingual site for a baby and children's swimming school, hand-built with no framework. FitRoom Experience homepage: the studio's own photograph behind the headline Training becomes experience Web Development FitRoom Experience — Gym Site & Membership Platform A bilingual site for a gym in Serres and the platform it runs on — bookings, memberships, the class register and a check-in tablet at the door. Gold Couture-P monogram above the PRESTIGE COMMUNICATIONS wordmark on black Graphic Design Prestige Communications — Logo & Brand Mark A bespoke 'Couture P' monogram for an Athens marketing agency, with a chat bubble hidden inside the letterform. Grandpa Beans homepage with a kraft pouch of black beans on a dark backdrop Web Development grandpabeans.gr — Bilingual Black Bean Producer Website A bilingual single-page site for Greece's only commercial black bean producer, built around scroll-driven stop-motion. Kaloni.gr storefront with collection cards and a New Arrivals grid of women's shoes Web Development kaloni.gr — Bilingual Laravel Footwear E-Commerce A Laravel 12 storefront for a Serres footwear brand — product variants, wishlist, multi-gateway payments and a full admin panel. Isometric B monogram in navy, orange and teal above the Bora's New Start wordmark Graphic Design Bora's New Start — Neo-Brutalist Real Estate Logo An isometric 'B' monogram built from solid colour blocks, paired with a bold slab-serif wordmark. Bronze interlocking-triangle emblem and Four Elements Productions wordmark on espresso brown Graphic Design Four Elements Productions — Brand Identity A geometric emblem of interlocking triangles for the four alchemical elements, with a full brand-guidelines deck. savage.design homepage with the wordmark in front of a glowing white ring on black Web Development savage.design — Multilingual Creative Studio Website My studio's flagship site: seven languages, a THREE.js fractal-orb hero and a WebGL lens effect on the portfolio grid. borasnewstart.gr homepage with a property search panel over a living-room photograph Web Development borasnewstart.gr — Trilingual Real Estate Platform Property listings in three languages on pure PHP and MySQL, with advanced filters and a five-level location tree. elato.gr homepage reading 'Grown with Love' over a photograph of a fir plantation Web Development elato.gr — Bilingual Fir Tree Producer Website A bilingual marketing site for a 45-year-old Greek fir tree business, hand-built with PHP and vanilla JS. Dagkos Pastry Shop homepage with the shop name set over a dark display of pastries Web Development dagkos.com — Bilingual Pastry Shop Website A bilingual site for an award-winning pastry shop, with a gallery of 480+ photos and a news system. efantasy.gr design system board showing component, button and icon libraries UX/UI Design efantasy.gr Redesign A redesign of efantasy.gr on a new design system, carried through into frontend development. BoatHelper mobile prototype screens: owner profile, boat listings, offers and task cards UX/UI Design BoatHelper – BoatOwner App Prototype A pixel-perfect mobile prototype linking boat owners with craftsmen for repairs and maintenance. CarSwitch low-fidelity wireframes showing a group dashboard, car lists and a member profile UX/UI Design CarSwitch – Group Car‑Sharing (Phase 1) Clickable low-fidelity wireframes for group car-sharing — accounts, groups, cars and invites. greeksimmers.com hero reading 'Your Flight Starts Here' over an aircraft in cloud UX/UI DesignWeb Development greeksimmers.com — Full-Stack Web Application A flight-simulator booking platform with Stripe payments, a loyalty programme and an admin panel. tisi76.com gallery showing 'Throne of Enlightenment' beside a phone with a second piece Web Development tisi76.com — WordPress Website A clean WordPress build with a custom logo, palette and fonts, plus light scroll motion. Le Visiteur music video with cover art and a cyan waveform on a rust background Audio & Video Visiteur – Original Song An original song with French and English lyrics, written and produced with Katerina Skamaga. Prizely on a laptop, a tablet and a phone Web Development Prizely — Multi-Tenant Gamified Lead-Gen SaaS Multi-tenant gamified lead-gen SaaS with Lucky Wheel and Scratch-to-Win games. kirtsos.gr on a laptop, a tablet and a phone Web Development kirtsos.gr — Surveying Engineer Professional surveying engineering firm with two offices in Central Macedonia. Taverna to Mpelles on a laptop, a tablet and a phone Web Development Taverna to Mpelles — Restaurant Website Bilingual restaurant site with interactive menu, reviews, and photo gallery. Mpampetas & Sons on a laptop, a tablet and a phone Web Development Mpampetas & Sons — Agricultural Services Agricultural services site with equipment showcase and media gallery. ePantry on a laptop, a tablet and a phone Web Development ePantry — A Greek Grocery Shop, Rebuilt from WooCommerce on Laravel Greek grocery shop rebuilt from WooCommerce on Laravel 12, with a price-per-kilo shelf label on every product. MS Serron on a laptop, a tablet and a phone Web Development MS Serron — Non-Profit Association Official site of the Multiple Sclerosis association of Serres. StayKerkini on a laptop, a tablet and a phone Web Development StayKerkini — Guesthouse & Booking Budget guesthouse stay near Lake Kerkini with booking. Dytikes Pinelies on a laptop, a tablet and a phone Web Development Dytikes Pinelies — Cultural Arts Non-Profit Cultural non-profit site with projects and activities. Agroktima Kerkinis on a laptop, a tablet and a phone Web Development Agroktima Kerkinis — Poultry Farm Farm website for Kerkini eggs, products, and story. Babbis Engineering on a laptop, a tablet and a phone Web Development Babbis Engineering — Solar Energy Engineering company presence with services and profile. ReFriz on a laptop, a tablet and a phone Web Development ReFriz — Refrigeration & AC Services Refrigeration & air-conditioning installation, maintenance, repairs. Eclat Beauty on a laptop, a tablet and a phone Web Development Eclat Beauty — Beauty Studio & E-shop Beauty studio and cosmetics e-shop. Ichnilatis on a laptop, a tablet and a phone Web Development Ichnilatis — Eco-Tourism Guesthouse Guesthouse and outdoor activities around Lake Kerkini. The Myth of the Mountain on a laptop, a tablet and a phone Web Development The Myth of the Mountain — Mountain Dairy A fifth-generation family dairy in the mountains of Serres. Poster frame from the video “Warm Bronze. Three Rooms. — Story Towel Rack” Social Media Videos Warm Bronze. Three Rooms. — Story Towel Rack Marble. Travertine. Graphite stone. One towel rack, one finish, three architectures. Poster frame from the video “A Study in Surface” Social Media Videos A Study in Surface Light falls, and the metal decides what to give back. Poster frame from the video “The Art of Manufacture — Chapter 01: CNC Machining” Social Media Videos The Art of Manufacture — Chapter 01: CNC Machining Precision in motion. A closer look at SANCO’s CNC sector, where technology, control and craftsmanship come together to shape components with accuracy and consistency. Poster frame from the video “Lake Kerkini — A Call to Action for Climate Change Awareness” Social Media Videos Lake Kerkini — A Call to Action for Climate Change Awareness A 1:23 landscape film raising awareness of climate change at Lake Kerkini. Poster frame from the video “Experience the Magic of Nature with BLOMWE” Social Media Videos Experience the Magic of Nature with BLOMWE A 15-second vertical spot for BLOMWE. Poster frame from the video “Lean On Us, We Are Stable as Trees” Social Media Videos Lean On Us, We Are Stable as Trees A second 15-second vertical spot for BLOMWE. Poster frame from the video “Welcome to Savage Design” Social Media Videos Welcome to Savage Design A 1:14 vertical introduction to Savage Design. Poster frame from the video “CNC Sector” Social Media Videos CNC Sector Precision in motion. A closer look at SANCO’s CNC sector, where technology, control and craftsmanship come together to shape components with accuracy and consistency. Poster frame from the video “Cosmetic Mirror X3 with LED” Social Media Videos Cosmetic Mirror X3 with LED A 29-second 4:5 product cut of the LED cosmetic mirror. Poster frame from the video “Laser Machine — Social Media Story” Social Media Videos Laser Machine — Social Media Story A 14-second vertical story cut of the laser machine. Poster frame from the video “Hotel Amenities, Refined” Social Media Videos Hotel Amenities, Refined A 27-second vertical cut of SANCO hotel amenities in a luxury suite. Poster frame from the video “Press Machine Story” Social Media Videos Press Machine Story A 13-second vertical story cut of the press machine. Poster frame from the video “Surface Finishes” Social Media Videos Surface Finishes A 37-second 4:5 study of surface finishes. Poster frame from the video “Academia Collection — SANCO Bathroom Accessories in a Luxury City Hotel” Social Media Videos Academia Collection — SANCO Bathroom Accessories in a Luxury City Hotel A quiet study of the ACADEMIA collection by SANCO. Poster frame from the video “SANCO Shelf — Aegean Shower Detail” Social Media Videos SANCO Shelf — Aegean Shower Detail A quiet shower detail, shaped by water, stone, and sea light. Poster frame from the video “SANCO Cosmetic Mirror X3 — A Refined Daily Ritual” Social Media Videos SANCO Cosmetic Mirror X3 — A Refined Daily Ritual A quiet moment of precision. The SANCO Cosmetic Mirror X3 brings clarity, balance, and refined detail into the bathroom ritual. Poster frame from the video “Lithos Toilet Roll Holder — SANCO Story” Social Media Videos Lithos Toilet Roll Holder — SANCO Story A quiet study of geometry, texture, and light. Poster frame from the video “SANCO Open Bin 5LT” Social Media Videos SANCO Open Bin 5LT A pure cylindrical form in bronze mat. Quiet, architectural, and timeless. Poster frame from the video “SANCO Lithos Collection” Social Media Videos SANCO Lithos Collection Clean geometry. Fine detail. A discreet presence designed for architectural clarity. Poster frame from the video “SANCO Waste Bin 3lt — Soft Closing System” Social Media Videos SANCO Waste Bin 3lt — Soft Closing System A quiet gesture of function. Soft movement, warm bronze tones, and the calm rhythm of a luxury hotel suite. Poster frame from the video “SANCO Lithos Collection — Teaser” Social Media Videos SANCO Lithos Collection — Teaser A 17-second vertical teaser for the Lithos collection. Split screen: an AI chat thread in Greek on the left, a live preview of a bakery website on the right Products & Platforms Magic Admin — Conversational Website Management A multi-tenant panel where clients edit their own sites by talking to an AI, with a live preview open beside the conversation. Three-panel game screen: character sheet, Greek narration over a watermill scene, and a location panel Products & Platforms What Do You Do — AI-Narrated RPG A browser role-playing game where an AI narrates the world and a deterministic rule engine owns every dice roll. Menu editor with category and item rows, each name repeated across English, Greek, German and Spanish fields Products & Platforms Paper86 — Restaurant Operations Platform A multi-tenant platform for restaurants and cafés — menus, floor plans, staff and QR self-ordering, multilingual from the schema up.

Explore the work

Property Management on a laptop, a tablet and a phone

Web Development

Property Management

Owner-Run Stays & a Beach Bar in Chalkidiki

Role
Designer & Developer
Timeline
7 days

Property Management is George Douvas's collection of holiday stays in Chalkidiki, in northern Greece: boutique lofts and studios in the cliff-top village of Afytos, beachfront apartments at Vergia and family apartments above Mola Kalyva. He also runs OKKIO, a beach bar on the sand at Vergia. George looks after every address himself, and guests book by talking to him rather than through a booking engine.

The site, in English and Greek, gives each stay its own page with what a guest asks before booking — beds, view, distances, parking, the drive from the airport — and adds a guide to the coasts and a page for OKKIO's day, from morning coffee to sunset. Pages change without a reload, so the music and the sea ambience, once a visitor turns them on, carry on from one page to the next.

The challenge

Stays on three different coasts, a beach bar, and no booking engine: every page had to answer a guest's real questions and end in a conversation with the owner — by phone, WhatsApp or Viber, with no form in between. The site carries motion, music and the sound of the sea, yet it had to load fast on a phone and keep a strict security policy that allows no third-party scripts. Sound on the web is fragile: it must never play unasked, must survive moving between pages, and Safari only unlocks audio inside the very click that asks for it. And it all had to ship in seven days.

What I did

Content lives in JSON, English and Greek side by side, and a dependency-free Python build writes every page together with its structured data, the sitemap and llms.txt, fingerprinting scripts and styles so a change is never served stale. Swup swaps only the main content, so the header and the Web Audio engine persist: sea ambience, a music playlist and interface sounds, each on its own channel. Nothing plays until the visitor answers a quiet sound notice, and the music's position is saved, so even a language switch resumes at the same second. The map is drawn in SVG from coastline data and each stay's coordinates, and Google Maps loads only when someone asks for it. The photographs were graded to a single colour look and kept within strict size budgets, and every page audited with Lighthouse scored 100 for accessibility and SEO.

Gallery

Built with

  • HTML5
  • CSS3
  • Vanilla JS
  • GSAP 3 + ScrollTrigger
  • Lenis
  • Swup
  • Web Audio API
  • SVG
  • Python build
  • JSON-LD
  • Bilingual EN/EL
  • CSP
  • llms.txt
  • Self-hosted fonts
  • SEO
Visit project
TrailerHome by NIKITAS on a laptop, a tablet and a phone

Web Development

TrailerHome by NIKITAS

Bilingual Website for a Mobile-Home Manufacturer

Role
Designer & Developer
Timeline
5 days

NIKITAS COMPANY has built garage equipment and special steel constructions in Provatas, Serres, since 1977, and has exported since 1981. TrailerHome is its line of mobile homes: complete small homes on a steel trailer chassis, with insulated walls and roof, windows, wiring, plumbing, a kitchen and a bathroom, delivered by truck and set in place by crane in Greece or abroad. They come in three lines — Modern, Classic and Nature — or are designed from scratch with the customer. The site has three jobs: show that range clearly, build trust in the factory behind it, and turn interest into a phone call or an email, because there is no shop and no online form.

Greek is the default and English is a complete second edition: the same fourteen pages under the same file names. The home page opens on three short films, one for each line, that dissolve into one another. Then comes the signature: the Modern Line's elevation, traced from a photograph of the real unit, draws itself line by line as you scroll and makes way for that photograph. Each line has its own page with photos, video and construction details, and a comparison table, a five-step process, a filterable gallery of real units and deliveries, a company timeline and an FAQ on sizes, permits and delivery do the rest. The photos and videos were prepared from the client's own archive, and no photo weighs more than 100 KB.

The challenge

The client had strong material but no words for the web: a phone archive of photos and videos, two flyers, a business card and the flyer from their old website. All of it had to be sorted into lines, uses and stages, then written from scratch in two languages. The product also invites easy promises — no permit needed, ready in weeks, a fixed price — that are not always true, so every sentence about permits, sizes, prices and lead times had to be careful without sounding evasive. And the site had to sell without a shop, a price list or a contact form, while staying fast on a weak mobile connection with a dozen videos on board, because people choosing a plot are often standing on it.

What I did

Every page is written once as a source file and built into both languages by a small Python script: shared header, menu and footer, responsive images with their real dimensions, and the business details — phones, address, factory coordinates — kept in one place and written from there into the structured data, the map link, the sitemap and a full-text version for AI assistants. A checker tests links, alt text, heading order, canonicals, hreflang, structured data and the 100 KB image budget before every deploy. Animation runs on GSAP and ScrollTrigger and fails open: if the script never arrives, or the visitor prefers less motion, everything is simply shown. The Content Security Policy allows no inline styles and pins the one inline script by its hash. Accessibility was measured in the browser rather than assumed — 4,954 text nodes across every page at phone and desktop widths, with zero issues — and every product and delivery video comes with a text description of what it shows. On permits, the FAQ gives the honest answer: it depends on use, zoning and connections, so ask a local engineer.

Gallery

Built with

  • HTML5
  • CSS3
  • Vanilla JS
  • GSAP 3 + ScrollTrigger
  • SVG
  • Python build
  • JSON-LD
  • Bilingual EL/EN
  • WCAG 2.2 AA
  • CSP
  • llms.txt
  • Self-hosted fonts
  • SEO
Visit project
Gold P monogram behind the headline We elevate your business Prestige, on black

Web Development

prestigecmn.gr

Bilingual Marketing Agency Website

Role
Designer & Developer
Timeline
Launched September 2026, ongoing

Prestige Communications is a BTL, events and digital marketing agency in Athens, and prestigecmn.gr is its website. It follows on from the brand identity I designed for the agency. The gold P monogram opens the home page as film bound to the scrollbar — it resolves out of a close-up of brushed metal as you scroll down and runs backwards as you scroll up — and it returns on the About page, above a PRESTIGE acrostic whose eight values light from cream to gold over a field of drifting gold dust.

The rest is the agency's own work rather than stock. Three service pages cover BTL marketing, special events and digital marketing; the portfolio holds 24 of their event photographs in four categories, with a lightbox; the client wall shows fifty brands they have worked with, from car makers to fashion houses; and a Become a Partner form lets promoters, hosts and models apply with photographs and a CV, straight into the agency's casting pool.

It is plain PHP 8.5 and MySQL on a custom micro-framework, with no Composer dependencies and no build step. Greek is the primary language, not a translation: the root redirects to Greek, Greek fills any missing English string, and every route declares its Greek and English path once, so the navigation, the language switcher, the hreflang tags and the sitemap all derive from a single table. It went live in September 2026.

The challenge

An agency that sells prestige needed a site that feels expensive — film, particles, gold — without paying for it in speed, accessibility or privacy. Greek had to lead, yet the brand's body face, Poppins, has no Greek at all, and its display face is licensed and cannot be shipped. The real material arrived the way it does in practice: forty-seven logo files named things like images (2).jpg, half of them dark artwork that vanished on a black site, and one SVG that had lost a stroke of its own wordmark. And the casting form collects photographs of people, which makes it the most sensitive thing on the site.

What I did

Everything is served from the agency's own domain — fonts, video, GSAP and Lenis — so the site runs a strict Content Security Policy and makes no third-party requests, which is also what lets its cookie policy say so honestly. The scroll films are encoded with a keyframe every six frames so a seek decodes instantly, and nothing is hidden by CSS and revealed by script: with JavaScript off, or reduced motion on, the page is simply complete. One font token pairs Poppins for Latin with Manrope for Greek, with Noto Serif Display standing in for the licensed display face. A script trims every client logo onto transparency and the site sets each on a light chip, so mixed artwork reads as one wall. Uploaded photographs are rewritten to WebP inside 50 KB and oversized CVs recompressed before anything is stored; the originals are deleted, and the files live outside the web root. When the agency moved its mail to Microsoft 365, both forms moved with it, sending through Microsoft Graph with a permission scoped to a single mailbox.

Gallery

Built with

  • PHP 8.5
  • MySQL
  • Vanilla JavaScript
  • Custom CSS
  • GSAP
  • Lenis
  • FFmpeg
  • Microsoft Graph
  • Multilingual (el/en)
  • JSON-LD / SEO
  • Content Security Policy
  • Accessibility
  • Responsive Design
Visit project
Kerkini Boat on a laptop, a tablet and a phone

Web Development

Kerkini Boat

Accessible Lake Trips, Stay & Car Rental

Role
Designer & Developer
Timeline
2 days

Kerkini Boat is a family business in the village of Kerkini, in Serres: Spyros Sfetkos runs the first boat on the lake built for wheelchair access. The deck is flat, boarding is by a wide ramp at deck level, nobody is lifted out of their chair, and 8 to 10 wheelchairs fit on board together with their companions among 35 seats. Commentary can be given in Greek Sign Language when it is arranged at booking. The same household also lets a self-catering apartment and rents cars, so the site has to introduce three services without burying the one that makes the business unusual.

Greek leads and English follows as two complete sets of files with identical names and structure, not strings swapped by a script — the site is written to be read by search crawlers and AI assistants as much as by people, which is why it ships a hand-written llms.txt beside a generated full-text version of every page. There is no framework and no build step, and nothing is fetched from anyone else: the fonts and the animation library come from the same host, a decision the privacy policy states plainly. Motion is decorative and fails open three separate ways, so a page whose JavaScript never arrives still shows everything it has to say.

The challenge

A site about access cannot be vague about access. The boat is genuinely wheelchair accessible; the apartment, a traditional village house, is not — and saying that plainly, on the same site, without undermining the business, was the hardest call in the copy. Three services also compete for one front page, each arriving from a different search: a trip on the water, a place to sleep, a car. Bookings are taken by phone and WhatsApp only, with no email address and no form, so every page had to make the next step obvious without the usual contact funnel. And the audience is split between Greek visitors and international birdwatchers, photographers and disability groups, so neither language could be the afterthought a JavaScript toggle produces.

What I did

Greek and English ship as two complete sets of pages with the same filenames and the same structure, each carrying its own canonical, hreflang and structured data, so both read correctly with JavaScript switched off. Header, drawer and footer are generated into all 22 pages from shared partials, and a checker validates links, assets, alt text, heading order, canonicals, structured data and a 150 KB budget per image before anything ships — there is no CI, so the gates run from the command line. Accessibility was measured rather than assumed: 3,055 text nodes across all 22 pages at two widths, zero contrast failures, and no horizontal scrolling between 320 and 1920 pixels. The accessibility statement lists what the boat offers and says plainly that the apartment is not fully accessible; the capacity and the sign-language commentary live in the structured data; and fonts and scripts are self-hosted, so no visitor is handed to a third party.

Gallery

Built with

  • HTML5
  • CSS3
  • Vanilla JS
  • GSAP 3
  • JSON-LD
  • Bilingual EL/EN
  • WCAG 2.2 AA
  • llms.txt
  • Self-hosted fonts
  • SEO
Visit project
Mesogeiako on a laptop, a tablet and a phone

Web Development

Mesogeiako

Vocational Training Centre & Custom CMS

Role
Designer & Full-Stack Developer
Timeline
1 week

Mesogeiako is a licensed lifelong-learning and vocational training centre in Thessaloniki, and its site had grown up on WordPress and the BeTheme page builder. The rebuild keeps every piece of that content and none of the platform. It is plain PHP 8.5 on MySQL — a front controller, a fifteen-line autoloader, no framework, no Composer and no build step — about five thousand lines of source and two thousand of templates. Greek is the default and English lives under /en/, and parity is structural rather than bolted on: every project, news item and page is an item row with one translation row per language, slugs sit on the translation so Greek pages keep Greek-derived URLs, and a third language would need no schema change. The migration is code, not a one-off export. Twenty-one ordered, repeatable steps rebuild the whole site from the WordPress source — parsing BeTheme's Muffin Builder content, stripping boilerplate, normalising headings, merging duplicate news, pulling embedded data-URI images out into files — and carry 33 projects, 90 news items and 20 pages across in both languages, with 798 redirects so old links land on their new pages. Every image in the library is a WebP under 200 KB: quality steps down from 82 to 40, then the dimensions shrink until it fits, and the original is discarded. The admin gives the centre its projects, news and pages in both languages under TinyMCE, a media library, contact details, and the homepage counters and blocks. Structured data carries the postal address, the business registry number and the opening hours — three facts the old site published in a theme footer widget, where no post and no importer could see them.

The challenge

WordPress had hidden some of the facts. The postal address, the business registry number and the opening hours lived in a theme footer widget rather than in any post, so a content export never saw them, and the second phone number disagreed with itself across three places on the old site. Greek URLs also broke the obvious database design: percent-encoded, they routinely run past 191 characters while sharing long prefixes, so a prefix index rejects genuinely different addresses as duplicates. And a bilingual editor has a quiet failure mode — a save that omits one language is indistinguishable from someone deliberately clearing it.

What I did

Each correction is its own numbered migration step, so a fresh rebuild from WordPress reproduces the client-confirmed phone number and the recovered address instead of re-importing the old mistakes. Redirects are made unique on a SHA-256 hash of the old path rather than a prefix. Each archive segment resolves only in its own language, so an item cannot live at two URLs and split its own ranking. Every translation form posts a presence marker per language — which is what lets a missing language mean 'untouched' rather than 'delete' — and the admin smoke suite carries a regression test for it. Filenames are NFC-normalised before transliteration, because macOS and Linux store the same Greek name as different bytes.

Gallery

Built with

  • PHP 8.5
  • MySQL
  • Vanilla JS
  • GSAP
  • TinyMCE 7
  • WebP pipeline (GD)
  • i18n (EL/EN)
  • SEO
  • WordPress migration
Visit project
WaterBaby Serres on a laptop, a tablet and a phone

Web Development

WaterBaby Serres

Baby & Children's Swimming School

Role
Designer & Frontend Developer
Timeline
4 weeks

WaterBaby Serres teaches babies from four months and children up to ten, in a heated indoor pool at the Elpida Resort. The site had to speak to Greek parents first and to visitors in English second, without becoming two sites. So every visitor-facing string ships twice inside the same file and the switcher only toggles which one is hidden: one URL per page, no reload, no fetch, no second set of pages to keep in sync, and the Greek reads perfectly with JavaScript switched off. Six pages carry it — home, about, the two programmes, a gallery and contact — with the four children's levels laid out from beginner to advanced, the equipment and paperwork a parent needs, and an FAQ. GSAP and ScrollTrigger are vendored locally rather than pulled from a CDN, and every animation is additive: nothing is pre-hidden in CSS, so a failed script leaves a complete page rather than a blank one. The arrival animation on the homepage drains a wave down the viewport once per session and clears itself through CSS keyframes, so it cannot strand a visitor behind an overlay even if the JavaScript dies. Structured data covers the courses, the FAQ, the gallery and the breadcrumbs; an llms.txt states the verified facts for AI assistants and is pinned to the pages by the test suite, so the two cannot drift. Twenty-one Node tests hold the whole thing in place — page structure, Greek copy, the redirect stubs, the loader's safety properties and WCAG contrast on every orange surface.

The challenge

A bilingual site normally means two of everything — two page sets, two URLs, two chances to update one and forget the other. This one had a single instructor maintaining it, so a second copy of every page was a liability rather than a feature. Greek also had to be the real default, readable before any script runs, because the audience is local parents. And the flourishes a swimming school wants — an arrival animation, scroll reveals, a lightbox — are exactly the things that leave a blank page when a script fails on a phone with a weak signal.

What I did

Both languages ship inline in every file and the switcher only toggles a hidden attribute, so there is one page to edit, one URL to share and nothing to keep in sync; the preference lives in localStorage and the switch fires a custom event the gallery listens to. Non-text strings — aria-labels, placeholders, meta descriptions, even the document title — translate through paired data attributes handled in the same function, so a translated page has no untranslated corners. Motion is additive by rule and a test enforces it: CSS is never allowed to pre-hide an animated element, so GSAP failing to load costs the animation and nothing else. The arrival overlay ships hidden and is revealed only by a class JavaScript adds, while its exit is a CSS keyframe with fill-mode forwards — script off, blocked or thrown, the overlay still clears. Libraries are vendored locally so a CDN outage cannot take the site's motion with it, and the twenty-one tests were each verified by deliberately breaking what they protect.

Gallery

Built with

  • HTML5
  • CSS3
  • Vanilla JS (ES Modules)
  • GSAP 3
  • ScrollTrigger
  • JSON-LD
  • i18n (EL/EN)
  • Node Test Runner
  • WCAG 2.2 AA
  • SEO
Visit project
FitRoom Experience homepage: the studio's own photograph behind the headline Training becomes experience

Web Development

FitRoom Experience

Gym Site & Membership Platform

Role
Designer & Developer
Timeline
5 weeks to launch, ongoing

FitRoom Experience is a gym in Serres, and this is both its public face and the software it runs on. The marketing side is a bilingual one-pager built around the studio's own photographs — what the rooms look like, the weekly programme, the two coaches, and a live class grid a member can book straight from.

Behind it is the system the owner actually works in. Clients and their memberships, subscriptions backed by a credit ledger, bookings with a waitlist, the register for each class, charges and payments and what is still owed, the offers she runs, and a tablet by the door where members check in with a PIN. It sends twenty kinds of transactional email in both languages, books a member's standing weekly class for her without her opening the site, and reports revenue, occupancy by hour and attendance by class family.

It is PHP 8.5 and MariaDB with no framework, no Composer and no build step — 43 tables, plain CSS, vanilla JavaScript, and a hand-rolled test harness rather than PHPUnit. Greek is the canonical language and English is the translation, everywhere, including the admin. It went live in August 2026 and has kept shipping since, almost entirely in response to the owner using it.

The challenge

It was replacing something the gym already ran, so it had to fit a business that already existed rather than the other way round. A hundred and fifty-eight members had passwords on the old website and could not be asked to start again. The owner's printed price card sells packages the system deliberately does not book — Reformer sessions are arranged on the phone with a coach — so what a package costs and what it entitles you to book are genuinely different questions. And the person running it all day is not a software operator: every screen had to be usable by the gym's owner between classes.

What I did

The old site's SHA-1 password hashes were carried across wrapped in Argon2id rather than stored as they arrived, so the existing membership could sign in on day one, and each one is upgraded to a real Argon2id hash the first time it is used. Entitlement is modelled apart from price: a plan records whether it books classes at all, and the public grid offers either Book or By phone accordingly, so the timetable never advertises something the system cannot honour. Anything touching more than one table — booking a class moves capacity, credits, subscription validity, the waitlist and the mail queue — lives in a service layer above the repositories instead of in the page files. Past that, the admin was rebuilt repeatedly against how the owner actually works: her booking week became the first screen she sees, the money moved onto the client she already had open, and a member's booking horizon became the end of the package she paid for rather than one ceiling over everybody.

Gallery

Built with

  • PHP 8.5
  • MariaDB
  • Vanilla JavaScript
  • Custom CSS
  • GSAP
  • PHPMailer
  • Stripe Checkout
  • Multilingual (el/en)
  • JSON-LD / SEO
  • Accessibility
  • Responsive Design
  • Nginx
Visit project
Gold Couture-P monogram above the PRESTIGE COMMUNICATIONS wordmark on black

Graphic Design

Prestige Communications

Logo & Brand Mark

Role
Brand Designer
Timeline
2 weeks

I designed the complete logo identity for Prestige Communications, a digital marketing agency in Athens. The mark is a bespoke 'Couture P' monogram — a refined custom letterform that hides a chat-bubble silhouette inside its curve, a quiet nod to the heart of what Prestige does. The system pairs the monogram with an Orpheus Pro 'PRESTIGE' wordmark and a tight-tracked 'COMMUNICATIONS' sub-line for editorial presence and quiet authority. The brand is built on four pillars — Elegant, Influential, Bespoke, Trusted — and a deliberately restrained palette: Prestige Gold (#BF9B5C), Deep Black (#000000), and Soft Cream (#F5F0E8), with Poppins as the body companion typeface. A full logo suite — dimensional, gradient, and solid variants across horizontal, stacked, and symbol-only lockups in light and dark — was delivered in AI, EPS, PDF, SVG, and PNG, alongside in-context mockups (gold-foil embossed business cards on black cotton stock, brushed-brass signage on walnut, and red-carpet event activations).

The challenge

Designing a wordmark that conveys premium agency credibility without slipping into generic luxury clichés — and building a monogram that hides a meaningful detail (a chat-bubble silhouette referencing the agency's work) without compromising the elegance of the letterform.

What I did

Drew the 'Couture P' as a bespoke serif letterform with sculpted curves, hiding a chat-bubble silhouette inside the bowl as a subtle metaphor for communication. Paired it with Orpheus Pro for the 'PRESTIGE' wordmark and a Poppins body face, all anchored by a restrained Prestige Gold + Deep Black + Soft Cream palette. Delivered a full suite (dimensional / gradient / solid, horizontal / stacked / symbol, light / dark) in AI/EPS/PDF/SVG/PNG with real-world mockups across business cards, brushed-brass signage, and event activations.

Built with

  • Adobe Illustrator
  • Logo Design
  • Brand Identity
  • Bespoke Letterform
  • Typography (Orpheus Pro, Poppins)
  • Color System
  • Brand Guidelines
Visit project
Grandpa Beans homepage with a kraft pouch of black beans on a dark backdrop

Web Development

grandpabeans.gr

Bilingual Black Bean Producer Website

Role
Designer & Developer
Timeline
2 weeks

I designed and developed grandpabeans.gr, a bilingual (Greek/English) website for Grandpa Beans — Greece's only commercial black bean producer, based in Ano Vrontou, Serres at 1,200m altitude. The single-page experience uses scroll-driven GSAP animations and a custom stop-motion apple sequence as the creative centerpiece, opening into sections for the family story, an 8-image grid gallery of the sowing-to-packaging process, a nutrition/FAQ tabbed panel, and a contact block. I built it with pure PHP (no framework) using JSON-based bilingual content, BEM-methodology custom CSS with design tokens, hreflang/JSON-LD structured data (Organization, LocalBusiness, Product, FAQPage), and an llms.txt for AI discoverability. Accessibility was first-class: skip links, ARIA dialog/tabs/nav patterns, focus management, and a prefers-reduced-motion fallback for every animated section.

The challenge

Building a memorable animation-led brand story while keeping the page fast, accessible, and bilingual — and supporting reduced-motion users without losing the narrative.

What I did

Pre-rendered the stop-motion as a sequence of WebP frames driven by GSAP ScrollTrigger, served bilingual content via PHP includes from JSON, and built ARIA patterns and a reduced-motion fallback into every interactive section.

Built with

  • PHP
  • Vanilla JavaScript
  • GSAP
  • ScrollTrigger
  • Custom CSS (BEM)
  • JSON
  • Multilingual (el/en)
  • JSON-LD / SEO
  • Responsive Design
  • Accessibility
  • Stop-motion Animation
Visit project
Kaloni.gr storefront with collection cards and a New Arrivals grid of women's shoes

Web Development

kaloni.gr

Bilingual Laravel Footwear E-Commerce

Role
Full-Stack Developer & Designer
Timeline
8 weeks

I designed and developed kaloni.gr, a bilingual (Greek/English) Laravel 12 e-commerce store for a Serres-based women's footwear brand. The storefront supports product variants (size + color), color-filtered galleries, wishlist (session for guests, DB for authenticated users with login merge), recently-viewed products, autocompleted search, and real-time shipping zone detection. Payments use a gateway-agnostic abstraction (PaymentGatewayInterface with DTO-backed results) supporting Stripe 3DS, Cardlink hosted-redirect with HMAC-SHA256 digest verification, bank transfer, cash on delivery, and pay-on-pickup. The admin panel covers products/variants/categories, coupons, shipping zones, order lifecycle and payment-status transitions, reviews moderation, newsletter and back-in-stock subscriptions, customer management with GDPR self-deletion (anonymise vs hard-delete), and activity logging. Bilingual content uses dedicated *_translations tables with a smart locale fallback (URL prefix → session → user preference → config), powering /el/ and /en/ SEO-friendly URLs with hreflang alternates and Organization/WebSite JSON-LD on every page. Images are served via Intervention Image v3 with responsive <picture> srcsets and WebP siblings; inline scripts are CSP-compliant via Vite nonces; GA4 e-commerce tracking (view_item, add_to_cart, purchase) is gated on cookie consent. Business logic is isolated in 23 service classes for an API-ready foundation.

The challenge

Building a multi-gateway payment system that cleanly supports both synchronous (cash, bank transfer) and asynchronous redirect flows (Stripe 3DS, Cardlink HMAC) while keeping the bilingual content model simple and the catalog fast across hundreds of product variants.

What I did

Designed a PaymentGatewayInterface with DTO-backed results so each gateway slots in behind the same API; used dedicated *_translations tables with a fallback chain (URL prefix → session → user preference → config) so translation lives in one place per entity; cached responsive WebP siblings via Intervention Image v3 and served them through srcset <picture> tags with explicit dimensions to prevent CLS.

Built with

  • Laravel 12
  • PHP 8.3
  • Alpine.js
  • Custom CSS (BEM)
  • MySQL
  • Intervention Image v3
  • Stripe (3DS)
  • Cardlink
  • Laravel Breeze + Google OAuth
  • Multilingual (el/en)
  • JSON-LD / SEO
  • Responsive Design
  • GA4 E-commerce
  • Vite
Visit project
Isometric B monogram in navy, orange and teal above the Bora's New Start wordmark

Graphic Design

Neo-Brutalist Real Estate Logo

Role
Brand Designer
Timeline
1 week

I designed the logo identity for Bora's New Start, a real estate agency based in Thessaloniki. The mark is a neo-brutalist isometric 'B' monogram — built from solid blocks of dark navy, warm orange, rust, and teal that interlock to form a confident architectural shape, evoking property structure and the agency's grounded, no-nonsense approach. The system pairs the monogram with a bold black slab-serif wordmark ('BORA'S NEW START') and an orange 'REAL ESTATE AGENCY' tagline. The deliberately limited four-color palette keeps the mark distinctive at any scale — from business card to building signage — while the geometric monogram works as a standalone symbol for app icons, favicons, and social avatars.

The challenge

Designing a real estate logo that breaks free of the generic 'house silhouette' clichés of the category while still feeling architectural, grounded, and credible to property buyers and sellers.

What I did

Built a neo-brutalist isometric 'B' monogram from interlocking colored panels — a structural form that reads as 'real estate' without literal house imagery — paired with a bold slab-serif wordmark and a confident four-color palette of navy, orange, rust, and teal that holds up from favicon to building signage.

Built with

  • Adobe Illustrator
  • Logo Design
  • Brand Identity
  • Neo-Brutalist Design
  • Typography
  • Color Theory
Bronze interlocking-triangle emblem and Four Elements Productions wordmark on espresso brown

Graphic Design

Four Elements Productions

Brand Identity

Role
Brand Designer
Timeline
2 weeks

I designed the complete brand identity for Four Elements Productions by Adva, a company bridging corporate event planning and yoga retreats. The visual system is rooted in the four alchemical elements — Fire, Air, Earth, and Water — with a geometric emblem built from interlocking triangles that form a crystal-like shape symbolizing balance and reflection. I developed a warm, earthy color palette centered on bronze and espresso tones, paired Cormorant Garamond with Montserrat Light for an elegant typographic voice, and crafted the 'by Adva' signature mark in Snell Roundhand calligraphy. Everything is documented in a detailed brand-guidelines deck covering logo philosophy, color system, typography, clear-space rules, brand voice, and real-world mockup applications across print, digital, and merchandise.

The challenge

Capturing the dual nature of the company — corporate event planning and yoga retreats — in a single elegant visual system that reads as professional yet aspirational, without losing gravitas in either direction.

What I did

Anchored the system in alchemical symbolism (interlocking triangles forming a crystal), paired a warm bronze/espresso palette with a Cormorant Garamond + Montserrat Light type duo for refined contemporary voice, and documented the entire system in a brand-guidelines deck so it can be applied consistently across print, digital, and merchandise.

Built with

  • Adobe Illustrator
  • Brand Identity
  • Logo Design
  • Typography
  • Color Theory
  • Brand Guidelines
Visit project
savage.design homepage with the wordmark in front of a glowing white ring on black

Web Development

savage.design

Multilingual Creative Studio Website

Role
Designer & Developer
Timeline
Ongoing

I designed and built savage.design, the flagship site for my freelance creative studio working out of a mountain village in Greece. The visual centerpiece is a THREE.js shader-driven fractal orb that persists across PJAX page transitions, paired with a custom WebGL 'inversion lens' hover effect on portfolio cards built on a shared renderer and an LRU texture cache. Architecture: vanilla PHP (no framework) with a custom PJAX router that enforces per-page init/cleanup contracts to prevent listener leaks and CSS contamination, GSAP and Lenis for motion and smooth scroll, and a PHPMailer-backed quote API with CSRF, honeypot, session rate-limiting, and GDPR consent. The site ships in 7 languages (EN / EL / DE / FR / ZH / DA / ES) with clean URL rewrites, hreflang alternates, language-aware Google Business reviews, and a comprehensive JSON-LD graph (Organization, CreativeWork, Service, AggregateRating, Review). Accessibility is WCAG 2.2 AA: skip link, modal focus traps, route announcements via a live region, keyboard-driven accordion and language switcher, prefers-reduced-motion handling. Deployed on LiteSpeed with custom deploy/rollback skills and a 24-project portfolio rendered server-side from JSON for SEO.

The challenge

Delivering a single-page experience with persistent WebGL animations across navigation, supporting 7 languages with clean URLs and hreflang, and shipping a custom WebGL lens hover effect that scales to dozens of portfolio cards without GPU contention.

What I did

Built a PJAX router with strict init/cleanup contracts to manage GSAP tweens and event listeners across pages, used a shared THREE.js renderer with an LRU texture cache for the portfolio lens, and structured i18n around URL prefix + cookie + Accept-Language fallback with hreflang for every alternate.

Built with

  • PHP
  • Vanilla JavaScript
  • THREE.js (WebGL)
  • GSAP
  • Lenis
  • Custom CSS
  • PJAX Router
  • Multilingual (7 languages)
  • JSON-LD / SEO
  • WCAG 2.2 AA Accessibility
  • PHPMailer
  • Quote API
Visit project
borasnewstart.gr homepage with a property search panel over a living-room photograph

Web Development

borasnewstart.gr

Trilingual Real Estate Platform

Role
Full-Stack Developer & Designer
Timeline
5 weeks

I designed and developed borasnewstart.gr, a production real estate platform for a Thessaloniki agency. The public site offers property listings with ID-based search, advanced modal filters (price, hierarchical location, property type), single-property detail pages with a vanilla-JS lightbox gallery (keyboard + click-outside support), a hero video, services and About sections, a Google Reviews carousel, and full CMS pages (Contact, Privacy Policy). The admin panel covers property CRUD with 8-section forms, multi-image upload with drag-to-reorder and primary-flag selection, 5-level hierarchical location management using materialized paths (Region → Unit → Municipality → Locality → Area), service and review management, lead tracking, and rich-text CMS editors for company info. The whole stack is intentionally lightweight: pure PHP 8 with a PDO singleton (no framework), MySQL with dedicated *_translations tables, vanilla JavaScript, and modular CSS with custom-property design tokens — no build tools, no frontend framework. Trilingual (Greek / English / Turkish) i18n routes UI strings through `languages/{gr,en,tr}.php` catalogs and DB content through translation tables with a Greek fallback. Feature flags (furnished, balcony, etc.) are stored as canonical English JSON keys and translated at display via `t_feature_label()`, with price formatting handled by `t_price_eur()`.

The challenge

Building a fully bilingual real estate platform (later extended to three languages) on a deliberately framework-free PHP stack, with a 5-level location hierarchy that supports efficient subtree queries and breadcrumbs without an ORM.

What I did

Implemented a PDO singleton with prepared statements, dedicated *_translations tables with a smart Greek-fallback chain, and a materialized-path location tree (Region → Unit → Municipality → Locality → Area) for fast subtree queries. The admin uses 8-section property forms with drag-to-reorder image management and a primary-flag system; the public lightbox gallery is pure vanilla JS with keyboard and click-outside handling — no jQuery, no build step.

Built with

  • PHP 8
  • MySQL / MariaDB
  • Vanilla JavaScript
  • Custom CSS (Design Tokens)
  • PDO
  • Multilingual (el/en/tr)
  • Materialized-Path Location Tree
  • Custom Admin Panel
  • Vanilla JS Lightbox
  • Responsive Design
Visit project
elato.gr homepage reading 'Grown with Love' over a photograph of a fir plantation

Web Development

elato.gr

Bilingual Fir Tree Producer Website

Role
Designer & Developer
Timeline
3 weeks

I designed and developed elato.gr, a bilingual (Greek/English) marketing website for Elato Karantaglis — a family fir tree business in Chalkidiki, Greece, established in 1980. The 10-page site presents three product lines (potted living firs, fresh-cut Christmas trees, and 3–10m commercial rentals for hotels and events) with sophisticated editorial design using Playfair Display and Lora typography over a warm parchment palette and forest-green accent. I hand-built it with PHP 8.5, vanilla CSS, and vanilla JavaScript — zero frameworks — including a 5-layer anti-spam contact form (CSRF, submission-timing, JS proof-of-work token, dual honeypots, IP/session rate limiting), WCAG 2.1 AA accessibility (focus trap, keyboard lightbox, semantic ARIA), comprehensive JSON-LD with dual LocalBusiness entities, hreflang alternates, OG images for every page, and a snow-particle hero animation.

The challenge

Building a family-heritage brand site that stays elegant and accessible across 10 bilingual pages, with a contact form that can survive bot traffic without harming legitimate users or requiring cookies.

What I did

Used a custom design system with serif/sans typography for an editorial tone, hand-built a 5-layer anti-spam stack (CSRF + timing + JS proof-of-work + dual honeypots + rate limiting) that operates without cookies or third-party services, and shipped OG/JSON-LD/hreflang for both Greek and English variants.

Built with

  • PHP 8.5
  • Vanilla JavaScript
  • Custom CSS
  • PHPMailer
  • JSON
  • Multilingual (el/en)
  • JSON-LD / SEO
  • WCAG 2.1 AA Accessibility
  • Anti-spam (5-layer)
  • Responsive Design
  • Plausible Analytics
Visit project
Dagkos Pastry Shop homepage with the shop name set over a dark display of pastries

Web Development

dagkos.com

Bilingual Pastry Shop Website

Role
Designer & Developer
Timeline
1 week

I designed and developed dagkos.com, a bilingual (Greek/English) website for Dagkos, a traditional pastry shop in Serres, Greece, established in 1991. The site features a dark theme with gold accents, a product gallery with 480+ photos across 16 categories and lightbox with keyboard and swipe navigation, a news/article system with multi-category filtering, a timeline-animated About page showcasing the shop's history and team, and dedicated product pages for buffalo ice cream and tray sweets. I built a PHP templating system with JSON-driven bilingual content, GSAP ScrollTrigger animations, comprehensive SEO (JSON-LD structured data, hreflang tags, dynamic sitemap), and accessibility best practices including ARIA labels, keyboard navigation, and skip-to-content links.

The challenge

Building a rich bilingual content system with a large photo gallery, complex filtering, and scroll animations while keeping the site fast and accessible.

What I did

Used PHP includes with JSON data files for clean bilingual content management, native lazy loading with Intersection Observer fallback, GSAP ScrollTrigger for performant animations, and a custom lightbox with keyboard/touch support and adjacent-image preloading.

Built with

  • PHP
  • Vanilla JavaScript
  • Custom CSS
  • GSAP
  • ScrollTrigger
  • JSON
  • Multilingual (el/en)
  • JSON-LD / SEO
  • Responsive Design
  • Lightbox Gallery
  • Accessibility
Visit project
efantasy.gr design system board showing component, button and icon libraries

UX/UI Design

efantasy.gr Redesign

Role
UX/UI Designer & Frontend Developer
Timeline
Ongoing

I redesigned efantasy.gr, one of the largest geek and collector e-shops in Greece. The project is still ongoing and currently in the development phase. I created a high-fidelity, pixel-perfect prototype and a full design system in Figma, including typography, colors, spacing, and components. I also designed a custom icon set in Adobe Illustrator and prepared additional graphic assets with the help of Adobe Photoshop and AI image generation tools. For the development phase, I will handle the frontend using React and Tailwind CSS.

The challenge

Designing a playful yet professional style that speaks to geeks, gamers, and collectors while keeping the store fast and easy to use.

What I did

Created a modular design system with reusable components and a consistent visual language to ensure scalability and smooth development.

Built with

  • Figma
  • React
  • Tailwind
  • Illustrator
  • Photoshop
  • AI Tools
Visit project
BoatHelper mobile prototype screens: owner profile, boat listings, offers and task cards

UX/UI Design

BoatHelper

BoatOwner App Prototype

Role
Product Designer (UX/UI)
Timeline
5 days

BoatHelper is a self‑initiated design challenge to sharpen my Figma skills. I built a clean, modern, clickable prototype for the BoatOwner app only. It follows an 8‑px grid, uses #0A66C2 as the main color, and runs in iPhone 16 size (393×852). Real names, prices, dates and photos are used across flows: manage boats, post a task, view offers, open chat, accept one offer (AgreementMade), mark as Done, leave a review, browse profiles, check price stats, and view history. I designed reusable cards (task, offer, boat, chat) and status badges to keep the UI consistent and simple.

The challenge

Cover many flows in one prototype while keeping spacing, data, and status logic consistent.

What I did

Built a small design system with clear hierarchy, 8‑px spacing, reusable components, and tidy naming.

Built with

  • Figma
  • Prototyping
  • Design System
  • Component Variants
Visit project
CarSwitch low-fidelity wireframes showing a group dashboard, car lists and a member profile

UX/UI Design

CarSwitch

Group Car‑Sharing (Phase 1)

Role
Product Designer (UX/UI)
Timeline
5 days

CarSwitch is a simple mobile app concept that helps small private groups share one or more cars. This was a design challenge I used to practice Figma. I built clean, low‑fidelity, black‑and‑white wireframes with real field names and clear flows: sign up/log in, create a private group, add cars, invite members, accept invites, edit profile, remove/leave members, and a basic dashboard for manual trip entries to discuss fair cost split. I kept an 8‑px grid, large touch targets, and consistent forms, inputs, and empty/error states. Deliverables include a clickable prototype, organized pages, and notes on verification options.

The challenge

Keep many admin/member rules simple while avoiding dead‑ends and unclear states.

What I did

Used a tidy component set, clear tab structure, validation messages, and reusable form patterns.

Built with

  • Figma
  • Wireframing
  • Prototyping
  • Design System
  • UX Writing
Visit project
greeksimmers.com hero reading 'Your Flight Starts Here' over an aircraft in cloud

UX/UI DesignWeb Development

greeksimmers.com

Full-Stack Web Application

Role
Full-Stack Developer & Designer
Timeline
2 months

I designed and developed greeksimmers.com, a full-stack web application for a flight simulator business in Greece. The platform features a robust booking system with Stripe payments, a tier-based loyalty program, a magazine/blog system, and a comprehensive admin panel. Key features include dynamic working hours and closure periods, email templates for bookings and rescheduling, multilingual support (Greek/English), and GSAP scroll animations with glassmorphism effects. I implemented high security patches, responsive design across all pages, and optimized images with automatic WebP conversion. The project involved extensive client communication and iterative development across 4 phases.

The challenge

Building a complex booking system with overlapping slot protection, loyalty tiers, and secure payment processing while maintaining a polished user experience.

What I did

Implemented robust calendar validation, Stripe integration for live payments, dynamic admin settings that propagate across the site, and WCAG AA compliant responsive design.

Built with

  • Next.js
  • React
  • Tailwind CSS
  • Stripe
  • GSAP
  • Email Templates
  • Admin Panel
  • Authentication
  • Multilingual
  • Responsive Design
Visit project
tisi76.com gallery showing 'Throne of Enlightenment' beside a phone with a second piece

Web Development

tisi76.com

WordPress Website

Role
Designer & WordPress Developer
Timeline
16 hours

I designed and built tisi76.com in WordPress. I created the logo, chose the color palette and fonts, and set a small design system for spacing, buttons, and headings. The site has scroll-triggered motion for soft reveals and stays clear and easy to read. I used ChatGPT to help with the texts and basic SEO research. The result is a simple, fast website with good structure and clean visuals.

The challenge

Keep the site clean and fast while adding subtle motion and a consistent brand style.

What I did

Built a small design system, optimized images, used lightweight scroll effects, and wrote clear copy with structured headings.

Built with

  • WordPress
  • Theme customization
  • Design System
  • HTML5
  • CSS3
  • JavaScript
  • Scroll-triggered animation
  • SEO research
  • Image optimization
  • Branding (Logo & Colors)
  • Typography
Visit project
Le Visiteur music video with cover art and a cyan waveform on a rust background

Audio & Video

Visiteur

Original Song

Role
Composer, Lyricist & Producer
Timeline
2 weeks

“Visiteur” is an original song created together with Katerina Skamaga. I composed the music, wrote the lyrics, and produced the track, while Katerina performed the vocals and electric guitars. The song blends French and English lyrics with an atmospheric theme of being a visitor from afar, inspired by subconscious and dreamlike imagery. The production took about two weeks, with careful attention to arrangement, recording, and mixing.

The challenge

Capture an otherworldly mood while keeping the song accessible and emotionally engaging.

What I did

Used layered guitar textures, atmospheric effects, and bilingual lyrics to create a dreamlike soundscape that highlights both the vocals and the lyrical theme.

Built with

  • Composition
  • Lyrics
  • Production
  • Ableton Live
  • Audio Recording
  • Collaboration
Visit project
Prizely on a laptop, a tablet and a phone

Web Development

Prizely

Multi-Tenant Gamified Lead-Gen SaaS

Role
Full-Stack Developer & Designer
Timeline
6 weeks

We designed and developed Prizely, a multi-tenant SaaS platform in Laravel 12 that turns lead capture into a branded game experience. Merchants register, create one or more brands (each with its own slug, 2-color palette, logo, and up to 8 rewards with images), configure win percentages per reward, and activate Lucky Wheel or Scratch-to-Win games. Each brand lives at a clean /{brand-slug} URL with its own visual identity — the player sees only that brand. Before playing, leads fill in a name, email, and phone form (GDPR consent checkboxes configurable per brand); duplicate detection by email+phone prevents replay abuse. Winners receive an automated reward email with optional redemption codes. Credit packs are purchased via Stripe Checkout (metered per-play billing), with a self-service billing history page. The admin dashboard surfaces plays-per-day charts, reward distribution stats, conversion rates, and a filterable, exportable leads table (.xlsx). A sandboxed test-games mode lets owners preview games without consuming credits or logging leads. For physical events, kiosk mode locks the device to a single brand with an owner-only unlock flow. The platform is bilingual (Greek/English), WCAG 2.2 AA compliant, and includes GSAP scroll animations, SEO with JSON-LD, per-page hreflang alternates, and an llms.txt for AI crawler visibility.

The challenge

Designing a multi-tenant architecture where each brand maintains its own visual identity (colors, logo, rewards) under a single Laravel install, building two distinctly different game engines (wheel vs. scratch) that share a common play/reward pipeline, and implementing metered Stripe billing that deducts credits per play while keeping latency invisible to the player.

What I did

Used Laravel's tenant-agnostic routing with {brand} wildcards and policy-based ownership gates — one codebase, infinite branded storefronts. Built each game as a self-contained Blade/Alpine component feeding into a shared PlayController that validates credits, prevents duplicates, resolves rewards via weighted random selection, and dispatches queued confirmation emails. Stripe Checkout sessions carry metadata (pack_id, brand_id, user_id) fulfilled via webhook; a credit-balance cache column avoids per-play DB writes. Kiosk mode uses a session flag + unlock PIN flow with rate-limited attempts. The admin dashboard uses Chart.js for plays/reward distribution and a filterable DataTables-powered leads table with .xlsx export.

Gallery

Built with

  • Laravel 12
  • PHP 8.5
  • Tailwind CSS
  • GSAP
  • Stripe
  • MySQL
  • Multilingual (el/en)
  • JSON-LD / SEO
  • WCAG 2.2 AA
  • Responsive Design
  • Kiosk Mode
  • Email Automation
Visit project
kirtsos.gr on a laptop, a tablet and a phone

Web Development

kirtsos.gr

Surveying Engineer

Role
Designer & Developer
Timeline
1 month

We designed and developed kirtsos.gr, a bilingual (Greek/English) professional website for Kirtsos Vasileios, a surveying engineer with over 15 years of experience operating from two offices in Rodopoli, Serres and Nea Moudania, Halkidiki. The 8-page site showcases 9 specialized services — from topographic diagrams and land registry submissions to livestock facility licensing and fire protection reports. Built with HTML5, CSS3, and vanilla JavaScript with no database or framework dependencies — all bilingual content is managed through JSON translation files. Features include a consent-gated Google Maps integration, a filterable photo gallery with lightbox, a CSRF-protected contact form with PHPMailer, structured data for two business locations, and full WCAG 2.2 AA compliance with 100/100 Lighthouse accessibility scores.

The challenge

Presenting a technical surveying firm with 9 specialized services and two office locations as an accessible, professional brand, while supporting full bilingual content without a database or dependencies.

What I did

Used JSON-based client-side i18n for bilingual content with localStorage language persistence, consent-gated Google Maps for GDPR compliance, structured data with two office addresses, critical CSS inlining for performance, and a zero-dependency architecture achieving 100/100 Lighthouse scores across all categories.

Gallery

Built with

  • PHP
  • HTML5
  • CSS3
  • Vanilla JavaScript
  • JSON i18n
  • PHPMailer
  • Structured Data
  • Multilingual
  • Responsive Design
  • SEO
Visit project
Taverna to Mpelles on a laptop, a tablet and a phone

Web Development

Taverna to Mpelles

Restaurant Website

Role
Designer & Developer
Timeline
1 month

I designed and developed a bilingual (Greek/English) single-page website for Taverna to Mpelles, a traditional Greek taverna near Lake Kerkini in Serres. The site features an interactive menu modal with 8 food categories and 40+ items, a review carousel showcasing 19 five-star reviews from Google and TripAdvisor, and a filterable gallery with 60+ photos and lightbox viewing. I built the project with PHP, Tailwind CSS, and vanilla JavaScript, using JSON data files instead of a database. The site includes a news and events section, area attractions, full bilingual support with 200+ translation keys, and comprehensive SEO with JSON-LD structured data for local business and restaurant schema.

The challenge

Building a content-rich restaurant site with an interactive menu, reviews, and gallery without a database or CMS, while supporting full bilingual content.

What I did

Used JSON data files for menu items, reviews, and translations, keeping the architecture lightweight and fast. Built reusable modal and carousel components in vanilla JS with Tailwind utility classes for consistent styling.

Gallery

Built with

  • PHP
  • Tailwind CSS
  • Vanilla JavaScript
  • JSON Data
  • JSON-LD
  • Multilingual
  • Responsive Design
  • SEO
Visit project
Mpampetas & Sons on a laptop, a tablet and a phone

Web Development

Mpampetas & Sons

Agricultural Services

Role
Designer & Developer
Timeline
1 month

I designed and developed a bilingual (Greek/English) static website for Mpampetas & Sons, a family agricultural services company established in 2015 in Katerini, Pieria. The business specializes in farming operations and solar park vegetation clearing. The site features a scroll-spy navigation, an equipment showcase highlighting their John Deere 5075GL tractor and 12 specialized tools, a filterable gallery with 19 photos and 7 videos with lightbox support, and a contact section. I built the project with pure HTML5, CSS3 using custom properties with a John Deere-inspired color system, and vanilla JavaScript. The site includes JSON-LD LocalBusiness schema, full bilingual support, and IntersectionObserver-driven scroll animations.

The challenge

Presenting heavy machinery and agricultural services professionally while keeping the site fast and accessible as a zero-dependency static build.

What I did

Used CSS custom properties for a cohesive John Deere color system, IntersectionObserver for performant scroll animations, and a filterable gallery with video lightbox — all without any framework or build tool.

Gallery

Built with

  • HTML5
  • CSS3
  • Vanilla JavaScript
  • JSON-LD
  • Multilingual
  • Responsive Design
  • SEO
Visit project
ePantry on a laptop, a tablet and a phone

Web Development

ePantry

A Greek Grocery Shop, Rebuilt from WooCommerce on Laravel

Role
Designer & Developer
Timeline
1 week

ePantry sells food with a name and a place: pulses, pasta, flour, herbs, sauces and honey from a dozen farms and workshops in northern Greece, shipped from Kerkini. The old shop ran on WordPress and WooCommerce. It was replaced by a Laravel 12 storefront designed from scratch, live since 8 September 2026, with the catalogue, categories, editorial content, order history and store settings migrated from the WooCommerce database, so nothing the customers or the shop relied on was lost.

The design takes its cue from a pantry shelf. The product photos are cut-out packshots on white, so the interface stays quiet underneath them: a white ground, a continuous hairline grid instead of floating cards, one accent colour. Every product card, product page and cart row carries a shelf label with the net weight, the price per kilo or litre, the producer and the region. The producers have pages of their own, the old blog lives on as a journal of recipes and pantry guides, and the shop takes cash on delivery or a bank transfer to any of three banks, so customers can pay without a transfer fee.

The challenge

A rebuild has to keep everything that already works: 238 products with their photos, categories and stock settings, the blog, the order history and every setting tuned over the years, carried over from WooCommerce without a gap. Some of the old data would have broken the new shop if copied literally — products sold with no stock count, drafts, a low-stock rule that would have flagged the whole catalogue. And a grocery has rules of its own: pre-packed food sold by weight must show its price per kilo, Greek capitals lose their accents, and the brand's terracotta, at 3.96:1 on white, is too light to carry text.

What I did

Import commands read the WooCommerce database directly and map it onto the new schema — products, categories, producers, images, posts, orders and settings, each keeping its old ID for traceability — and translate the old shop's quirks rather than copy them: untracked stock stays buyable, drafts stay drafts, the low-stock threshold stays at two. The shelf label puts the unit price beside every selling price, as Greek law requires. A darker shade of the brand colour carries all text, and Greek is written in sentence case and uppercased by CSS so the accents fall correctly, which a test enforces. Motion is one GSAP sequence and quiet scroll reveals, and the optional sound never starts without a gesture. Product, producer and recipe pages carry structured data, and the shop's llms.txt is generated from the database, so the free-delivery threshold it states can no longer drift.

Gallery

Built with

  • Laravel 12
  • PHP 8.5
  • MySQL
  • Alpine.js
  • GSAP + ScrollTrigger
  • Web Audio API
  • WooCommerce migration
  • Bilingual EL/EN
  • Schema.org
  • llms.txt
  • Self-hosted fonts
  • SEO
Visit project
MS Serron on a laptop, a tablet and a phone

Web Development

MS Serron

Non-Profit Association

Role
Designer & Developer
Timeline
2 weeks

Designed and developed the official website for the Multiple Sclerosis Association of Serres (MS Serron). The site serves as an information hub for patients, families, and supporters, featuring organization news, event announcements, resource materials, and contact information. Accessibility was a primary focus given the target audience.

The challenge

Ensuring high accessibility standards for users with motor and visual impairments while maintaining an informative and welcoming design.

What I did

Implemented WCAG AA compliance, clear typography, high contrast ratios, and simple navigation for users with various abilities.

Gallery

Built with

  • WordPress
  • Accessibility
  • SEO
  • Responsive Design
  • Content Management
Visit project
StayKerkini on a laptop, a tablet and a phone

Web Development

StayKerkini

Guesthouse & Booking

Role
Designer & Developer
Timeline
2 weeks

Created the website for StayKerkini, a budget-friendly guesthouse near Lake Kerkini, one of Greece's most important wetlands. The site features room descriptions, photo galleries, local attraction information, and an integrated booking system. The design evokes the natural beauty of the Kerkini area while providing a straightforward booking experience.

The challenge

Creating an inviting presentation for budget accommodation while integrating a reliable booking system.

What I did

Used warm photography, clear pricing display, and a simple booking flow to build trust and drive conversions.

Gallery

Built with

  • WordPress
  • Booking System
  • SEO
  • Google Maps
  • Responsive Design
  • Photography
Visit project
Dytikes Pinelies on a laptop, a tablet and a phone

Web Development

Dytikes Pinelies

Cultural Arts Non-Profit

Role
Designer & Developer
Timeline
2 weeks

Developed the website for Dytikes Pinelies, a cultural arts non-profit organization. The site presents the organization's mission, ongoing projects, community activities, and event announcements. The design reflects the creative and cultural spirit of the organization while providing easy access to information about their initiatives.

The challenge

Communicating the organization's diverse cultural activities and mission in an engaging and organized way.

What I did

Created a visually rich layout with clear project showcases, event calendars, and an easy-to-update content management system.

Gallery

Built with

  • WordPress
  • Content Management
  • SEO
  • Responsive Design
  • Event Management
Visit project
Agroktima Kerkinis on a laptop, a tablet and a phone

Web Development

Agroktima Kerkinis

Poultry Farm

Role
Designer & Developer
Timeline
10 days

Created the website for Agroktima Kerkinis, a poultry farm in the Kerkini area specializing in organic eggs and farm products. The site tells the farm's story, showcases their products, and highlights their commitment to organic and sustainable farming practices. The design uses warm, earthy tones to reflect the natural quality of their products.

The challenge

Building trust in organic farm products through authentic storytelling and professional presentation.

What I did

Used real farm photography, transparent product information, and a warm design palette to convey authenticity and quality.

Gallery

Built with

  • WordPress
  • SEO
  • Photography
  • Responsive Design
  • Content Management
Visit project
Babbis Engineering on a laptop, a tablet and a phone

Web Development

Babbis Engineering

Solar Energy

Role
Designer & Developer
Timeline
2 weeks

Developed the corporate website for Babbis Engineering, a company specializing in solar energy solutions and engineering services. The site presents their service offerings, completed projects, and company credentials. The professional design communicates reliability and expertise in the renewable energy sector.

The challenge

Presenting technical engineering services in an approachable way while establishing credibility in the solar energy sector.

What I did

Created clear service pages, project showcases with technical details, and a professional design that builds trust.

Gallery

Built with

  • WordPress
  • SEO
  • Responsive Design
  • Corporate Design
  • Content Management
Visit project
ReFriz on a laptop, a tablet and a phone

Web Development

ReFriz

Refrigeration & AC Services

Role
Designer & Developer
Timeline
10 days

Developed the website for ReFriz, a company specializing in refrigeration and air-conditioning services. The site covers installation, maintenance, and repair services with clear service descriptions, service area information, and easy contact options. The design is professional and service-oriented, making it simple for customers to find what they need.

The challenge

Creating a service-oriented website that clearly communicates technical services to a non-technical audience.

What I did

Used clear service descriptions, visual icons, prominent contact information, and local SEO optimization for service area visibility.

Gallery

Built with

  • WordPress
  • SEO
  • Local SEO
  • Responsive Design
  • Contact Forms
Visit project
Eclat Beauty on a laptop, a tablet and a phone

Web Development

Eclat Beauty

Beauty Studio & E-shop

Role
Designer & Developer
Timeline
3 weeks

Created the website and e-commerce platform for Eclat Beauty, a beauty studio and cosmetics retailer. The site combines service booking for the physical studio with an online cosmetics shop. Features include a product catalogue, appointment scheduling, service descriptions, and a clean feminine design that reflects the brand's aesthetic.

The challenge

Combining service booking and e-commerce in a cohesive user experience that appeals to beauty-conscious customers.

What I did

Designed a unified interface that seamlessly transitions between service booking and product shopping, with a consistent brand aesthetic throughout.

Gallery

Built with

  • WordPress
  • WooCommerce
  • Booking System
  • SEO
  • Responsive Design
  • Product Photography
Visit project
Ichnilatis on a laptop, a tablet and a phone

Web Development

Ichnilatis

Eco-Tourism Guesthouse

Role
Designer & Developer
Timeline
2 weeks

Developed the website for Ichnilatis, an eco-tourism guesthouse near Lake Kerkini offering accommodation and outdoor activities. The site highlights the natural surroundings, available activities (birdwatching, hiking, boat tours), and accommodation options. The design draws from nature with earthy colors and immersive photography of the Kerkini wetlands.

The challenge

Conveying the unique eco-tourism experience and natural beauty of Lake Kerkini through the website design.

What I did

Used immersive photography, nature-inspired color palette, activity showcases, and integrated booking to capture the eco-tourism spirit.

Gallery

Built with

  • WordPress
  • Booking System
  • SEO
  • Photography
  • Responsive Design
  • Google Maps
Visit project
The Myth of the Mountain on a laptop, a tablet and a phone

Web Development

The Myth of the Mountain

Mountain Dairy

Role
Designer & Developer
Timeline
1 month

We designed and built the website for O Mythos tou Vounou, the Kliampa family's mountain dairy in Kato Oreini, Serres. The brochure-style site tells the story of a tradition spanning five generations and showcases the full range of products — fresh cheeses, whey cheeses, yogurts, kefir, cream desserts and handmade goat-milk ice cream — all made from the family's own milk. Built as a fast, framework-free PHP site with bilingual (EL/EN) content, GSAP scroll animations, a sales-points map and full WCAG 2.2 AA accessibility, it leads with authentic brand photography of the herds, the mountains and the packaging.

The challenge

Conveying five generations of mountain dairy heritage and a wide product range in a simple brochure site, while keeping it fast, bilingual and fully accessible.

What I did

A clean, photography-led design with a clear product catalogue, an award highlight, a sales-points map and GSAP scroll animations — delivered on a lightweight, framework-free PHP stack with self-hosted assets and WCAG 2.2 AA compliance.

Gallery

Built with

  • PHP
  • Vanilla JS
  • GSAP
  • JSON
  • SEO
  • WCAG 2.2 AA
  • Responsive Design
Visit project

Social Media Videos

Warm Bronze. Three Rooms.

Story Towel Rack

Runtime
0:15
Format
Vertical 9:16
Published
30 August 2026

Marble. Travertine. Graphite stone.

One towel rack, one finish, three architectures. The rack does not change. The light and the stone around it do.

Warm Bronze is a titanium-based PVD finish applied in our own plant — a deep copper-red with warm golden undertones that reads differently in every room it enters.

Towel Rack 0911. Wall mounted, solid brass, W600 x D220 x H120 mm. Designed at the sanco LABoratory, manufactured in Koropi, Attica. 100% in-house manufacturing.

—

How I made this

I started from our own product photographs of the 0911 in Warm Bronze, taken from the sanco.gr catalogue. Those references stayed locked throughout, so the shape, the bar spacing and the finish are exactly as manufactured. Around the rack I built three bathrooms — warm Greek marble, travertine and ivory plaster, deep graphite stone. Kling.ai handled the motion: a macro glide along the rail, a slow push-in, a pull-back that opens the room. Every move kept slow, the light doing the work. The score came from Suno. Everything was assembled in Adobe Premiere.

—

Built with

  • Kling AI
  • Adobe Premiere
  • Suno

Social Media Videos

A Study in Surface

Runtime
0:52
Format
Portrait 4:5
Published
27 August 2026

Light falls, and the metal decides what to give back.

A close study of brass, steel and chrome - the embossed relief of the dorian collection, the mirror of a polished finish, the fine grain of a brushed one. Each surface reads the same light differently.

How I made this

I started from our own product photographs and locked each one as a reference so the shape, proportions and finish stayed exactly as manufactured - nothing about the products was redesigned. From those stills I built the scenes and generated the motion in Kling.ai, one slow move per shot and nothing more. Most of the film sits in macro, where the knurling and the polish do the work. The soundtrack was written in Suno. Everything was assembled and graded in Adobe Premiere.

Built with

  • Kling AI
  • Adobe Premiere
  • Suno

Social Media Videos

The Art of Manufacture

Chapter 01: CNC Machining

Runtime
0:41
Format
Vertical 9:16
Published
18 August 2026

Precision in motion.

A closer look at SANCO’s CNC sector, where technology, control and craftsmanship come together to shape components with accuracy and consistency.

Every movement reflects the discipline behind 100% in-house manufacturing — from machining and forming to the precision finishing that defines the final result.

Made in Athens.

How I made this

I started with original CNC machinery videos provided by the client, preserving the real machines, their movements and the manufacturing process.

I then used Kling.ai to refine the footage — removing the original factory backgrounds, creating a cleaner dark environment, adjusting the colour treatment and giving the clips a more cinematic SANCO aesthetic.

Finally, I edited the generated clips together, added background music, titles and minimal captions, refined the pacing, and completed the video with the SANCO logo at the end.

Built with

  • Kling AI

Social Media Videos

Lake Kerkini

A Call to Action for Climate Change Awareness

Runtime
1:23
Format
Landscape 16:9
Published
13 August 2026

Social Media Videos

Experience the Magic of Nature with BLOMWE

Runtime
0:15
Format
Vertical 9:16
Published
13 August 2026

Social Media Videos

Lean On Us, We Are Stable as Trees

Runtime
0:15
Format
Vertical 9:16
Published
13 August 2026

Social Media Videos

Welcome to Savage Design

Runtime
1:14
Format
Vertical 9:16
Published
13 August 2026

Social Media Videos

CNC Sector

Runtime
0:29
Format
Vertical 9:16
Published
10 August 2026

Precision in motion.

A closer look at SANCO’s CNC sector, where technology, control and craftsmanship come together to shape components with accuracy and consistency.

Every movement reflects the discipline behind 100% in-house manufacturing — from machining and forming to the precision finishing that defines the final result.

Made in Athens.

How I made this

I started with original CNC machinery videos provided by the client, preserving the real machines, their movements and the manufacturing process.

I then used Kling.ai to refine the footage — removing the original factory backgrounds, creating a cleaner dark environment, adjusting the colour treatment and giving the clips a more cinematic SANCO aesthetic.

Finally, I edited the generated clips together, added background music, titles and minimal captions, refined the pacing, and completed the video with the SANCO logo at the end.

Built with

  • Kling AI

Social Media Videos

Cosmetic Mirror X3 with LED

Runtime
0:29
Format
Portrait 4:5
Published
26 July 2026

Social Media Videos

Laser Machine

Social Media Story

Runtime
0:14
Format
Vertical 9:16
Published
13 July 2026

How I made this

I used a video clip recorded on the client’s phone. Then, I used Kling AI to make it look more professional, sharp, cinematic, and darker. I also removed the walls and extended the room to make it look infinite. For the sound, I used the original audio as a reference and prompted Kling to improve and refine it.

Built with

  • Kling AI

Social Media Videos

Hotel Amenities, Refined

Runtime
0:27
Format
Vertical 9:16
Published
6 July 2026

How I made this

I began with SANCO’s original product reference photos, preserving the exact shape, finish and proportions of each hotel amenity.

The products were placed into AI-generated luxury hotel rooms and bathrooms, then refined in Adobe Photoshop to correct details, simplify the environments and maintain a consistent visual identity.

I animated each scene in Kling.ai using slow camera movement, subtle macro close-ups, moving shadows and controlled reflections across the surfaces.

The final clips were edited in Adobe Premiere, where I refined the pacing, transitions and analog atmosphere, then added music to complete the cinematic mood.

Built with

  • Kling AI
  • Adobe Premiere
  • Adobe Photoshop

Social Media Videos

Press Machine Story

Runtime
0:13
Format
Vertical 9:16
Published
5 July 2026

Social Media Videos

Surface Finishes

Runtime
0:37
Format
Portrait 4:5
Published
29 June 2026

Social Media Videos

Academia Collection

SANCO Bathroom Accessories in a Luxury City Hotel

Runtime
0:29
Format
Vertical 9:16
Published
18 June 2026

A quiet study of the ACADEMIA collection by SANCO.

Solid volumes. Clean lines. Bathroom accessories shaped through balance, precision, and timeless restraint.

Set inside a luxurious city-hotel bathroom, the video moves through warm stone, brushed metal, soft shadows, and subtle urban light — revealing each detail with calm, architectural clarity.

Featured details include wall-mounted bathroom accessories in a refined Gun Metal Brushed atmosphere, presented through slow cinematic motion and a quietly luxurious visual language.

How I made this

I used the product reference photos to preserve the exact shape, finish, proportions, and installation character of each SANCO bathroom accessory.

The products were placed into AI-generated luxury bathroom scenes inspired by a refined city-hotel interior, with dark stone surfaces, warm window light, soft shadows, and an elegant architectural mood.

Each image was refined in Adobe Photoshop to improve composition, realism, lighting balance, product accuracy, and the overall premium atmosphere.

Then I animated the scenes in Kling.ai using super slow camera movements, subtle zooms, macro close-ups, gentle parallax, moving reflections, and soft city details.

The final edit was completed in Adobe Premiere, where I refined the pacing, transitions, color mood, and music sync to create a calm, cinematic product film.

Built with

  • Kling AI
  • Adobe Premiere
  • Adobe Photoshop

Social Media Videos

SANCO Shelf

Aegean Shower Detail

Runtime
0:10
Format
Vertical 9:16
Published
11 June 2026

A quiet shower detail, shaped by water, stone, and sea light.

The wall-mounted shelf is placed inside a refined Aegean hotel shower, surrounded by warm stone surfaces, running water, soft shadows, and a calm view of the sea.

How I made this

I used the SANCO shelf product reference from their website to preserve the exact shape, finish, proportions, wall-mounted profile, and minimal geometry of the product.

Then I generated the luxury shower image using Adobe Firefly, creating a warm architectural bathroom scene with stone textures, subtle botanical details, running shower water, and an Aegean Sea view from the window.

The image was then animated in Kling.ai with a super slow zoom toward the shelf, soft movement in the shower water, gentle sea waves outside, and a calm cinematic pace.

The audio effects were generated with Adobe Firefly, combining soft running water, distant sea waves, and a quiet luxury hotel bathroom atmosphere.

Built with

  • Kling AI
  • Adobe Firefly

Social Media Videos

SANCO Cosmetic Mirror X3

A Refined Daily Ritual

Runtime
0:06
Format
Vertical 9:16
Published
10 June 2026

A quiet moment of precision.

The SANCO Cosmetic Mirror X3 brings clarity, balance, and refined detail into the bathroom ritual. A portable magnifying mirror designed for premium interiors, with elegant proportions and easy crystal replacement for lasting use.

Created for luxury hotels, refined residences, and architectural bathroom spaces.

How I made this

I used the product reference photos from SANCO’s website to preserve the exact shape, finish, proportions, mirror angle, and used the official SANCO logo for accurate logo placement.

Then I created a luxury bathroom scene in Adobe Firefly with an elegantly dressed woman using the mirror, focusing on realistic reflection, soft shadows, stone textures, and a quiet architectural atmosphere.

The final image was animated in Kling.ai with subtle motion, slow camera movement, natural reflection behavior, and refined cinematic pacing.

Built with

  • Kling AI
  • Adobe Firefly

Social Media Videos

Lithos Toilet Roll Holder

SANCO Story

Runtime
0:15
Format
Vertical 9:16
Published
28 May 2026

A quiet study of geometry, texture, and light.

From the embossed metallic detail to the clean architectural line, ATLAS brings a discreet yet distinctive presence to the bathroom.

Minimal. Refined. Made for spaces with clarity.

How I made this

I photographed the toilet roll holder from multiple angles to capture its exact shape, brushed finish, embossed cylinder detail, and proportions.

Using these product references, I created a series of AI-generated cinematic scenes inside a luxurious, minimal bathroom inspired by ancient Greek architecture and Aegean hotel design.

Each image became a reference shot for Kling.ai, where I added slow camera movement, macro close-ups, soft rotation, dramatic shadows, and a warm analog-film atmosphere.

I then edited the final sequence in Adobe Premiere, refined the pacing, and added music to complete the premium product showcase.

Built with

  • Kling AI
  • Adobe Premiere

Social Media Videos

SANCO Open Bin 5LT

Runtime
0:29
Format
Landscape 16:9
Published
27 May 2026

A pure cylindrical form in bronze mat. Quiet, architectural, and timeless.

Designed to bring balance and discreet elegance to the bathroom space.

How I made this

Created from scratch using AI-generated visuals and motion design.

I first designed a minimal Aegean-inspired bathroom atmosphere, focusing on warm plaster, natural light, and quiet architectural texture. Then I created a still wall image as the base visual, matching the same luxury bathroom mood.

Using that image as a reference in Kling, I animated only the smallest details: a very slow zoom into the wall and subtle movement in the soft shadows, as if sunlight was passing through nearby branches.

To complete the atmosphere, I added ambient sound design: distant gentle sea waves outside the bathroom and soft shower water running off-camera, creating a calm, immersive luxury hotel feeling.

Built with

  • Kling AI

Social Media Videos

SANCO Lithos Collection

Runtime
0:19
Format
Vertical 9:16
Published
26 May 2026

Clean geometry. Fine detail. A discreet presence designed for architectural clarity.

A complete bathroom collection with cohesive aesthetics and consistent functionality across every element.

How I made this

I made this reel by using SANCO’s LITHOS product photos as exact references, placing each piece in refined architectural bathroom scenes with AI, and animating them in Kling with slow camera movement, soft natural light, and a premium analog-film finish.

Built with

  • Kling AI

Social Media Videos

SANCO Waste Bin 3lt

Soft Closing System

Runtime
0:14
Format
Vertical 9:16
Published
26 May 2026

A quiet gesture of function. Soft movement, warm bronze tones, and the calm rhythm of a luxury hotel suite.

Designed for bathrooms where every detail feels considered.

How I made this

I created the final video by first generating a luxury editorial bathroom image with the SANCO Waste Bin 3lt Soft Closing System as the hero product. Then, I created a wider lifestyle version with a woman in a white towel gently pressing the pedal. Finally, I used both images in Kling AI as a two-shot video: the first shot shows the elegant pedal interaction, and the second focuses on the waste bin as the lid closes softly, highlighting the Soft Closing feature.

Built with

  • Kling AI

Social Media Videos

SANCO Lithos Collection

Teaser

Runtime
0:17
Format
Vertical 9:16
Published
26 May 2026
Split screen: an AI chat thread in Greek on the left, a live preview of a bakery website on the right

Products & Platforms

Magic Admin

Conversational Website Management

Role
Product Design & Full-Stack Development
Timeline
Ongoing

Magic Admin replaces the traditional CMS with a conversation. Each client gets a split screen — an assistant on the left, a live preview of their own site on the right — and asks for changes in plain language, in English or Greek. The assistant reads and edits the real files, shows every tool call as it runs, and stages the result as a draft.

It runs as a single multi-tenant instance alongside the agency's existing client sites, with per-tenant credit accounting, a media library, webhooks, and an agency-side billing view over the top.

The challenge

A conversational editor has to be trusted with a live website. Every change needed to be reversible, every tenant's files had to stay sealed off from every other tenant's, and the cost of each model call had to be metered accurately enough to bill on — all while the reply streams in token by token.

What I did

Edits land in a draft layer rather than on the live site: publishing takes a lock, writes atomically, and records a snapshot that rollback can replay. Tenancy is enforced in the query layer, scoped by a tenant id taken from the session and never from the request. Usage is metered per call and converted to credits with an integer-safe formula, and the model sits behind a provider interface so a backend can be swapped without the chat route knowing. The front end is vanilla JavaScript with no framework and no build step, on a token system that carries AA-contrast pairs through both themes.

Gallery

Built with

  • Node.js
  • Fastify
  • MySQL
  • Vanilla JavaScript
  • Claude API
  • DeepSeek
  • Server-Sent Events
  • Sharp
  • PM2
  • Nginx
Three-panel game screen: character sheet, Greek narration over a watermill scene, and a location panel

Products & Platforms

What Do You Do

AI-Narrated RPG

Role
Product Design & Full-Stack Development
Timeline
Ongoing

What Do You Do is a browser RPG in which the game master is a language model. It narrates the world and voices its characters, while a deterministic TypeScript rule engine owns everything mechanical — dice, damage, travel, quests — so the story can be improvised without the rules ever becoming negotiable.

Characters are built in five steps and finish by answering an in-character questionnaire, which the model turns into a backstory, traits, fears and motivations. The narrator's language is chosen in that first step and locked for the life of the character, because the synthesized backstory, the memories and the entire exchange history are written in it.

The challenge

A language model will happily invent a rule, a number, or an outcome that suits the story it wants to tell. If the narrator decided whether an attack landed, nothing in the game would be falsifiable — and a second language could not simply be a translation layer, because the character's own history is generated prose.

What I did

Mechanics never leave the rule engine. The narrator receives the result of a roll and is asked to describe it, not to determine it: the perception check in the first screenshot is rolled, compared against a difficulty class and reported before a word of prose exists. Greek is a first-class narrator language rather than an interface translation — it is fixed at creation and the generated backstory, memories and exchanges are all written in it. State lives in Postgres with pgvector for recall, and the multiplayer server is separate from the web app in a Turborepo workspace.

Gallery

Built with

  • TypeScript
  • Next.js
  • Colyseus
  • PostgreSQL
  • pgvector
  • Drizzle ORM
  • Turborepo
  • Claude API
  • Better Auth
  • Docker
Menu editor with category and item rows, each name repeated across English, Greek, German and Spanish fields

Products & Platforms

Paper86

Restaurant Operations Platform

Role
Product Design & Full-Stack Development
Timeline
Ongoing

Paper86 is a multi-tenant platform for restaurants and cafés: menus, floor plans, staff and roles, waiter ordering, a kitchen display, and QR self-ordering for guests. One owner runs several stores under a single organization, each on its own subscription.

It is multilingual in a way that matters operationally. The interface ships in English, Greek and German, but a store's menu content is not limited to those — an owner picks whichever languages they actually serve in, and every content form grows a field per language. A guest scanning the QR code at their table reads the menu in the language they choose, prices and modifier groups intact.

The challenge

Restaurant content is not one language with translations bolted on. A taverna in Athens wants Greek and English; a place in Berlin wants German and Turkish; a hotel restaurant may want six. The set is not known when the schema is written, and hard-coding a column per language would have meant a migration for every new market.

What I did

Store content locales are free-form ISO codes with English as the required primary, so adding a language is a settings change rather than a migration. Content forms render one input per configured locale and the server actions parse fields dynamically from the store's own locale list, so the same code path serves a two-language store and a ten-language one. Everything else is scoped by tenant: an organization owns stores, stores own menus, tables and staff, and the data layer runs inside a tenant context rather than trusting an id from the request.

Gallery

Built with

  • Next.js
  • TypeScript
  • PostgreSQL
  • Drizzle ORM
  • Tailwind CSS
  • better-auth
  • next-intl
  • Zod
  • Stripe
  • Vitest
  • Playwright

Sound