Isra Voyages
Full-stack developer / Product design · Since 2025
Visit the site
Guided travel, from the need to the online booking.
The need
The website is the agency's main sign-up channel: departures, quotas, a clear funnel, traveler follow-up, and a booking that several people can pay for.
My contribution
Wireframes and user stories for my scope, then the public site, the client portal, the back-office and the booking lifecycle API. Stripe payments built as a team.1
What was delivered
The platform is in production and serves as the main sign-up channel. V2 is live on all three interfaces.
What I built
Three interfaces and one API, sharing the same TypeScript SDK generated from the API contract.
Public site
The catalog and the booking, in one place.
Trip pages rendered server-side for SEO, a guided booking funnel, and a payment that several people can split, each with their own link.
Next.js · Zustand · Stripe Elements
Client portal
Follow your booking without calling the agency.
Bookings, travelers and payments in one dashboard, with a menu for each client company.
React · Vite · TanStack Query
Back-office
Create a booking in five steps.
Trip, package, organizer, passengers, summary. Passenger import from a CSV file, tracking of the amounts left to collect.
React · React Router · CSV
API
One API for the three interfaces.
Departures, quotas, sign-ups and statuses. Automatic reminders for missing documents and pending payments.
Node.js · Hono · PostgreSQL · pg-boss
Tech stack
- Interfaces
- Next.jsReactViteTanStack QueryZustandTailwind CSS
- API
- Node.jsTypeScriptHonoOpenAPIZod
- Data
- PostgreSQLTypeORMpg-boss
- Quality
- VitestTesting LibraryMSWTestcontainers
- Payment
- Stripe1
- Deployment
- Docker
1. Stripe payments (charges, refunds, disputes, webhooks, split payment between several payers) were built together with the mission architect.

