Challenge
Launch hosting for our own and our clients' projects, where ordering, paying and managing services is clear without calling support. The website has to be fast, bilingual and comfortable on mobile.
Solution
A pnpm and Turborepo monorepo with two services: a Next.js web app and a Hono (Node.js) API. Database schema and migrations use Drizzle on MariaDB, authentication runs on Better Auth, translations on next-intl. Billing, email templates, UI components and validation schemas live in shared packages.
What we built
- A marketing site with NOVA, BOOST and APEX plans, FAQ, two languages (UA/EN), light and dark themes.
- Sign-up, sign-in and a customer dashboard: ordering a plan and topping up the balance.
- Card payments via monobank and an internal wallet.
- Transactional emails from shared templates.
- CI/CD in Gitea: a push to main builds Docker images and restarts only the apps, while migrations run in a separate workflow that backs up the database first.
Outcome
The service has been running reliably for more than two years: European data centres, NVMe storage, daily backups. We host client projects on it, so we know the infrastructure from the inside, not just from the docs.