# Raktim Ranjit > Raktim Ranjit is a software engineer and founder of NODEDR INFOTECH PRIVATE LIMITED. He builds business software across applications, data, security and infrastructure, writes about the decisions behind that work, and is the author of the Proof of Absence novels. He also practices photography. Official website: https://www.raktimranjit.com. Founder of NODEDR INFOTECH PRIVATE LIMITED (https://www.nodedr.com/). Contact: mail@raktimranjit.com. Official profiles: https://www.raktimranjit.com/links. This directory describes the same public work as the website: software case studies, engineering articles, fiction and photography. Each entry has its canonical page URL. Product claims are limited to what the case studies document. Seasonal scenery and editorial illustrations are generated artwork; the gallery contains personal photographs. ## Core pages - [Homepage](https://www.raktimranjit.com): introduction, software, books, photography and contact links - [About Raktim Ranjit](https://www.raktimranjit.com/about): biography, approach and official profiles - [Projects and case studies](https://www.raktimranjit.com/projects): software products, architecture and trade-offs - [Expertise](https://www.raktimranjit.com/expertise): software engineering, systems architecture, forward deployed engineering, enterprise systems, AI, DevOps, networking and cybersecurity - [Blog](https://www.raktimranjit.com/blog): engineering articles - [Writing](https://www.raktimranjit.com/writing): novels and creative writing - [Photography](https://www.raktimranjit.com/gallery): personal photographs - [Notes](https://www.raktimranjit.com/notes): short production lessons - [Official links](https://www.raktimranjit.com/links): official accounts and destinations - [Contact](https://www.raktimranjit.com/contact): enquiries - [NodeDR Infotech](https://www.nodedr.com/): the company Raktim founded - [NodeDR software portfolio](https://www.nodedr.com/software): business products ## Projects - [Rechvix](https://www.raktimranjit.com/projects/rechvix): Accounting, inventory, GST and business operations on a double-entry ledger, for multi-company and multi-branch businesses. - [OrderRestro](https://www.raktimranjit.com/projects/orderrestro): Restaurant POS, tables, kitchen display, reservations and loyalty, running on a server inside the restaurant. - [NodeDR POS](https://www.raktimranjit.com/projects/nodedr-pos): Retail point of sale with GST-correct pricing, customer credit and stock, working with no internet connection. - [KinetiRx](https://www.raktimranjit.com/projects/kinetirx): Pharmacy billing, medicine stock with batches and expiry, patients, dues and OPD scheduling on a database the owner controls. - [Zulivio](https://www.raktimranjit.com/projects/zulivio): Employees, attendance, work assignments and a sales pipeline on the company's own server. - [Submify](https://www.raktimranjit.com/projects/submify): A self-hosted form backend: one API key, every form on every site, stored in your own PostgreSQL. - [NodeDR Construction ERP](https://www.raktimranjit.com/projects/nodedr-construction-erp): The full material lifecycle on a construction project, from site requisition to daily consumption, tied to milestones and budgets. ## Books and creative writing - [Proof of Absence](https://www.raktimranjit.com/writing/proof-of-absence): Part One · A psychological thriller. Elias studies reconstructed memories for a living. When he revisits the night his sister Mara disappeared, the reconstruction contradicts the words he has trusted for fifteen years. A psychological thriller about grief, evidence and the stories memory tells us. - [Read online](https://www.raktimranjit.com/writing/proof-of-absence/read) - [Download PDF](https://www.raktimranjit.com/downloads/books/proof-of-absence-part-one.pdf) - [Proof of Absence — Part Two: Borrowed Lives](https://www.raktimranjit.com/writing/proof-of-absence-part-two-borrowed-lives): Part Two · A psychological thriller. After Morrow's legacy archives are opened, Elias joins an independent review panel. A client's reconstruction contains his mother's unmistakable hands, although the woman on screen belongs to another family. Borrowed Lives follows the search for how one person's memories became someone else's past. - [Read online](https://www.raktimranjit.com/writing/proof-of-absence-part-two-borrowed-lives/read) - [Download PDF](https://www.raktimranjit.com/downloads/books/proof-of-absence-part-two-borrowed-lives.pdf) ## Articles - [Stock balances belong in application code, not a database trigger](https://www.raktimranjit.com/blog/stock-balances-in-application-code): Why Rechvix updates its stock balance projection in Go inside the same transaction as the movement insert, what that costs, and how the risk is contained. - [Row-level security is not your only tenant boundary](https://www.raktimranjit.com/blog/rls-is-not-your-only-tenant-boundary): I read every repository in Rechvix and found thirteen lookups that relied on PostgreSQL row-level security alone. Here is what I changed and why the role design matters. - [What changes when the internet is optional: notes from building OrderRestro](https://www.raktimranjit.com/blog/offline-first-restaurant-software): Design consequences of running a restaurant system on the restaurant's own network, including a Secure-cookie trap that makes login look successful and then fail. - [Calculating GST from an inclusive MRP in a retail POS](https://www.raktimranjit.com/blog/gst-inclusive-mrp-pos-calculation): A concrete pricing model from NodeDR POS: derive the tax portion from the shelf price, keep the server authoritative and test rounding at receipt level. - [A PostgreSQL backup is only useful after a restore drill](https://www.raktimranjit.com/blog/restore-drill-postgresql-business-software): How I test a Rechvix backup in a scratch database, check business invariants and document the recovery procedure instead of trusting a successful archive command. - [Open-source GST billing and accounting software with a double-entry ledger: how Rechvix works](https://www.raktimranjit.com/blog/open-source-gst-billing-software-rechvix): Rechvix is self-hosted GST billing, inventory and accounting software built on a double-entry ledger. How a single invoice updates stock, tax and accounts atomically, and what that costs. - [Self-hosted restaurant POS with a kitchen display that keeps working offline: OrderRestro](https://www.raktimranjit.com/blog/self-hosted-restaurant-pos-orderrestro): OrderRestro is an open-source restaurant POS with tables, kitchen display, reservations, QR ordering and loyalty that runs on the restaurant's own network. How it is built and why. - [Offline retail POS software for India: GST-inclusive MRP billing, udhaar and barcode checkout](https://www.raktimranjit.com/blog/offline-retail-pos-gst-inclusive-mrp-billing): NodeDR POS is a self-hosted retail point of sale for Indian shops. How it bills GST-inclusive MRP correctly, tracks customer credit and keeps working with no internet. - [Pharmacy management software with batch and expiry tracking, billing and OPD: KinetiRx](https://www.raktimranjit.com/blog/pharmacy-management-software-batch-expiry-kinetirx): KinetiRx is self-hosted pharmacy and clinic software with batch and expiry tracking, GST billing, patients, dues, OPD scheduling and cash-drawer reconciliation on a database you control. - [Self-hosted employee attendance, work assignment and CRM software: how Zulivio models workflow](https://www.raktimranjit.com/blog/self-hosted-attendance-and-crm-software-zulivio): Zulivio is self-hosted workforce software with employee records, attendance as a state machine, guarded work assignments and a sales CRM. How its rules, roles and sessions are designed. - [A self-hosted form backend API with PostgreSQL, presigned uploads and Telegram alerts: Submify](https://www.raktimranjit.com/blog/self-hosted-form-backend-api-submify): Submify is an open-source form backend: post JSON with an API key, store in your own PostgreSQL, export XLSX or PDF, upload files to your S3 storage and get Telegram alerts. - [Construction ERP for material procurement: from site requisition to daily consumption](https://www.raktimranjit.com/blog/construction-erp-material-procurement-workflow): How NodeDR Construction ERP models the material lifecycle: requisition, approval, purchase order, goods receipt, inventory ledger and consumption against milestones, with fine-grained roles. - [What is an MCP server? A plain explanation with a real example](https://www.raktimranjit.com/blog/what-is-an-mcp-server): An MCP server is a small program that exposes tools, data and prompts to an AI application over the Model Context Protocol. What it is, how it differs from an API, and when you need one. - [How to build an MCP server in TypeScript, step by step](https://www.raktimranjit.com/blog/how-to-build-an-mcp-server): Build a working Model Context Protocol server with one tool in about forty lines of TypeScript, test it, connect it to a client, and avoid the mistakes that waste an afternoon. - [MCP security: how prompt injection turns a helpful tool into a leak](https://www.raktimranjit.com/blog/mcp-security-and-prompt-injection): How attacks on Model Context Protocol servers work, why a read-only tool can still exfiltrate data, and a short checklist for running MCP servers safely. - [What is prompt injection? Examples, why it works, and what helps](https://www.raktimranjit.com/blog/what-is-prompt-injection): Prompt injection is an attack where text a model reads changes what it does. Direct and indirect examples, why it is hard to stop, and defences that hold up. - [Why AI agents fail in production, and what to build around them](https://www.raktimranjit.com/blog/why-ai-agents-fail-in-production): The recurring reasons LLM agents break after the demo: compounding errors, bad tools, lost context, cost loops and missing evaluation. Fixes you can ship. - [AI code review vs human code review: what each one is good at](https://www.raktimranjit.com/blog/ai-code-review-vs-human-code-review): A practical comparison of automated AI review and human review: what AI catches, what it misses, how to combine them, and a setup that keeps review honest. - [What is LLM observability, and what should you log?](https://www.raktimranjit.com/blog/what-is-llm-observability): LLM observability means recording enough about every model call to debug, evaluate and cost it. What to capture, what to redact, and how to start with a table and a few queries. - [How to monitor and cut LLM costs in production](https://www.raktimranjit.com/blog/how-to-monitor-llm-costs-in-production): Where LLM spend actually comes from, how to attribute it to features and users, the alerts worth setting, and the changes that reduce a bill without hurting quality. - [Vibe coding vs vibe engineering: where the line is](https://www.raktimranjit.com/blog/vibe-coding-vs-vibe-engineering): Vibe coding means accepting what an AI writes without reading it. Engineering with AI means you still own the design, tests and review. How to tell which one you are doing. - [Is vibe coding safe? The security problems that show up](https://www.raktimranjit.com/blog/is-vibe-coding-safe): Vibe-coded apps repeat the same security mistakes: missing authorisation, exposed secrets, trusting the client, unsafe dependencies. A checklist to catch them before launch. - [Claude Code vs Cursor vs GitHub Copilot: how to choose](https://www.raktimranjit.com/blog/claude-code-vs-cursor-vs-copilot): A comparison of terminal agents, AI editors and inline assistants by workflow, control, cost model and fit for different kinds of work, without pretending one wins everywhere. - [Spec-driven development with coding agents: write the spec first](https://www.raktimranjit.com/blog/spec-driven-development-with-coding-agents): How to give a coding agent a short specification, a task list and acceptance tests so it builds what you meant, with a template you can copy. - [Will AI replace developers? A grounded answer from someone who ships software](https://www.raktimranjit.com/blog/will-ai-replace-developers): What AI coding tools change about the job, which tasks shrink, which grow, and what to practise if you write software for a living or want to start. - [How to self-host an LLM with Ollama, and when it makes sense](https://www.raktimranjit.com/blog/how-to-self-host-an-llm): Run an open-weight language model on your own machine or server with Ollama, call it from code, size the hardware, and decide whether self-hosting beats an API. - [How to self-host n8n with Docker Compose and PostgreSQL](https://www.raktimranjit.com/blog/how-to-self-host-n8n): A working Docker Compose setup for self-hosted n8n with PostgreSQL, HTTPS behind a reverse proxy, the environment variables that matter, and how to back it up. - [n8n vs Zapier vs Make: which automation tool fits which job](https://www.raktimranjit.com/blog/n8n-vs-zapier-vs-make): How the three differ in pricing model, hosting, flexibility and learning curve, with a decision guide for small teams, developers and anyone worried about data location. - [PostgreSQL row-level security: a practical guide with policies and pitfalls](https://www.raktimranjit.com/blog/postgresql-row-level-security-guide): How to enable row-level security in PostgreSQL, write policies, avoid the superuser and table-owner bypass, keep it fast with indexes, and test it properly. - [How to build a multi-tenant SaaS on PostgreSQL: three models compared](https://www.raktimranjit.com/blog/how-to-build-a-multi-tenant-saas-on-postgresql): Shared tables with a tenant ID, schema per tenant, and database per tenant: how each works, what each costs in operations, and which to pick for a small SaaS. - [Why is my PostgreSQL query slow? A checklist that starts with EXPLAIN](https://www.raktimranjit.com/blog/why-is-my-postgres-query-slow): A step-by-step way to find why a PostgreSQL query is slow: read EXPLAIN ANALYZE, spot sequential scans, bad estimates, missing indexes, bloat and lock waits, then fix the cause. - [PostgreSQL connection pooling: why you need it and how PgBouncer works](https://www.raktimranjit.com/blog/postgres-connection-pooling-explained): Why PostgreSQL struggles with many connections, how application and external pools differ, PgBouncer's pool modes, and the settings that cause real outages. - [What is event sourcing? A clear explanation with a bank account example](https://www.raktimranjit.com/blog/what-is-event-sourcing): Event sourcing stores every change as an immutable event and derives current state by replaying them. How it works, where it fits, and where it hurts. - [Modular monolith vs microservices: what to build first](https://www.raktimranjit.com/blog/modular-monolith-vs-microservices): What a modular monolith is, how it compares with microservices on deployment, data, team size and failure modes, and the signs that tell you when to split. - [JWT vs session cookies: which should you use for authentication?](https://www.raktimranjit.com/blog/jwt-vs-session-cookies): Server-side sessions and JSON Web Tokens compared on revocation, scaling, storage, CSRF and XSS risk, with a clear recommendation for typical web apps. - [OAuth vs OpenID Connect vs SAML: what each one is for](https://www.raktimranjit.com/blog/oauth-vs-oidc-vs-saml): OAuth 2.0 delegates access, OpenID Connect adds login on top of it, and SAML does single sign-on for enterprises. How they differ and which to implement. - [PostgreSQL 18 vs 17: what changed and whether to upgrade](https://www.raktimranjit.com/blog/postgresql-18-vs-17): The main differences between PostgreSQL 18 and 17: asynchronous I/O, UUIDv7, skip scan for B-tree indexes, virtual generated columns, OAuth login and a safe upgrade plan. - [How to prevent SQL injection: parameterised queries and what else to check](https://www.raktimranjit.com/blog/how-to-prevent-sql-injection): SQL injection is prevented by never building queries from strings. Parameterised queries in Go, Node and Python, safe handling of dynamic identifiers, least-privilege roles and testing. - [AI coding agents and supply chain attacks: fake packages and what to check](https://www.raktimranjit.com/blog/ai-agents-and-supply-chain-attacks): How attackers target developers through look-alike and hallucinated package names, malicious install scripts and compromised maintainers, and the habits that reduce the risk. - [Is Docker safe for production? Settings that matter](https://www.raktimranjit.com/blog/is-docker-safe-for-production): Docker is safe enough for production when you follow a handful of rules: non-root users, a minimal image, no exposed socket, pinned images, limited capabilities and updated hosts. - [Self-hosting security: a hardening checklist for a home server or VPS](https://www.raktimranjit.com/blog/self-hosted-security-hardening): A practical order of operations for securing a self-hosted server: SSH keys, firewall, updates, a reverse proxy with TLS, backups, monitoring and keeping admin panels off the internet. - [Reverse proxy security: TLS, headers, rate limits and what not to expose](https://www.raktimranjit.com/blog/reverse-proxy-security-hardening): How to harden Nginx, Caddy or Traefik as the front door of a self-hosted setup: HTTPS, security headers, rate limiting, request size limits, hiding versions and protecting admin paths. - [Is web scraping legal? What the law and site terms usually say](https://www.raktimranjit.com/blog/is-web-scraping-legal): Scraping public web pages is not automatically illegal, but copyright, contract terms, data protection law and computer misuse rules can all apply. A plain overview with practical rules. - [The self-hosting checklist: what to set up before you run anything important](https://www.raktimranjit.com/blog/self-hosting-checklist): A complete checklist for running your own apps: hardware or VPS, backups, domains and DNS, HTTPS, updates, monitoring, secrets and an exit plan. Use it before you move real data. - [Is self-hosting worth it? An honest look at time, money and risk](https://www.raktimranjit.com/blog/is-self-hosting-worth-it): When running your own software beats a subscription and when it does not, including the hidden costs in time, security and availability, and a simple test for deciding. - [Self-hosted vs SaaS: a cost comparison you can reproduce](https://www.raktimranjit.com/blog/self-hosted-vs-saas-costs): How to compare the real three-year cost of self-hosting and a subscription, including server, backup, time, risk and growth, with a worked example and a template. - [How to set up a CI/CD pipeline with GitHub Actions, step by step](https://www.raktimranjit.com/blog/how-to-set-up-a-ci-cd-pipeline): Build a working CI pipeline that tests every push and a CD step that deploys to a server over SSH, with caching, secrets, protected environments and rollback. - [Docker Compose in practice: a guide to the parts you use every day](https://www.raktimranjit.com/blog/docker-compose-practical-guide): A practical Docker Compose guide: services, volumes, networks, environment files, health checks, depends_on conditions, profiles, common commands and mistakes to avoid. - [Kubernetes for beginners: what it is, and whether you need it](https://www.raktimranjit.com/blog/kubernetes-for-beginners-do-you-need-it): A clear Kubernetes introduction covering pods, deployments, services and ingress, what problems it solves, what it costs in complexity, and simpler alternatives for small teams. - [Ansible vs Terraform vs Argo CD: three tools for three different jobs](https://www.raktimranjit.com/blog/ansible-vs-terraform-vs-argo-cd): Terraform provisions infrastructure, Ansible configures machines, and Argo CD keeps Kubernetes in sync with Git. How they differ, where they overlap and when you need more than one. - [Argo CD vs Flux: choosing a GitOps tool for Kubernetes](https://www.raktimranjit.com/blog/argo-cd-vs-flux): Argo CD and Flux both sync Kubernetes from Git. Compare their interface, architecture, multi-tenancy, Helm and Kustomize support, and which suits small and large teams. - [Recovering from self-hosted data loss: what to do in the first hour](https://www.raktimranjit.com/blog/recovering-from-self-hosted-data-loss): A calm recovery sequence when a self-hosted app loses data: stop writing, preserve what is left, find the real backup, restore to a side copy, verify, and fix the cause. - [SSL/TLS certificate renewal for self-hosted sites: how to stop expiry outages](https://www.raktimranjit.com/blog/ssl-certificate-renewal-self-hosted): How Let's Encrypt renewal works, why it silently fails, how to check expiry, and how to set up Caddy, Certbot or a DNS challenge so your certificates renew without you. - [What is a reverse proxy? Nginx, Caddy and Traefik compared](https://www.raktimranjit.com/blog/what-is-a-reverse-proxy): A reverse proxy sits in front of your apps, handles HTTPS and routing, and hides the servers behind it. How it works, why you want one, and how Nginx, Caddy and Traefik differ. - [DNS records explained for self-hosters: A, AAAA, CNAME, MX, TXT and more](https://www.raktimranjit.com/blog/dns-records-explained-for-self-hosters): What each DNS record type does, how to point a domain at your server, why TTL matters, how to set up email records, and commands to check what the world sees. - [Cloudflare Tunnel vs port forwarding: how to expose a home server](https://www.raktimranjit.com/blog/cloudflare-tunnel-vs-port-forwarding): Compare opening ports on your router with an outbound tunnel. Security, CGNAT, performance, limits and privacy trade-offs, plus WireGuard and Tailscale as alternatives. - [What is offline-first software? How it works and when to build it](https://www.raktimranjit.com/blog/what-is-offline-first-software): Offline-first apps treat the local device as the primary data store and sync when a connection exists. Core patterns, conflict handling, pitfalls and where it matters, such as retail and restaurants. - [Go concurrency patterns: goroutines, channels, worker pools and context](https://www.raktimranjit.com/blog/go-concurrency-patterns): The Go concurrency patterns you use in real programs: worker pools, fan-out and fan-in, errgroup, context cancellation, mutexes and how to avoid goroutine leaks and data races. - [Go for backend beginners: a practical path from zero to a working API](https://www.raktimranjit.com/blog/go-for-backend-beginners): A learning path for Go aimed at backend work: setup, the language features you need, a small HTTP API with PostgreSQL, tests, and the mistakes beginners make. - [Deploying a Go app with Docker: a small, safe image and a Compose file](https://www.raktimranjit.com/blog/deploying-a-go-app-with-docker): Build a tiny multi-stage Docker image for a Go service, run it as a non-root user, add health checks, use Compose with PostgreSQL, and decide when Kubernetes is worth it. - [How to choose a POS system for a small business: a buyer's checklist](https://www.raktimranjit.com/blog/how-to-choose-a-pos-system-for-a-small-business): What a point of sale system should do, the questions that separate good from bad, hidden costs in fees and hardware, offline behaviour, tax handling and a short list of tests before you buy. - [Toast vs Square vs Clover: how to compare restaurant and retail POS systems](https://www.raktimranjit.com/blog/toast-vs-square-vs-clover): A framework for comparing Toast, Square and Clover on pricing structure, hardware, payments lock-in, restaurant features, offline mode and contracts, without relying on prices that change. - [Cloud POS vs on-premise POS: which is better for a shop or restaurant?](https://www.raktimranjit.com/blog/cloud-pos-vs-on-premise-pos): Compare cloud and on-premise point of sale on internet dependence, cost, control, security, updates and failure behaviour, and why many businesses want a hybrid. - [GST billing software for small businesses: what to look for in India](https://www.raktimranjit.com/blog/gst-billing-software-for-small-business): A buyer's guide to GST billing and accounting software: invoice rules, e-invoicing, e-way bills, returns, inventory, multi-branch support, data ownership and common mistakes. - [GST invoice requirements: a field-by-field checklist for India](https://www.raktimranjit.com/blog/gst-invoice-requirements-checklist): What a valid GST tax invoice must contain, how invoice numbers work, HSN and SAC codes, place of supply, CGST SGST IGST split, when to use a bill of supply, and common errors. - [Tally vs Vyapar vs Zoho Books: choosing accounting and billing software in India](https://www.raktimranjit.com/blog/tally-vs-vyapar-vs-zoho-books): How Tally, Vyapar and Zoho Books differ by deployment, accounting depth, ease of use, GST features, inventory and data ownership, with a framework to pick for your business. - [Billing software with inventory: what to check so stock and accounts agree](https://www.raktimranjit.com/blog/billing-software-with-inventory): How billing and inventory should work together: stock movements, valuation methods, batches, multi-warehouse, negative stock, returns, and a test plan that catches mismatches before they cost money. - [Best CRM for a small business: how to choose, and HubSpot and Salesforce alternatives](https://www.raktimranjit.com/blog/best-crm-for-small-business): How to pick a CRM when you have a small team: the features that matter, what to skip, free tiers and their limits, alternatives to HubSpot and Salesforce, and self-hosted options. - [ERP vs CRM: what each one does and which you need first](https://www.raktimranjit.com/blog/erp-vs-crm): CRM manages customers and sales. ERP manages the operations behind them: finance, inventory, purchasing and production. The differences, overlaps and the order to adopt them. - [Construction ERP: what it costs, what it should do, and how to choose](https://www.raktimranjit.com/blog/construction-erp-cost-and-features): What construction ERP and project accounting software includes, from requisition to material consumption and budgets, how pricing is structured, and questions for vendors. - [ERP software for small business: do you need one, and how to pick](https://www.raktimranjit.com/blog/erp-software-for-small-business): When a small business outgrows spreadsheets and accounting software, what ERP modules actually matter, cloud versus self-hosted, hidden costs, and a safe adoption plan. - [Pharmacy management software: a checklist for batch, expiry and billing](https://www.raktimranjit.com/blog/pharmacy-management-software-checklist): What pharmacy software must do: batch and expiry tracking, FEFO selling, schedule drug records, GST billing, patient and due management, returns and backups, with questions for vendors. - [Formspree alternatives and self-hosted form backends: how to handle contact forms](https://www.raktimranjit.com/blog/formspree-alternatives-and-self-hosted-form-backends): Options for handling form submissions from a static or Jamstack site: hosted form services, serverless functions, and a self-hosted form backend, with spam protection and privacy notes. - [Next.js vs WordPress: which to use for a business website](https://www.raktimranjit.com/blog/nextjs-vs-wordpress): A fair comparison of Next.js and WordPress on cost, speed, editing, security, SEO, maintenance and developer skill, with a decision guide for small businesses and developers. - [How much does a small business website cost? What drives the price](https://www.raktimranjit.com/blog/how-much-does-a-small-business-website-cost): A plain breakdown of what you pay for: domain, hosting, design, development, content, maintenance and marketing, with ranges by approach and a list of costs people forget. - [SEO vs AEO vs GEO: the difference, and what to do about each](https://www.raktimranjit.com/blog/seo-vs-aeo-vs-geo): SEO targets search rankings, AEO targets direct answers, GEO targets citations in AI-generated responses. What overlaps, what is new, and the steps that help with all three. - [How to get cited by ChatGPT, Perplexity and Google's AI answers](https://www.raktimranjit.com/blog/how-to-get-cited-by-ai-assistants): Practical steps that make your site more likely to be used and cited by AI assistants: crawl access, clear answers, original data, entity clarity and third-party mentions, plus how to check results. - [Why nobody uses your product: distribution before features](https://www.raktimranjit.com/blog/why-distribution-beats-product): Many good products fail because nobody hears about them. How to find your first customers, test demand before building, and design distribution into the product from the start. - [What is forward deployed engineering? The job, the skills and how it differs from support](https://www.raktimranjit.com/blog/what-is-forward-deployed-engineering): Forward deployed engineers work directly with customers to fit software to their real operations. What they do day to day, the skills involved, and how the role differs from consulting and support. - [Attendance and workforce management software: what a small company needs](https://www.raktimranjit.com/blog/attendance-and-workforce-management-software): How to choose attendance, leave, shift and work assignment software for a small or mid-size company: methods of tracking, rules, mobile and offline use, payroll links and privacy. - [A timed-out invoice request should not create a second invoice](https://www.raktimranjit.com/blog/idempotency-for-invoice-posting): How idempotency keys, database constraints and an outbox make invoice posting safe when a browser or service retries a request. - [A business day is not always a calendar date in the server's time zone](https://www.raktimranjit.com/blog/business-dates-and-time-zones-in-reports): A practical model for timestamps, branch time zones and close-of-day reports in multi-branch business software. - [An audit trail and an application log answer different questions](https://www.raktimranjit.com/blog/audit-log-vs-application-log-business-software): How business software should record who changed important records while keeping diagnostic logs useful and privacy-conscious. - [WebSockets or server-sent events? Start with the direction of the conversation](https://www.raktimranjit.com/blog/websockets-vs-sse-business-screens): A practical choice between polling, SSE and WebSockets for restaurant screens, job status and business dashboards, including reconnect behavior. - [Model approvals as state transitions, not a chain of buttons](https://www.raktimranjit.com/blog/approval-workflow-state-transitions): A practical way to design approval workflows that preserve who requested, reviewed and changed a business record. ## Expertise areas - [Software engineering](https://www.raktimranjit.com/expertise/software-engineering): How Raktim Ranjit designs and builds applications: architecture, TypeScript, Go, Python, APIs, data modelling, desktop packaging and long-term maintenance. - [Systems architecture](https://www.raktimranjit.com/expertise/systems-architecture): Raktim Ranjit as a systems architect: modular monoliths vs microservices, tenancy boundaries, data consistency, failure modes, offline-first design, security layers, observability and architecture decision records. - [Enterprise software](https://www.raktimranjit.com/expertise/enterprise-software): Raktim Ranjit on building business software: permissions, approval workflows, multi-company and multi-branch data, inventory, accounting and audit trails. - [Forward deployed engineering](https://www.raktimranjit.com/expertise/forward-deployed-engineering): Raktim Ranjit's approach to forward deployed engineering: observe the real process, model it, build, deploy, measure and improve, close to the people who use the software. - [AI and automation](https://www.raktimranjit.com/expertise/ai-automation): Raktim Ranjit on practical AI engineering: LLM integrations, structured output, RAG, n8n and Python automation, human approval, logging and deterministic fallbacks. - [DevOps](https://www.raktimranjit.com/expertise/devops): Raktim Ranjit on running software in production: Linux, Docker, CI/CD, reverse proxies, backups, monitoring and reliable deployments. - [Networking](https://www.raktimranjit.com/expertise/networking): Why Raktim Ranjit studies networking as an application developer: DNS, routing, VLANs, VPNs, firewalls, reverse proxies and container networking. - [Cybersecurity engineering](https://www.raktimranjit.com/expertise/cybersecurity): Raktim Ranjit on security engineering: authentication, RBAC, MFA, session control, PostgreSQL row-level security, audit logging and least privilege. - [Infrastructure](https://www.raktimranjit.com/expertise/infrastructure): Raktim Ranjit on infrastructure engineering: Proxmox virtualisation, TrueNAS and ZFS storage, Kubernetes, backups and self-hosted production systems. - [Product engineering](https://www.raktimranjit.com/expertise/product-engineering): Raktim Ranjit on product engineering: turning an operational problem into software, scoping honestly, packaging it and documenting what is and is not built. ## Optional - [docker restart does not re-read your env file](https://www.raktimranjit.com/notes/docker-restart-ignores-env-file): I added a variable to an env file on two servers and restarted the container. The application kept running on its old configuration. - [A strict CSP silently stopped every button on a Next.js site](https://www.raktimranjit.com/notes/strict-csp-breaks-nextjs-hydration): script-src 'self' with no nonce blocks the inline scripts that hydrate a Next.js App Router page. The page looks normal and nothing responds. - [In Tailwind v4, plain CSS beats utility classes regardless of order](https://www.raktimranjit.com/notes/tailwind-v4-unlayered-css-wins): A bare rule in globals.css silently overrode py-* utilities on the same element and flattened a page's vertical spacing. - [A bind mount from the repository is empty on a CasaOS install](https://www.raktimranjit.com/notes/casaos-empty-bind-mount): An init script mounted from a git clone does not exist on a store install, so the database role was never created. - [Full content directory](https://www.raktimranjit.com/llms-full.txt): biography, profiles, case studies, expertise, articles, notes, book summaries and photograph descriptions - [RSS feed](https://www.raktimranjit.com/feed.xml) - [Sitemap](https://www.raktimranjit.com/sitemap.xml)