[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"technology-en-redis":3,"technology-projects-en-redis":29,"mdc-7w3p2-key":106},{"id":4,"title":5,"category":6,"content":7,"description":8,"extension":9,"faq":10,"icon":11,"links":12,"meta":21,"projects":22,"since":25,"stem":26,"updated":27,"__hash__":28},"technologies_en\u002Fen\u002Ftechnologies\u002Fredis.yml","Redis","database","Redis is an in-memory data store that I use for application caching and background processing. In my Laravel stack, it supports the work that should happen outside a visitor's HTTP request.\n\n## Examples from my projects\n\nNetPostPanel uses Laravel Horizon for queued content generation workflows. DigiPulse uses Redis in its event-driven monitoring architecture. These jobs have different durability requirements from an ordinary page cache: losing pending work can affect the product, even if cached data can be rebuilt.\n\n## Caching and coordination\n\nRedis can hold computed values, request counters and short-lived locks. Cache keys and expiration rules need to match the data they represent. Locks can coordinate workers, but retries and failure handling must still prevent duplicate side effects.\n\n## Persistence matters for queues\n\nRedis offers RDB snapshots and AOF persistence, with different recovery trade-offs. Restarting a node does not necessarily erase its data, and treating every Redis key as disposable is unsafe for queues. Persistence, eviction settings and job retry behavior need to be chosen together. Redis Pub\u002FSub, in contrast, does not retain messages for disconnected subscribers.\n","Redis in Laravel applications: background queues, application caching and coordination in DigiPulse and NetPostPanel.","yml",null,"i-simple-icons-redis",[13,18],{"label":14,"to":15,"color":16,"icon":17},"redis.io","https:\u002F\u002Fredis.io","neutral","i-heroicons-arrow-top-right-on-square",{"label":19,"to":20,"color":16,"icon":17},"Technical reference","https:\u002F\u002Fredis.io\u002Fdocs\u002Flatest\u002Foperate\u002Foss_and_stack\u002Fmanagement\u002Fpersistence\u002F",{},[23,24],"digipulse","netpostpanel","2019","en\u002Ftechnologies\u002Fredis","2026-09-20","0enle9dzYZbt2S4kQ2xE59_oWWMJ3b4XNxK7uXMHnRQ",[30,74],{"id":31,"title":32,"content":33,"date":34,"description":35,"extension":9,"featured":36,"image":37,"links":38,"meta":47,"stack":48,"stem":68,"tags":69,"url":41,"__hash__":73},"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",true,"\u002Fhero\u002Fdigipulse.avif",[39,43],{"label":40,"to":41,"color":42,"icon":17},"Live Demo","https:\u002F\u002Fdigipulse.cloud","primary",{"label":44,"to":45,"color":16,"icon":46},"GitHub","https:\u002F\u002Fgithub.com\u002FYurij2015\u002Fdigipulse-backend","i-simple-icons-github",{},[49,52,55,58,61,62,65],{"name":50,"icon":51},"Laravel","i-simple-icons-laravel",{"name":53,"icon":54},"Filament","i-simple-icons-filament",{"name":56,"icon":57},"Go","i-simple-icons-go",{"name":59,"icon":60},"PostgreSQL","i-simple-icons-postgresql",{"name":5,"icon":11},{"name":63,"icon":64},"Vue","i-simple-icons-vuedotjs",{"name":66,"icon":67},"MCP","i-heroicons-cpu-chip","en\u002Fprojects\u002Fdigipulse",[70,50,56,71,66,5,72],"SaaS","Monitoring","Event-driven","b7hu-_otqukg-JY_hPBvmlUYk5jVOx42XpCotH6Cvqo",{"id":75,"title":76,"content":77,"date":78,"description":79,"extension":9,"featured":36,"image":80,"links":81,"meta":85,"stack":86,"stem":100,"tags":101,"url":104,"__hash__":105},"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",[82],{"label":83,"to":84,"color":16,"icon":46},"Overview","https:\u002F\u002Fgithub.com\u002FYurij2015\u002Fnet-post-panel-overview",{},[87,88,91,94,97],{"name":50,"icon":51},{"name":89,"icon":90},"AI","i-heroicons-sparkles",{"name":92,"icon":93},"Qdrant","i-simple-icons-qdrant",{"name":95,"icon":96},"Langfuse","i-heroicons-chart-bar",{"name":98,"icon":99},"Horizon","i-simple-icons-laravelhorizon","en\u002Fprojects\u002Fnetpostpanel",[89,50,102,103,92,98],"RAG","External API","https:\u002F\u002Fnet-post-panel.digispace.pro","9F27sKWiICL9ugPIbYmr3dQH8lYynDHYMUcKPSIVVGQ",{"data":107,"body":108},{},{"type":109,"children":110},"root",[111,119,126,131,137,142,148],{"type":112,"tag":113,"props":114,"children":115},"element","p",{},[116],{"type":117,"value":118},"text","Redis is an in-memory data store that I use for application caching and background processing. In my Laravel stack, it supports the work that should happen outside a visitor's HTTP request.",{"type":112,"tag":120,"props":121,"children":123},"h2",{"id":122},"examples-from-my-projects",[124],{"type":117,"value":125},"Examples from my projects",{"type":112,"tag":113,"props":127,"children":128},{},[129],{"type":117,"value":130},"NetPostPanel uses Laravel Horizon for queued content generation workflows. DigiPulse uses Redis in its event-driven monitoring architecture. These jobs have different durability requirements from an ordinary page cache: losing pending work can affect the product, even if cached data can be rebuilt.",{"type":112,"tag":120,"props":132,"children":134},{"id":133},"caching-and-coordination",[135],{"type":117,"value":136},"Caching and coordination",{"type":112,"tag":113,"props":138,"children":139},{},[140],{"type":117,"value":141},"Redis can hold computed values, request counters and short-lived locks. Cache keys and expiration rules need to match the data they represent. Locks can coordinate workers, but retries and failure handling must still prevent duplicate side effects.",{"type":112,"tag":120,"props":143,"children":145},{"id":144},"persistence-matters-for-queues",[146],{"type":117,"value":147},"Persistence matters for queues",{"type":112,"tag":113,"props":149,"children":150},{},[151],{"type":117,"value":152},"Redis offers RDB snapshots and AOF persistence, with different recovery trade-offs. Restarting a node does not necessarily erase its data, and treating every Redis key as disposable is unsafe for queues. Persistence, eviction settings and job retry behavior need to be chosen together. Redis Pub\u002FSub, in contrast, does not retain messages for disconnected subscribers."]