[{"data":1,"prerenderedAt":87},["ShallowReactive",2],{"work-the-95-star":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\u002Fthe-95-star","work",false,"","A hospitality desk with three ways to get paid","The 95 Star",2023,"Booking + payments","Pick-up and drop work needed a real reservation system — customers, call-center staff, and admins — plus Stripe, PayPal, and Braintree on the same trip.","Paid reservations across three gateways",[15,16,17,18,19,20],"Vue 2","Node.js","Sequelize","MySQL","Stripe","Socket.io",5,"star",{"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},"The operation already had cars and drivers. What it didn’t have was one record of the trip. Customers booked one way, the phone desk another, finance reconciled cards in three merchant dashboards. Status lived in someone’s head. A refund meant hunting a transaction ID.",{"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 modelled the trip as the object everyone shares: customer, assigned drivers, add-ons, payment type, status. Super admin, call-center users, and customers see different doors into the same booking. Gateways are adapters on the reservation, not three products.",{"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 Vue 2 + Express app on MySQL: reservations from draft to paid, driver assignment with optional email, add-ons, affiliates, discount codes, surges. Stripe, PayPal, and Braintree webhooks land on the same reservation so finance isn’t guessing which processor owns the fare. Live status over Socket.io. Roles so a call-center user can’t wander into super-admin config.",{"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 trip has one number, one payment, one driver list. Refunds point at the reservation, not a spreadsheet of merchant exports. The hospitality desk can take the booking on the site or on the phone and still be looking at the same record.",{"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:the-95-star.md","content","work\u002Fthe-95-star.md","work\u002Fthe-95-star","md",1789258141857]