Skip to content
Grandhosting screenshot

Grandhosting

TypeScript Next.js Hono Bun Supabase Stripe Redis Kubernetes

2025 - Present

A full-scale web hosting platform I'm building from the ground up as founding fullstack engineer. It handles domain management, email hosting, WordPress provisioning, and Stripe billing, powered by a Next.js frontend and a Hono/Bun API backed by Supabase, Redis, and Kubernetes.

About

Grandhosting exists because most hosting control panels have barely changed in twenty years. We set out to build one that a developer would actually enjoy using, without the cruft.

The result: a customer goes from nothing to a running WordPress site with a custom domain and email in under five minutes.

Architecture

The platform is split across three repositories. The frontend is a Next.js 14 app using server components and TanStack Query, with a component library built on Radix UI and shadcn/ui.

The API is a Bun-powered Hono server with OpenAPI documentation generated from its Zod route definitions. A third repo holds the Docker base images for customer WordPress instances.

Supabase provides the Postgres database with row-level security for tenant isolation. Redis powers rate limiting, caching, and sessions. Stripe manages all billing: subscriptions, one-time payments, invoices, and webhook events.

Graphile Worker runs the async jobs (domain provisioning, email setup, invoice generation) with retry logic and dead-letter handling.

Domain registration talks to registrars directly: EPP for .gr domains through the Greek registry and OpenProvider for other TLDs. DNS management runs end to end through the platform, from record storage in the API down to the dashboard where customers edit their zones.

The API exposes 16 route domains covering billing, domains, emails, invoices, notifications, plugins, security, SFTP, themes, wallets, webhooks, websites, and WordPress image management.

My Role

As a founding fullstack engineer, I’ve touched every layer of the platform. I architected and built the API, and I’m the top contributor on the backend repo. On the frontend, I’ve worked across most of the core flows and pages.

The domain system is mine end to end: the EPP and OpenProvider registrar integrations, the provisioning jobs, and DNS management from the backend to the dashboard UI.

What I Learned

The hardest lesson was making multi-step provisioning safe to retry. Every job has to be idempotent, because a domain that half-registers or an email account that half-provisions is worse than one that fails cleanly.

Stripe taught me that billing is a distributed systems problem. Webhooks arrive out of order and retry on their own schedule, so the state in your database has to be reconciled against Stripe, never assumed.

Row-level security changed how I write queries. When tenant isolation is enforced in the database instead of the application, every table design starts with the question of who is allowed to see this row.

Running customer WordPress sites on Kubernetes meant operating other people’s workloads: resource limits, noisy neighbors, and upgrades that cannot take a paying customer offline.

Being a founding engineer taught me the tradeoff that matters most: what to build properly and what to ship fast, when you are the one who has to live with both decisions.

Today

Grandhosting is live at grandhosting.gr and serving paying customers. I’m still there, shipping across the whole stack.