[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"technology-en-stripe":3,"technology-projects-en-stripe":34,"mdc-fbzomc-key":81},{"id":4,"title":5,"category":6,"content":7,"description":8,"extension":9,"faq":10,"icon":17,"links":18,"meta":27,"projects":28,"since":30,"stem":31,"updated":32,"__hash__":33},"technologies_en\u002Fen\u002Ftechnologies\u002Fstripe.yml","Stripe","tools","Stripe provides payment and subscription services. I integrate it into VetSpace through Laravel Cashier and work with card payment flows in a commercial ticketing platform.\n\n## Subscription and checkout workflows\n\nThe work includes trial periods, plan changes, payment confirmation and failed-payment handling. Cashier provides Laravel integration, while Stripe settings and application rules determine the billing behavior. The customer interface also needs clear pending, successful and failed states.\n\n## Handling webhook events\n\nA checkout redirect is not proof of payment. Webhook handlers must verify signatures, tolerate duplicate or out-of-order events and use the Stripe API when reconciliation is needed. An idempotent handler avoids applying the same business action twice.\n\n## Keeping payment logic maintainable\n\nMy experience also includes Dalenys and Revolut integrations. I keep provider-specific behavior separate from order and subscription workflows where practical. Different payment providers have different capabilities, so adding one still requires testing its status transitions and failure cases. The goal is a traceable payment flow that can be investigated when a customer reports a problem.\n","Stripe integration for SaaS and ticketing: Laravel Cashier subscriptions, payment status handling and reliable webhook processing.","yml",[11,14],{"label":12,"content":13},"Can you add Stripe subscriptions to an existing Laravel application?","Yes. The work includes Cashier integration, Stripe products and prices, webhook handling and tests for the subscription lifecycle. Trial periods and failed-payment behavior are configured to match the product.",{"label":15,"content":16},"Do you work with other payment providers?","I also have experience with Dalenys and Revolut. Each integration needs its own checks for payment states, authentication requirements and failure handling.","i-simple-icons-stripe",[19,24],{"label":20,"to":21,"color":22,"icon":23},"stripe.com","https:\u002F\u002Fstripe.com","neutral","i-heroicons-arrow-top-right-on-square",{"label":25,"to":26,"color":22,"icon":23},"Technical reference","https:\u002F\u002Fdocs.stripe.com\u002Fwebhooks",{},[29],"vetspace","2021","en\u002Ftechnologies\u002Fstripe","2026-09-20","RsSRocVuBw4_bEOvN4fphpbAYdtdZIBI6NYhrTbS2zo",[35],{"id":36,"title":37,"content":38,"date":39,"description":40,"extension":9,"featured":41,"image":42,"links":43,"meta":58,"stack":59,"stem":76,"tags":77,"url":46,"__hash__":80},"projects_en\u002Fen\u002Fprojects\u002Fvetspace.yml","VetSpace","A two-sided veterinary platform — an SEO clinic catalog and a subscription-based CRM with appointments and patient records. A public clinic catalog built for SEO-first customer acquisition, and a subscription-based CRM (appointments, visits, patient records) as separate Vue\u002FNuxt apps on top of a single Laravel API. Database-per-tenant architecture, Stripe subscriptions via Cashier, GraphQL + REST, and AI-assisted visit analysis through a dedicated Go microservice.\n\n## Key Features\n\n- **Two-sided funnel** - an SEO-first public catalog acquires clinics; the subscription CRM (appointments, patient records) retains them\n- **True tenant isolation** - database-per-tenant keeps every clinic's data separate and makes GDPR export\u002Fdelete a per-database operation\n- **Dual API surface** - GraphQL for complex catalog queries, REST for the CRM — one Laravel codebase\n- **Billing built-in** - Stripe subscriptions via Cashier: trials, plan changes, dunning\n- **AI where it helps** - visit analysis runs in a dedicated Go microservice, keeping the main API unburdened\n\n## Tech Stack\n\n- **Backend**: Laravel (API)\n- **Frontend**: Vue\u002FNuxt (separate apps)\n- **Architecture**: Database-per-tenant multi-tenancy\n- **Payments**: Stripe via Cashier\n- **API**: GraphQL + REST\n- **AI**: Go microservice for visit analysis\n","2026-09-19","A two-sided veterinary platform — an SEO clinic catalog and a subscription-based CRM with appointments and patient records",true,"\u002Fhero\u002Fvetspace.avif",[44,48,52,55],{"label":45,"to":46,"color":47,"icon":23},"Live Demo","https:\u002F\u002Fvetspace.pro","primary",{"label":49,"to":50,"color":22,"icon":51},"API Overview","https:\u002F\u002Fgithub.com\u002FYurij2015\u002Fvetspace-api","i-simple-icons-github",{"label":53,"to":54,"color":22,"icon":51},"Frontend Overview","https:\u002F\u002Fgithub.com\u002FYurij2015\u002Fvetspace-frontend",{"label":56,"to":57,"color":22,"icon":51},"VetCard Overview","https:\u002F\u002Fgithub.com\u002FYurij2015\u002Fvetspace-vetcard",{},[60,63,66,69,70,73],{"name":61,"icon":62},"Laravel","i-simple-icons-laravel",{"name":64,"icon":65},"Vue","i-simple-icons-vuedotjs",{"name":67,"icon":68},"Nuxt","i-simple-icons-nuxtdotjs",{"name":5,"icon":17},{"name":71,"icon":72},"GraphQL","i-simple-icons-graphql",{"name":74,"icon":75},"AI","i-heroicons-sparkles","en\u002Fprojects\u002Fvetspace",[78,61,64,79,5,74],"SaaS","Multi-tenant","NDJ-cDU24m4uCf7HzSeTbCgbh0MGVh5P5HASDymy0wA",{"data":82,"body":83},{},{"type":84,"children":85},"root",[86,94,101,106,112,117,123],{"type":87,"tag":88,"props":89,"children":90},"element","p",{},[91],{"type":92,"value":93},"text","Stripe provides payment and subscription services. I integrate it into VetSpace through Laravel Cashier and work with card payment flows in a commercial ticketing platform.",{"type":87,"tag":95,"props":96,"children":98},"h2",{"id":97},"subscription-and-checkout-workflows",[99],{"type":92,"value":100},"Subscription and checkout workflows",{"type":87,"tag":88,"props":102,"children":103},{},[104],{"type":92,"value":105},"The work includes trial periods, plan changes, payment confirmation and failed-payment handling. Cashier provides Laravel integration, while Stripe settings and application rules determine the billing behavior. The customer interface also needs clear pending, successful and failed states.",{"type":87,"tag":95,"props":107,"children":109},{"id":108},"handling-webhook-events",[110],{"type":92,"value":111},"Handling webhook events",{"type":87,"tag":88,"props":113,"children":114},{},[115],{"type":92,"value":116},"A checkout redirect is not proof of payment. Webhook handlers must verify signatures, tolerate duplicate or out-of-order events and use the Stripe API when reconciliation is needed. An idempotent handler avoids applying the same business action twice.",{"type":87,"tag":95,"props":118,"children":120},{"id":119},"keeping-payment-logic-maintainable",[121],{"type":92,"value":122},"Keeping payment logic maintainable",{"type":87,"tag":88,"props":124,"children":125},{},[126],{"type":92,"value":127},"My experience also includes Dalenys and Revolut integrations. I keep provider-specific behavior separate from order and subscription workflows where practical. Different payment providers have different capabilities, so adding one still requires testing its status transitions and failure cases. The goal is a traceable payment flow that can be investigated when a customer reports a problem."]