[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"content:site:en":3,"content:products:en":22,"content:post:monitoring-for-three:en":250},{"email":4,"salesEmail":4,"supportEmail":5,"phone":6,"telegram":7,"telegramUrl":8,"whatsappUrl":6,"githubUrl":9,"linkedinUrl":10,"locale":11,"footerAbout":12,"contactPromise":13,"whereBody":14,"officeCity":15,"workHours":16,"budgetRanges":17},"sales@jvdsoft.com","support@jvdsoft.com",null,"@jvdsoft_support","https:\u002F\u002Ft.me\u002Fjvdsoft_support","https:\u002F\u002Fgithub.com\u002FEvgeniyKiryanow","https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Fyevhenii-kirianov-54b8081ba\u002F","en","Full-cycle web development. Kyiv — working with clients in Ukraine, the EU and the US. Our own products, Qrenza and ShiftPlan, run on infrastructure we maintain ourselves.","Write however suits you — we answer within the working day. sales for new projects, support for our products.","Kyiv, Ukraine. We work remotely with clients in Ukraine, the EU and the US. Contract and NDA, invoiced from a Ukrainian sole trader or company.","Kyiv, Ukraine","Mon–Fri, 10:00–19:00 (Kyiv)",[18,19,20,21],"under [amount]","[amount] — [amount]","over [amount]","not sure yet",[23,154],{"slug":24,"status":25,"order":26,"siteUrl":27,"logoUrl":28,"heroImageUrl":29,"accentColor":30,"stack":31,"launchedYear":38,"locale":11,"name":39,"tagline":40,"summary":41,"positioning":42,"metaTitle":43,"metaDescription":44,"audience":45,"features":54,"steps":85,"plans":95,"faq":114,"gallery":136},"qrenza","live",0,"https:\u002F\u002Fqrenza.jvdsoft.com","\u002Fmedia\u002Fproducts\u002Fqrenza\u002Flogo.svg","\u002Fmedia\u002Fproducts\u002Fqrenza\u002Fhero.webp","#6366f1",[32,33,34,35,36,37],"Laravel","React","TypeScript","PostgreSQL","Tailwind CSS","Vite",2026,"Qrenza","A digital catalog platform with QR menus and real-time orders","Catalog, ordering and analytics for any business with products or services. Customers scan a QR code and see the menu — no app, no paper, no waiting.","Qrenza replaces the paper menu and the spreadsheet: you keep categories, items, prices and photos in one place, and the customer opens the catalog from a QR code on the table, the counter or the shop window. Orders land on the dashboard straight from the customer’s phone, move through three status steps, and a table map shows where work is happening right now. It fits restaurants, cafés, bars, bakeries, shops, salons and studios — anyone with a list of what they sell.","Qrenza — QR menus and digital catalogs for business","Qrenza is a digital catalog platform: QR menus, real-time orders, table map, analytics, team roles and six languages. A JVD Soft product, live in production.",[46,47,48,49,50,51,52,53],"Restaurants","Cafés and coffee shops","Bars and night clubs","Bakeries and patisseries","Shops and grocery stores","Beauty and wellness","Salons and studios","Markets and kiosks",[55,58,61,64,67,70,73,76,79,82],{"title":56,"body":57},"Smart catalog","Categories and items with images, prices, descriptions and availability control — for menus, product catalogs or service lists.",{"title":59,"body":60},"Real-time orders","Customers order from the QR menu and the order appears on the dashboard instantly. Three status steps: new → preparing → ready.",{"title":62,"body":63},"Table management","A table map shows where the active orders are. Move an order between tables and follow every seat separately.",{"title":65,"body":66},"Live dashboard","Real-time statistics on active catalogs and daily operations, reachable from any device.",{"title":68,"body":69},"Analytics and reports","Revenue over time, top items, cancellation rate and the full order history in one dashboard.",{"title":71,"body":72},"Team roles","Owners, administrators and staff with the access level each needs. The whole team is managed from one place.",{"title":74,"body":75},"Six languages","The catalog can be read in the customer’s language — built for bilingual and tourist venues.",{"title":77,"body":78},"Your brand, your domain","Logo, favicon, colours, navigation style, custom domain, meta tags and a Google Analytics ID — no plugins needed.",{"title":80,"body":81},"Loyalty programme","Built-in points are awarded automatically for every order, so customers come back.",{"title":83,"body":84},"Embed anywhere","Drop the full catalog into any website as an iframe with a single snippet.",[86,89,92],{"title":87,"body":88},"Create an account","Sign up in seconds, no credit card. The 14-day trial starts immediately with full access to every feature.",{"title":90,"body":91},"Build the catalog","Add categories and items — products, dishes, services. Upload photos, set prices, write descriptions; drag to reorder.",{"title":93,"body":94},"Share the QR code","Print your unique QR code and put it anywhere — table, counter, shop window. Customers scan and browse instantly.",[96,104,109],{"name":97,"price":98,"note":99,"features":100,"popular":103},"[Start]","[amount]","\u002F mo",[101,102,102],"[Plan limit]","[What is included]",false,{"name":105,"price":98,"note":99,"features":106,"popular":108},"[Working]",[107,102,102],"[Everything in Start, plus]",true,{"name":110,"price":98,"note":99,"features":111,"popular":103},"[Team]",[112,102,113],"[Everything in Working, plus]","Priority support",[115,118,121,124,127,130,133],{"q":116,"a":117},"Is there a free trial?","Yes — 14 days with full access to every feature and no credit card. The trial starts the moment you sign up.",{"q":119,"a":120},"Can the catalog be updated in real time?","Yes. A change to a price, description or availability is visible to customers immediately — the QR code never needs reprinting, it always points at the current catalog.",{"q":122,"a":123},"Do customers need to install an app?","No. The catalog opens in the phone’s browser after scanning the QR code. The interface is mobile-first, so it works on any device.",{"q":125,"a":126},"Can I use my own domain?","Yes. Connect your own domain and set your logo, favicon and brand colours — the catalog looks like part of your own site.",{"q":128,"a":129},"Which businesses is Qrenza for?","Any business with a list of products or services: restaurants, cafés, bars, bakeries, shops, beauty salons, studios, markets and kiosks.",{"q":131,"a":132},"Can I track customer orders?","Yes. Every order moves through three status steps on the dashboard and the table map shows where it is. The full history stays in the system.",{"q":134,"a":135},"Where is the data stored?","On our infrastructure: sign-in with email and password or Google OAuth, token sessions with email confirmation, and access separated by role.",[137,142,146,150],{"src":138,"alt":139,"width":140,"height":141},"\u002Fmedia\u002Fproducts\u002Fqrenza\u002Forders.webp","Qrenza dashboard with live orders and the table map",1280,588,{"src":143,"alt":144,"width":140,"height":145},"\u002Fmedia\u002Fproducts\u002Fqrenza\u002Fmenu.webp","The Qrenza QR menu on a customer’s phone",572,{"src":147,"alt":148,"width":140,"height":149},"\u002Fmedia\u002Fproducts\u002Fqrenza\u002Fsettings.webp","Qrenza establishment settings: identity, theme, navigation, SEO",879,{"src":151,"alt":152,"width":140,"height":153},"\u002Fmedia\u002Fproducts\u002Fqrenza\u002Ffeatures.webp","The Qrenza platform feature grid",1020,{"slug":155,"status":25,"order":156,"siteUrl":157,"logoUrl":158,"heroImageUrl":159,"accentColor":160,"stack":161,"launchedYear":38,"locale":11,"name":162,"tagline":163,"summary":164,"positioning":165,"metaTitle":166,"metaDescription":167,"audience":168,"features":169,"steps":200,"plans":210,"faq":217,"gallery":233},"shiftplan",1,"https:\u002F\u002Fshifts.jvdsoft.com","\u002Fmedia\u002Fproducts\u002Fshifts\u002Flogo.svg","\u002Fmedia\u002Fproducts\u002Fshifts\u002Fhero.webp","#f97316",[32,33,34,35,36,37],"ShiftPlan","Smarter shifts, happier teams","Create, assign and publish work schedules in minutes. Your team gets notified automatically and conflicts are caught before they ship.","ShiftPlan replaces the spreadsheet and the \"who is on today?\" chat. Schedules are built on a calendar board with month, week and day views; shifts repeat on a rule, carry a colour, and can hold several people at once. The moment a schedule is published everyone sees their own shifts and gets a push notification about any change, while overlaps and double bookings are blocked as you type. Managers get shift statistics and a read on the team’s workload.","ShiftPlan — shift scheduling and team planning","ShiftPlan is shift scheduling for teams: calendar board, recurring shifts, colour coding, multiple assignees, instant notifications and workload analytics.",[],[170,173,176,179,182,185,188,191,194,197],{"title":171,"body":172},"Visual scheduling","Build and manage shifts on a clean calendar board with month, week and day views.",{"title":174,"body":175},"Recurring shifts","Shifts that repeat daily, weekly, monthly or on a custom schedule, created with one click.",{"title":177,"body":178},"Unlimited colours","Colour-code shifts with unlimited custom colours or pick from the preset palette.",{"title":180,"body":181},"Team management","Assign several employees to one shift, manage roles, and track who works when.",{"title":183,"body":184},"Analytics and insights","Shift statistics, per-employee schedules and a clear read on the team’s workload.",{"title":186,"body":187},"Smart notifications","Instant push alerts on every schedule change, so nobody misses a shift.",{"title":189,"body":190},"Conflict detection","Overlaps and double bookings are detected automatically and blocked before they are saved.",{"title":192,"body":193},"Mobile-first","The responsive interface works the same on phones, tablets and desktops.",{"title":195,"body":196},"End-to-end encrypted","All data is encrypted in transit and at rest — your schedules stay yours alone.",{"title":198,"body":199},"Compliant and backed up","GDPR, CCPA and SOC 2 compliant, with automatic daily backups you can restore from.",[201,204,207],{"title":202,"body":203},"Create shifts","Build the schedule on the calendar: add shifts, set times, assign employees.",{"title":205,"body":206},"Assign employees","Put one or several people on each shift, with colour coding for quick reference.",{"title":208,"body":209},"Notify your team","The team gets instant notifications about their schedule. Everyone stays in sync.",[211,213,215],{"name":97,"price":98,"note":99,"features":212,"popular":103},[101,102,102],{"name":105,"price":98,"note":99,"features":214,"popular":108},[107,102,102],{"name":110,"price":98,"note":99,"features":216,"popular":103},[112,102,113],[218,221,224,227,230],{"q":219,"a":220},"What does it cost to start?","You can start free and upgrade later — signing up does not require payment.",{"q":222,"a":223},"What happens if two shifts overlap?","Conflict detection finds overlaps and double bookings automatically and flags them instantly, before the schedule is published.",{"q":225,"a":226},"How does the team learn about changes?","Every employee gets an instant push notification. Updates arrive in real time, so the \"who is on today?\" thread disappears.",{"q":228,"a":229},"Does it work on a phone?","Yes. The interface is responsive and mobile-first — the same on phones, tablets and desktops.",{"q":231,"a":232},"How is schedule data protected?","Data is encrypted in transit and at rest, the service is GDPR, CCPA and SOC 2 compliant, and backups run daily.",[234,238,242,246],{"src":235,"alt":236,"width":140,"height":237},"\u002Fmedia\u002Fproducts\u002Fshifts\u002Ffeatures.webp","ShiftPlan features: calendar, recurring shifts, colours, team",696,{"src":239,"alt":240,"width":140,"height":241},"\u002Fmedia\u002Fproducts\u002Fshifts\u002Fhow.webp","The three steps of working in ShiftPlan",476,{"src":243,"alt":244,"width":140,"height":245},"\u002Fmedia\u002Fproducts\u002Fshifts\u002Fwhy.webp","Why teams choose ShiftPlan",580,{"src":247,"alt":248,"width":140,"height":249},"\u002Fmedia\u002Fproducts\u002Fshifts\u002Fsecurity.webp","ShiftPlan security: encryption, compliance, daily backups",508,{"slug":251,"category":252,"tags":253,"coverImageUrl":6,"coverImageAlt":258,"readingMinutes":259,"featured":103,"publishedAt":260,"updatedAt":261,"locale":11,"title":262,"excerpt":263,"lead":264,"bodyHtml":265,"metaTitle":266,"metaDescription":267,"takeaways":268,"faq":273,"author":280,"related":286},"monitoring-for-three","devops",[254,255,256,257],"monitoring","alerts","prometheus","uptime","",6,"2026-04-30T09:00:00.000Z","2026-08-28T15:57:52.760Z","Monitoring for a team of three: the minimum that works","You do not need a full observability stack to stop hearing about outages from customers. Four signals, three notification channels, and one rule that prevents alert fatigue.","Small teams usually have one of two monitoring states: nothing at all, or a dashboard nobody looks at. Both mean the same thing — you learn about outages from a user. Here is the minimum that changes it in a day.","\u003Ch2 id=\"signals\">Four signals to start with\u003C\u002Fh2>\u003Cp>Not \"collect every metric\", but the four that answer \"is the product working\":\u003C\u002Fp>\u003Cul>\u003Cli>\u003Cstrong>External availability.\u003C\u002Fstrong> A probe from another machine against the home page. If that fails, the rest of the metrics do not matter.\u003C\u002Fli>\u003Cli>\u003Cstrong>Error rate.\u003C\u002Fstrong> The share of 5xx responses. Not the absolute count, which grows with traffic.\u003C\u002Fli>\u003Cli>\u003Cstrong>Latency at a percentile.\u003C\u002Fstrong> p95, not the mean. The mean hides exactly the users who are having a bad time.\u003C\u002Fli>\u003Cli>\u003Cstrong>Queue depth.\u003C\u002Fstrong> If background jobs pile up, the enquiry email arrives tomorrow and technically everything is \"working\".\u003C\u002Fli>\u003C\u002Ful>\u003Ch2 id=\"probe\">The external probe is the cheapest signal\u003C\u002Fh2>\u003Cp>An internal health check cannot see a dead nginx, an expired certificate or a DNS mistake. A probe from outside sees all three immediately. One request a minute, recording status code and duration, is enough.\u003C\u002Fp>\u003Cp>Store a daily rollup rather than every probe: how many succeeded, how many were slow, how many failed. Then 90 days of history is 90 rows per service instead of hundreds of thousands, and the status page renders instantly.\u003C\u002Fp>\u003Ch2 id=\"incidents\">An incident instead of a stream of alerts\u003C\u002Fh2>\u003Cp>The main reason people stop reading alerts: one outage generates forty messages. An incident model fixes it. When a service first stops responding, open an incident and send one notification. While it stays open, say nothing. When it recovers, send a second.\u003C\u002Fp>\u003Cp>Two messages per event instead of forty. That is the difference between alerts people read and alerts that got their own filter folder.\u003C\u002Fp>\u003Cblockquote>\u003Cp>An alert nobody acts on is worse than no alert: it creates the feeling of being in control.\u003C\u002Fp>\u003C\u002Fblockquote>\u003Ch2 id=\"channels\">Channels\u003C\u002Fh2>\u003Cp>Three of them, each with a job:\u003C\u002Fp>\u003Col>\u003Cli>\u003Cstrong>A messenger\u003C\u002Fstrong> (Telegram, Slack) — things you must see now. Incidents only.\u003C\u002Fli>\u003Cli>\u003Cstrong>Email\u003C\u002Fstrong> — things you can read in the evening: the weekly summary, delivery attempts that ran out, anomalies.\u003C\u002Fli>\u003Cli>\u003Cstrong>A status page\u003C\u002Fstrong> — what the customer reads instead of messaging you.\u003C\u002Fli>\u003C\u002Fol>\u003Ch2 id=\"metrics\">Metrics and errors\u003C\u002Fh2>\u003Cp>A Prometheus endpoint in the application is a dozen lines and gives you latency, errors and queue depth without any external service. Even if you do not run Prometheus yet, add the endpoint now: the day you need it will be the worst possible day to integrate anything.\u003C\u002Fp>\u003Cp>Separately, collect errors with stack traces. Scrolling container logs is not a strategy, and grouping identical errors by frequency saves hours. Sentry or a compatible self-hosted alternative is a budget question, not an architectural one.\u003C\u002Fp>\u003Ch2 id=\"rule\">One rule\u003C\u002Fh2>\u003Cp>Every alert must answer \"what should I do right now\". If there is no answer, it is not an alert — it is a dashboard metric. Keeping that rule keeps monitoring alive longer than any tool will.\u003C\u002Fp>","Monitoring for a small team: the minimum that actually works","Four signals, an external probe, an incident model instead of alert streams, three notification channels and a Prometheus endpoint. Minimum monitoring in one day.",[269,270,271,272],"An external probe sees what an internal health check cannot","Daily rollups instead of every probe: 90 days of history in 90 rows","The incident model: two messages per event instead of forty","An alert with no answer to \"what do I do now\" is a metric, not an alert",[274,277],{"q":275,"a":276},"Does a small team need Prometheus?","The server itself, not necessarily on day one. The metrics endpoint is worth adding immediately: it is a dozen lines, and you will want it exactly when integrating anything is hardest.",{"q":278,"a":279},"How long should status history be kept?","Ninety days of daily rollups is enough for both a status page and an SLA conversation. Raw probe results are not worth keeping — they grow without limit and add nothing.",{"slug":281,"name":282,"role":283,"avatarUrl":284,"photoUrl":285},"yevhenii-kirianov","Yevhenii","Frontend and full-stack, interfaces, product development","\u002Fmedia\u002Fteam\u002Fyevhenii-avatar.webp","\u002Fmedia\u002Fteam\u002Fyevhenii.webp",[287,298,310],{"slug":288,"category":289,"tags":290,"coverImageUrl":6,"coverImageAlt":258,"readingMinutes":293,"featured":103,"publishedAt":294,"updatedAt":295,"locale":11,"title":296,"excerpt":297},"architecture-small-team","architecture",[289,291,292],"monolith","team",11,"2026-06-24T09:00:00.000Z","2026-08-28T15:57:52.490Z","Architecture for a team of three","Microservices cost a small team three times what the diagram suggests. What to choose when you have three developers and a product that must last years: a modular monolith, shared contracts, and boundaries you can see in the code.",{"slug":299,"category":252,"tags":300,"coverImageUrl":6,"coverImageAlt":258,"readingMinutes":305,"featured":108,"publishedAt":306,"updatedAt":307,"locale":11,"title":308,"excerpt":309},"zero-downtime-deploy",[301,302,303,304],"deploy","docker","postgres","ci-cd",9,"2026-07-28T09:00:00.000Z","2026-08-28T15:57:52.378Z","Zero-downtime deploys on a single server: what it actually takes","Zero downtime does not start with Kubernetes. It starts with migrations that are compatible with the old code, and a health check that tells the truth. Here is the order of operations on an ordinary VPS running docker compose.",{"slug":311,"category":312,"tags":313,"coverImageUrl":6,"coverImageAlt":258,"readingMinutes":317,"featured":103,"publishedAt":318,"updatedAt":319,"locale":11,"title":320,"excerpt":321},"website-cost-2026","money",[314,315,316],"budget","estimation","process",7,"2026-07-11T09:00:00.000Z","2026-08-28T15:57:52.399Z","What a website costs in 2026, and why the range is so wide","The same sentence — \"we need a website\" — can mean a week of work or three months. Here is what the price is actually made of, which line items vanish from cheap quotes, and what to ask before signing."]