[{"data":1,"prerenderedAt":1087},["ShallowReactive",2],{"medworks-longevity-membership-neighbours-en-US":3},[4,40,419,753,893],{"id":5,"title":6,"body":7,"categories":18,"dateEnd":24,"dateStart":25,"description":13,"extension":26,"image":27,"link":28,"locale":29,"meta":30,"navigation":31,"path":32,"published":31,"seo":33,"services":34,"slug":37,"stem":38,"__hash__":39},"projects\u002Fprojects\u002Fkyle-cavan.en-US.md","Kyle Cavan: a Shopify storefront built to convert — and to scale",{"type":8,"value":9,"toc":14},"minimark",[10],[11,12,13],"p",{},"Kyle Cavan is a New York jewelry brand on Shopify with strong mobile traffic and a low conversion rate from product discovery to completed purchase. We redesigned its collection and product pages into a calm, step-by-step buying journey, and built a modular collection template the team now fills without touching code.",{"title":15,"searchDepth":16,"depth":16,"links":17},"",2,[],[19,20,21,22,23],"Shopify","E-commerce","UI design","Desktop & mobile","Modular templates","2026-09-01","2026-07-01","md","https:\u002F\u002Fcdn1.studioprats.com\u002Fmarkdown-editor-uploads\u002Fproject_kylecavan_hero-pendants-65570e48-cda5-4ce9-8799-fca1329753e8.jpg","https:\u002F\u002Fkylecavan.com","en-US",{},true,"\u002Fprojects\u002Fkyle-cavan.en-us",{"title":6,"description":13},[35,36],"e-commerce-shopify","redesign","kyle-cavan","projects\u002Fkyle-cavan.en-US","UoC6FEs3N5L3y4t42azEe-Vh7EWn0WoH0WyDnz5GEJs",{"id":41,"title":42,"body":43,"categories":393,"dateEnd":15,"dateStart":406,"description":407,"extension":26,"image":408,"link":409,"locale":29,"meta":410,"navigation":31,"path":411,"published":31,"seo":412,"services":413,"slug":416,"stem":417,"__hash__":418},"projects\u002Fprojects\u002Fmedworks-longevity-membership.en-US.md","From MVP to native app: a longevity membership for a premium LA clinic",{"type":8,"value":44,"toc":380},[45,49,56,61,75,88,92,95,99,102,108,112,115,118,124,128,131,134,141,148,152,155,158,164,167,173,176,182,188,192,207,210,233,236,240,243,289,292,296,304,315,318,322,325,362,366,377],[46,47,42],"h1",{"id":48},"from-mvp-to-native-app-a-longevity-membership-for-a-premium-la-clinic",[11,50,51,55],{},[52,53,54],"strong",{},"Services:"," UI\u002FUX design · Web platform · iPhone app · Membership & credits system · Marketing website · AI assistant integration",[57,58,60],"h2",{"id":59},"overview","Overview",[11,62,63,66,67,70,71,74],{},[52,64,65],{},"Medworks"," is a private longevity membership for a premium Los Angeles wellness clinic. We designed and built the whole platform — a calm, editorial storefront where the clinic's members buy a monthly membership, earn credits, book in-clinic services, and order peptides matched to their own health goals. It went from idea to ",[52,68,69],{},"over $10,000 in monthly recurring revenue within the first month",". Eight months on, Medworks has ",[52,72,73],{},"active members in the hundreds, tens of thousands of dollars in monthly recurring revenue",", and a native iPhone app its members carry everywhere.",[76,77],"img",{"src":78,"alt":79,"width":80,"height":81,"loading":82,"className":83},"https:\u002F\u002Fcdn1.studioprats.com\u002Fcdn-cgi\u002Fimage\u002Fwidth=1152,quality=80,fit=scale-down,format=auto\u002Fmarkdown-editor-uploads\u002Fproject_medworks_medworks-product-catalog-68e4bd76-39fc-4f76-a6ff-546f6e84bb51.png","Medworks members' storefront product catalog",1152,886,"lazy",[84,85,86,87],"mt-6","mx-auto","px-4","max-w-xl",[57,89,91],{"id":90},"the-client","The Client",[11,93,94],{},"Robert runs an established premium wellness clinic in LA with an existing base of clients. He could legally provide peptides to those members, and he wanted a secure, streamlined way for them to purchase and manage everything in one place — without the friction of a generic online store. The goal was a membership that grants monthly credits to spend on in-clinic appointments, plus a private store where only members can order the peptides chosen for their health needs and lifestyle.",[57,96,98],{"id":97},"the-challenge","The Challenge",[11,100,101],{},"This is not a typical shop. Medworks sells two very different things side by side: an ongoing membership, and one-off peptide orders that only members are allowed to place. Members pay monthly and receive credits to spend on in-clinic appointments, while their peptides are bought separately, one order at a time, from a store that stays closed to everyone else. That meant getting a real credits system right — rollover rules, monthly caps, paid top-ups — alongside secure handling of a sensitive and regulated product, a premium, editorial feel that earns trust from members paying hundreds of dollars a month, and an offer flexible enough to change shape as the clinic learned what its members wanted. On top of that, it had to ship fast and then keep evolving with paying members already on board.",[76,103],{"src":104,"alt":105,"width":80,"height":106,"loading":82,"className":107},"https:\u002F\u002Fcdn1.studioprats.com\u002Fcdn-cgi\u002Fimage\u002Fwidth=1152,quality=80,fit=scale-down,format=auto\u002Fmarkdown-editor-uploads\u002Fproject_medworks_medworks-membership-options-c6c15c37-6f4e-4148-94c2-11ad90c722e9.png","Medworks membership options",896,[84,85,86,87],[57,109,111],{"id":110},"the-strategy","The Strategy",[11,113,114],{},"We built Medworks on one foundation that everything else plugs into: a single members' platform that holds memberships, credits, orders and bookings, with the clinic's own business rules written into it rather than bolted on. That keeps the experience seamless for members, and lets us change things safely and often — we update the live product several times a week without members ever noticing downtime.",[11,116,117],{},"Keeping the membership and credits logic in our own platform means the business rules — monthly longevity credits, a one-month rollover capped at twelve, and $50 top-up credits — are fully owned and easy to adjust as the offer matures. We structured the member journey around clarity: a quiet, editorial storefront, a guided onboarding that walks each member from sign-up through medical form, VO2 Max test, and consultation, and a personal account where they can see their credit balance, order history, and reports at a glance.",[76,119],{"src":120,"alt":121,"width":80,"height":122,"loading":82,"className":123},"https:\u002F\u002Fcdn1.studioprats.com\u002Fcdn-cgi\u002Fimage\u002Fwidth=1152,quality=80,fit=scale-down,format=auto\u002Fmarkdown-editor-uploads\u002Fproject_medworks_medworks-member-account-541c2282-7a5a-45ea-8171-150491fa8117.png","Medworks member account with credit balance",921,[84,85,86,87],[57,125,127],{"id":126},"design-system","Design System",[11,129,130],{},"Before the first page was built, we set up a simple design system for Medworks: a small palette of colours, a handful of typefaces, and a set of building blocks — buttons, form fields, cards — that every screen is made from. It starts small on purpose, so it's quick to put in place, and it's built to grow as the product does.",[11,132,133],{},"That early investment pays off every week. The storefront, the admin, the iPhone app, the marketing website and even the emails all speak the same visual language, so Medworks feels like one brand wherever a member meets it — and every new page we add looks right from day one, instead of drifting into a patchwork of styles.",[76,135],{"src":136,"alt":137,"width":138,"height":139,"loading":82,"className":140},"https:\u002F\u002Fcdn1.studioprats.com\u002Fcdn-cgi\u002Fimage\u002Fwidth=1152,quality=80,fit=scale-down,format=auto\u002Fmarkdown-editor-uploads\u002Fproject_medworks_medworks-design-colors-1e173f73-e538-4962-a351-c6697a6df05d.png","Medworks design system colour palette",734,295,[84,85,86,87],[76,142],{"src":143,"alt":144,"width":145,"height":146,"loading":82,"className":147},"https:\u002F\u002Fcdn1.studioprats.com\u002Fcdn-cgi\u002Fimage\u002Fwidth=1152,quality=80,fit=scale-down,format=auto\u002Fmarkdown-editor-uploads\u002Fproject_medworks_medworks-design-components-feee1165-51da-41df-b557-0ea618385f81.png","Medworks design system components: buttons, inputs and cards",752,610,[84,85,86,87],[57,149,151],{"id":150},"the-admin","The Admin",[11,153,154],{},"Member experience was the priority — and great member experience depends on a team that can respond fast. So we built Medworks its own admin alongside the storefront, giving the team full control of day-to-day operations without ever needing us in the loop. From one place they can manage members, adjust credit balances by hand when a member needs help, review subscriptions and product recommendations, and follow each person's VO2 Max history. Every credit movement is logged and traceable — a subscription refill, a booked appointment, a manual correction — so support can answer any member question with confidence. The result is an agile, empowered customer-service team that keeps the premium experience feeling personal at every touchpoint.",[11,156,157],{},"The admin now works from a phone too, and the team runs more of the business themselves — adding members, granting complimentary memberships, managing therapies and member photos, and sending announcements straight to the app. The emails that guide each new member from welcome to VO2 test, results and consultation now go out on their own, so Robert no longer sends them by hand.",[76,159],{"src":160,"alt":161,"width":80,"height":162,"loading":82,"className":163},"https:\u002F\u002Fcdn1.studioprats.com\u002Fcdn-cgi\u002Fimage\u002Fwidth=1152,quality=80,fit=scale-down,format=auto\u002Fmarkdown-editor-uploads\u002Fproject_medworks_medworks-admin-therapies-d8ae31b6-e892-493c-9518-526276ef65d4.png","Medworks admin: the clinic's therapies, with their credit cost",544,[84,85,86,87],[11,165,166],{},"Each member gets their own recommended therapies, with personal instructions from the clinical team, which then show up on their phone.",[76,168],{"src":169,"alt":170,"width":80,"height":171,"loading":82,"className":172},"https:\u002F\u002Fcdn1.studioprats.com\u002Fcdn-cgi\u002Fimage\u002Fwidth=1152,quality=80,fit=scale-down,format=auto\u002Fmarkdown-editor-uploads\u002Fproject_medworks_medworks-admin-member-therapies-54007743-0d09-4ec9-b8e0-50f2f72bc487.png","Medworks admin: recommending therapies to a member",720,[84,85,86,87],[11,174,175],{},"And when the clinic has news, the team can reach every member's phone in seconds.",[76,177],{"src":178,"alt":179,"width":80,"height":180,"loading":82,"className":181},"https:\u002F\u002Fcdn1.studioprats.com\u002Fcdn-cgi\u002Fimage\u002Fwidth=1152,quality=80,fit=scale-down,format=auto\u002Fmarkdown-editor-uploads\u002Fproject_medworks_medworks-admin-notifications-d8186e8f-0b6e-428d-bb00-ea93a6b08f5e.png","Medworks admin: sending a notification to every member's phone",400,[84,85,86,87],[76,183],{"src":184,"alt":185,"width":80,"height":186,"loading":82,"className":187},"https:\u002F\u002Fcdn1.studioprats.com\u002Fcdn-cgi\u002Fimage\u002Fwidth=1152,quality=80,fit=scale-down,format=auto\u002Fmarkdown-editor-uploads\u002Fproject_medworks_medworks-admin-credit-history-945a68b4-e39a-4aab-a4f1-ccf51314a3a2.png","Medworks admin credit history",798,[84,85,86,87],[57,189,191],{"id":190},"the-app","The App",[11,193,194,195,198,199,206],{},"Members don't live in a browser tab — they live on their phone. So we designed and built ",[52,196,197],{},"Medworks Members",", a native iPhone app now ",[200,201,205],"a",{"href":202,"rel":203},"https:\u002F\u002Fapps.apple.com\u002Fus\u002Fapp\u002Fmedworks-members\u002Fid6807562957",[204],"nofollow","live on the App Store",".",[11,208,209],{},"Members sign in with one tap from their email and land on a Home that tells them exactly where they stand: their current treatment, the peptides approved for them, and the therapies their team recommends. From there they book and reschedule clinic sessions with their credits, open their VO2 Max reports, watch a short video of every therapy before trying it, and message the clinic in a private chat. Notifications give the team a direct, personal line to every member.",[211,212,218,219,218,225,218,229],"div",{"className":213},[84,85,86,214,215,216,217],"max-w-3xl","grid","grid-cols-3","gap-4","\n  ",[76,220],{"src":221,"alt":222,"width":223,"height":224,"loading":82},"https:\u002F\u002Fcdn1.studioprats.com\u002Fcdn-cgi\u002Fimage\u002Fwidth=600,quality=80,format=auto\u002Fmarkdown-editor-uploads\u002Fproject_medworks_medworks-app-home-440a1184-0fef-4392-9121-b6255b570115.png","Medworks app Home screen",600,1304,[76,226],{"src":227,"alt":228,"width":223,"height":224,"loading":82},"https:\u002F\u002Fcdn1.studioprats.com\u002Fcdn-cgi\u002Fimage\u002Fwidth=600,quality=80,format=auto\u002Fmarkdown-editor-uploads\u002Fproject_medworks_medworks-app-book-ce5a030c-eeb3-4c81-bd71-f02c6025670b.png","Medworks app Book screen with the member's credits",[76,230],{"src":231,"alt":232,"width":223,"height":224,"loading":82},"https:\u002F\u002Fcdn1.studioprats.com\u002Fcdn-cgi\u002Fimage\u002Fwidth=600,quality=80,format=auto\u002Fmarkdown-editor-uploads\u002Fproject_medworks_medworks-app-education-336b4038-9b72-4960-9494-e6000c772a46.png","Medworks app Education tab of therapy videos",[11,234,235],{},"Behind the scenes, a mobile app versions manager lets us ship most improvements to members' phones the same day, and nudge anyone on an outdated version to update — so the app keeps pace with the clinic instead of waiting on store reviews.",[57,237,239],{"id":238},"covering-all-the-needs","Covering All the Needs",[11,241,242],{},"Robert doesn't manage a list of agencies and freelancers — he has one partner for everything digital. Whatever Medworks needs next, we design it, build it and keep it running:",[244,245,246,253,259,265,271,277,283],"ul",{},[247,248,249,252],"li",{},[52,250,251],{},"A public marketing website",", where prospects discover Medworks and book a private tour of the clinic.",[247,254,255,258],{},[52,256,257],{},"Private campaign pages",", like the invitation-only page we built for a partner LA members' club around footage of the clinic floor — which brought in two of the biggest waves of new members.",[247,260,261,264],{},[52,262,263],{},"The members' storefront",", for the membership, credits, bookings and members-only peptide orders.",[247,266,267,270],{},[52,268,269],{},"The iPhone app",", with bookings, reports, therapy videos, notifications and a private chat with the clinic.",[247,272,273,276],{},[52,274,275],{},"The admin",", so the team can run day-to-day operations on their own, from a desk or a phone.",[247,278,279,282],{},[52,280,281],{},"Automated member emails",", which guide every new member through onboarding in the clinic's own voice.",[247,284,285,288],{},[52,286,287],{},"An AI connector",", so the business can be questioned in plain language.",[11,290,291],{},"Because it all comes from the same team and the same foundation, a change in one place reaches every other place — and nothing falls through the cracks between suppliers.",[57,293,295],{"id":294},"ai-in-the-back-office","AI in the Back Office",[11,297,298,299,303],{},"Robert can now ask his AI assistant questions like ",[300,301,302],"em",{},"\"How many members are cleared for this peptide?\""," and get answers from live clinic data, through a secure connector we built into the admin. No spreadsheets, no waiting on us.",[11,305,306,307,310,311,314],{},"The connector speaks the ",[52,308,309],{},"Model Context Protocol (MCP)",", an open standard for plugging business tools into AI assistants. Because it's an open standard rather than a one-off integration, the same Medworks back office works with whichever assistant the team prefers — ",[52,312,313],{},"Claude, ChatGPT, Perplexity",", or whatever comes next. Robert adds it once, signs in with his usual admin account, and it's there next to his everyday chats. Nobody gets locked into one AI company, and nothing needs rebuilding when a better assistant arrives.",[11,316,317],{},"It's safe by design. Every question goes through the same secure login as the admin, the assistant only sees what that admin is allowed to see, and it works through a small set of tools we built on purpose — find members, look up products, check who is cleared for what — rather than being handed the keys to the database. We keep adding tools as the team finds new questions to ask, so the back office becomes more useful every week without anyone learning a new screen.",[57,319,321],{"id":320},"under-the-hood","Under the Hood",[11,323,324],{},"For the technically curious: Medworks is four products in one codebase, sharing what they must agree on so they never drift apart.",[244,326,327,333,339,345,351,357],{},[247,328,329,332],{},[52,330,331],{},"Members' platform & admin:"," Adonis.js, Vue.js and Inertia.js, fully typed in TypeScript, with a PostgreSQL database",[247,334,335,338],{},[52,336,337],{},"iPhone app:"," React Native and Expo, with over-the-air updates and a server-driven version manager",[247,340,341,344],{},[52,342,343],{},"Marketing website:"," Nuxt, served as a static site",[247,346,347,350],{},[52,348,349],{},"Shared code libraries:"," API contracts, membership pricing, booking links, and image and video addresses — written once and used by all three. When pricing changes, a single update reaches the website, the checkout and the app together.",[247,352,353,356],{},[52,354,355],{},"Studio Prats building blocks:"," our in-house error-handling library, used the same way on server and phone, plus living feature specifications and an AI-assisted code review that checks every change against our standards before it ships",[247,358,359,361],{},[52,360,54],{}," Render.com hosting, Cloudflare for images and video, Intercom chat, Sentry crash monitoring, and a secure MCP connector for AI assistants",[57,363,365],{"id":364},"the-results","The Results",[11,367,368,369,372,373,376],{},"Medworks crossed ",[52,370,371],{},"$10,000 in monthly recurring revenue in its first month",". Today it has ",[52,374,375],{},"active members in the hundreds and tens of thousands of dollars in monthly recurring revenue",". It runs on a platform, an iPhone app and a website the clinic fully owns, and we are still shipping improvements every week.",[11,378,379],{},"Next up: bringing the app to Android, and turning Robert's focus \"from signup to retention\" into features that keep members coming back to the clinic.",{"title":15,"searchDepth":16,"depth":16,"links":381},[382,383,384,385,386,387,388,389,390,391,392],{"id":59,"depth":16,"text":60},{"id":90,"depth":16,"text":91},{"id":97,"depth":16,"text":98},{"id":110,"depth":16,"text":111},{"id":126,"depth":16,"text":127},{"id":150,"depth":16,"text":151},{"id":190,"depth":16,"text":191},{"id":238,"depth":16,"text":239},{"id":294,"depth":16,"text":295},{"id":320,"depth":16,"text":321},{"id":364,"depth":16,"text":365},[394,395,396,397,398,399,400,401,402,403,404,405],"Full stack","Adonis.js","Vue.js","Inertia.js","React Native","Expo","Nuxt","Typescript","PostgreSQL","Mobile app","AI","MVP","2026-01-23","Services: UI\u002FUX design · Web platform · iPhone app · Membership & credits system · Marketing website · AI assistant integration","https:\u002F\u002Fimages.studioprats.com\u002Fcdn-cgi\u002Fimagedelivery\u002F4Ewkge9dUdpwStfFFsHDXA\u002Fb94e4b4b-6586-427e-0f63-afd3d59a4300\u002Fw=1536,format=auto,fit=scale-down,quality=85","https:\u002F\u002Fhealthbymedworks.com\u002F",{},"\u002Fprojects\u002Fmedworks-longevity-membership.en-us",{"title":42,"description":407},[414,415,36],"mobile-app-development","web-development","medworks-longevity-membership","projects\u002Fmedworks-longevity-membership.en-US","uXYBG2FlFZNDJoNQdkzvuM_PigBHv7aPbsd4K5bbwCg",{"id":420,"title":421,"body":422,"categories":736,"dateEnd":15,"dateStart":742,"description":743,"extension":26,"image":744,"link":745,"locale":29,"meta":746,"navigation":31,"path":747,"published":31,"seo":748,"services":749,"slug":750,"stem":751,"__hash__":752},"projects\u002Fprojects\u002Ftuvaju-travel-booking.en-US.md","From one booking site to a platform for travel agencies: Tuvaju and Velintis",{"type":8,"value":423,"toc":722},[424,427,432,434,440,447,452,454,457,460,462,465,468,474,476,479,482,488,491,507,509,512,515,523,525,528,533,536,541,544,550,553,557,564,570,573,579,582,587,589,592,635,638,642,645,659,662,664,667,704,708,714,717,719],[46,425,421],{"id":426},"from-one-booking-site-to-a-platform-for-travel-agencies-tuvaju-and-velintis",[11,428,429,431],{},[52,430,54],{}," Product architecture · UI\u002FUX design · Booking & payments platform · Admin area · Marketing website · Design system · Observability · AI-assisted delivery",[57,433,60],{"id":59},[11,435,436,439],{},[52,437,438],{},"Tuvaju"," started as the MVP of a booking site where travellers buy tickets and tours for the best things to do in Thailand, from Phi Phi Island day trips to Bangkok river cruises. It plugs into a ticketing provider for instant access to hundreds of attractions, and lets the founder list his own hand-picked tours for healthier margins.",[11,441,442,443,446],{},"Once Tuvaju was selling, the founder saw a bigger opportunity: every travel agency in Thailand has the same problem he just solved. So Tuvaju became the flagship of ",[52,444,445],{},"Velintis",", a complete online sales system that other travel agencies can buy and be selling on in five weeks. We designed and built both, and they run on the same foundation.",[76,448],{"src":449,"alt":450,"width":80,"height":171,"loading":82,"className":451},"https:\u002F\u002Fcdn1.studioprats.com\u002Fcdn-cgi\u002Fimage\u002Fwidth=1152,quality=80,fit=scale-down,format=auto\u002Fmarkdown-editor-uploads\u002Fproject_velintis_tuvaju-home-317634fc-8b5c-4137-96a6-04f24f93b395.png","Tuvaju homepage: Explore Thailand, with a destination search",[84,85,86,87],[57,453,91],{"id":90},[11,455,456],{},"Dirk once ran his own travel agency into a successful business. He had the audience, the industry know-how, and a clear vision. What he was missing was a technical foundation he owns, so he could sell directly to travellers instead of routing everyone through someone else's platform, and later sell that same system to other agencies.",[11,458,459],{},"We meet every week. Dirk brings what he hears from travellers and agencies, and our team analyses real user feedback and analytics. We turn both into changes on the live product, usually within days.",[57,461,98],{"id":97},[11,463,464],{},"Strong traffic only pays off if there's a product ready to receive it. Tuvaju needed to bring in live inventory from a ticketing provider, present hundreds of attractions and tours cleanly, and let people book and pay in a few minutes, all while staying fast and trustworthy on a phone. There was no existing technology and no design team.",[11,466,467],{},"Then the goal grew. A booking site built for one agency had to become something Dirk could sell to many: with its own brand, its own website to explain it, clear pricing in two currencies, and a way to launch a new agency in weeks instead of months. And all of it had to happen without slowing down the live site that was already taking bookings.",[76,469],{"src":470,"alt":471,"width":80,"height":472,"loading":82,"className":473},"https:\u002F\u002Fcdn1.studioprats.com\u002Fcdn-cgi\u002Fimage\u002Fwidth=1152,quality=80,fit=scale-down,format=auto\u002Fmarkdown-editor-uploads\u002Fproject_velintis_tuvaju-attraction-96d7e385-0886-4420-b20e-cfd4533f4033.png","Tuvaju attraction page for Hanuman World, with photos, tickets and a Book now button",840,[84,85,86,87],[57,475,111],{"id":110},[11,477,478],{},"We built Tuvaju on one foundation that everything else plugs into, with the business rules written into it rather than bolted on: attractions, tickets, prices, availability, bookings and payments. That is what made the jump to Velintis possible. The booking engine, the admin and the automated emails that Tuvaju proved in production are the same ones Velintis now offers to other agencies.",[11,480,481],{},"We structured the traveller journey around confidence. Every attraction has a clear page with photos, ticket options, what's included and real reviews. Travellers search by destination, pay securely with Stripe in the currency they prefer, and get their e-tickets by email straight after payment, followed by a reminder before the trip. No printing, no waiting for a reply.",[76,483],{"src":484,"alt":485,"width":80,"height":486,"loading":82,"className":487},"https:\u002F\u002Fcdn1.studioprats.com\u002Fcdn-cgi\u002Fimage\u002Fwidth=1152,quality=80,fit=scale-down,format=auto\u002Fmarkdown-editor-uploads\u002Fproject_velintis_tuvaju-reviews-7afa0ba5-5d16-4528-9140-96c2412a1205.png","Tuvaju traveller reviews",457,[84,85,86,87],[11,489,490],{},"Most bookings happen on a phone, often on the way to the airport, so every page was designed for mobile first.",[211,492,218,494,218,499,218,503],{"className":493},[84,85,86,214,215,216,217],[76,495],{"src":496,"alt":497,"width":223,"height":498,"loading":82},"https:\u002F\u002Fcdn1.studioprats.com\u002Fcdn-cgi\u002Fimage\u002Fwidth=600,quality=80,format=auto\u002Fmarkdown-editor-uploads\u002Fproject_velintis_m-tuvaju-home-07c01f7c-9fed-4597-a678-159bd4de1625.png","Tuvaju homepage on a phone",1298,[76,500],{"src":501,"alt":502,"width":223,"height":498,"loading":82},"https:\u002F\u002Fcdn1.studioprats.com\u002Fcdn-cgi\u002Fimage\u002Fwidth=600,quality=80,format=auto\u002Fmarkdown-editor-uploads\u002Fproject_velintis_m-tuvaju-attraction-17a21634-7ad7-409b-ba42-bb761a1c9598.png","Tuvaju attraction page on a phone",[76,504],{"src":505,"alt":506,"width":223,"height":498,"loading":82},"https:\u002F\u002Fcdn1.studioprats.com\u002Fcdn-cgi\u002Fimage\u002Fwidth=600,quality=80,format=auto\u002Fmarkdown-editor-uploads\u002Fproject_velintis_m-tuvaju-tickets-39e0e260-b083-40e3-ad77-6f60b6dc3bc1.png","Tuvaju ticket options on a phone, with price and Book now button",[57,508,127],{"id":126},[11,510,511],{},"Before the first page was built, we set up a branded design system: a small palette of brand colours with a full scale for each, a set of neutral greys, colours for success, warning and error messages, a pair of typefaces, and a set of building blocks (buttons, links, form fields, cards, drawers) that every screen is made from. We do this for every project from day one. It is quick to put in place, and it is built to grow as the product does.",[11,513,514],{},"That early investment pays off every week. Pages are put together from those building blocks instead of being styled one by one, so every new page looks right the day it ships, and a brand change is one edit instead of a hunt across the whole site. When Velintis arrived with its own brand, it got its own design system too, and its website followed it from the first line of code.",[76,516],{"src":517,"alt":518,"width":519,"height":520,"loading":82,"className":521},"https:\u002F\u002Fcdn1.studioprats.com\u002Fcdn-cgi\u002Fimage\u002Fwidth=1152,quality=80,fit=scale-down,format=auto\u002Fmarkdown-editor-uploads\u002Fproject_velintis_velintis-design-system-f5788cd0-2a9d-4232-8efa-1f12b8dd71ba.png","Velintis design system: brand colours, slate neutrals, ocean blue ramp, semantic colours, teal and orange ramps",586,1015,[84,85,86,522],"max-w-xs",[57,524,151],{"id":150},[11,526,527],{},"A booking site is only as good as the team behind it. So we built a full admin alongside the storefront, giving the team control of day-to-day operations without ever needing a developer in the loop. From one place they add attractions and tickets, upload photos, set prices in any of the site's currencies, and manage availability, timeslots, opening times, cancellation rules and hotel pickups. They also write blog posts, and hide an attraction from the public site with one switch when it isn't ready to sell.",[76,529],{"src":530,"alt":531,"width":80,"height":171,"loading":82,"className":532},"https:\u002F\u002Fcdn1.studioprats.com\u002Fcdn-cgi\u002Fimage\u002Fwidth=1152,quality=80,fit=scale-down,format=auto\u002Fmarkdown-editor-uploads\u002Fproject_velintis_admin-attractions-89936886-267b-4226-b081-f1a6b05cfd96.png","Tuvaju admin: the list of attractions",[84,85,86,87],[11,534,535],{},"Every ticket keeps everything it needs in one place, in tabs the team learns in minutes.",[76,537],{"src":538,"alt":539,"width":80,"height":171,"loading":82,"className":540},"https:\u002F\u002Fcdn1.studioprats.com\u002Fcdn-cgi\u002Fimage\u002Fwidth=1152,quality=80,fit=scale-down,format=auto\u002Fmarkdown-editor-uploads\u002Fproject_velintis_admin-ticket-1a5fc3a7-9791-4c3c-adb7-9a752358f46e.png","Tuvaju admin: editing a ticket, with tabs for contents, prices, images, availability, timeslots, cancellation and pickup, and reviews",[84,85,86,87],[11,542,543],{},"And every booking can be followed from payment to trip day, with its e-ticket attached.",[76,545],{"src":546,"alt":547,"width":80,"height":548,"loading":82,"className":549},"https:\u002F\u002Fcdn1.studioprats.com\u002Fcdn-cgi\u002Fimage\u002Fwidth=1152,quality=80,fit=scale-down,format=auto\u002Fmarkdown-editor-uploads\u002Fproject_velintis_admin-bookings-e94425b3-3383-4fa1-9b45-b1048b9a4911.png","Tuvaju admin: the list of bookings with status and trip date",448,[84,85,86,87],[11,551,552],{},"As the team grew, the admin grew with it: separate accounts for each person, standard and super roles so only the right people manage other admins, and a choice of how long each person stays signed in. Today Dirk's team adds new tours on their own and films a short video whenever something could be smoother, which becomes our next improvement.",[57,554,556],{"id":555},"velintis-one-agencys-system-ready-for-many","Velintis: One Agency's System, Ready for Many",[11,558,559,560,563],{},"Velintis packages everything Tuvaju proved into what it calls a ",[52,561,562],{},"travel agency Business-in-a-Box",": a professional booking website, secure payments, instant e-tickets, automated emails, a ticketing-provider connection and the admin, set up and launched for a new agency in five weeks.",[76,565],{"src":566,"alt":567,"width":80,"height":568,"loading":82,"className":569},"https:\u002F\u002Fcdn1.studioprats.com\u002Fcdn-cgi\u002Fimage\u002Fwidth=1152,quality=80,fit=scale-down,format=auto\u002Fmarkdown-editor-uploads\u002Fproject_velintis_velintis-biab-4f7e0bb1-29d2-4cf8-ac13-22c34a09c701.png","Velintis Business-in-a-Box section, showing the store, automation, admin and marketing tabs",1068,[84,85,86,87],[11,571,572],{},"We built velintis.com to sell it: a fast, search-friendly marketing site in English, Spanish and Thai, with a guided demo booking page, an FAQ, and a clear explanation of how the system turns a linear, manual sales process into a loop that keeps bringing in bookings.",[76,574],{"src":575,"alt":576,"width":80,"height":577,"loading":82,"className":578},"https:\u002F\u002Fcdn1.studioprats.com\u002Fcdn-cgi\u002Fimage\u002Fwidth=1152,quality=80,fit=scale-down,format=auto\u002Fmarkdown-editor-uploads\u002Fproject_velintis_velintis-loop-45767a05-e8a7-4d67-97ec-2ef6dbd68047.png","The Velintis growth loop: admin area, attract, website sales engine, automation, repeat",1049,[84,85,86,87],[11,580,581],{},"Pricing went through several rounds as Dirk tested the offer with agencies. It now shows three packages, each with a one-time licence, an implementation and launch fee, and an annual hosting and maintenance fee, with a first-year total up front, in Thai baht or euros. Each round of pricing reached the live site within days.",[76,583],{"src":584,"alt":585,"width":80,"height":171,"loading":82,"className":586},"https:\u002F\u002Fcdn1.studioprats.com\u002Fcdn-cgi\u002Fimage\u002Fwidth=1152,quality=80,fit=scale-down,format=auto\u002Fmarkdown-editor-uploads\u002Fproject_velintis_velintis-pricing-e8ddd114-57e4-48e9-bc45-5038767b4857.png","Velintis pricing: Launch, Pro and Premium packages with their first-year investment",[84,85,86,87],[57,588,239],{"id":238},[11,590,591],{},"Dirk doesn't manage a list of agencies and freelancers. He has one partner for everything digital:",[244,593,594,600,606,612,617,623,629],{},[247,595,596,599],{},[52,597,598],{},"The Tuvaju booking site",", where travellers find, book and pay for tours and attractions across Thailand.",[247,601,602,605],{},[52,603,604],{},"A live connection to a ticketing provider",", which brings in new tickets and keeps prices, availability and reviews up to date on its own.",[247,607,608,611],{},[52,609,610],{},"Automated traveller emails",": payment received, booking confirmed, e-tickets and a reminder before the trip.",[247,613,614,616],{},[52,615,275],{},", so the team runs the catalogue and bookings on their own.",[247,618,619,622],{},[52,620,621],{},"The Velintis marketing website",", in three languages and two currencies, with cookie consent and analytics that respect European privacy rules.",[247,624,625,628],{},[52,626,627],{},"Two design systems",", one per brand, so each looks consistent wherever a customer meets it.",[247,630,631,634],{},[52,632,633],{},"Monitoring",", so problems surface on our side before a traveller has to report them.",[11,636,637],{},"Because it all comes from the same team and the same foundation, a fix or a new feature built for Tuvaju is ready for every Velintis agency too.",[57,639,641],{"id":640},"built-with-ai-the-right-way","Built With AI, the Right Way",[11,643,644],{},"A small team ships like a large one here because we use AI with discipline, not as a shortcut.",[244,646,647,650,653,656],{},[247,648,649],{},"Several AI coding agents work in parallel on different features, each writing the code, the tests and the documentation for its own change.",[247,651,652],{},"Every feature starts as a written specification that stays in the codebase, so the product's behaviour is documented as it is built and doesn't depend on any one AI model.",[247,654,655],{},"An automated AI code review checks every change against our own written standards before it ships.",[247,657,658],{},"We wrote custom agent skills, including one for each brand's design system, so the agents build on-brand pages and debug faster and with more certainty.",[11,660,661],{},"The result: more than 360 reviewed changes shipped to the live product since the first commit.",[57,663,321],{"id":320},[11,665,666],{},"For the technically curious: Tuvaju and Velintis are two apps in one codebase, sharing tooling and standards.",[244,668,669,675,680,686,692,698],{},[247,670,671,674],{},[52,672,673],{},"Booking platform & admin:"," Adonis.js, Vue.js and Inertia.js, fully typed in TypeScript, with a PostgreSQL database and an event-driven, domain-driven design that keeps business rules easy to extend",[247,676,677,679],{},[52,678,343],{}," Nuxt, pre-rendered as a static site, with Tailwind CSS design tokens and translations in English, Spanish and Thai",[247,681,682,685],{},[52,683,684],{},"Integrations:"," Tiqets for ticket inventory and orders, Stripe Checkout for payments, Typesense for instant search, Postmark for transactional email",[247,687,688,691],{},[52,689,690],{},"Cloudflare:"," R2 storage with on-the-fly image resizing, so phones download only the image size they need",[247,693,694,697],{},[52,695,696],{},"Observability:"," OpenTelemetry traces and structured logs sent to SigNoz",[247,699,700,703],{},[52,701,702],{},"Quality:"," more than 160 automated backend test files across unit, functional and integration tests, plus tests for the marketing site, all run in CI on every change, alongside OpenSpec specifications and CodeRabbit AI code review",[57,705,707],{"id":706},"testimonial","Testimonial",[709,710,711],"blockquote",{},[11,712,713],{},"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.",[11,715,716],{},"— Dirk van der Zaan, Founder, Tuvaju & Velintis",[57,718,365],{"id":364},[11,720,721],{},"Tuvaju is live and taking bookings across Bangkok, Phuket, Krabi, Pattaya, Chiang Mai and beyond, run day to day by Dirk's own team. Velintis turned that same system into a product: a travel agency can now go from first call to selling online in five weeks, on a platform that has already proven itself with real travellers.",{"title":15,"searchDepth":16,"depth":16,"links":723},[724,725,726,727,728,729,730,731,732,733,734,735],{"id":59,"depth":16,"text":60},{"id":90,"depth":16,"text":91},{"id":97,"depth":16,"text":98},{"id":110,"depth":16,"text":111},{"id":126,"depth":16,"text":127},{"id":150,"depth":16,"text":151},{"id":555,"depth":16,"text":556},{"id":238,"depth":16,"text":239},{"id":640,"depth":16,"text":641},{"id":320,"depth":16,"text":321},{"id":706,"depth":16,"text":707},{"id":364,"depth":16,"text":365},[394,395,396,397,400,401,402,737,738,739,740,741,404,405],"TailwindCSS","SaaS","B2C","B2B","Travel","2025-08-01","Services: Product architecture · UI\u002FUX design · Booking & payments platform · Admin area · Marketing website · Design system · Observability · AI-assisted delivery","https:\u002F\u002Fcdn1.studioprats.com\u002Fmarkdown-editor-uploads\u002Fproject_tuvaju_hero-railay-beach-7118abb7-8e96-4845-a1d4-90444622e0d9.jpg","https:\u002F\u002Fvelintis.com",{},"\u002Fprojects\u002Ftuvaju-travel-booking.en-us",{"title":421,"description":743},[415,36],"tuvaju-travel-booking","projects\u002Ftuvaju-travel-booking.en-US","Z1NqBeG6ZywHB_GcbZXNKELVBPHIzmAdvp7Rg0nuxec",{"id":754,"title":755,"body":756,"categories":879,"dateEnd":881,"dateStart":882,"description":883,"extension":26,"image":884,"link":885,"locale":29,"meta":886,"navigation":31,"path":887,"published":31,"seo":888,"services":889,"slug":890,"stem":891,"__hash__":892},"projects\u002Fprojects\u002Fllamacarlos-e-commerce.en-US.md","E-commerce with linked services MVP",{"type":8,"value":757,"toc":874},[758,762,768,770,780,799,803,826,829,843,847,857,864],[46,759,761],{"id":760},"e-commerce-with-linked-services-mvp","E-commerce with Linked Services MVP",[11,763,764,767],{},[52,765,766],{},"Role:"," Full-stack Architecture & Implementation Lead",[57,769,60],{"id":59},[11,771,772,775,776,779],{},[52,773,774],{},"Llama Carlos"," is a telehealth community targeting the Latino population, helping people improve their well-being through guided education, product support, and personalized check-ins. When I joined, the team already had a strong mission, validated audience research, and a clear narrative—but they lacked the ",[52,777,778],{},"technical foundation"," to turn their concept into a functional service.",[11,781,782,783,786,787,790,791,794,795,798],{},"The main challenge was to launch an MVP ",[52,784,785],{},"quickly"," while keeping the system flexible enough to grow into a fully integrated digital health experience later on. The business needed not only a storefront to sell wellness products, but also a ",[52,788,789],{},"community space",", ",[52,792,793],{},"guided onboarding flows",", and a ",[52,796,797],{},"central backend orchestration layer"," to ensure data consistency across all touchpoints.",[57,800,802],{"id":801},"approach","Approach",[11,804,805,806,809,810,813,814,817,818,821,822,825],{},"To support both high iteration speed and long-term viability, I designed a lean architecture centered around a ",[52,807,808],{},"Shopify storefront"," for e-commerce, ",[52,811,812],{},"Circle.io"," for community engagement and educational content, ",[52,815,816],{},"Jotform"," for onboarding and health questionnaires, and a ",[52,819,820],{},"custom Node.js (Typescript) backend"," that acted as the ",[52,823,824],{},"source of truth"," and the glue that linked everything together.",[11,827,828],{},"This approach allowed us to:",[244,830,831,834,837,840],{},[247,832,833],{},"Launch a polished, functioning product experience within weeks rather than months.",[247,835,836],{},"Learn from real customer behavior immediately.",[247,838,839],{},"Add and modify features rapidly without destabilizing the system.",[247,841,842],{},"Keep ownership of the core business logic and user records in our backend, ensuring scalability and future extensibility.",[57,844,846],{"id":845},"result","Result",[11,848,849,850,852,853,856],{},"Within just a few weeks, ",[52,851,774],{}," was able to put a real product into users’ hands, begin gathering feedback, and refine the service based on lived experience—not assumptions. The architecture supported ",[52,854,855],{},"fast iteration",", clear feature expansion paths, and the operational workflows necessary to run the business from day one.",[11,858,859,860,863],{},"The MVP successfully bridged ",[52,861,862],{},"commerce, education, and guided care",", forming the foundation for a larger telehealth ecosystem to grow upon.",[11,865,866,867,870,871,206],{},"Now the store receives ",[52,868,869],{},"hundreds of users every day"," seamlessly, continuously experimenting with pricing, messaging, and community engagement strategies in order to ",[52,872,873],{},"scale the brand to sky-high awareness and impact",{"title":15,"searchDepth":16,"depth":16,"links":875},[876,877,878],{"id":59,"depth":16,"text":60},{"id":801,"depth":16,"text":802},{"id":845,"depth":16,"text":846},[880,19,401,405],"Back-end","2025-07-13","2025-04-28","Role: Full-stack Architecture & Implementation Lead","https:\u002F\u002Fllamacarlos.com\u002Fcdn\u002Fshop\u002Ffiles\u002FPhone.png?v=1751850566&width=1080","https:\u002F\u002Fllamacarlos.com",{},"\u002Fprojects\u002Fllamacarlos-e-commerce.en-us",{"title":755,"description":883},[35,415],"llamacarlos-e-commerce","projects\u002Fllamacarlos-e-commerce.en-US","BR4BT6_AJO_u7z1CyK5rhr4ND4jpEm3p4rk4E3om1Cs",{"id":894,"title":895,"body":896,"categories":1074,"dateEnd":1076,"dateStart":1077,"description":1078,"extension":26,"image":1058,"link":1079,"locale":29,"meta":1080,"navigation":31,"path":1081,"published":31,"seo":1082,"services":1083,"slug":1084,"stem":1085,"__hash__":1086},"projects\u002Fprojects\u002Fvq-score-web-app.en-US.md","Web app calculating customers VQ Score",{"type":8,"value":897,"toc":1068},[898,902,911,913,928,939,943,1012,1016,1049,1053,1056,1060,1064],[46,899,901],{"id":900},"web-app-calculating-customers-vq-score","Web App Calculating Customers VQ Score",[11,903,904,906,907,910],{},[52,905,766],{}," Lead Full-stack Developer & UX\u002FUI Adviser\n",[52,908,909],{},"Stack:"," Vue.js, Node.js, Typescript, Tailwind, PostgreSQL, SQL, Monorepo, DigitalOcean, Figma, Datadog, Retool",[57,912,60],{"id":59},[11,914,915,916,919,920,923,924,927],{},"Developed the MVP version of ",[52,917,918],{},"VQ",", a web application used for calculating and presenting a ",[52,921,922],{},"\"Value Quotient\" (VQ) Score"," for users based on guided inputs and behavioral data. The goal of the project was to deliver a ",[52,925,926],{},"fast-to-iterate MVP"," with high code quality, strong observability, and a UX that guided users smoothly through the scoring process.",[11,929,930,931,934,935,938],{},"The product needed to validate core assumptions early, so ",[52,932,933],{},"rapid prototyping + real usage feedback"," were central to the development approach. I led the technical implementation and also provided ",[52,936,937],{},"UI\u002FUX guidance"," to refine flows, reduce friction, and align the scoring experience with brand tone.",[57,940,942],{"id":941},"responsibilities-contributions","Responsibilities & Contributions",[244,944,945,951,961,982,988],{},[247,946,947,950],{},[52,948,949],{},"Iterative Agile Development:","\nBuilt the product using a fast feedback loop where the client could continuously test the app and evolve product ideas collaboratively.",[247,952,953,956,957,960],{},[52,954,955],{},"End-to-End Type Safety:","\nImplemented a ",[52,958,959],{},"fully typed monorepo"," architecture — from PostgreSQL schema to backend services to the Vue frontend — ensuring reliability and maintainability.",[247,962,963,966,967,970,971],{},[52,964,965],{},"Observability & Usage Analytics:","\nSet up ",[52,968,969],{},"Datadog Real User Monitoring (RUM)"," to track:\n",[244,972,973,976,979],{},[247,974,975],{},"Frontend performance & errors",[247,977,978],{},"Backend logs & resource usage",[247,980,981],{},"User behavior and navigation flows\nThis allowed the client to make informed product decisions based on real user interaction data.",[247,983,984,987],{},[52,985,986],{},"Testing & CI\u002FCD:","\nAdded integration tests and wired them into the CI\u002FCD pipeline to ensure quality and reduce regression issues across deployments.",[247,989,990,956,993,996,997],{},[52,991,992],{},"Admin & Internal Tooling:",[52,994,995],{},"Retool","-based admin dashboard to provide instant visibility into:\n",[244,998,999,1002,1005],{},[247,1000,1001],{},"User activity",[247,1003,1004],{},"Score distributions",[247,1006,1007,1008,1011],{},"Operational & usage metrics\nThis was delivered in ",[52,1009,1010],{},"under 2 hours of engineering",", maximizing leverage and reducing development overhead.",[57,1013,1015],{"id":1014},"impact","Impact",[244,1017,1018,1028,1035,1042],{},[247,1019,1020,1021,1024,1025,206],{},"Delivered a ",[52,1022,1023],{},"functional, testable MVP"," quickly, allowing the client to ",[52,1026,1027],{},"validate product assumptions with real users",[247,1029,1030,1031,1034],{},"Improved product decision-making through ",[52,1032,1033],{},"high observability and data-driven insights"," rather than guesswork.",[247,1036,1037,1038,1041],{},"Created a ",[52,1039,1040],{},"scalable codebase"," with strong correctness guarantees thanks to end-to-end typing.",[247,1043,1044,1045,1048],{},"Enabled the client to operate the product and review key business metrics ",[52,1046,1047],{},"with zero ongoing developer dependency"," through the Retool dashboard.",[57,1050,1052],{"id":1051},"screenshots-of-the-app","Screenshots of the app",[11,1054,1055],{},"You may try it out yourself in the project link, or here are some attached screenshots:",[76,1057],{"src":1058,"loading":82,"className":1059},"\u002Fimages\u002Fprojects\u002Fvq-score-screenshot-1.avif",[84,85,86,87],[76,1061],{"src":1062,"loading":82,"className":1063},"\u002Fimages\u002Fprojects\u002Fvq-score-screenshot-2.avif",[84,85,86,87],[76,1065],{"src":1066,"loading":82,"className":1067},"\u002Fimages\u002Fprojects\u002Fvq-score-screenshot-3.avif",[84,85,86,87],{"title":15,"searchDepth":16,"depth":16,"links":1069},[1070,1071,1072,1073],{"id":59,"depth":16,"text":60},{"id":941,"depth":16,"text":942},{"id":1014,"depth":16,"text":1015},{"id":1051,"depth":16,"text":1052},[394,396,1075,401,402,405,737],"Node.js","2023-08-01","2023-02-01","Role: Lead Full-stack Developer & UX\u002FUI Adviser\nStack: Vue.js, Node.js, Typescript, Tailwind, PostgreSQL, SQL, Monorepo, DigitalOcean, Figma, Datadog, Retool","https:\u002F\u002Fapp.tryvq.com\u002F",{},"\u002Fprojects\u002Fvq-score-web-app.en-us",{"title":895,"description":1078},[415],"vq-score-web-app","projects\u002Fvq-score-web-app.en-US","pgVE_NNIBKQE6RLRuPsQxgI9BBvJlpFKz71utb_rvjg",1791559894346]