[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"content:site:en":3,"content:products:en":22,"content:post:taking-over-a-project: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":257,"readingMinutes":258,"featured":103,"publishedAt":259,"updatedAt":260,"locale":11,"title":261,"excerpt":262,"lead":263,"bodyHtml":264,"metaTitle":265,"metaDescription":266,"takeaways":267,"faq":272,"author":279,"related":285},"taking-over-a-project","process",[254,255,256],"legacy","audit","handover","",8,"2026-06-02T09:00:00.000Z","2026-08-28T15:57:52.583Z","Taking over a project from another team","The first two weeks on someone else’s code decide whether this becomes maintenance or permanent firefighting. The order: credentials, a reproducible run, a risk audit, stabilisation — and only then new features.","Taking over a project is not \"understanding the code\". It is recovering knowledge nobody wrote down and making the system predictable before anyone asks you for a feature. Here is a sequence that works.","\u003Ch2 id=\"access\">Step 0: credentials, all of them\u003C\u002Fh2>\u003Cp>Before opening an editor, collect the full list: repository, image registry, server, database, DNS, domain, mail provider, payment gateway, analytics, file storage, CI. Every one of them must sit on \u003Cem>your\u003C\u002Fem> account or the client’s — not on the personal address of someone who has left.\u003C\u002Fp>\u003Cp>This is the dullest step and the most common reason things stop a month later: the domain renews from a former contractor’s card, and on expiry day the site disappears.\u003C\u002Fp>\u003Ch2 id=\"run\">Step 1: run it locally, from scratch, from the instructions\u003C\u002Fh2>\u003Cp>The goal is not \"it works on my machine\" but a reproducible run: a fresh clone, documented environment variables, one command. Everything you had to do by hand to get it up is exactly what is missing from the documentation. Write it down while you still remember.\u003C\u002Fp>\u003Cp>If it cannot be run locally at all, that is risk number one in the report. A project that exists only in production can be neither changed safely nor restored after an incident.\u003C\u002Fp>\u003Ch2 id=\"audit\">Step 2: an audit the client can read\u003C\u002Fh2>\u003Cp>A technical audit for a client is not a list of code review comments. It is a list of risks with consequences and rough costs. Sort it into three groups:\u003C\u002Fp>\u003Cul>\u003Cli>\u003Cstrong>Can stop the business.\u003C\u002Fstrong> No backups. Secrets in the repository. A certificate with no auto-renewal. A dependency that is no longer maintained.\u003C\u002Fli>\u003Cli>\u003Cstrong>Slows down every change.\u003C\u002Fstrong> No tests. No local run. The same logic in three places. No migrations, the schema edited by hand.\u003C\u002Fli>\u003Cli>\u003Cstrong>Cosmetic.\u003C\u002Fstrong> Code style, naming, folder structure.\u003C\u002Fli>\u003C\u002Ful>\u003Cp>Leave the third group alone for the first few months. Refactoring for beauty in unfamiliar code is the fastest way to break something you do not understand yet.\u003C\u002Fp>\u003Cblockquote>\u003Cp>The first job of a new team is not to improve the code but to make the system predictable. Beauty comes later.\u003C\u002Fp>\u003C\u002Fblockquote>\u003Ch2 id=\"stabilise\">Step 3: stabilisation\u003C\u002Fh2>\u003Cp>The order is almost always the same:\u003C\u002Fp>\u003Col>\u003Cli>\u003Cstrong>Backups\u003C\u002Fstrong> on a schedule, with a \u003Cem>restore test\u003C\u002Fem>. Restore the database into a test environment and confirm the data is there.\u003C\u002Fli>\u003Cli>\u003Cstrong>Monitoring and alerts.\u003C\u002Fstrong> Until you can see outages, you learn about them from the client — the most expensive channel there is.\u003C\u002Fli>\u003Cli>\u003Cstrong>Secrets out of the code and into the environment.\u003C\u002Fstrong> Rotate them while you are at it: anything that sat in a repository should be considered compromised.\u003C\u002Fli>\u003Cli>\u003Cstrong>CI with lint, types and a build.\u003C\u002Fstrong> Even without tests this catches half the accidental breakage.\u003C\u002Fli>\u003Cli>\u003Cstrong>Tests for the one scenario that matters.\u003C\u002Fstrong> A single end-to-end test on checkout or on the enquiry form beats a hundred unit tests on helpers.\u003C\u002Fli>\u003C\u002Fol>\u003Ch2 id=\"features\">Step 4: the first feature\u003C\u002Fh2>\u003Cp>Pick something small but end to end: from the form to the database and back. It reveals the true state of every layer better than a week of reading code, and it gives the client something visible while you do the invisible stabilisation work.\u003C\u002Fp>\u003Ch2 id=\"talk\">How to talk to the client\u003C\u002Fh2>\u003Cp>Two mistakes, both expensive. The first is saying \"this is all bad, it needs a rewrite\". It is almost never true and it always sounds like an attempt to sell a bigger contract. The second is quietly firefighting and showing zero progress in the first month.\u003C\u002Fp>\u003Cp>What works: a report with the three risk groups, an estimate per item and a proposed order. The client makes a decision instead of receiving a verdict. Then a short \"done this, left that\" every two weeks.\u003C\u002Fp>","Taking over a project from another team — the order of work","Auditing and adopting inherited code: collecting credentials, a reproducible local run, a risk report for the client, stabilisation and the first end-to-end feature.",[268,269,270,271],"Collect credentials before opening the editor","A reproducible local run matters more than reading the code","An audit is risks with consequences and costs, not style comments","Cosmetic refactoring in unfamiliar code waits for months",[273,276],{"q":274,"a":275},"How long does an audit take?","For a mid-sized project, three days to two weeks, depending on whether it can be run locally. The multiplier is not the amount of code but the number of undocumented manual steps.",{"q":277,"a":278},"When is a rewrite justified?","When the cost of a single change exceeds the cost of building it again, and you can see that across several tasks in a row. Before that it is a guess, not a conclusion.",{"slug":280,"name":281,"role":282,"avatarUrl":283,"photoUrl":284},"yevhenii-kirianov","Yevhenii","Frontend and full-stack, interfaces, product development","\u002Fmedia\u002Fteam\u002Fyevhenii-avatar.webp","\u002Fmedia\u002Fteam\u002Fyevhenii.webp",[286,297,308],{"slug":287,"category":252,"tags":288,"coverImageUrl":6,"coverImageAlt":257,"readingMinutes":292,"featured":103,"publishedAt":293,"updatedAt":294,"locale":11,"title":295,"excerpt":296},"no-project-without-prototype",[289,290,291],"prototype","discovery","design",5,"2026-05-18T09:00:00.000Z","2026-08-28T15:57:52.681Z","Why we do not start a project without a prototype","A prototype is not a design stage, it is a way to make mistakes cheap. What it catches, how long it takes, and why \"let us go straight to design\" almost always costs more.",{"slug":298,"category":299,"tags":300,"coverImageUrl":6,"coverImageAlt":257,"readingMinutes":303,"featured":103,"publishedAt":304,"updatedAt":305,"locale":11,"title":306,"excerpt":307},"website-cost-2026","money",[301,302,252],"budget","estimation",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.",{"slug":309,"category":310,"tags":311,"coverImageUrl":6,"coverImageAlt":257,"readingMinutes":316,"featured":108,"publishedAt":317,"updatedAt":318,"locale":11,"title":319,"excerpt":320},"zero-downtime-deploy","devops",[312,313,314,315],"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."]