[{"data":1,"prerenderedAt":204},["ShallowReactive",2],{"project-tuvaju-travel-booking-en-US":3},{"id":4,"title":5,"body":6,"categories":179,"dateEnd":190,"dateStart":191,"description":192,"extension":193,"image":194,"link":195,"locale":196,"meta":197,"navigation":198,"path":199,"published":198,"seo":200,"slug":201,"stem":202,"__hash__":203},"projects\u002Fprojects\u002Ftuvaju-travel-booking.en-US.md","Travel tickets & tours booking MVP",{"type":7,"value":8,"toc":166},"minimark",[9,13,25,30,33,37,40,44,47,51,54,106,111,114,128,132,138,141,145,148,158,162],[10,11,5],"h1",{"id":12},"travel-tickets-tours-booking-mvp",[14,15,16,20,21,24],"p",{},[17,18,19],"strong",{},"Stack:"," Vue.js · Node.js · TypeScript · AdonisJS · PostgreSQL · Tailwind · Vite · Datadog · Cloudflare · Heroku\n",[17,22,23],{},"Services:"," Product architecture · Full-stack development · UI\u002FUX · Observability · CI\u002FCD · AI-assisted delivery",[26,27,29],"h2",{"id":28},"overview","Overview",[14,31,32],{},"We built the MVP of a web app that lets a seasoned travel marketer sell attraction tickets and tours directly to travellers. It plugs into a ticketing provider's API for instant access to hundreds of attractions, tours and tickets, and it also lets the founder list his own hand-picked tours for healthier margins. We launched focused on Thailand, with the architecture built to scale to new countries soon.",[26,34,36],{"id":35},"the-client","The Client",[14,38,39],{},"The founder once ran his own travel agency and is exceptional at marketing and traffic acquisition. He had the audience, the industry know-how and a clear commercial instinct — what he was missing was the technical foundation to turn that into a product he owns. Together we paired his travel expertise with modern tech so he could sell directly to customers instead of routing everyone through someone else's platform.",[26,41,43],{"id":42},"the-challenge","The Challenge",[14,45,46],{},"Strong traffic only pays off if there's a product ready to receive it. The founder needed to aggregate live inventory from a ticketing provider, present hundreds of attractions and tours cleanly, and let people book — all while staying fast and trustworthy on mobile. There was no existing tech foundation and no design team, so the MVP had to be built to scale from day one without cutting corners on quality or experience.",[26,48,50],{"id":49},"the-strategy","The Strategy",[14,52,53],{},"We made deliberate engineering choices to keep the product both fast to iterate and ready to grow:",[55,56,57,64,70,76,82,88,94,100],"ul",{},[58,59,60,63],"li",{},[17,61,62],{},"End-to-end TypeScript."," We built the full backend in TypeScript so it could share types and contracts with the TypeScript frontend — fewer integration bugs, faster changes.",[58,65,66,69],{},[17,67,68],{},"A backend built to scale."," We followed an event-based architecture paired with Domain-Driven Design and Hexagonal Architecture, keeping business logic clean and the system easy to extend country by country.",[58,71,72,75],{},[17,73,74],{},"A base-component design system."," On the frontend, a \"base component\" approach kept styles consistent across the project and UI bugs to a minimum.",[58,77,78,81],{},[17,79,80],{},"UI\u002FUX we owned end to end."," With no designer on the team, we implemented the full interface ourselves — loading and error states, form responses, instant feedback, safe error handling, and a fully responsive layout for a seamless mobile experience.",[58,83,84,87],{},[17,85,86],{},"An admin panel that runs the business."," We built a fully functional admin so the team can handle the day-to-day on their own — no developer or technical person in the loop. That independence is what lets them give end-users the fastest, best service possible.",[58,89,90,93],{},[17,91,92],{},"First-rate observability."," We set up telemetry and automatic bug catching with Datadog, so issues surface before users have to report them.",[58,95,96,99],{},[17,97,98],{},"A safety net of tests + CI\u002FCD."," Unit tests around business classes and behaviours, plus high-level HTTP end-to-end tests, all run through a full CI\u002FCD pipeline that tests and builds on every deploy.",[58,101,102,105],{},[17,103,104],{},"Security and speed."," Cloudflare guards against bots and brute-force attacks, and a CDN serves and transforms assets to cut users' data usage and improve Core Web Vitals like load speed.",[107,108,110],"h3",{"id":109},"ai-assisted-delivery","AI-assisted delivery",[14,112,113],{},"A small team shipped like a large one by leaning on AI the right way:",[55,115,116,119,122,125],{},[58,117,118],{},"We ran Claude and Codex in a concurrent, parallelised workflow — up to five agents working on different features at once, each handling its own coding, testing, documentation and deployment.",[58,120,121],{},"An automatic AI code-review action checks every change for quality and good patterns.",[58,123,124],{},"We followed the OpenSpec framework to document and scale the work in a structured way, independent of any particular model.",[58,126,127],{},"We wrote custom agent skills so the agents could debug and ship features faster and with more certainty.",[26,129,131],{"id":130},"testimonial","Testimonial",[133,134,135],"blockquote",{},[14,136,137],{},"Working with Ivan and Studio Prats has been great, specially the communication and the way he brought his own experience and feedback to the product.",[14,139,140],{},"— Dirk van der Zaan, Founder, Tuvaju",[26,142,144],{"id":143},"a-look-at-the-product","A look at the product",[14,146,147],{},"Curated destinations on the storefront, a detail page for every attraction and tour, real traveller reviews, and the admin behind it all that keeps inventory in sync.",[149,150],"img",{"src":151,"loading":152,"className":153},"\u002Fimages\u002Fprojects\u002Ftuvaju-attraction-page.png","lazy",[154,155,156,157],"mt-6","mx-auto","px-4","max-w-xl",[149,159],{"src":160,"loading":152,"className":161},"\u002Fimages\u002Fprojects\u002Ftuvaju-reviews.png",[154,155,156,157],[149,163],{"src":164,"loading":152,"className":165},"\u002Fimages\u002Fprojects\u002Ftuvaju-admin-attractions.png",[154,155,156,157],{"title":167,"searchDepth":168,"depth":168,"links":169},"",2,[170,171,172,173,177,178],{"id":28,"depth":168,"text":29},{"id":35,"depth":168,"text":36},{"id":42,"depth":168,"text":43},{"id":49,"depth":168,"text":50,"children":174},[175],{"id":109,"depth":176,"text":110},3,{"id":130,"depth":168,"text":131},{"id":143,"depth":168,"text":144},[180,181,182,183,184,185,186,187,188,189],"Full stack","Vue.js","Node.js","Typescript","AdonisJS","PostgreSQL","MVP","TailwindCSS","B2C","Travel","2026-02-01","2025-08-01","Stack: Vue.js · Node.js · TypeScript · AdonisJS · PostgreSQL · Tailwind · Vite · Datadog · Cloudflare · Heroku\nServices: Product architecture · Full-stack development · UI\u002FUX · Observability · CI\u002FCD · AI-assisted delivery","md","\u002Fimages\u002Fprojects\u002Ftuvaju-homepage.png","https:\u002F\u002Ftuvaju.com","en-US",{},true,"\u002Fprojects\u002Ftuvaju-travel-booking.en-us",{"title":5,"description":192},"tuvaju-travel-booking","projects\u002Ftuvaju-travel-booking.en-US","PnsjKXY5m3KqrE7PBy9o4trQLeqfodxt32PUWkN0NYU",1782220048443]