[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-pl-vetspace":3,"technology-slugs-pl":54,"mdc--h6bejt-key":78},{"id":4,"title":5,"content":6,"date":7,"description":8,"extension":9,"featured":10,"image":11,"links":12,"meta":29,"stack":30,"stem":49,"tags":50,"url":15,"__hash__":53},"projects_pl\u002Fpl\u002Fprojects\u002Fvetspace.yml","VetSpace","Dwustronna platforma weterynaryjna — katalog SEO klinik i CRM oparty na subskrypcji z wizytami i rekordami pacjentów. Publiczny katalog klinik zbudowany pod kątem pozyskiwania klientów przez SEO oraz CRM oparty na subskrypcji (wizyty, rekordy pacjentów) jako osobne aplikacje Vue\u002FNuxt na jednym API Laravel. Architektura database-per-tenant, subskrypcje Stripe przez Cashier, GraphQL + REST oraz analiza wizyt wspomagana AI przez dedykowany mikroserwis w Go.\n\n## Kluczowe funkcje\n\n- **Dwustronny lejek** - katalog SEO pozyskuje kliniki, a CRM w subskrypcji (wizyty, rekordy pacjentów) je utrzymuje\n- **Prawdziwa izolacja tenantów** - database-per-tenant trzyma dane każdej kliniki osobno, a eksport\u002Fusuwanie GDPR to operacja na bazie\n- **Dwa interfejsy API** - GraphQL dla złożonych zapytań katalogu, REST dla CRM — jedna baza kodu Laravel\n- **Billing od ręki** - subskrypcje Stripe przez Cashier: triale, zmiany planów, dunning\n- **AI tam, gdzie pomaga** - analizę wizyt wykonuje dedykowany mikroserwis w Go, nie obciążając głównego API\n\n## Stos technologiczny\n\n- **Backend**: Laravel (API)\n- **Frontend**: Vue\u002FNuxt (osobne aplikacje)\n- **Architektura**: Multi-tenancy database-per-tenant\n- **Płatności**: Stripe przez Cashier\n- **API**: GraphQL + REST\n- **AI**: Mikroserwis Go do analizy wizyt\n","2026-09-19","Dwustronna platforma weterynaryjna — katalog SEO klinik i CRM oparty na subskrypcji z wizytami i rekordami pacjentów","yml",true,"\u002Fhero\u002Fvetspace.avif",[13,18,23,26],{"label":14,"to":15,"color":16,"icon":17},"Live Demo","https:\u002F\u002Fvetspace.pro","primary","i-heroicons-arrow-top-right-on-square",{"label":19,"to":20,"color":21,"icon":22},"Przegląd API","https:\u002F\u002Fgithub.com\u002FYurij2015\u002Fvetspace-api","neutral","i-simple-icons-github",{"label":24,"to":25,"color":21,"icon":22},"Przegląd frontendu","https:\u002F\u002Fgithub.com\u002FYurij2015\u002Fvetspace-frontend",{"label":27,"to":28,"color":21,"icon":22},"Przegląd VetCard","https:\u002F\u002Fgithub.com\u002FYurij2015\u002Fvetspace-vetcard",{},[31,34,37,40,43,46],{"name":32,"icon":33},"Laravel","i-simple-icons-laravel",{"name":35,"icon":36},"Vue","i-simple-icons-vuedotjs",{"name":38,"icon":39},"Nuxt","i-simple-icons-nuxtdotjs",{"name":41,"icon":42},"Stripe","i-simple-icons-stripe",{"name":44,"icon":45},"GraphQL","i-simple-icons-graphql",{"name":47,"icon":48},"AI","i-heroicons-sparkles","pl\u002Fprojects\u002Fvetspace",[51,32,35,52,41,47],"SaaS","Multi-tenant","xvJ2gsG93A4aTrZYPgp4UuQdQsPe-Ae8ups9tasKAD8",[55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77],"caddy","cloudflare","digitalocean","docker","filament","github-actions","go","hetzner","hostinger","laravel","mysql","nuxt","php","postgresql","proxmox","redis","stripe","symfony","tailwindcss","terraform","typescript","vite","vue",{"data":79,"body":80},{},{"type":81,"children":82},"root",[83,91,98,154,160],{"type":84,"tag":85,"props":86,"children":87},"element","p",{},[88],{"type":89,"value":90},"text","Dwustronna platforma weterynaryjna — katalog SEO klinik i CRM oparty na subskrypcji z wizytami i rekordami pacjentów. Publiczny katalog klinik zbudowany pod kątem pozyskiwania klientów przez SEO oraz CRM oparty na subskrypcji (wizyty, rekordy pacjentów) jako osobne aplikacje Vue\u002FNuxt na jednym API Laravel. Architektura database-per-tenant, subskrypcje Stripe przez Cashier, GraphQL + REST oraz analiza wizyt wspomagana AI przez dedykowany mikroserwis w Go.",{"type":84,"tag":92,"props":93,"children":95},"h2",{"id":94},"kluczowe-funkcje",[96],{"type":89,"value":97},"Kluczowe funkcje",{"type":84,"tag":99,"props":100,"children":101},"ul",{},[102,114,124,134,144],{"type":84,"tag":103,"props":104,"children":105},"li",{},[106,112],{"type":84,"tag":107,"props":108,"children":109},"strong",{},[110],{"type":89,"value":111},"Dwustronny lejek",{"type":89,"value":113}," - katalog SEO pozyskuje kliniki, a CRM w subskrypcji (wizyty, rekordy pacjentów) je utrzymuje",{"type":84,"tag":103,"props":115,"children":116},{},[117,122],{"type":84,"tag":107,"props":118,"children":119},{},[120],{"type":89,"value":121},"Prawdziwa izolacja tenantów",{"type":89,"value":123}," - database-per-tenant trzyma dane każdej kliniki osobno, a eksport\u002Fusuwanie GDPR to operacja na bazie",{"type":84,"tag":103,"props":125,"children":126},{},[127,132],{"type":84,"tag":107,"props":128,"children":129},{},[130],{"type":89,"value":131},"Dwa interfejsy API",{"type":89,"value":133}," - GraphQL dla złożonych zapytań katalogu, REST dla CRM — jedna baza kodu Laravel",{"type":84,"tag":103,"props":135,"children":136},{},[137,142],{"type":84,"tag":107,"props":138,"children":139},{},[140],{"type":89,"value":141},"Billing od ręki",{"type":89,"value":143}," - subskrypcje Stripe przez Cashier: triale, zmiany planów, dunning",{"type":84,"tag":103,"props":145,"children":146},{},[147,152],{"type":84,"tag":107,"props":148,"children":149},{},[150],{"type":89,"value":151},"AI tam, gdzie pomaga",{"type":89,"value":153}," - analizę wizyt wykonuje dedykowany mikroserwis w Go, nie obciążając głównego API",{"type":84,"tag":92,"props":155,"children":157},{"id":156},"stos-technologiczny",[158],{"type":89,"value":159},"Stos technologiczny",{"type":84,"tag":99,"props":161,"children":162},{},[163,173,183,193,203,213],{"type":84,"tag":103,"props":164,"children":165},{},[166,171],{"type":84,"tag":107,"props":167,"children":168},{},[169],{"type":89,"value":170},"Backend",{"type":89,"value":172},": Laravel (API)",{"type":84,"tag":103,"props":174,"children":175},{},[176,181],{"type":84,"tag":107,"props":177,"children":178},{},[179],{"type":89,"value":180},"Frontend",{"type":89,"value":182},": Vue\u002FNuxt (osobne aplikacje)",{"type":84,"tag":103,"props":184,"children":185},{},[186,191],{"type":84,"tag":107,"props":187,"children":188},{},[189],{"type":89,"value":190},"Architektura",{"type":89,"value":192},": Multi-tenancy database-per-tenant",{"type":84,"tag":103,"props":194,"children":195},{},[196,201],{"type":84,"tag":107,"props":197,"children":198},{},[199],{"type":89,"value":200},"Płatności",{"type":89,"value":202},": Stripe przez Cashier",{"type":84,"tag":103,"props":204,"children":205},{},[206,211],{"type":84,"tag":107,"props":207,"children":208},{},[209],{"type":89,"value":210},"API",{"type":89,"value":212},": GraphQL + REST",{"type":84,"tag":103,"props":214,"children":215},{},[216,220],{"type":84,"tag":107,"props":217,"children":218},{},[219],{"type":89,"value":47},{"type":89,"value":221},": Mikroserwis Go do analizy wizyt"]