[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"technology-en-laravel":3,"technology-projects-en-laravel":41,"mdc--5imrr3-key":216},{"id":4,"title":5,"category":6,"content":7,"description":8,"extension":9,"faq":10,"icon":20,"links":21,"meta":30,"projects":31,"since":37,"stem":38,"updated":39,"__hash__":40},"technologies_en\u002Fen\u002Ftechnologies\u002Flaravel.yml","Laravel","backend","Laravel is the PHP framework I use for SaaS products, APIs and administration tools. My projects include VetSpace, DigiPulse, NetPostPanel and the DigiSpace website, each with different business rules and integration needs.\n\n## How I use Laravel\n\n- **VetSpace** — a shared API for the clinic catalog and CRM, with tenant-aware access and Stripe subscriptions through Cashier.\n- **DigiPulse** — the monitoring application and Filament administration interface, alongside a separate Go monitoring service.\n- **NetPostPanel** — background content generation workflows managed through queues and Horizon.\n- **DigiSpace** — a multilingual website with a custom CMS and Filament panel.\n\n## The framework and its ecosystem\n\nLaravel provides routing, validation, database access and queue APIs. Filament, Cashier and Horizon are additional tools that I select and configure for the project. Billing, permissions and tenant isolation still require application-specific design and testing.\n\n## Building for ongoing maintenance\n\nI aim to keep business logic separate from HTTP handling and administration screens. This makes it easier to reuse a workflow through an API or background job. Performance work starts with measurement; tools such as Octane can help suitable workloads, but do not replace query optimization or careful state management.\n","Laravel development for SaaS, APIs and admin panels: practical work with VetSpace, DigiPulse, Filament, queues and Stripe subscriptions.","yml",[11,14,17],{"label":12,"content":13},"Do you build new Laravel applications or maintain existing ones?","Both. My work includes new applications, audits, refactoring and extending existing products. The approach depends on the codebase and release requirements.",{"label":15,"content":16},"Which Laravel tools do you work with?","Filament for administration, Cashier for Stripe subscriptions and Horizon for Redis queues. I also work with Octane and FrankenPHP where the application benefits from long-running workers.",{"label":18,"content":19},"Can you handle Laravel deployment and hosting?","Yes. I work with Docker, Caddy, Proxmox and CI\u002FCD, including deployments on a rented Hetzner dedicated server. The setup depends on the project’s availability and maintenance needs.","i-simple-icons-laravel",[22,27],{"label":23,"to":24,"color":25,"icon":26},"laravel.com","https:\u002F\u002Flaravel.com","neutral","i-heroicons-arrow-top-right-on-square",{"label":28,"to":29,"color":25,"icon":26},"Technical reference","https:\u002F\u002Flaravel.com\u002Fframework\u002Fdocs\u002F12.x\u002Fhorizon",{},[32,33,34,35,36],"vetspace","digipulse","digispace","netpostpanel","vetcard","2018","en\u002Ftechnologies\u002Flaravel","2026-09-20","kT3blozZ7kLJi9lAh6XLFhwaQ5efiIC0VMDz5eHsLXM",[42,88,125,162,192],{"id":43,"title":44,"content":45,"date":46,"description":47,"extension":9,"featured":48,"image":49,"links":50,"meta":65,"stack":66,"stem":83,"tags":84,"url":53,"__hash__":87},"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",[51,55,59,62],{"label":52,"to":53,"color":54,"icon":26},"Live Demo","https:\u002F\u002Fvetspace.pro","primary",{"label":56,"to":57,"color":25,"icon":58},"API Overview","https:\u002F\u002Fgithub.com\u002FYurij2015\u002Fvetspace-api","i-simple-icons-github",{"label":60,"to":61,"color":25,"icon":58},"Frontend Overview","https:\u002F\u002Fgithub.com\u002FYurij2015\u002Fvetspace-frontend",{"label":63,"to":64,"color":25,"icon":58},"VetCard Overview","https:\u002F\u002Fgithub.com\u002FYurij2015\u002Fvetspace-vetcard",{},[67,68,71,74,77,80],{"name":5,"icon":20},{"name":69,"icon":70},"Vue","i-simple-icons-vuedotjs",{"name":72,"icon":73},"Nuxt","i-simple-icons-nuxtdotjs",{"name":75,"icon":76},"Stripe","i-simple-icons-stripe",{"name":78,"icon":79},"GraphQL","i-simple-icons-graphql",{"name":81,"icon":82},"AI","i-heroicons-sparkles","en\u002Fprojects\u002Fvetspace",[85,5,69,86,75,81],"SaaS","Multi-tenant","NDJ-cDU24m4uCf7HzSeTbCgbh0MGVh5P5HASDymy0wA",{"id":89,"title":90,"content":91,"date":92,"description":93,"extension":9,"featured":48,"image":94,"links":95,"meta":101,"stack":102,"stem":120,"tags":121,"url":97,"__hash__":124},"projects_en\u002Fen\u002Fprojects\u002Fdigipulse.yml","DigiPulse","Uptime monitoring SaaS — 60-second checks, SSL expiry tracking, Telegram and email notifications. The admin panel and core backend are built with Laravel (Octane, Reverb websockets) and Filament, while the monitoring engine is a separate Go service. Includes Google OAuth sign-in and Cloudflare Turnstile integration, plus an MCP server that exposes monitoring data directly to AI assistants. Self-hosted on Proxmox.\n\n## Key Features\n\n- **Dedicated Go engine** - availability checks run in a separate Go service, so constant 60-second polling never slows down the Laravel app\n- **Real-time dashboard** - Reverb websockets push status changes to the UI live, no manual refresh\n- **Octane + Filament** - resident-memory Laravel with a full admin panel for monitors, contacts and alert rules\n- **MCP server** - monitors and incidents are queryable from AI assistants (Claude, Cursor) via the Model Context Protocol\n- **Google OAuth + Turnstile** - passwordless sign-in and bot protection on public forms\n- **Self-hosted** - deployed on a Proxmox homelab I manage end-to-end\n\n## Tech Stack\n\n- **Backend**: Laravel (Octane, Reverb websockets)\n- **Admin Panel**: Filament\n- **Monitoring Engine**: Go (separate service)\n- **Database**: PostgreSQL\n- **AI Integration**: MCP server\n- **Infrastructure**: Self-hosted on Proxmox\n","2026-04-17","Uptime monitoring SaaS: event-driven architecture — Laravel (Octane, Reverb) + Filament dispatch checks through Redis to a lightweight Go worker; an MCP server exposes monitoring data to AI assistants; Telegram\u002Femail alerts","\u002Fhero\u002Fdigipulse.avif",[96,98],{"label":52,"to":97,"color":54,"icon":26},"https:\u002F\u002Fdigipulse.cloud",{"label":99,"to":100,"color":25,"icon":58},"GitHub","https:\u002F\u002Fgithub.com\u002FYurij2015\u002Fdigipulse-backend",{},[103,104,107,110,113,116,117],{"name":5,"icon":20},{"name":105,"icon":106},"Filament","i-simple-icons-filament",{"name":108,"icon":109},"Go","i-simple-icons-go",{"name":111,"icon":112},"PostgreSQL","i-simple-icons-postgresql",{"name":114,"icon":115},"Redis","i-simple-icons-redis",{"name":69,"icon":70},{"name":118,"icon":119},"MCP","i-heroicons-cpu-chip","en\u002Fprojects\u002Fdigipulse",[85,5,108,122,118,114,123],"Monitoring","Event-driven","b7hu-_otqukg-JY_hPBvmlUYk5jVOx42XpCotH6Cvqo",{"id":126,"title":127,"content":128,"date":129,"description":130,"extension":9,"featured":48,"image":131,"links":132,"meta":137,"stack":138,"stem":157,"tags":158,"url":134,"__hash__":161},"projects_en\u002Fen\u002Fprojects\u002Fdigispace.yml","DigiSpace","The production website behind digispace.pro — the agency's public site, admin panel and custom CMS in a single Laravel app, now fully multilingual (EN\u002FUK\u002FPL) with a Filament admin panel running alongside the legacy Inertia + Vue one. The same code that runs the live site is available on GitHub.\n\n## Key Features\n\n- **Filament admin panel** - a parallel `\u002Fcontrol` panel (24 resources) with a TipTap rich editor, straight-to-MinIO image uploads and content-first navigation, rolled out resource-by-resource next to the existing Inertia admin\n- **Multilingual by design** - both content and structural UI strings (menus, footer, buttons) are translated per locale, not just page text, with hreflang-aware localized routing\n- **SEO built in** - JSON-LD structured data, localized sitemaps and proper 404 handling across every locale\n- **Monolith done right** - public site and two admin surfaces live in one Laravel app, no separate API to maintain\n- **Self-managed content** - pages, services and portfolio entries are edited in the CMS — no deploy needed for a text or translation change\n- **Quality gates** - PHPUnit tests and PHPStan static analysis run in CI\n- **Source available** - the exact code serving digispace.pro is public on GitHub\n\n## Tech Stack\n\n- **Backend**: Laravel\n- **Admin**: Filament 5 (`\u002Fcontrol`) + legacy Inertia.js + Vue admin\n- **Frontend**: Vue.js, Vite\n- **Localization**: EN\u002FUK\u002FPL content and structure translations\n- **Architecture**: Custom CMS\n","2022-10-05","The agency's multilingual (EN\u002FUK\u002FPL) production site with a custom CMS — a Filament admin panel with a rich content editor, content translations, JSON-LD and localized sitemaps built in, alongside the legacy Inertia + Vue admin","\u002Fhero\u002Fdigispace.avif",[133,135],{"label":52,"to":134,"color":54,"icon":26},"https:\u002F\u002Fdigispace.pro",{"label":99,"to":136,"color":25,"icon":58},"https:\u002F\u002Fgithub.com\u002FYurij2015\u002FDigiSpace",{},[139,140,143,144,147,150,153,154],{"name":5,"icon":20},{"name":141,"icon":142},"Inertia","i-simple-icons-inertia",{"name":69,"icon":70},{"name":145,"icon":146},"Vite","i-simple-icons-vite",{"name":148,"icon":149},"MySQL","i-simple-icons-mysql",{"name":151,"icon":152},"Tailwind CSS","i-simple-icons-tailwindcss",{"name":105,"icon":106},{"name":155,"icon":156},"CMS","i-heroicons-document-text","en\u002Fprojects\u002Fdigispace",[5,105,141,69,159,160],"i18n","SEO","dtWB-9st6fApdLs4qomkqmMQVq9PBqeHoPzR0Ywgu0I",{"id":163,"title":164,"content":165,"date":166,"description":167,"extension":9,"featured":48,"image":168,"links":169,"meta":173,"stack":174,"stem":186,"tags":187,"url":190,"__hash__":191},"projects_en\u002Fen\u002Fprojects\u002Fnetpostpanel.yml","NetPostPanel","An internal AI content-operations platform that turns topic research into publishable content: a full RAG pipeline (Google Custom Search + RSS → scraping → multi-provider generation → vectorization), plus a versioned external API that powers content workflows in other projects, including the DigiSpace blog pipeline.\n\n## Key Features\n\n- **External API** - a versioned `POST \u002Fapi\u002Fv1\u002Fgenerate` + `\u002Ftranslate` API with per-client keys and rate limits exposes the whole pipeline to other apps, sync or async with callbacks\n- **Auto Pilot** - scheduled daily runs generate content from new inspiration items or custom topics, fully unattended\n- **Provider-agnostic AI** - Gemini and OpenAI sit behind a driver abstraction, so swapping models is config, not refactoring\n- **Semantic pipeline** - Qdrant vector search deduplicates and clusters incoming stories before they reach generation\n- **Autonomous aggregation** - RSS auto-discovery and Google Custom Search plus scraping turn a bare topic into a self-feeding content source\n- **Observable LLM calls** - every generation is traced in Langfuse: tokens, latency, cost\n- **Role-based access** - admin\u002Fcontent manager\u002Feditor roles, with every query scoped to its owner unless admin\n\n## Tech Stack\n\n- **Backend**: Laravel, `laravel\u002Fai` agents\n- **Frontend**: Inertia.js + Vue 3 (Search & Creation SPA, TipTap editor)\n- **AI**: Multi-provider (Gemini\u002FOpenAI) behind a driver abstraction\n- **Research**: Google Custom Search + RSS aggregation, page scraping\n- **Vector DB**: Qdrant for semantic search\n- **Observability**: Langfuse for LLM tracing\n- **Queue**: Laravel Horizon\n- **Tests**: PHPUnit\u002FPest + Cypress E2E\n","2024-11-10","AI content-operations platform — a RAG pipeline (research → scrape → generate → vectorize), an external API other apps call, and Auto Pilot for unattended scheduled generation","\u002Fhero\u002Fnetpostpanel.avif",[170],{"label":171,"to":172,"color":25,"icon":58},"Overview","https:\u002F\u002Fgithub.com\u002FYurij2015\u002Fnet-post-panel-overview",{},[175,176,177,180,183],{"name":5,"icon":20},{"name":81,"icon":82},{"name":178,"icon":179},"Qdrant","i-simple-icons-qdrant",{"name":181,"icon":182},"Langfuse","i-heroicons-chart-bar",{"name":184,"icon":185},"Horizon","i-simple-icons-laravelhorizon","en\u002Fprojects\u002Fnetpostpanel",[81,5,188,189,178,184],"RAG","External API","https:\u002F\u002Fnet-post-panel.digispace.pro","9F27sKWiICL9ugPIbYmr3dQH8lYynDHYMUcKPSIVVGQ",{"id":193,"title":194,"content":195,"date":39,"description":196,"extension":9,"featured":48,"image":197,"links":198,"meta":202,"stack":203,"stem":212,"tags":213,"url":200,"__hash__":215},"projects_en\u002Fen\u002Fprojects\u002Fvetcard.yml","VetCard","The public-facing side of VetSpace — a multi-tenant catalog of veterinary clinics. A single Nuxt SSR deployment serves every clinic: SEO-first clinic card pages, online appointment booking proxied to each clinic's own tenant backend, per-clinic theming, and multi-branch support.\n\n## Key Features\n\n- **One deployment, many clinics** — a single app routes by clinic slug; booking and slot requests are proxied to each clinic's own tenant backend\n- **SEO-first catalog** — 590+ clinics with SSR pages, structured data and localized routes built to be indexed\n- **Per-clinic branding** — every clinic page is themed by its own brand color, with a \"Powered by VetSpace\" badge\n- **Real booking UX** — available slots show free-doctor counts with scarcity color-coding\n- **Fully localized** — Ukrainian, English and Polish with prefix-based routing\n\n## Tech Stack\n\n- **Frontend**: Nuxt 4 \u002F Vue 3, Tailwind CSS v4\n- **Backend**: Laravel catalog API + per-tenant appointment endpoints\n- **Rendering**: SSR for SEO pages, CSR for booking flows\n- **Testing**: Vitest unit tests + Cypress E2E against a real backend\n","Multi-tenant catalog of veterinary clinics: SEO clinic pages, online appointment booking, per-clinic branding — one Nuxt app serves every clinic","\u002Fhero\u002Fvetcard.avif",[199,201],{"label":52,"to":200,"color":54,"icon":26},"https:\u002F\u002Fvetcard.pro",{"label":171,"to":64,"color":25,"icon":58},{},[204,205,206,209,210],{"name":72,"icon":73},{"name":69,"icon":70},{"name":207,"icon":208},"TypeScript","i-simple-icons-typescript",{"name":151,"icon":152},{"name":211,"icon":20},"Laravel API","en\u002Fprojects\u002Fvetcard",[72,69,86,160,214],"SSR","E8OJJw44yMkVkIiATLwF2krirApHUeRnAApzpvv7c10",{"data":217,"body":218},{},{"type":219,"children":220},"root",[221,229,236,278,284,289,295],{"type":222,"tag":223,"props":224,"children":225},"element","p",{},[226],{"type":227,"value":228},"text","Laravel is the PHP framework I use for SaaS products, APIs and administration tools. My projects include VetSpace, DigiPulse, NetPostPanel and the DigiSpace website, each with different business rules and integration needs.",{"type":222,"tag":230,"props":231,"children":233},"h2",{"id":232},"how-i-use-laravel",[234],{"type":227,"value":235},"How I use Laravel",{"type":222,"tag":237,"props":238,"children":239},"ul",{},[240,251,260,269],{"type":222,"tag":241,"props":242,"children":243},"li",{},[244,249],{"type":222,"tag":245,"props":246,"children":247},"strong",{},[248],{"type":227,"value":44},{"type":227,"value":250}," — a shared API for the clinic catalog and CRM, with tenant-aware access and Stripe subscriptions through Cashier.",{"type":222,"tag":241,"props":252,"children":253},{},[254,258],{"type":222,"tag":245,"props":255,"children":256},{},[257],{"type":227,"value":90},{"type":227,"value":259}," — the monitoring application and Filament administration interface, alongside a separate Go monitoring service.",{"type":222,"tag":241,"props":261,"children":262},{},[263,267],{"type":222,"tag":245,"props":264,"children":265},{},[266],{"type":227,"value":164},{"type":227,"value":268}," — background content generation workflows managed through queues and Horizon.",{"type":222,"tag":241,"props":270,"children":271},{},[272,276],{"type":222,"tag":245,"props":273,"children":274},{},[275],{"type":227,"value":127},{"type":227,"value":277}," — a multilingual website with a custom CMS and Filament panel.",{"type":222,"tag":230,"props":279,"children":281},{"id":280},"the-framework-and-its-ecosystem",[282],{"type":227,"value":283},"The framework and its ecosystem",{"type":222,"tag":223,"props":285,"children":286},{},[287],{"type":227,"value":288},"Laravel provides routing, validation, database access and queue APIs. Filament, Cashier and Horizon are additional tools that I select and configure for the project. Billing, permissions and tenant isolation still require application-specific design and testing.",{"type":222,"tag":230,"props":290,"children":292},{"id":291},"building-for-ongoing-maintenance",[293],{"type":227,"value":294},"Building for ongoing maintenance",{"type":222,"tag":223,"props":296,"children":297},{},[298],{"type":227,"value":299},"I aim to keep business logic separate from HTTP handling and administration screens. This makes it easier to reuse a workflow through an API or background job. Performance work starts with measurement; tools such as Octane can help suitable workloads, but do not replace query optimization or careful state management."]