MX Travel
travel.mavex.aeOperations, finance and HR for travel companies, one workspace per company.
Four products, five repositories, one way of working. This is the real list, taken from the code: what each product is built with, where it runs, how it stays safe, and the checks every change has to pass.
Each product is its own codebase on its own domain. The layers below tag every tool with the products that use it.
Operations, finance and HR for travel companies, one workspace per company.
The car market for buyers, and the system dealerships run their stock and books on.
Live auctions on the phone, with deposits, bidding and handover in one app.
Compares business and first class fares across departure airports.
Four products, three ways of drawing a screen, one rule: both languages, equally.
Every web app is React in strict TypeScript, bundled with Vite.
Typed calls from the market and the dealer system straight to the API. A renamed field breaks the build, not the page.
Styling for the travel workspace, held to a design-system checklist that only lets the score go up.
One codebase for the auction app on iPhone and Android.
The travel system installs to a phone or desktop home screen like a native app.
Server-rendered pages from one Python process; fare results stream in as each airport answers.
This site: hand-written pages with no framework, checked for broken markup before every deploy.
Every product ships both languages with mirrored right-to-left layouts. Arabic type is designed in from the start.
Relational where money is involved, a document store where the app is live and mobile, and nothing heavier than the job needs.
MX Travel and Mavex for Dealers each run on one managed Postgres database.
Money events are written once to a hash-chained log. Balances are projections of it that can be replayed and reconciled.
34 Deno functions for invitations, email, billing and messaging, next to the database.
The Market API: typed queries, validated input, and an outbox so events leave only after the record is saved.
Firestore, Auth, Storage and Cloud Functions. Bids are placed by the server, never written by the phone.
Mn Wain runs on the Python standard library alone, with a single database file on a persistent disk.
47 jobs on a clock: payroll drafts, leave accrual, revenue recognition, reminders, retention and billing.
Invoices, vouchers and itineraries are rendered in headless Chromium with Arabic fonts embedded.
Photos are resized and watermarked, and the printed zone on the back of an ID card is read from a photo instead of typed.
Each product uses the provider that fits it, and every webhook is verified before it touches a record.
Hosted checkout and signed webhooks: Travel subscriptions and customer payments, auction deposits and listing fees.
Search-token top-ups on Mn Wain.
Transactional email for MX Travel, with delivery webhooks and automatic retries.
Account email for the auction app (SendGrid) and Mn Wain (Resend).
A dealership sends from its own mailbox: SMTP, Microsoft 365, Gmail, Amazon SES, Resend, Postmark, Mailgun or SendGrid.
Customer conversations inside the travel workspace, connected per company.
Push alerts when you are outbid or an auction you watch is about to end.
Live Google Flights fares for Mn Wain under a monthly budget cap; destination forecasts for travel companions.
Models write drafts from facts we pass in. They do not invent prices, and they do not get the last word.
Drafts a personal trip guide from the bookings, the traveller’s preferences, a country brief and the forecast. A cost guard runs before the call, a validator after it, one retry, then a person.
Each company picks Claude Sonnet, Haiku or Opus for its companions, and every run is recorded with its provider and model.
Writes listing copy in English or Arabic from the car’s own record. The dealership chooses the provider: Anthropic, OpenAI, Azure OpenAI or a compatible endpoint.
A dealership’s AI key is stored encrypted and never sent back to the browser.
Each listing photo gets a perceptual fingerprint, a metadata read and an OCR pass, so a picture reused from another dealer or another car is flagged.
Managed platforms, so our time goes into the product and not into servers.
The travel app with its serverless API and 19 cron routes, Market’s showcase, dealer system and console, and this site.
Managed Postgres, sign-in, file storage and edge functions.
Containers for long-running servers: the Market API with its background dispatcher, and Mn Wain.
The auction’s database, functions, file storage and hosting.
Builds, guards, database migrations and scheduled jobs all run here.
travel.mavex.ae, mavex.ae, dealers.mavex.ae, mnwain.ae and about.mavex.ae.
Isolation is enforced in the database, not only in the screen. Backups are restored, not just taken.
Every MX Travel table has row-level security. Market’s app connects as a restricted role that cannot step around it.
The auction’s database and uploads are locked by rules; admin actions run as server functions.
Supabase Auth on Travel; passkeys and scrypt-hashed sessions on Market; salted PBKDF2 with HttpOnly cookies on Mn Wain.
Cloudflare Turnstile on public forms, rate limits on the Market API.
Payment keys live only in server environment variables; the database stores the variable’s name, never the key.
Who changed what, and when, recorded by the system rather than remembered by people.
A daily backup is taken, validated and kept encrypted for 90 days. Every week production is restored into a throwaway database and checked.
Sentry on the travel app and the Market API, Crashlytics and Performance Monitoring on the auction app, and an ops monitor that reports every four hours.
A read-only smoke test walks production every morning, and every deploy is confirmed to serve the exact commit that was merged.
A critical vulnerability in a dependency blocks the merge on Travel, and GitHub alerts watch every repository.
This site refuses to be framed and sends strict content-type, referrer and permissions headers on every page.
Rules we wrote down once and made the build enforce, so nobody has to remember them.
Market is one workspace: four apps on shared core and domain packages, with cached builds.
The build fails if one business domain reaches into another.
Unit tests on every change, browser smoke tests against the running app, and 281 SQL check files for the travel database.
CI buys, reconditions and sells a car against a real database, and fails if the books disagree.
Our own lint rules, a hooks-order guard and a dead-code check on every pull request.
The brand components shared by Travel and Market are compared on every build, and both marketing sites must make the same promise.
No pull request merges without a version bump, and production reports the version it is running.
More than 6,100 commits across five repositories, each one a readable step.


Pull requests without a version bump do not merge, and production answers with its version, so we always know which build a customer is on.
Migrations ship through a single gated workflow. One marked hold cannot reach production, and every morning the repository is compared with what production has applied.
Structure, governance, design-system and sign-in safety checks run on every pull request, next to type checks, unit tests and a production-identical build.
Daily encrypted backups, and a weekly drill that restores production into a throwaway database. A drill that cannot run fails red instead of passing quietly.
A read-only smoke test every morning, an ops monitor every four hours, and error tracking on every app.
A cost guard before the model is called, a validator after it, and a person when it fails twice.
The spiral mark is drawn by code. It rotates with your scroll, scales from favicon to wall, and never pixelates because it is pure geometry.
Space Grotesk carries the headlines, Inter handles the reading, and IBM Plex Sans Arabic gives the Arabic voice equal weight, designed together with the Latin, never after it.
The signal lines, the rotating core and the colours that shift between sections are drawn live on canvas and SVG, with a reduced-motion mode for anyone who prefers stillness.
Licensed photographs of real people and places, graded into the brand palette inside the file, then feathered into the page so no photo sits in a hard frame.
The other half is what they do for a travel agent, a dealer or a family buying a car. See the technology, then meet the products.
SEE THE TECHNOLOGY