[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"technology-en-php":3,"technology-projects-en-php":36,"mdc--n8uuxu-key":234},{"id":4,"title":5,"category":6,"content":7,"description":8,"extension":9,"faq":10,"icon":17,"links":18,"meta":24,"projects":25,"since":32,"stem":33,"updated":34,"__hash__":35},"technologies_en\u002Fen\u002Ftechnologies\u002Fphp.yml","PHP","backend","PHP is my main server-side programming language. I have more than eight years of commercial development experience, working with Laravel and Symfony as well as WordPress when it fits the project. My current work uses PHP 8.x; that experience also includes earlier PHP versions.\n\n## Where I use PHP\n\nLaravel powers projects such as VetSpace, DigiPulse and NetPostPanel. My commercial Symfony work includes a ticketing platform for Formula 1, MotoGP, EICMA and EuroLeague events. The tasks span checkout, user accounts, administration tools and external integrations.\n\n## What I focus on\n\n- **Business logic** — understandable workflows for bookings, subscriptions and orders.\n- **APIs and payments** — validation, authorization and reliable handling of external responses.\n- **Maintenance** — automated tests and static analysis to support changes in existing codebases.\n\n## Runtime choices\n\nPHP-FPM remains useful for conventional request handling. Long-running workers, including applications served through Octane and FrankenPHP, introduce different state and memory considerations. I choose the runtime around the application and verify the result under representative load. A language or framework alone does not guarantee performance.\n","PHP development with Laravel and Symfony: SaaS applications, ticketing systems, payment integrations and maintainable backend APIs.","yml",[11,14],{"label":12,"content":13},"Which PHP versions do you work with?","My current work uses PHP 8.x. When upgrading an older application, I check the framework and dependency requirements and test behavior affected by the version change.",{"label":15,"content":16},"How do you choose between Laravel and Symfony?","I consider the existing codebase, team experience, integrations and maintenance needs. Both can support long-lived applications; I use Laravel for my SaaS projects and Symfony in commercial ticketing work.","i-simple-icons-php",[19],{"label":20,"to":21,"color":22,"icon":23},"php.net","https:\u002F\u002Fwww.php.net","neutral","i-heroicons-arrow-top-right-on-square",{},[26,27,28,29,30,31],"vetspace","digipulse","digispace","netpostpanel","vetcard","digispace-studio","2017","en\u002Ftechnologies\u002Fphp","2026-09-20","USr_LGTQcMbvws-iw7vderKqOhli_mtO_Yg_zBdTZpw",[37,85,122,159,189,213],{"id":38,"title":39,"content":40,"date":41,"description":42,"extension":9,"featured":43,"image":44,"links":45,"meta":60,"stack":61,"stem":80,"tags":81,"url":48,"__hash__":84},"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",[46,50,54,57],{"label":47,"to":48,"color":49,"icon":23},"Live Demo","https:\u002F\u002Fvetspace.pro","primary",{"label":51,"to":52,"color":22,"icon":53},"API Overview","https:\u002F\u002Fgithub.com\u002FYurij2015\u002Fvetspace-api","i-simple-icons-github",{"label":55,"to":56,"color":22,"icon":53},"Frontend Overview","https:\u002F\u002Fgithub.com\u002FYurij2015\u002Fvetspace-frontend",{"label":58,"to":59,"color":22,"icon":53},"VetCard Overview","https:\u002F\u002Fgithub.com\u002FYurij2015\u002Fvetspace-vetcard",{},[62,65,68,71,74,77],{"name":63,"icon":64},"Laravel","i-simple-icons-laravel",{"name":66,"icon":67},"Vue","i-simple-icons-vuedotjs",{"name":69,"icon":70},"Nuxt","i-simple-icons-nuxtdotjs",{"name":72,"icon":73},"Stripe","i-simple-icons-stripe",{"name":75,"icon":76},"GraphQL","i-simple-icons-graphql",{"name":78,"icon":79},"AI","i-heroicons-sparkles","en\u002Fprojects\u002Fvetspace",[82,63,66,83,72,78],"SaaS","Multi-tenant","NDJ-cDU24m4uCf7HzSeTbCgbh0MGVh5P5HASDymy0wA",{"id":86,"title":87,"content":88,"date":89,"description":90,"extension":9,"featured":43,"image":91,"links":92,"meta":98,"stack":99,"stem":117,"tags":118,"url":94,"__hash__":121},"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",[93,95],{"label":47,"to":94,"color":49,"icon":23},"https:\u002F\u002Fdigipulse.cloud",{"label":96,"to":97,"color":22,"icon":53},"GitHub","https:\u002F\u002Fgithub.com\u002FYurij2015\u002Fdigipulse-backend",{},[100,101,104,107,110,113,114],{"name":63,"icon":64},{"name":102,"icon":103},"Filament","i-simple-icons-filament",{"name":105,"icon":106},"Go","i-simple-icons-go",{"name":108,"icon":109},"PostgreSQL","i-simple-icons-postgresql",{"name":111,"icon":112},"Redis","i-simple-icons-redis",{"name":66,"icon":67},{"name":115,"icon":116},"MCP","i-heroicons-cpu-chip","en\u002Fprojects\u002Fdigipulse",[82,63,105,119,115,111,120],"Monitoring","Event-driven","b7hu-_otqukg-JY_hPBvmlUYk5jVOx42XpCotH6Cvqo",{"id":123,"title":124,"content":125,"date":126,"description":127,"extension":9,"featured":43,"image":128,"links":129,"meta":134,"stack":135,"stem":154,"tags":155,"url":131,"__hash__":158},"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",[130,132],{"label":47,"to":131,"color":49,"icon":23},"https:\u002F\u002Fdigispace.pro",{"label":96,"to":133,"color":22,"icon":53},"https:\u002F\u002Fgithub.com\u002FYurij2015\u002FDigiSpace",{},[136,137,140,141,144,147,150,151],{"name":63,"icon":64},{"name":138,"icon":139},"Inertia","i-simple-icons-inertia",{"name":66,"icon":67},{"name":142,"icon":143},"Vite","i-simple-icons-vite",{"name":145,"icon":146},"MySQL","i-simple-icons-mysql",{"name":148,"icon":149},"Tailwind CSS","i-simple-icons-tailwindcss",{"name":102,"icon":103},{"name":152,"icon":153},"CMS","i-heroicons-document-text","en\u002Fprojects\u002Fdigispace",[63,102,138,66,156,157],"i18n","SEO","dtWB-9st6fApdLs4qomkqmMQVq9PBqeHoPzR0Ywgu0I",{"id":160,"title":161,"content":162,"date":163,"description":164,"extension":9,"featured":43,"image":165,"links":166,"meta":170,"stack":171,"stem":183,"tags":184,"url":187,"__hash__":188},"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",[167],{"label":168,"to":169,"color":22,"icon":53},"Overview","https:\u002F\u002Fgithub.com\u002FYurij2015\u002Fnet-post-panel-overview",{},[172,173,174,177,180],{"name":63,"icon":64},{"name":78,"icon":79},{"name":175,"icon":176},"Qdrant","i-simple-icons-qdrant",{"name":178,"icon":179},"Langfuse","i-heroicons-chart-bar",{"name":181,"icon":182},"Horizon","i-simple-icons-laravelhorizon","en\u002Fprojects\u002Fnetpostpanel",[78,63,185,186,175,181],"RAG","External API","https:\u002F\u002Fnet-post-panel.digispace.pro","9F27sKWiICL9ugPIbYmr3dQH8lYynDHYMUcKPSIVVGQ",{"id":190,"title":191,"content":192,"date":34,"description":193,"extension":9,"featured":43,"image":194,"links":195,"meta":199,"stack":200,"stem":209,"tags":210,"url":197,"__hash__":212},"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",[196,198],{"label":47,"to":197,"color":49,"icon":23},"https:\u002F\u002Fvetcard.pro",{"label":168,"to":59,"color":22,"icon":53},{},[201,202,203,206,207],{"name":69,"icon":70},{"name":66,"icon":67},{"name":204,"icon":205},"TypeScript","i-simple-icons-typescript",{"name":148,"icon":149},{"name":208,"icon":64},"Laravel API","en\u002Fprojects\u002Fvetcard",[69,66,83,157,211],"SSR","E8OJJw44yMkVkIiATLwF2krirApHUeRnAApzpvv7c10",{"id":214,"title":215,"content":216,"date":217,"description":218,"extension":9,"featured":43,"image":219,"links":220,"meta":223,"stack":224,"stem":230,"tags":231,"url":222,"__hash__":233},"projects_en\u002Fen\u002Fprojects\u002Fdigispace-studio.yml","DigiSpace Studio","Marketing site for DigiSpace Studio — a specialized web studio for veterinary clinics and pet brands. Built on WordPress with the Blocksy theme and Stackable\u002FGutenberg blocks, a child theme for customization, a blog, and lead capture through contact forms.\n\n## Key Features\n\n- **Niche positioning** — the site speaks directly to vet clinics and pet brands, not a generic agency pitch\n- **Block-based editing** — Stackable and Ultimate Gutenberg blocks let non-developers build new landing pages without touching code\n- **Child theme** — customizations live in a Blocksy child theme, so theme updates never wipe the design\n- **Blog + lead capture** — content marketing for SEO with Contact Form 7 for inquiries\n","2024-06-27","Marketing site for a niche IT studio for veterinary clinics and pet brands — WordPress with Blocksy theme and Gutenberg blocks","\u002Fhero\u002Fdigispace-studio.avif",[221],{"label":47,"to":222,"color":49,"icon":23},"https:\u002F\u002Fdigispace.studio",{},[225,228,229],{"name":226,"icon":227},"WordPress","i-simple-icons-wordpress",{"name":5,"icon":17},{"name":145,"icon":146},"en\u002Fprojects\u002Fdigispace-studio",[226,232,157],"Marketing","lUBO_S2U81n4IZSar2nv_fcR4Tt9yqbTz0I0wnYI1_c",{"data":235,"body":236},{},{"type":237,"children":238},"root",[239,247,254,259,265,301,307],{"type":240,"tag":241,"props":242,"children":243},"element","p",{},[244],{"type":245,"value":246},"text","PHP is my main server-side programming language. I have more than eight years of commercial development experience, working with Laravel and Symfony as well as WordPress when it fits the project. My current work uses PHP 8.x; that experience also includes earlier PHP versions.",{"type":240,"tag":248,"props":249,"children":251},"h2",{"id":250},"where-i-use-php",[252],{"type":245,"value":253},"Where I use PHP",{"type":240,"tag":241,"props":255,"children":256},{},[257],{"type":245,"value":258},"Laravel powers projects such as VetSpace, DigiPulse and NetPostPanel. My commercial Symfony work includes a ticketing platform for Formula 1, MotoGP, EICMA and EuroLeague events. The tasks span checkout, user accounts, administration tools and external integrations.",{"type":240,"tag":248,"props":260,"children":262},{"id":261},"what-i-focus-on",[263],{"type":245,"value":264},"What I focus on",{"type":240,"tag":266,"props":267,"children":268},"ul",{},[269,281,291],{"type":240,"tag":270,"props":271,"children":272},"li",{},[273,279],{"type":240,"tag":274,"props":275,"children":276},"strong",{},[277],{"type":245,"value":278},"Business logic",{"type":245,"value":280}," — understandable workflows for bookings, subscriptions and orders.",{"type":240,"tag":270,"props":282,"children":283},{},[284,289],{"type":240,"tag":274,"props":285,"children":286},{},[287],{"type":245,"value":288},"APIs and payments",{"type":245,"value":290}," — validation, authorization and reliable handling of external responses.",{"type":240,"tag":270,"props":292,"children":293},{},[294,299],{"type":240,"tag":274,"props":295,"children":296},{},[297],{"type":245,"value":298},"Maintenance",{"type":245,"value":300}," — automated tests and static analysis to support changes in existing codebases.",{"type":240,"tag":248,"props":302,"children":304},{"id":303},"runtime-choices",[305],{"type":245,"value":306},"Runtime choices",{"type":240,"tag":241,"props":308,"children":309},{},[310],{"type":245,"value":311},"PHP-FPM remains useful for conventional request handling. Long-running workers, including applications served through Octane and FrankenPHP, introduce different state and memory considerations. I choose the runtime around the application and verify the result under representative load. A language or framework alone does not guarantee performance."]