Case study
Etivon
Website, API and dashboard for an educational travel company: tours, bookings and payments for schools, independent travelers and staff.

Etivon
What it is
Etivon is an educational travel company. The platform is a monorepo with three deployed pieces: a public website, a JSON API, and a customer dashboard.
The public site at etivon.com presents school tours and international competitions across 60 plus destinations, with an interactive world map and a quote request form. It is a static Astro 5 build with React islands, served as Cloudflare Workers static assets.
The dashboard at app.etivon.com is where schools, independent travelers and staff manage trips, bookings and payments. It talks to api.etivon.com, a Hono application on Cloudflare Workers backed by D1 through Drizzle and two R2 buckets.
My role
I am the sole developer. I designed the schema, wrote all three applications and the types shared between them, and shipped the platform to production between August and September 2026.
Stack
- Astro 5
- React 19
- React Router 7
- Vite
- Tailwind CSS 3.4
- Hono
- Cloudflare Workers
- D1
- Drizzle
- R2
- TypeScript
Highlights
- Built the whole platform as a monorepo with three deployed pieces: a public marketing site, a JSON API, and a customer dashboard, all running on Cloudflare.
- Implemented api.etivon.com as a Hono application on Cloudflare Workers backed by D1 (SQLite through Drizzle) and two R2 buckets.
- Built etivon.com as a static Astro 5 site with React islands, served as Workers static assets, covering school tours and international competitions across 60 plus destinations, an interactive world map, and a quote request form.
- Built app.etivon.com as a React 19 and React Router 7 dashboard on Vite and Tailwind 3.4, where schools, independent travelers and staff manage trips, bookings and payments.
- Designed the relational schema, the TypeScript types shared across all three applications, and the deployment pipeline for each Worker.
Gallery

Next project
OfferTrail