[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"technology-pl-nuxt":3,"technology-projects-pl-nuxt":35,"mdc--arqxlc-key":110},{"id":4,"title":5,"category":6,"content":7,"description":8,"extension":9,"faq":10,"icon":17,"links":18,"meta":27,"projects":28,"since":31,"stem":32,"updated":33,"__hash__":34},"technologies_pl\u002Fpl\u002Ftechnologies\u002Fnuxt.yml","Nuxt","frontend","Nuxt to framework do aplikacji Vue z routingiem i renderowaniem na serwerze. Korzystam z niego w publicznym katalogu VetCard oraz w tym portfolio, gdzie treść strony powinna być dostępna dla odwiedzających i wyszukiwarek już w odpowiedzi serwera.\n\n## Przykłady z moich projektów\n\nVetCard łączy strony placówek weterynaryjnych z interaktywną rezerwacją wizyt. Jedna aplikacja obsługuje wiele placówek, wersje językowe i indywidualne kolory. To portfolio korzysta z Nuxt Content do tłumaczonych plików YAML, a obrazy do udostępniania w mediach społecznościowych generuje podczas działania serwera.\n\n## Co obejmuje praca nad SEO\n\nRenderowanie na serwerze dostarcza treść HTML bez czekania na wykonanie JavaScript w przeglądarce. Osobno konfiguruję metadane, adresy kanoniczne, wersje językowe i mapę witryny. Ułatwia to odnajdywanie oraz interpretowanie stron, ale nie gwarantuje indeksacji ani pozycji. Wyszukiwarki potrafią wykonywać JavaScript, lecz wymaga to dodatkowego etapu przetwarzania.\n\n## Renderowanie i wdrożenie\n\nNuxt obsługuje różne sposoby renderowania. Dobieram je do strony: sama interaktywność nie wymaga wyłączenia renderowania serwerowego. To portfolio korzysta z renderowania na serwerze i pamięci podręcznej ISR w Vercel dla wybranych tras; generowanie stron z wyprzedzeniem jest wyłączone w wersji produkcyjnej.\n","Tworzenie wielojęzycznych stron w Nuxt: renderowanie na serwerze, metadane SEO, katalogi placówek i strony oparte na treści.","yml",[11,14],{"label":12,"content":13},"Dlaczego warto użyć Nuxt na publicznej stronie?","Renderowanie na serwerze udostępnia treść w początkowej odpowiedzi HTML. Nuxt daje też narzędzia do routingu i metadanych. Strony JavaScript mogą być indeksowane, ale renderowanie serwerowe zmniejsza zależność od wykonywania kodu przez robota wyszukiwarki.",{"label":15,"content":16},"Z której wersji Nuxt korzystasz?","To portfolio i VetCard korzystają z Nuxt 4. Portfolio używa też Nuxt Content, Nuxt Image, lokalizacji i generowania obrazów do mediów społecznościowych podczas działania serwera. Dobór modułów zależy od projektu.","i-simple-icons-nuxtdotjs",[19,24],{"label":20,"to":21,"color":22,"icon":23},"nuxt.com","https:\u002F\u002Fnuxt.com","neutral","i-heroicons-arrow-top-right-on-square",{"label":25,"to":26,"color":22,"icon":23},"Dokumentacja techniczna","https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fcrawling-indexing\u002Fjavascript\u002Fjavascript-seo-basics",{},[29,30],"vetcard","vetspace","2022","pl\u002Ftechnologies\u002Fnuxt","2026-09-20","xpApnf-ZOKv12gGHpj_JDJ-CuLUULJ7PtlrZQQDKOy8",[36,73],{"id":37,"title":38,"content":39,"date":33,"description":40,"extension":9,"featured":41,"image":42,"links":43,"meta":52,"stack":53,"stem":67,"tags":68,"url":46,"__hash__":72},"projects_pl\u002Fpl\u002Fprojects\u002Fvetcard.yml","VetCard","Publiczna część VetSpace — multi-tenant katalog klinik weterynaryjnych. Jeden deployment Nuxt SSR obsługuje wszystkie kliniki: strony klinik zoptymalizowane pod SEO, rezerwację wizyt online z proxy do własnego backendu tenant każdej kliniki, tematyzację pod markę kliniki oraz obsługę wielu oddziałów.\n\n## Kluczowe funkcje\n\n- **Jeden deployment — wiele klinik** — aplikacja routuje po slugu kliniki; żądania rezerwacji i slotów są proxy'owane do backendu tenant danej kliniki\n- **Katalog SEO-first** — 590+ klinik ze stronami SSR, danymi strukturalnymi i zlokalizowanymi trasami\n- **Branding każdej kliniki** — strona kliniki jest tematyzowana jej kolorem, z badge'em \"Powered by VetSpace\"\n- **Realny UX rezerwacji** — wolne sloty pokazują liczbę dostępnych lekarzy z kodowaniem kolorami\n- **Pełna lokalizacja** — ukraiński, angielski i polski z routingiem opartym na prefiksach\n\n## Stack technologiczny\n\n- **Frontend**: Nuxt 4 \u002F Vue 3, Tailwind CSS v4\n- **Backend**: Laravel catalog API + endpointy tenant do rezerwacji\n- **Renderowanie**: SSR dla stron SEO, CSR dla flow rezerwacji\n- **Testowanie**: testy jednostkowe Vitest + Cypress E2E na realnym backendzie\n","Multi-tenant katalog klinik weterynaryjnych: SEO strony klinik, rezerwacja wizyt online, branding każdej kliniki — jedna aplikacja Nuxt obsługuje wszystkie",true,"\u002Fhero\u002Fvetcard.avif",[44,48],{"label":45,"to":46,"color":47,"icon":23},"Live Demo","https:\u002F\u002Fvetcard.pro","primary",{"label":49,"to":50,"color":22,"icon":51},"Przegląd projektu","https:\u002F\u002Fgithub.com\u002FYurij2015\u002Fvetspace-vetcard","i-simple-icons-github",{},[54,55,58,61,64],{"name":5,"icon":17},{"name":56,"icon":57},"Vue","i-simple-icons-vuedotjs",{"name":59,"icon":60},"TypeScript","i-simple-icons-typescript",{"name":62,"icon":63},"Tailwind CSS","i-simple-icons-tailwindcss",{"name":65,"icon":66},"Laravel API","i-simple-icons-laravel","pl\u002Fprojects\u002Fvetcard",[5,56,69,70,71],"Multi-tenant","SEO","SSR","4Q1qMR6jtn2ViojU9Uk8TaztwOrlQBTjLNLBv9AASnE",{"id":74,"title":75,"content":76,"date":77,"description":78,"extension":9,"featured":41,"image":79,"links":80,"meta":91,"stack":92,"stem":106,"tags":107,"url":82,"__hash__":109},"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","\u002Fhero\u002Fvetspace.avif",[81,83,86,89],{"label":45,"to":82,"color":47,"icon":23},"https:\u002F\u002Fvetspace.pro",{"label":84,"to":85,"color":22,"icon":51},"Przegląd API","https:\u002F\u002Fgithub.com\u002FYurij2015\u002Fvetspace-api",{"label":87,"to":88,"color":22,"icon":51},"Przegląd frontendu","https:\u002F\u002Fgithub.com\u002FYurij2015\u002Fvetspace-frontend",{"label":90,"to":50,"color":22,"icon":51},"Przegląd VetCard",{},[93,95,96,97,100,103],{"name":94,"icon":66},"Laravel",{"name":56,"icon":57},{"name":5,"icon":17},{"name":98,"icon":99},"Stripe","i-simple-icons-stripe",{"name":101,"icon":102},"GraphQL","i-simple-icons-graphql",{"name":104,"icon":105},"AI","i-heroicons-sparkles","pl\u002Fprojects\u002Fvetspace",[108,94,56,69,98,104],"SaaS","xvJ2gsG93A4aTrZYPgp4UuQdQsPe-Ae8ups9tasKAD8",{"data":111,"body":112},{},{"type":113,"children":114},"root",[115,123,130,135,141,146,152],{"type":116,"tag":117,"props":118,"children":119},"element","p",{},[120],{"type":121,"value":122},"text","Nuxt to framework do aplikacji Vue z routingiem i renderowaniem na serwerze. Korzystam z niego w publicznym katalogu VetCard oraz w tym portfolio, gdzie treść strony powinna być dostępna dla odwiedzających i wyszukiwarek już w odpowiedzi serwera.",{"type":116,"tag":124,"props":125,"children":127},"h2",{"id":126},"przykłady-z-moich-projektów",[128],{"type":121,"value":129},"Przykłady z moich projektów",{"type":116,"tag":117,"props":131,"children":132},{},[133],{"type":121,"value":134},"VetCard łączy strony placówek weterynaryjnych z interaktywną rezerwacją wizyt. Jedna aplikacja obsługuje wiele placówek, wersje językowe i indywidualne kolory. To portfolio korzysta z Nuxt Content do tłumaczonych plików YAML, a obrazy do udostępniania w mediach społecznościowych generuje podczas działania serwera.",{"type":116,"tag":124,"props":136,"children":138},{"id":137},"co-obejmuje-praca-nad-seo",[139],{"type":121,"value":140},"Co obejmuje praca nad SEO",{"type":116,"tag":117,"props":142,"children":143},{},[144],{"type":121,"value":145},"Renderowanie na serwerze dostarcza treść HTML bez czekania na wykonanie JavaScript w przeglądarce. Osobno konfiguruję metadane, adresy kanoniczne, wersje językowe i mapę witryny. Ułatwia to odnajdywanie oraz interpretowanie stron, ale nie gwarantuje indeksacji ani pozycji. Wyszukiwarki potrafią wykonywać JavaScript, lecz wymaga to dodatkowego etapu przetwarzania.",{"type":116,"tag":124,"props":147,"children":149},{"id":148},"renderowanie-i-wdrożenie",[150],{"type":121,"value":151},"Renderowanie i wdrożenie",{"type":116,"tag":117,"props":153,"children":154},{},[155],{"type":121,"value":156},"Nuxt obsługuje różne sposoby renderowania. Dobieram je do strony: sama interaktywność nie wymaga wyłączenia renderowania serwerowego. To portfolio korzysta z renderowania na serwerze i pamięci podręcznej ISR w Vercel dla wybranych tras; generowanie stron z wyprzedzeniem jest wyłączone w wersji produkcyjnej."]