[{"data":1,"prerenderedAt":87},["ShallowReactive",2],{"work-lift-mate":3},{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":8,"description":7,"client":9,"year":10,"role":11,"summary":12,"result":13,"tech":14,"featured":6,"order":21,"cover":22,"body":23,"_type":81,"_id":82,"_source":83,"_file":84,"_stem":85,"_extension":86},"\u002Fwork\u002Flift-mate","work",false,"","Airport sedan bookings that don’t die in a quote email","Lift Mate",2024,"Reservation platform","A limo and shuttle desk was quoting by hand, then retyping the same trip into a booking. We built quote and reservation as one flow — cars, drivers, add-ons, and pay.","Quote to confirmed trip in one path",[15,16,17,18,19,20],"Nuxt 3","Vue 3","Express","MySQL","PayPal","Braintree",4,"lift",{"type":24,"children":25,"toc":74},"root",[26,35,41,47,52,58,63,69],{"type":27,"tag":28,"props":29,"children":31},"element","h2",{"id":30},"the-problem",[32],{"type":33,"value":34},"text","The problem",{"type":27,"tag":36,"props":37,"children":38},"p",{},[39],{"type":33,"value":40},"Airport sedan, shuttle, and limo work is simple until it isn’t: surge windows, add-ons, affiliates, a driver who has to be assigned, a customer who started with “just a quote.” The public site and the back office were two stories. Quotes aged in inboxes. Confirmed trips hid in another list.",{"type":27,"tag":28,"props":42,"children":44},{"id":43},"the-approach",[45],{"type":33,"value":46},"The approach",{"type":27,"tag":36,"props":48,"children":49},{},[50],{"type":33,"value":51},"We made “Get a quote” and “Make a reservation” the same product with different intent. Cars, drivers, customers, discount codes, and surges share one admin. The customer never re-enters a trip the desk already priced.",{"type":27,"tag":28,"props":53,"children":55},{"id":54},"the-solution",[56],{"type":33,"value":57},"The solution",{"type":27,"tag":36,"props":59,"children":60},{},[61],{"type":33,"value":62},"A Nuxt 3 front with a Node API: reservation create\u002Fupdate\u002Fdetail, driver assignment, add-ons, affiliates, and payment through PayPal and Braintree. Roles and permissions for who can touch which list. Static pages and config for the marketing skin without forking the app. Socket updates when a trip changes status so the desk isn’t refreshing to see if the driver accepted.",{"type":27,"tag":28,"props":64,"children":66},{"id":65},"the-result",[67],{"type":33,"value":68},"The result",{"type":27,"tag":36,"props":70,"children":71},{},[72],{"type":33,"value":73},"A quote is a reservation that hasn’t been confirmed yet — not a parallel spreadsheet. The same cars and drivers the customer sees are the ones the desk assigns. Payments and refunds sit on the trip, not in a separate merchant tab someone might forget.",{"title":7,"searchDepth":75,"depth":75,"links":76},2,[77,78,79,80],{"id":30,"depth":75,"text":34},{"id":43,"depth":75,"text":46},{"id":54,"depth":75,"text":57},{"id":65,"depth":75,"text":68},"markdown","content:work:lift-mate.md","content","work\u002Flift-mate.md","work\u002Flift-mate","md",1789258141857]