<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Swaraj Puppalwar</title>
    <description>The latest articles on DEV Community by Swaraj Puppalwar (@ultrontheai).</description>
    <link>https://dev.to/ultrontheai</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3679100%2F6bde6311-665a-4970-96be-40148aa03e71.png</url>
      <title>DEV Community: Swaraj Puppalwar</title>
      <link>https://dev.to/ultrontheai</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ultrontheai"/>
    <language>en</language>
    <item>
      <title>Prompt Engineering for Non‑Tech Professionals: Mental Models and Practical Workflows</title>
      <dc:creator>Swaraj Puppalwar</dc:creator>
      <pubDate>Wed, 23 Sep 2026 09:32:08 +0000</pubDate>
      <link>https://dev.to/ultrontheai/prompt-engineering-for-non-tech-professionals-mental-models-and-practical-workflows-376i</link>
      <guid>https://dev.to/ultrontheai/prompt-engineering-for-non-tech-professionals-mental-models-and-practical-workflows-376i</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Generative AI feels like a magical black box, but the &lt;em&gt;real power&lt;/em&gt; lies in the way we talk to it. For managers, marketers, educators, and other non‑technical creators, mastering prompt engineering can turn a vague idea into a concrete deliverable—whether it’s a campaign headline, a lesson plan, or a visual concept. This article distills the most actionable mental models, checklists, and step‑by‑step workflows from the free guide &lt;strong&gt;AI Prompt Engineering for Non‑Technical&lt;/strong&gt; and shows how you can start applying them today without writing a single line of code.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. The Prompt as a Conversation Blueprint
&lt;/h2&gt;

&lt;p&gt;Think of a prompt as &lt;strong&gt;the script you give to a collaborator who knows everything but needs clear direction&lt;/strong&gt;. Two mental models help make this concrete:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;What it means for your prompt&lt;/th&gt;
&lt;th&gt;Example&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Chef’s Recipe&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;List ingredients (context), specify the cooking method (task), and set constraints (style, length).&lt;/td&gt;
&lt;td&gt;&lt;em&gt;“Write a 150‑word LinkedIn post about our new AI‑driven analytics platform. Use a friendly, conversational tone and include a call‑to‑action encouraging sign‑ups.”&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Architect’s Blueprint&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Define the structure first (outline), then fill in details (content).&lt;/td&gt;
&lt;td&gt;&lt;em&gt;“Create a three‑section blog outline on ‘Why AI matters for small businesses’: 1️⃣ problem statement, 2️⃣ solution overview, 3️⃣ next steps with metrics.”&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Both models remind you to &lt;strong&gt;separate intent, context, and constraints&lt;/strong&gt; before you hand the prompt to the model.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. The Core Prompt Design Framework
&lt;/h2&gt;

&lt;p&gt;The guide proposes a repeatable five‑step framework that works for text and image models alike:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Clarify the Goal&lt;/strong&gt; – What concrete output do you need? &lt;em&gt;“A tagline”&lt;/em&gt; vs. &lt;em&gt;“a brainstorming list”&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Provide Context&lt;/strong&gt; – Supply relevant background so the model doesn’t have to guess. Include brand voice, audience, or prior examples.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Set Constraints&lt;/strong&gt; – Length, format, tone, style, or any hard limits.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Add Demonstrations (Few‑Shot)&lt;/strong&gt; – Show one or two examples of the desired output.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ask for Reasoning (Chain‑of‑Thought)&lt;/strong&gt; – When the task is complex, request the model to think step‑by‑step before delivering the final answer.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Quick Template
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[Goal] + [Context] + [Constraints]
Example 1: …
Example 2: …
[Ask] (optionally “Explain your reasoning step‑by‑step.”)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Example for a marketing copy&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Write a 30‑word Instagram caption for a new summer sneaker line.
Brand voice: youthful, energetic, eco‑friendly.
Include a hashtag #StepIntoSummer and a call‑to‑action.
Example: "Feel the breeze with our recycled‑fabric kicks—run free, tread light. 🌿 #StepIntoSummer"
Now create a new caption.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  3. Diagnostic Checklist – Is Your Prompt Ready?
&lt;/h2&gt;

&lt;p&gt;Before you hit &lt;em&gt;Enter&lt;/em&gt;, run through this five‑item checklist:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Specificity&lt;/strong&gt; – Does the prompt name the exact output type? (e.g., “headline”, not “text”)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Context Completeness&lt;/strong&gt; – Have you supplied all background the model needs?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Constraint Clarity&lt;/strong&gt; – Are length, tone, and format unambiguous?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Example Quality&lt;/strong&gt; – Are the few‑shot examples representative of the desired style?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reasoning Prompt&lt;/strong&gt; – For multi‑step tasks, have you asked the model to explain its process?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If any item is missing, add the missing piece and test again.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Prompt Strategies Compared
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Strategy&lt;/th&gt;
&lt;th&gt;When to Use&lt;/th&gt;
&lt;th&gt;Pros&lt;/th&gt;
&lt;th&gt;Cons&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Open‑ended&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Brainstorming, ideation&lt;/td&gt;
&lt;td&gt;Generates many diverse ideas&lt;/td&gt;
&lt;td&gt;May need heavy filtering&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Closed (directive)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Producing a final artifact (e.g., tagline)&lt;/td&gt;
&lt;td&gt;Predictable length &amp;amp; format&lt;/td&gt;
&lt;td&gt;Less creative variance&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Few‑shot&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;When you have a strong style example&lt;/td&gt;
&lt;td&gt;Guides model toward your preferred tone&lt;/td&gt;
&lt;td&gt;Requires crafting good examples&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Chain‑of‑Thought&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Complex reasoning, data extraction&lt;/td&gt;
&lt;td&gt;Improves accuracy, reveals model’s logic&lt;/td&gt;
&lt;td&gt;Longer output, may need post‑processing&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Mix and match: start with an open prompt to generate ideas, then feed the best candidates into a closed, few‑shot prompt for polishing.&lt;/p&gt;




&lt;h2&gt;
  
  
  5. Hands‑On Workflow for a Real‑World Scenario
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Scenario:&lt;/strong&gt; A product manager needs a set of three email subject lines for a new feature launch.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Brainstorm (Open‑ended)&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;   Generate 10 catchy subject lines for a feature that lets users schedule posts in advance.
   Brand voice: professional yet friendly.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Select Top 3&lt;/strong&gt; – Manually pick the most relevant.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Refine (Few‑shot + Constraints)&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;   Refine the following subject lines to be under 50 characters and include an emoji.
   Example: "🚀 Launch your posts early – schedule now!"
   Subject line 1: "Plan ahead, post later"
   Subject line 2: "Never miss a peak hour"
   Subject line 3: "Schedule your success"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Validate (Chain‑of‑Thought)&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;   Explain why each refined subject line works for our target audience (social media managers). Then output the final three lines.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Iterate&lt;/strong&gt; – If any explanation reveals a mismatch, adjust constraints and repeat.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This loop embodies the &lt;strong&gt;Iterative Testing and Refinement&lt;/strong&gt; workflow championed in the guide.&lt;/p&gt;




&lt;h2&gt;
  
  
  6. Prompting Visual AI – From Text to Image
&lt;/h2&gt;

&lt;p&gt;When working with text‑to‑image models, the same mental models apply, but you add &lt;strong&gt;visual constraints&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Style Keywords&lt;/strong&gt; – “minimalist”, “retro 80s”, “hand‑drawn”.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Composition Details&lt;/strong&gt; – “centered subject”, “negative space on the right”.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Medium Specification&lt;/strong&gt; – “digital illustration”, “watercolor”.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Example Prompt for a marketing banner&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Create a 1200×400 pixel banner for a summer sale.
Style: bright, modern, flat‑design.
Include a stylized sun icon on the left, bold headline "Summer Savings Up to 50%" in sans‑serif, and a CTA button "Shop Now" on the right.
Use a color palette of #FF6B6B, #FFE66D, #4ECDC4.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The result is far more predictable when you treat visual prompts like a &lt;strong&gt;design brief&lt;/strong&gt; rather than a vague request.&lt;/p&gt;




&lt;h2&gt;
  
  
  7. Embedding Prompts in Team Workflows
&lt;/h2&gt;

&lt;p&gt;Prompts become reusable assets when you store them in a shared knowledge base (e.g., Notion, Confluence, or a simple markdown repo). Follow these best practices:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Version Control&lt;/strong&gt; – Tag each prompt with a version number and a short change log.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Metadata Header&lt;/strong&gt; – Include fields for &lt;code&gt;Goal&lt;/code&gt;, &lt;code&gt;Audience&lt;/code&gt;, &lt;code&gt;Model&lt;/code&gt;, &lt;code&gt;Last Tested&lt;/code&gt;. Example:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;   &amp;lt;!--
   Goal: Email subject lines
   Audience: B2B SaaS
   Model: gpt‑4o
   Last Tested: 2024‑09‑12
   --&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Automation&lt;/strong&gt; – Hook the prompt file into a low‑code tool (Zapier, Make, or a simple CLI script) that injects dynamic variables (product name, dates) before calling the AI API.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Review Loop&lt;/strong&gt; – Schedule a monthly “Prompt Retrospective” where the team reviews success metrics and updates prompts.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  8. Responsible Prompt Engineering
&lt;/h2&gt;

&lt;p&gt;Even non‑technical users must guard against bias and unsafe outputs. Adopt the following guardrails:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Bias Check List&lt;/strong&gt; – After each generation, ask: &lt;em&gt;Does the output assume gender, ethnicity, or ability?&lt;/em&gt; If yes, add a constraint like “use gender‑neutral language”.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Safety Prompt&lt;/strong&gt; – Prefix sensitive prompts with: “If the request could produce harmful content, refuse or give a safe alternative.”&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Compliance Tag&lt;/strong&gt; – Record any regulatory considerations (e.g., GDPR) in the prompt metadata.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Embedding these checks into the checklist (see Section 3) makes ethical prompting a habit rather than an afterthought.&lt;/p&gt;




&lt;h2&gt;
  
  
  9. Measuring Prompt Success
&lt;/h2&gt;

&lt;p&gt;Treat prompts like any other product feature: define &lt;strong&gt;KPIs&lt;/strong&gt;, run &lt;strong&gt;A/B tests&lt;/strong&gt;, and iterate.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;KPI&lt;/th&gt;
&lt;th&gt;How to Measure&lt;/th&gt;
&lt;th&gt;Typical Target&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Relevance Score (1‑5)&lt;/td&gt;
&lt;td&gt;Human rating of output relevance&lt;/td&gt;
&lt;td&gt;≥ 4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Conversion Rate&lt;/td&gt;
&lt;td&gt;Click‑through or sign‑up rate for marketing copy&lt;/td&gt;
&lt;td&gt;+10 % vs. baseline&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Turn‑around Time&lt;/td&gt;
&lt;td&gt;Seconds from prompt to usable output&lt;/td&gt;
&lt;td&gt;&amp;lt; 5 s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bias Incidents&lt;/td&gt;
&lt;td&gt;Number of flagged biased outputs per 100 generations&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Run a simple experiment: generate two versions of a headline (Prompt A vs. Prompt B) and compare click‑through rates in an email campaign. The higher‑performing prompt becomes the new standard.&lt;/p&gt;




&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Prompt engineering is less about “talking to robots” and more about &lt;strong&gt;structuring your intent so the AI can act as a reliable teammate&lt;/strong&gt;. By adopting the Chef’s Recipe and Architect’s Blueprint mental models, following the five‑step design framework, and using the diagnostic checklist, non‑technical professionals can unlock consistent, high‑quality results across text and visual AI tools. Embed prompts in shared repositories, enforce ethical guardrails, and measure impact with clear KPIs to turn prompting into a repeatable, team‑wide capability.&lt;/p&gt;

&lt;p&gt;For a deeper dive—including full playbooks, case studies, and self‑reflection exercises—check out the open‑access guide that inspired this article:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.vasukisquare.cc/book/ai-prompt-engineering-for-nontechnical" rel="noopener noreferrer"&gt;Read the full guide online for free: AI Prompt Engineering for Non‑Technical&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>promptengineering</category>
      <category>productivity</category>
      <category>business</category>
    </item>
    <item>
      <title>Building a Sustainable Micro‑Garden in a City Apartment: Core Models and Actionable Checklists</title>
      <dc:creator>Swaraj Puppalwar</dc:creator>
      <pubDate>Wed, 23 Sep 2026 09:31:30 +0000</pubDate>
      <link>https://dev.to/ultrontheai/building-a-sustainable-micro-garden-in-a-city-apartment-core-models-and-actionable-checklists-2mpp</link>
      <guid>https://dev.to/ultrontheai/building-a-sustainable-micro-garden-in-a-city-apartment-core-models-and-actionable-checklists-2mpp</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Living in a dense city doesn’t have to mean you’re cut off from fresh, home‑grown food.  The &lt;strong&gt;Sustainable Urban Gardening&lt;/strong&gt; guide shows how a modest balcony, rooftop, or even a sunny windowsill can become a reliable source of nutritious produce while keeping the ecological footprint low.  This article extracts the most practical mental models, diagnostic checklists, and step‑by‑step workflows from the guide so you can start (or level‑up) your micro‑garden today—no matter the climate, budget, or experience level.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. The &lt;em&gt;Site‑First&lt;/em&gt; Mental Model
&lt;/h2&gt;

&lt;p&gt;Before you buy containers or pick seeds, treat your space like a &lt;strong&gt;mini‑ecosystem&lt;/strong&gt; that must satisfy three constraints:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Light budget&lt;/strong&gt; – how many usable sun‑hours per day?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Structural capacity&lt;/strong&gt; – can the balcony rail or roof handle the weight of soil and water?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Contamination risk&lt;/strong&gt; – is the surface exposed to heavy metals, dust, or building runoff?&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Site Diagnosis Checklist
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;✅ Item&lt;/th&gt;
&lt;th&gt;What to Look For&lt;/th&gt;
&lt;th&gt;Quick Test&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Orientation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;South‑facing gets 6‑8 h sun; East/West gets 4‑6 h; North &amp;lt;4 h&lt;/td&gt;
&lt;td&gt;Use a phone compass app and note shadow length at noon for three days&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Load Rating&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Balcony or roof load limit (usually 50 kg/m²)&lt;/td&gt;
&lt;td&gt;Check lease documents or building specs; weigh a filled 5‑liter bucket and compare&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Surface Cleanliness&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Presence of paint chips, rust, or soot&lt;/td&gt;
&lt;td&gt;Visual inspection + wipe a small area with distilled water; smell for chemicals&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Wind Exposure&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Strong gusts can dry soil quickly&lt;/td&gt;
&lt;td&gt;Hold a lightweight ribbon; if it flutters constantly, plan windbreaks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Water Access&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Proximity to a faucet or rain‑catchment option&lt;/td&gt;
&lt;td&gt;Measure distance; note any need for hose extensions&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;If any item fails, the guide offers &lt;strong&gt;soil‑free alternatives&lt;/strong&gt; (e.g., hydroponic mats, coco‑coir blocks) that sidestep contamination while keeping the garden productive.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Space‑Efficiency Framework
&lt;/h2&gt;

&lt;p&gt;Urban gardens thrive on &lt;strong&gt;verticality&lt;/strong&gt; and &lt;strong&gt;modularity&lt;/strong&gt;. The guide proposes a three‑layer framework:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Vertical Stack&lt;/strong&gt; – Use wall‑mounted shelves, hanging baskets, or pallet‑based towers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Modular Grid&lt;/strong&gt; – Standardize container size (e.g., 12 × 12 in) so you can rearrange as crops mature.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multi‑Functional Zones&lt;/strong&gt; – Combine storage (tool rack) with planting (herb trough) to eliminate dead space.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Quick Layout Exercise
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Sketch a 1‑m² footprint on graph paper (each square = 10 cm).&lt;/li&gt;
&lt;li&gt;Place a &lt;strong&gt;vertical column&lt;/strong&gt; (e.g., 2‑tier shelf) on the side that receives the most light.&lt;/li&gt;
&lt;li&gt;Fill the remaining area with &lt;strong&gt;modular squares&lt;/strong&gt; for root‑vegetables.&lt;/li&gt;
&lt;li&gt;Reserve a 20 cm strip for a &lt;strong&gt;rain‑water barrel&lt;/strong&gt; or drip‑line reservoir.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The result is a visual blueprint you can adjust seasonally without buying new containers.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Water Management &amp;amp; Closed‑Loop Metrics
&lt;/h2&gt;

&lt;p&gt;Water scarcity is a common urban pain point. The guide recommends a &lt;strong&gt;closed‑loop water budget&lt;/strong&gt; that tracks three key metrics:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Target&lt;/th&gt;
&lt;th&gt;How to Measure&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Capture Rate&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;≥30 % of rainfall captured&lt;/td&gt;
&lt;td&gt;Install a 10‑L rain barrel; log volume after each storm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Delivery Efficiency&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;≤10 % loss from source to root zone&lt;/td&gt;
&lt;td&gt;Use a flow‑meter on drip lines; compare volume pumped vs. water retained in containers&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Evapotranspiration (ET) Balance&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Keep ET ≤ water supplied&lt;/td&gt;
&lt;td&gt;Use a simple ET calculator (online) based on local climate data&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Starter Water System (DIY)
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Rain‑catch&lt;/strong&gt;: Position a 10‑L barrel under a balcony rail using a flexible gutter.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Drip Network&lt;/strong&gt;: Run 1 mm tubing from the barrel to each container, using a low‑flow emitter (≈1 L/h).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Self‑Watering Containers&lt;/strong&gt;: Add a wicking layer (sand + coconut coir) at the base; the wick pulls water up as the soil dries.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Track weekly water use in a simple spreadsheet; after the first month you’ll see where leaks or over‑watering occur.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Plant Selection &amp;amp; 12‑Week Succession Calendar
&lt;/h2&gt;

&lt;p&gt;A micro‑garden’s productivity hinges on &lt;strong&gt;crop rotation&lt;/strong&gt; and &lt;strong&gt;succession planting&lt;/strong&gt;. The guide curates a list of high‑yield, low‑input edibles that fit tight spaces:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Crop&lt;/th&gt;
&lt;th&gt;Season&lt;/th&gt;
&lt;th&gt;Space (in)&lt;/th&gt;
&lt;th&gt;Yield (per ft²)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Radish&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Cool&lt;/td&gt;
&lt;td&gt;2 × 2&lt;/td&gt;
&lt;td&gt;0.5 lb&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Leaf Lettuce&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Cool&lt;/td&gt;
&lt;td&gt;6 × 6&lt;/td&gt;
&lt;td&gt;0.8 lb&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Cherry Tomato&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Warm&lt;/td&gt;
&lt;td&gt;12 × 12&lt;/td&gt;
&lt;td&gt;1.2 lb&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Bush Bean&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Warm&lt;/td&gt;
&lt;td&gt;12 × 12&lt;/td&gt;
&lt;td&gt;0.9 lb&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Kale&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Perpetual&lt;/td&gt;
&lt;td&gt;12 × 12&lt;/td&gt;
&lt;td&gt;1 lb&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  12‑Week Action Plan (Example for a 1‑m² Balcony)
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Week&lt;/th&gt;
&lt;th&gt;Activity&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1‑2&lt;/td&gt;
&lt;td&gt;Soil test, amend with compost, sow &lt;strong&gt;radish&lt;/strong&gt; and &lt;strong&gt;leaf lettuce&lt;/strong&gt; in shallow trays&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3‑4&lt;/td&gt;
&lt;td&gt;Transplant lettuce into deeper containers; start &lt;strong&gt;cherry tomato&lt;/strong&gt; seedlings indoors&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5‑6&lt;/td&gt;
&lt;td&gt;Install drip lines; add &lt;strong&gt;bush beans&lt;/strong&gt; alongside tomatoes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7‑8&lt;/td&gt;
&lt;td&gt;Harvest radishes; sow a second lettuce round (succession)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;9‑10&lt;/td&gt;
&lt;td&gt;Prune tomato vines, add &lt;strong&gt;kale&lt;/strong&gt; seedlings for perpetual harvest&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;11‑12&lt;/td&gt;
&lt;td&gt;Begin seed saving, clean containers, plan next cycle&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Repeat the cycle, shifting crops to avoid soil‑borne diseases and to keep the harvest continuous.&lt;/p&gt;




&lt;h2&gt;
  
  
  5. Integrated Pest Management (IPM) for Small Spaces
&lt;/h2&gt;

&lt;p&gt;Chemical sprays are overkill for a balcony garden. The guide’s IPM framework relies on &lt;strong&gt;three pillars&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Prevention&lt;/strong&gt; – Diversity (mix leaf, flower, and fruiting plants) to confuse pests.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Monitoring&lt;/strong&gt; – Weekly visual inspection; use sticky traps to identify insects.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Intervention&lt;/strong&gt; – DIY sprays (e.g., neem oil + water) or physical barriers (mesh covers).&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Quick IPM Checklist
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Plant &lt;strong&gt;marigold&lt;/strong&gt; or &lt;strong&gt;basil&lt;/strong&gt; beside tomatoes to repel nematodes.&lt;/li&gt;
&lt;li&gt;[ ] Place a &lt;strong&gt;yellow sticky trap&lt;/strong&gt; near the drip line to catch aphids.&lt;/li&gt;
&lt;li&gt;[ ] If &amp;gt;5 % of leaves show damage, spray a 1 % neem solution and re‑inspect after 48 h.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Encouraging pollinators (small native flowers) also brings predatory insects that naturally curb pests.&lt;/p&gt;




&lt;h2&gt;
  
  
  6. Harvest, Post‑Harvest, and Storage Hacks
&lt;/h2&gt;

&lt;p&gt;The moment you pull a ripe tomato is only half the victory. Proper handling preserves nutrients and reduces waste.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Step&lt;/th&gt;
&lt;th&gt;Best Practice&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Harvest Timing&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Use a gentle twist; for leafy greens, cut just above the soil to encourage regrowth&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Cleaning&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Rinse with cool, filtered water; avoid soaking which can leach nutrients&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Drying&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Pat dry with a clean cloth; excess moisture accelerates spoilage&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Storage&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;- &lt;strong&gt;Root veg&lt;/strong&gt;: keep in a perforated bag in the fridge (up to 2 weeks).&lt;br&gt;- &lt;strong&gt;Leafy greens&lt;/strong&gt;: wrap in damp paper towel inside a sealed container (5‑7 days).&lt;br&gt;- &lt;strong&gt;Tomatoes&lt;/strong&gt;: store at room temperature, stem‑side down, for up to 1 week.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Preservation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;For surplus, try quick‑pickling (vinegar + salt) or a solar dryer for herbs&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;A simple &lt;strong&gt;harvest log&lt;/strong&gt; (date, crop, weight) helps you spot trends—e.g., “my lettuce yields drop after 4 weeks, maybe it needs a second harvest cycle.”&lt;/p&gt;




&lt;h2&gt;
  
  
  7. Building Community and Scaling Impact
&lt;/h2&gt;

&lt;p&gt;A single balcony garden is rewarding, but the guide shows how to amplify impact through &lt;strong&gt;micro‑networking&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Neighbourhood Swap Days&lt;/strong&gt; – Exchange seeds, compost, or excess produce.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Shared Knowledge Hub&lt;/strong&gt; – Use a free platform (e.g., Google Docs) to track collective yields and lessons.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Impact Dashboard&lt;/strong&gt; – Log total water saved, kilograms of produce grown, and carbon offset (roughly 0.5 kg CO₂ per kg of leafy greens produced locally).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Setting a &lt;strong&gt;five‑year roadmap&lt;/strong&gt; (e.g., add a rooftop tower, host a community workshop) keeps motivation high and turns a hobby into a resilient food‑security node.&lt;/p&gt;




&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Urban gardening is less about the size of your plot and more about the &lt;strong&gt;systems thinking&lt;/strong&gt; you bring to it. By applying the site‑first checklist, modular layout framework, closed‑loop water metrics, and seasonal planting calendar, you can turn a modest balcony into a year‑round source of fresh, nutritious food. The guide also reminds us that sustainability is a social practice—share, iterate, and grow together.&lt;/p&gt;

&lt;p&gt;If you’d like a deeper dive into each chapter, complete diagnostic forms, and more case studies, the full free ebook is an excellent reference.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.vasukisquare.cc/book/sustainable-urban-gardening" rel="noopener noreferrer"&gt;Read the full guide online for free: Sustainable Urban Gardening&lt;/a&gt;&lt;/p&gt;

</description>
      <category>gardening</category>
      <category>urban</category>
      <category>sustainability</category>
      <category>food</category>
    </item>
    <item>
      <title>Designing Trust‑Centric Culture in Remote Teams: Frameworks You Can Deploy Today</title>
      <dc:creator>Swaraj Puppalwar</dc:creator>
      <pubDate>Wed, 23 Sep 2026 09:31:22 +0000</pubDate>
      <link>https://dev.to/ultrontheai/designing-trust-centric-culture-in-remote-teams-frameworks-you-can-deploy-today-5cnk</link>
      <guid>https://dev.to/ultrontheai/designing-trust-centric-culture-in-remote-teams-frameworks-you-can-deploy-today-5cnk</guid>
      <description>&lt;h2&gt;
  
  
  Why Remote Culture Needs a Blueprint
&lt;/h2&gt;

&lt;p&gt;When a team stops sharing a physical office, the invisible glue that holds people together—shared rituals, spontaneous hallway chats, and the tacit sense of “we’re in this together”—can evaporate. The result is a drop in psychological safety, slower decision‑making, and hidden friction that shows up as missed deadlines or disengaged employees.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;Remote Team Culture&lt;/strong&gt; handbook shows that culture isn’t a vague feeling; it’s a set of repeatable, observable practices that can be diagnosed, designed, and measured. Below we distill the most actionable mental models and step‑by‑step workflows that you can start using this week.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. The Culture Map – A Visual Audit Tool
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What It Is
&lt;/h3&gt;

&lt;p&gt;A &lt;strong&gt;Culture Map&lt;/strong&gt; is a two‑dimensional diagram that plots &lt;strong&gt;Norms&lt;/strong&gt; (what we do) against &lt;strong&gt;Values&lt;/strong&gt; (why we do it). The X‑axis captures the &lt;em&gt;frequency&lt;/em&gt; of a behavior (daily → quarterly), while the Y‑axis captures the &lt;em&gt;impact&lt;/em&gt; on trust and performance (low → high).&lt;/p&gt;

&lt;h3&gt;
  
  
  How to Build One
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Step&lt;/th&gt;
&lt;th&gt;Action&lt;/th&gt;
&lt;th&gt;Output&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1️⃣&lt;/td&gt;
&lt;td&gt;Gather artifacts – meeting recordings, Slack channel archives, onboarding docs.&lt;/td&gt;
&lt;td&gt;Raw data set&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2️⃣&lt;/td&gt;
&lt;td&gt;Interview a cross‑section of staff (engineers, designers, ops). Ask: &lt;em&gt;What routine feels essential? What feels like noise?&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;Qualitative insights&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3️⃣&lt;/td&gt;
&lt;td&gt;List each routine, assign a frequency score (1‑5) and impact score (1‑5).&lt;/td&gt;
&lt;td&gt;Tabular list&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4️⃣&lt;/td&gt;
&lt;td&gt;Plot on a 5×5 grid. Highlight quadrants: &lt;strong&gt;High‑Impact Daily&lt;/strong&gt; (e.g., stand‑ups), &lt;strong&gt;Low‑Impact Weekly&lt;/strong&gt; (optional newsletters).&lt;/td&gt;
&lt;td&gt;Culture Map visual&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Immediate Takeaway
&lt;/h3&gt;

&lt;p&gt;Identify any &lt;strong&gt;high‑impact, low‑frequency&lt;/strong&gt; practices that are missing (e.g., a weekly “wins” roundup). Add them to your roadmap before you try to add more low‑impact rituals.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Trust‑Building Matrix – Codifying Psychological Safety
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Dimension&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Example Action&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Transparency&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;How openly information flows.&lt;/td&gt;
&lt;td&gt;Publish a weekly “decision log” of product trade‑offs.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Reliability&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Consistency of follow‑through.&lt;/td&gt;
&lt;td&gt;Adopt a “commit‑only‑if‑you‑can‑deliver” rule for async tasks.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Empathy&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Recognition of personal context.&lt;/td&gt;
&lt;td&gt;Schedule quarterly “life‑update” 15‑minute calls.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Accountability&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Clear ownership without blame.&lt;/td&gt;
&lt;td&gt;Use a shared RACI board for cross‑team initiatives.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Using the Matrix
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Score&lt;/strong&gt; each team on a 1‑5 scale for the four dimensions (self‑assessment + manager review).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Prioritize&lt;/strong&gt; the lowest‑scoring dimension.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Create a protocol&lt;/strong&gt; – a one‑page “Trust Operating Principle” that spells out the &lt;em&gt;what&lt;/em&gt;, &lt;em&gt;why&lt;/em&gt;, and &lt;em&gt;how&lt;/em&gt; for that dimension.&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Pro tip:&lt;/strong&gt; Publish the matrix in a public channel and revisit it every sprint. Transparency about the scores builds meta‑trust.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  3. Ritual‑Design Canvas – Engineering Sustainable Routines
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;+---------------------------+---------------------------+
|   Ritual Goal             |   Success Metric          |
+---------------------------+---------------------------+
|   Frequency (daily/weekly)|   Attendance % / Feedback |
+---------------------------+---------------------------+
|   Owner (who leads)       |   Timebox (max minutes)   |
+---------------------------+---------------------------+
|   Format (video/text)     |   Tool (Zoom/Slack)       |
+---------------------------+---------------------------+
|   Inclusion Check (time   |   Fatigue Guard (opt‑out) |
|   zones covered)          |                           |
+---------------------------+---------------------------+
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Quick Workflow
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Define the purpose&lt;/strong&gt; – e.g., “share daily blockers”.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Select the minimal viable format&lt;/strong&gt; – a 5‑minute async thread on Slack.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Assign an owner&lt;/strong&gt; – rotate weekly to spread facilitation skills.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Set a metric&lt;/strong&gt; – 80 % of the team posts within the 30‑minute window.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Run a 2‑week pilot&lt;/strong&gt;, collect feedback, then decide to keep, tweak, or retire.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Avoiding Ritual Fatigue
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cap total meeting minutes&lt;/strong&gt; per week per person (e.g., 6 hrs).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Batch low‑impact rituals&lt;/strong&gt; into a single “culture hour”.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Offer async alternatives&lt;/strong&gt; for any time‑zone‑sensitive activity.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  4. Tool Selection Decision Tree – Aligning Tech with Values
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Start → What cultural value is most at risk?
   ├─ Transparency → Choose tools with audit logs (e.g., Notion, Confluence)
   ├─ Speed → Prefer real‑time chat over email (Slack, Mattermost)
   ├─ Inclusion → Pick platforms with captioning &amp;amp; language support (Zoom, Loom)
   └─ Data‑privacy → Opt for self‑hosted or GDPR‑compliant solutions
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Implementation Checklist
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Inventory&lt;/strong&gt; current tools and map each to a cultural value.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Score&lt;/strong&gt; each tool on &lt;em&gt;adoption&lt;/em&gt;, &lt;em&gt;integration cost&lt;/em&gt;, and &lt;em&gt;value alignment&lt;/em&gt; (1‑5).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Retire&lt;/strong&gt; any tool scoring below 2 on value alignment.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Document&lt;/strong&gt; a “Tool Health Dashboard” that is reviewed quarterly.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  5. Culture Scorecard – Measuring What Matters
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Indicator&lt;/th&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;Frequency&lt;/th&gt;
&lt;th&gt;Owner&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;Trust Index&lt;/strong&gt; (survey)&lt;/td&gt;
&lt;td&gt;Leading&lt;/td&gt;
&lt;td&gt;Quarterly&lt;/td&gt;
&lt;td&gt;People Ops&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Async Response Time&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Leading&lt;/td&gt;
&lt;td&gt;Monthly&lt;/td&gt;
&lt;td&gt;Engineering Lead&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Onboarding NPS&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Leading&lt;/td&gt;
&lt;td&gt;After 30 days&lt;/td&gt;
&lt;td&gt;HR&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Project Delivery Variance&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Lagging&lt;/td&gt;
&lt;td&gt;Sprint end&lt;/td&gt;
&lt;td&gt;PMO&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Voluntary Turnover Rate&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Lagging&lt;/td&gt;
&lt;td&gt;Quarterly&lt;/td&gt;
&lt;td&gt;Leadership&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Running a Culture Sprint
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Set a 90‑day goal&lt;/strong&gt; (e.g., increase Trust Index from 3.2 → 4.0).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pick 2‑3 leading indicators&lt;/strong&gt; to focus on.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Create a sprint board&lt;/strong&gt; with experiments (e.g., “introduce weekly win‑share”).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Review outcomes&lt;/strong&gt; in a retro, update the scorecard, and cascade learnings.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  6. Putting It All Together – A 30‑Day Launch Plan
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Day&lt;/th&gt;
&lt;th&gt;Milestone&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1‑3&lt;/td&gt;
&lt;td&gt;Conduct a rapid Culture Map audit (30‑minute interviews, data dump).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4‑7&lt;/td&gt;
&lt;td&gt;Score the Trust‑Building Matrix; publish the first Trust Operating Principle.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8‑10&lt;/td&gt;
&lt;td&gt;Draft Ritual‑Design Canvas for a daily async stand‑up and a weekly virtual coffee.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;11‑14&lt;/td&gt;
&lt;td&gt;Run the tool‑alignment decision tree; retire one low‑value tool.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;15‑21&lt;/td&gt;
&lt;td&gt;Pilot the new rituals; collect attendance &amp;amp; feedback metrics.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;22‑25&lt;/td&gt;
&lt;td&gt;Launch the first Culture Scorecard survey (Trust Index).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;26‑30&lt;/td&gt;
&lt;td&gt;Hold a culture retro, iterate on rituals, and lock in the 90‑day sprint goal.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;By the end of the month you’ll have &lt;strong&gt;tangible data&lt;/strong&gt;, &lt;strong&gt;clear operating principles&lt;/strong&gt;, and &lt;strong&gt;a living ritual schedule&lt;/strong&gt;—the three pillars that turn “remote work” from a logistical challenge into a competitive advantage.&lt;/p&gt;




&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Remote teams thrive when culture is treated as a &lt;strong&gt;system of observable practices&lt;/strong&gt; rather than an abstract vibe. The frameworks above—Culture Map, Trust‑Building Matrix, Ritual‑Design Canvas, Tool Decision Tree, and Culture Scorecard—provide a concrete, repeatable process for diagnosing problems, engineering solutions, and measuring impact.&lt;/p&gt;

&lt;p&gt;If you want a deeper dive, including case studies from high‑performing remote firms, detailed templates, and a full 90‑day implementation roadmap, the original handbook walks you through every step.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.vasukisquare.cc/book/remote-team-culture" rel="noopener noreferrer"&gt;Read the full guide online for free: Remote Team Culture&lt;/a&gt;&lt;/p&gt;

</description>
      <category>remote</category>
      <category>culture</category>
      <category>leadership</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Meet LioranDB: A Document Database Built in Rust</title>
      <dc:creator>Swaraj Puppalwar</dc:creator>
      <pubDate>Tue, 01 Sep 2026 17:25:36 +0000</pubDate>
      <link>https://dev.to/ultrontheai/meet-liorandb-a-document-database-built-in-rust-3e9l</link>
      <guid>https://dev.to/ultrontheai/meet-liorandb-a-document-database-built-in-rust-3e9l</guid>
      <description>&lt;h1&gt;
  
  
  Meet LioranDB: A Document Database Built in Rust
&lt;/h1&gt;

&lt;p&gt;I've been working on &lt;strong&gt;LioranDB&lt;/strong&gt;, a document database built in Rust with a MongoDB-style developer experience.&lt;/p&gt;

&lt;p&gt;And now there's a video about it on YouTube:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Watch:&lt;/strong&gt; &lt;a href="https://www.youtube.com/watch?v=tAAOfV-HyAs" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=tAAOfV-HyAs&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;LioranDB V2 is currently in &lt;strong&gt;pre-alpha&lt;/strong&gt;, so this isn't a polished "we've finished everything" announcement.&lt;/p&gt;

&lt;p&gt;It's an invitation to developers to experiment with the database, test it, benchmark it, find strange edge cases, and preferably break things before somebody else does.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Is LioranDB?
&lt;/h2&gt;

&lt;p&gt;LioranDB is a document-oriented database designed around a familiar developer experience while building the underlying database engine in Rust.&lt;/p&gt;

&lt;p&gt;The V2 architecture includes components such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;B+Tree primary storage&lt;/li&gt;
&lt;li&gt;MVCC&lt;/li&gt;
&lt;li&gt;Write-Ahead Logging (WAL)&lt;/li&gt;
&lt;li&gt;Crash recovery&lt;/li&gt;
&lt;li&gt;Secondary indexes&lt;/li&gt;
&lt;li&gt;Full-text indexing&lt;/li&gt;
&lt;li&gt;Page caching&lt;/li&gt;
&lt;li&gt;A query and DBMS layer&lt;/li&gt;
&lt;li&gt;TypeScript/JavaScript driver&lt;/li&gt;
&lt;li&gt;Docker deployment&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Conceptually, an application talks to LioranDB like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Application
     ↓
LioranDB Driver
     ↓
LioranDB Server
     ↓
Query / DBMS Layer
     ↓
MVCC + Transactions
     ↓
Storage Engine
     ↓
B+Tree / WAL / Cache
     ↓
Disk
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Why Build Another Database?
&lt;/h2&gt;

&lt;p&gt;That's a fair question.&lt;/p&gt;

&lt;p&gt;There are already excellent databases available today.&lt;/p&gt;

&lt;p&gt;LioranDB isn't being built because the world desperately needs another CRUD API.&lt;/p&gt;

&lt;p&gt;The interesting part for me is the infrastructure underneath it.&lt;/p&gt;

&lt;p&gt;How do you make writes durable without destroying throughput?&lt;/p&gt;

&lt;p&gt;How should secondary indexes interact with document storage?&lt;/p&gt;

&lt;p&gt;How do you recover correctly after a crash?&lt;/p&gt;

&lt;p&gt;How do you execute &lt;code&gt;limit()&lt;/code&gt;, sorting and indexed queries without accidentally scanning or hydrating millions of unnecessary documents?&lt;/p&gt;

&lt;p&gt;How do you maintain correctness while optimizing performance?&lt;/p&gt;

&lt;p&gt;Those questions are where building a database gets interesting very quickly.&lt;/p&gt;

&lt;p&gt;Sometimes an optimization gives you a beautiful benchmark.&lt;/p&gt;

&lt;p&gt;Sometimes a tiny change takes performance from &lt;em&gt;nice&lt;/em&gt; to &lt;em&gt;what have I done&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;That's part of building infrastructure.&lt;/p&gt;

&lt;h2&gt;
  
  
  LioranDB V2 Is Still Pre-Alpha
&lt;/h2&gt;

&lt;p&gt;This part is important.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;LioranDB V2 is not currently presented as production-ready.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Pre-alpha is where we're testing the architecture, fixing correctness problems, improving performance and learning from real workloads.&lt;/p&gt;

&lt;p&gt;That also makes this one of the best times for developers interested in databases to experiment with it.&lt;/p&gt;

&lt;p&gt;Don't just test:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nf"&gt;insertOne&lt;/span&gt;&lt;span class="p"&gt;(...)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Try ugly workloads.&lt;/p&gt;

&lt;p&gt;Create indexes.&lt;/p&gt;

&lt;p&gt;Query large collections.&lt;/p&gt;

&lt;p&gt;Restart the database unexpectedly.&lt;/p&gt;

&lt;p&gt;Run concurrent reads and writes.&lt;/p&gt;

&lt;p&gt;Try unusual filters.&lt;/p&gt;

&lt;p&gt;Push pagination.&lt;/p&gt;

&lt;p&gt;Try to make something behave incorrectly.&lt;/p&gt;

&lt;p&gt;If you find something broken, that's useful information.&lt;/p&gt;

&lt;h2&gt;
  
  
  Current Performance Target
&lt;/h2&gt;

&lt;p&gt;Our pre-alpha development target has been approximately:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;10,000 writes/sec
+
35,000 reads/sec
------------------
≈ 45,000 operations/sec
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These are &lt;strong&gt;development benchmark figures, not an SLA or guaranteed production performance&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Actual throughput depends on hardware, dataset size, document structure, indexes, query patterns, concurrency and many other factors.&lt;/p&gt;

&lt;p&gt;Performance numbers without workload context are mostly decorative numbers wearing suits.&lt;/p&gt;

&lt;h2&gt;
  
  
  Watch the Video
&lt;/h2&gt;

&lt;p&gt;If you'd rather see LioranDB than read another wall of database text, I've published a video on YouTube:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.youtube.com/watch?v=tAAOfV-HyAs" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=tAAOfV-HyAs&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I'll continue publishing more about the internals of LioranDB, including the storage engine, indexing, WAL, MVCC, query execution, performance work and some of the bugs we've encountered while building it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try LioranDB
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Website:&lt;/strong&gt; &lt;a href="https://liorandb.com" rel="noopener noreferrer"&gt;https://liorandb.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Documentation:&lt;/strong&gt; &lt;a href="https://docs.liorandb.com" rel="noopener noreferrer"&gt;https://docs.liorandb.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;LioranDB V2 is still evolving, so feedback at this stage genuinely matters.&lt;/p&gt;

&lt;p&gt;If you're a backend, Rust, database or infrastructure developer, try it.&lt;/p&gt;

&lt;p&gt;Benchmark it.&lt;/p&gt;

&lt;p&gt;Inspect how it behaves.&lt;/p&gt;

&lt;p&gt;And if you can break it, &lt;strong&gt;please tell me how you did it.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>liorandb</category>
      <category>database</category>
      <category>nosql</category>
      <category>developers</category>
    </item>
    <item>
      <title>LioranDB Managed Hosting Is Now Open: ₹5,000/Month for Early-Stage Startups</title>
      <dc:creator>Swaraj Puppalwar</dc:creator>
      <pubDate>Tue, 01 Sep 2026 17:20:57 +0000</pubDate>
      <link>https://dev.to/ultrontheai/liorandb-managed-hosting-is-now-open-5000month-for-early-stage-startups-29ha</link>
      <guid>https://dev.to/ultrontheai/liorandb-managed-hosting-is-now-open-5000month-for-early-stage-startups-29ha</guid>
      <description>&lt;p&gt;LioranDB V2 is currently in pre-alpha, and we're now opening &lt;strong&gt;managed LioranDB deployments&lt;/strong&gt; for selected early-stage startups and developers.&lt;/p&gt;

&lt;p&gt;Until now, the focus has primarily been on building and testing the database itself: the Rust storage engine, B+Tree primary storage, MVCC, WAL and crash recovery, secondary indexes, full-text search, and the developer APIs around them.&lt;/p&gt;

&lt;p&gt;Now I want to start working directly with real applications.&lt;/p&gt;

&lt;p&gt;So instead of simply giving developers a Docker image and saying &lt;em&gt;good luck&lt;/em&gt;, we're introducing a small managed offering with direct founder support.&lt;/p&gt;

&lt;h2&gt;
  
  
  Two Pricing Options
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Fixed Plan: ₹5,000/month
&lt;/h3&gt;

&lt;p&gt;This is designed primarily for early-stage products that don't need huge infrastructure yet.&lt;/p&gt;

&lt;p&gt;The plan includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Up to 1 million documents&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Daily database backups&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Managed LioranDB deployment&lt;/li&gt;
&lt;li&gt;Infrastructure monitoring and maintenance&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Direct founder support&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Basic feature requests based on your application's requirements&lt;/li&gt;
&lt;li&gt;Help with database integration and deployment&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;LioranDB's current development testing has demonstrated workloads around &lt;strong&gt;10K writes/sec + 35K reads/sec&lt;/strong&gt;, or roughly &lt;strong&gt;45K operations/sec&lt;/strong&gt; under tested configurations.&lt;/p&gt;

&lt;p&gt;These numbers should be treated as &lt;strong&gt;development benchmark figures, not guaranteed production throughput or an SLA&lt;/strong&gt;. Actual performance depends heavily on hardware, indexes, query patterns, document sizes, concurrency, and workload.&lt;/p&gt;

&lt;p&gt;LioranDB V2 itself is also currently &lt;strong&gt;pre-alpha&lt;/strong&gt;, so this offering is aimed at teams comfortable adopting early infrastructure and working directly with its developer.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Custom Plan
&lt;/h3&gt;

&lt;p&gt;Need more than 1 million documents?&lt;/p&gt;

&lt;p&gt;Need different CPU, memory, storage, backup policies, or workload requirements?&lt;/p&gt;

&lt;p&gt;That's where the &lt;strong&gt;custom plan&lt;/strong&gt; comes in.&lt;/p&gt;

&lt;p&gt;Instead of forcing every application into the same infrastructure configuration, we'll review your application's expected workload and determine an appropriate deployment and monthly price.&lt;/p&gt;

&lt;p&gt;This is particularly useful for SaaS platforms, CRM systems, backend services, AI applications, and other products with unusual or rapidly growing database workloads.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Do You Get a Managed LioranDB Database?
&lt;/h2&gt;

&lt;p&gt;We're not making managed deployments instantly purchasable yet.&lt;/p&gt;

&lt;p&gt;There is an application process.&lt;/p&gt;

&lt;p&gt;Visit:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;app.liorandb.com&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Create an account and submit an application describing your product, expected workload, and database requirements.&lt;/p&gt;

&lt;p&gt;We'll review the application.&lt;/p&gt;

&lt;p&gt;If it's approved, we'll provision your LioranDB database and provide the information you need to connect your application.&lt;/p&gt;

&lt;p&gt;Billing is monthly.&lt;/p&gt;

&lt;p&gt;The process looks roughly like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Create Account
      ↓
Submit Application
      ↓
Application Review
      ↓
Approved
      ↓
Database Provisioned
      ↓
Connect Your Application
      ↓
Monthly Billing
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Why an Application Process?
&lt;/h2&gt;

&lt;p&gt;Because LioranDB V2 is still pre-alpha.&lt;/p&gt;

&lt;p&gt;I'd rather onboard a smaller number of applications and understand exactly how they're using the database than throw open a giant &lt;strong&gt;"Buy Now"&lt;/strong&gt; button and pretend the product has already reached cloud-database maturity.&lt;/p&gt;

&lt;p&gt;Working with early users also gives us something benchmarks can't provide: &lt;strong&gt;real workloads&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Different applications create very different database pressure.&lt;/p&gt;

&lt;p&gt;A CRM might perform huge numbers of indexed lookups.&lt;/p&gt;

&lt;p&gt;A SaaS product might have strongly tenant-oriented access patterns.&lt;/p&gt;

&lt;p&gt;An API might perform thousands of tiny reads.&lt;/p&gt;

&lt;p&gt;Another application might continuously ingest data.&lt;/p&gt;

&lt;p&gt;Those workloads expose problems synthetic benchmarks simply won't.&lt;/p&gt;

&lt;p&gt;And because managed customers have direct founder support, if something strange happens, you're talking directly to the person building the database rather than bouncing through three support tiers.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Is LioranDB?
&lt;/h2&gt;

&lt;p&gt;LioranDB V2 is a document database developed in Rust with a MongoDB-style developer experience.&lt;/p&gt;

&lt;p&gt;Its current architecture includes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Application
     ↓
LioranDB Query Layer
     ↓
Transactions + MVCC
     ↓
B+Tree Primary Storage
     ↓
WAL + Checkpoints
     ↓
Page Cache
     ↓
Persistent Storage

     + Secondary LSM Indexes
     + Inverted Text Index
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;V2 pre-alpha launched on &lt;strong&gt;August 16, 2026&lt;/strong&gt;, and development is currently moving toward the Alpha release planned for &lt;strong&gt;October 23, 2026&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The database is still under active development and &lt;strong&gt;is not currently presented as production-ready&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That's also why I'm particularly interested in working with developers who are willing to test it, push it, report weird behavior, and tell me where the developer experience sucks.&lt;/p&gt;

&lt;h2&gt;
  
  
  Interested?
&lt;/h2&gt;

&lt;p&gt;You can learn about LioranDB on &lt;strong&gt;liorandb.com&lt;/strong&gt;, or apply for a managed deployment through &lt;strong&gt;app.liorandb.com&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;If you're building an early-stage SaaS, CRM, API, internal tool, or another backend-heavy product and want to experiment with LioranDB, I'd particularly like to hear about your workload.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;And yes, trying to break the database is still encouraged.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>liorandb</category>
      <category>nosql</category>
      <category>database</category>
      <category>developers</category>
    </item>
    <item>
      <title>LioranDB V2 Is in Pre-Alpha. Please Try to Break It.</title>
      <dc:creator>Swaraj Puppalwar</dc:creator>
      <pubDate>Sat, 29 Aug 2026 19:39:12 +0000</pubDate>
      <link>https://dev.to/ultrontheai/liorandb-v2-is-in-pre-alpha-please-try-to-break-it-j46</link>
      <guid>https://dev.to/ultrontheai/liorandb-v2-is-in-pre-alpha-please-try-to-break-it-j46</guid>
      <description>&lt;p&gt;LioranDB V2 is now publicly available in &lt;strong&gt;pre-alpha&lt;/strong&gt;, and I want developers to do something slightly unusual:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Try to break it.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Not just install it, run &lt;code&gt;insertOne()&lt;/code&gt;, see that it works, and close the terminal.&lt;/p&gt;

&lt;p&gt;Push it.&lt;/p&gt;

&lt;p&gt;Give it weird queries. Throw large datasets at it. Create indexes. Delete things. Restart the server. Send concurrent requests. Test edge cases. Try workflows I probably didn't think about.&lt;/p&gt;

&lt;p&gt;If something behaves strangely, becomes painfully slow, crashes, returns an unexpected result, or simply feels bad to use, I want to know.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is LioranDB?
&lt;/h2&gt;

&lt;p&gt;LioranDB is a developer-first document database being developed in India.&lt;/p&gt;

&lt;p&gt;V2 is written in &lt;strong&gt;Rust&lt;/strong&gt; and currently includes things such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;B+ Tree primary storage&lt;/li&gt;
&lt;li&gt;MVCC&lt;/li&gt;
&lt;li&gt;Write-Ahead Logging&lt;/li&gt;
&lt;li&gt;Checkpoints and crash recovery&lt;/li&gt;
&lt;li&gt;Secondary indexes&lt;/li&gt;
&lt;li&gt;Full-text indexing&lt;/li&gt;
&lt;li&gt;Docker deployment&lt;/li&gt;
&lt;li&gt;TypeScript/JavaScript driver&lt;/li&gt;
&lt;li&gt;MongoDB-style document APIs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal isn't to pretend that a pre-alpha database is already production-ready.&lt;/p&gt;

&lt;p&gt;The goal is to find everything that's wrong with it &lt;strong&gt;before&lt;/strong&gt; it gets there.&lt;/p&gt;

&lt;h2&gt;
  
  
  So, I'm Looking for Feedback
&lt;/h2&gt;

&lt;p&gt;I'm especially interested in hearing about:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🐛 Bugs&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Anything that crashes, hangs, produces incorrect results, corrupts state, or behaves differently from what you'd expect.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;⚡ Performance problems&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Slow queries, unexpected latency, bad scaling with larger collections, inefficient indexes, memory problems, or operations that become suspiciously expensive.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🧪 Edge cases&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Strange documents. Strange queries. Strange sequences of operations.&lt;/p&gt;

&lt;p&gt;Basically, be creative.&lt;/p&gt;

&lt;p&gt;Databases tend to behave nicely until somebody does something the database author never imagined.&lt;/p&gt;

&lt;p&gt;Be that somebody.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🧑‍💻 Developer experience&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I'd also love feedback about the API itself.&lt;/p&gt;

&lt;p&gt;Is something confusing?&lt;/p&gt;

&lt;p&gt;Does an error message suck?&lt;/p&gt;

&lt;p&gt;Is an operation unnecessarily complicated?&lt;/p&gt;

&lt;p&gt;Did you have to read the documentation three times to understand something?&lt;/p&gt;

&lt;p&gt;That's a bug too, just wearing nicer clothes.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Test It
&lt;/h2&gt;

&lt;p&gt;Start here:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Documentation:&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://docs.liorandb.com" rel="noopener noreferrer"&gt;https://docs.liorandb.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;LioranDB:&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://liorandb.com" rel="noopener noreferrer"&gt;https://liorandb.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The documentation contains the setup instructions and APIs needed to start experimenting with LioranDB.&lt;/p&gt;

&lt;p&gt;You don't need to build a serious application.&lt;/p&gt;

&lt;p&gt;Create a test project, generate some data, connect the driver, and start attacking it.&lt;/p&gt;

&lt;p&gt;Try things like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;thousands or millions of documents&lt;/li&gt;
&lt;li&gt;concurrent reads and writes&lt;/li&gt;
&lt;li&gt;secondary indexes&lt;/li&gt;
&lt;li&gt;text search&lt;/li&gt;
&lt;li&gt;pagination&lt;/li&gt;
&lt;li&gt;large &lt;code&gt;limit()&lt;/code&gt; values&lt;/li&gt;
&lt;li&gt;unusual filters&lt;/li&gt;
&lt;li&gt;sorting&lt;/li&gt;
&lt;li&gt;aggregations&lt;/li&gt;
&lt;li&gt;repeated updates and deletes&lt;/li&gt;
&lt;li&gt;restarting LioranDB during workloads&lt;/li&gt;
&lt;li&gt;crash/recovery scenarios&lt;/li&gt;
&lt;li&gt;combinations of operations that look suspicious&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you manage to make LioranDB unhappy, congratulations.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;That's exactly what I'm looking for.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Found Something?
&lt;/h2&gt;

&lt;p&gt;Send me what happened at:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="mailto:feedback@liorandb.com"&gt;feedback@liorandb.com&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If possible, include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;what you were trying to do&lt;/li&gt;
&lt;li&gt;the query/code you ran&lt;/li&gt;
&lt;li&gt;what you expected&lt;/li&gt;
&lt;li&gt;what actually happened&lt;/li&gt;
&lt;li&gt;dataset size&lt;/li&gt;
&lt;li&gt;logs or error messages&lt;/li&gt;
&lt;li&gt;your OS/environment&lt;/li&gt;
&lt;li&gt;reproduction steps&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Even if you're unsure whether something is technically a bug, send it.&lt;/p&gt;

&lt;p&gt;Performance observations, confusing APIs, documentation problems, missing features, architectural criticism, and general feedback are all useful.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I'm Doing This
&lt;/h2&gt;

&lt;p&gt;A database isn't validated because its benchmark graph looks pretty.&lt;/p&gt;

&lt;p&gt;It's validated when people outside the project start doing things the original developer didn't anticipate.&lt;/p&gt;

&lt;p&gt;LioranDB V2 is still pre-alpha.&lt;/p&gt;

&lt;p&gt;There are going to be bugs.&lt;/p&gt;

&lt;p&gt;There are going to be slow paths.&lt;/p&gt;

&lt;p&gt;There are probably wonderfully cursed combinations of operations waiting somewhere in the engine.&lt;/p&gt;

&lt;p&gt;I'd rather developers discover them now than users discover them later.&lt;/p&gt;

&lt;p&gt;So install LioranDB.&lt;/p&gt;

&lt;p&gt;Build something stupid with it.&lt;/p&gt;

&lt;p&gt;Stress it.&lt;/p&gt;

&lt;p&gt;Abuse the API.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;And please, try to break my database.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://liorandb.com" rel="noopener noreferrer"&gt;https://liorandb.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.liorandb.com" rel="noopener noreferrer"&gt;https://docs.liorandb.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Feedback: &lt;strong&gt;&lt;a href="mailto:feedback@liorandb.com"&gt;feedback@liorandb.com&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>liorandb</category>
      <category>nosql</category>
      <category>database</category>
      <category>mongodb</category>
    </item>
    <item>
      <title>Swaraj's High Rise in Computers! | Nagpur Post | 23 May 2023</title>
      <dc:creator>Swaraj Puppalwar</dc:creator>
      <pubDate>Mon, 24 Aug 2026 15:14:50 +0000</pubDate>
      <link>https://dev.to/ultrontheai/swarajs-high-rise-in-computers-nagpur-post-23-may-2023-4cj2</link>
      <guid>https://dev.to/ultrontheai/swarajs-high-rise-in-computers-nagpur-post-23-may-2023-4cj2</guid>
      <description>&lt;p&gt;On Tuesday, 23 May 2023, Nagpur Post published an English feature about my early journey into computers and programming.&lt;/p&gt;

&lt;p&gt;The article was titled “Swaraj's high rise in computers!” with the subheading “Developed many computer programs at an early age.”&lt;/p&gt;

&lt;p&gt;I was 15 years old when the article was published.&lt;/p&gt;

&lt;p&gt;I had started programming at the age of 11 and was primarily self-taught, learning through books, online tutorials, platforms such as Udemy and YouTube, and, most importantly, building projects.&lt;/p&gt;

&lt;p&gt;By that point, I had experimented with software, Android applications, websites and games.&lt;/p&gt;

&lt;p&gt;Some of my early projects included Productive Pay, a productivity tool for Python developers, a calculation-speed improvement tool for mathematics practice, and applications built while experimenting with multiple programming languages.&lt;/p&gt;

&lt;p&gt;My early technology stack included Python, Java, C/C++, HTML, CSS, JavaScript and Node.js.&lt;/p&gt;

&lt;p&gt;The newspaper also covered some of my participation and achievements in computer science and academic competitions, including cyber, computer and mathematics olympiads and the National Children's Science Congress.&lt;/p&gt;

&lt;p&gt;Reading the article again years later feels almost like opening an old Git commit.&lt;/p&gt;

&lt;p&gt;The codebase has changed considerably.&lt;/p&gt;

&lt;p&gt;What started as curiosity about programming eventually grew into an interest in full-stack development, backend engineering, databases and developer infrastructure.&lt;/p&gt;

&lt;p&gt;Today, I am building LioranDB and working toward a much larger goal: building developer infrastructure from India.&lt;/p&gt;

&lt;p&gt;I am preserving this article here because it captures one of the earliest public records of that journey, from a time when I was simply a school student fascinated by what could be built with a computer and some code.&lt;/p&gt;

&lt;p&gt;Publication: Nagpur Post&lt;br&gt;
Location: Nagpur&lt;br&gt;
Date: Tuesday, 23 May 2023&lt;br&gt;
Original Headline: Swaraj's high rise in computers!&lt;br&gt;
Subheading: Developed many computer programs at an early age&lt;/p&gt;

</description>
      <category>swarajpuppalwar</category>
      <category>nagpurpost</category>
      <category>news</category>
    </item>
    <item>
      <title>स्वराजची संगणक क्षेत्रात उंच भरारी | Navarashtra, Chandrapur | 23 May 2023</title>
      <dc:creator>Swaraj Puppalwar</dc:creator>
      <pubDate>Mon, 24 Aug 2026 15:14:10 +0000</pubDate>
      <link>https://dev.to/ultrontheai/svraajcii-sngnnk-kssetraat-unc-bhraarii-navarashtra-chandrapur-23-may-2023-4jao</link>
      <guid>https://dev.to/ultrontheai/svraajcii-sngnnk-kssetraat-unc-bhraarii-navarashtra-chandrapur-23-may-2023-4jao</guid>
      <description>&lt;p&gt;On 23 May 2023, Navarashtra featured my early journey in computer science and programming in its Chandrapur edition.&lt;/p&gt;

&lt;p&gt;The article was published under the Marathi headline “स्वराजची संगणक क्षेत्रात उंच भरारी” on Page 4.&lt;/p&gt;

&lt;p&gt;I was 15 years old at the time.&lt;/p&gt;

&lt;p&gt;My journey into programming had started several years earlier, when I began learning to code at the age of 11. Instead of limiting that learning to tutorials, I became interested in actually building things.&lt;/p&gt;

&lt;p&gt;Over the following years, I experimented with software, Android applications, websites, games and programming projects while continuing to learn different technologies.&lt;/p&gt;

&lt;p&gt;The Navarashtra article documented this early phase of my journey and highlighted both my programming work and participation in technology and academic competitions.&lt;/p&gt;

&lt;p&gt;Some of the technologies I explored during those years included Python, Java, C/C++, HTML, CSS, JavaScript and Node.js.&lt;/p&gt;

&lt;p&gt;What I find interesting about looking at this article years later is how much the scale of the problems I want to solve has changed.&lt;/p&gt;

&lt;p&gt;The 15-year-old version of me was excited about making applications and experimenting with code.&lt;/p&gt;

&lt;p&gt;Today, I spend much of my time thinking about storage engines, databases, Rust, backend architecture and developer infrastructure.&lt;/p&gt;

&lt;p&gt;Those are very different engineering problems, but they came from the same curiosity.&lt;/p&gt;

&lt;p&gt;This clipping is therefore more than a newspaper mention for me. It is a snapshot of where the journey was in May 2023, long before I knew where that curiosity would eventually lead.&lt;/p&gt;

&lt;p&gt;Publication: Navarashtra&lt;br&gt;
Edition: Chandrapur&lt;br&gt;
Date: 23 May 2023&lt;br&gt;
Page: 4&lt;br&gt;
Original Marathi Headline: स्वराजची संगणक क्षेत्रात उंच भरारी&lt;/p&gt;

</description>
      <category>swarajpuppalwar</category>
      <category>navarashtra</category>
      <category>news</category>
    </item>
    <item>
      <title>‘स्वराज’ची संगणकात गगनभरारी | Tarun Bharat, Purva Vidarbha | 29 May 2023</title>
      <dc:creator>Swaraj Puppalwar</dc:creator>
      <pubDate>Mon, 24 Aug 2026 15:13:30 +0000</pubDate>
      <link>https://dev.to/ultrontheai/svraajcii-sngnnkaat-ggnbhraarii-tarun-bharat-purva-vidarbha-29-may-2023-1m8d</link>
      <guid>https://dev.to/ultrontheai/svraajcii-sngnnkaat-ggnbhraarii-tarun-bharat-purva-vidarbha-29-may-2023-1m8d</guid>
      <description>&lt;p&gt;On 29 May 2023, Tarun Bharat featured my journey in technology and programming in its Purva Vidarbha edition.&lt;/p&gt;

&lt;p&gt;The Marathi article, titled “‘स्वराज’ची संगणकात गगनभरारी”, appeared on Page 2 of the newspaper.&lt;/p&gt;

&lt;p&gt;At the time, I was 15 years old and had already spent several years exploring programming and computer science. I started programming at the age of 11, largely learning through experimentation, books, online resources and building projects of my own.&lt;/p&gt;

&lt;p&gt;The article covered my early journey in software development, including my work with programming languages and technologies such as Python, Java, C/C++, HTML, CSS, JavaScript and Node.js.&lt;/p&gt;

&lt;p&gt;It also highlighted some of the projects I had built while learning programming, along with my participation and achievements in computer science, cyber and mathematics competitions.&lt;/p&gt;

&lt;p&gt;Looking back from 2026, this newspaper clipping represents a very different stage of my journey.&lt;/p&gt;

&lt;p&gt;Back then, I was a school student experimenting with software because I genuinely enjoyed understanding how computers worked.&lt;/p&gt;

&lt;p&gt;Today, that curiosity has evolved into working on databases, backend systems and developer infrastructure, including building LioranDB.&lt;/p&gt;

&lt;p&gt;The technology has changed. The projects have become much larger. But the habit that started everything remains the same: learn something, build something, break it, understand it, and build again.&lt;/p&gt;

&lt;p&gt;Publication: Tarun Bharat&lt;br&gt;
Edition: Purva Vidarbha&lt;br&gt;
Date: 29 May 2023&lt;br&gt;
Page: 2&lt;br&gt;
Original Marathi Headline: ‘स्वराज’ची संगणकात गगनभरारी&lt;/p&gt;

</description>
      <category>swarajpuppalwar</category>
      <category>tarunbharat</category>
      <category>news</category>
    </item>
    <item>
      <title>LioranDB TypeScript Series #12: Production Patterns, Error Handling and What Comes Next</title>
      <dc:creator>Swaraj Puppalwar</dc:creator>
      <pubDate>Sat, 15 Aug 2026 20:16:34 +0000</pubDate>
      <link>https://dev.to/ultrontheai/liorandb-typescript-series-12-production-patterns-error-handling-and-what-comes-next-2aok</link>
      <guid>https://dev.to/ultrontheai/liorandb-typescript-series-12-production-patterns-error-handling-and-what-comes-next-2aok</guid>
      <description>&lt;h1&gt;
  
  
  LioranDB TypeScript Series #12: Production Patterns, Error Handling and What Comes Next
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;LioranDB TypeScript Series:&lt;/strong&gt; Build with a developer-first document database powered by Rust and designed for TypeScript.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;We started this series with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run ...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Eleven articles later, we've covered application queries, indexes, authentication, operations, backups, the CLI and managed deployment.&lt;/p&gt;

&lt;p&gt;Let's finish with the things that matter when your application stops being a demo.&lt;/p&gt;

&lt;h2&gt;
  
  
  Understand driver errors
&lt;/h2&gt;

&lt;p&gt;The LioranDB TypeScript driver exports a structured error hierarchy.&lt;/p&gt;

&lt;p&gt;General errors include:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;LioranDriverError
ApiError
AuthError
NetworkError
TimeoutError
ConfigurationError
SerializationError
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Authentication-related errors include:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;AuthenticationError
AuthorizationError
PasswordChangeRequiredError
SessionExpiredError
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Lifecycle errors include:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ClientClosedError
CursorClosedError
CursorInitializedError
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Server-side conditions include errors such as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ConflictError
DuplicateKeyError
NotFoundError
ServerNotReadyError
ServerOverloadedError
ServerUnavailableError
ValidationError
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Use &lt;code&gt;instanceof&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;Don't parse human-readable error messages.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;DuplicateKeyError&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;TimeoutError&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@liorandb/driver&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;users&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;insertOne&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt; &lt;span class="k"&gt;instanceof&lt;/span&gt; &lt;span class="nx"&gt;DuplicateKeyError&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Handle duplicate data.&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt; &lt;span class="k"&gt;instanceof&lt;/span&gt; &lt;span class="nx"&gt;TimeoutError&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Apply your timeout/retry policy.&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The driver also exports error and warning code constants for applications that need structured classification.&lt;/p&gt;

&lt;h2&gt;
  
  
  Add diagnostics
&lt;/h2&gt;

&lt;p&gt;Attach your application's trace identifier:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setDiagnosticHeaders&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;x-trace-id&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;traceId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Observe operations:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setResponseObserver&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;transport&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;transport&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;operation&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;operation&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;durationMS&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;durationMS&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;requestId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;requestId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And surface slow operations:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;LioranDBClient&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;connect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;uri&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;slowRequestThresholdMS&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;

  &lt;span class="nf"&gt;onWarning&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;warning&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;warn&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
      &lt;span class="nx"&gt;warning&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;code&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="nx"&gt;warning&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;
    &lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Production checklist
&lt;/h2&gt;

&lt;p&gt;Before calling a deployment production-ready:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;URL-encode credentials inside connection strings.&lt;/li&gt;
&lt;li&gt;Rotate bootstrap credentials immediately.&lt;/li&gt;
&lt;li&gt;Use application-specific users and roles.&lt;/li&gt;
&lt;li&gt;Prefer least-privilege permissions.&lt;/li&gt;
&lt;li&gt;Use typed collections.&lt;/li&gt;
&lt;li&gt;Use idempotency keys where retry safety matters.&lt;/li&gt;
&lt;li&gt;Configure appropriate request timeouts.&lt;/li&gt;
&lt;li&gt;Poll backup and restore jobs until terminal state.&lt;/li&gt;
&lt;li&gt;Verify backups.&lt;/li&gt;
&lt;li&gt;Monitor health, readiness and metrics.&lt;/li&gt;
&lt;li&gt;Keep database ports private.&lt;/li&gt;
&lt;li&gt;Put TLS at the public edge.&lt;/li&gt;
&lt;li&gt;Close clients and cursors cleanly.&lt;/li&gt;
&lt;li&gt;Handle structured driver errors rather than parsing strings.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Remember: this is pre-alpha
&lt;/h2&gt;

&lt;p&gt;LioranDB V2 launched its pre-alpha on &lt;strong&gt;16 August 2026&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That word matters.&lt;/p&gt;

&lt;p&gt;Pre-alpha is where APIs can evolve, edge cases get discovered and real workloads expose assumptions that benchmarks don't.&lt;/p&gt;

&lt;p&gt;If you're experimenting with it today, feedback is extremely valuable.&lt;/p&gt;

&lt;h2&gt;
  
  
  What comes next?
&lt;/h2&gt;

&lt;p&gt;The current target for the LioranDB V2 alpha is:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;23 October 2026&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Work toward alpha includes areas such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;production hardening&lt;/li&gt;
&lt;li&gt;larger dataset testing&lt;/li&gt;
&lt;li&gt;richer aggregation capabilities&lt;/li&gt;
&lt;li&gt;clustering improvements&lt;/li&gt;
&lt;li&gt;deployment tooling&lt;/li&gt;
&lt;li&gt;managed infrastructure&lt;/li&gt;
&lt;li&gt;developer experience improvements&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The direction remains the same:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Build developer infrastructure from India that developers can actually use.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Start building
&lt;/h2&gt;

&lt;p&gt;Install the driver:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; @liorandb/driver@2.0.6
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Install the CLI:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; @liorandb/cli@1.0.6
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run the database:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker pull liorandb/liorandb:pre-alpha
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Resources
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;LioranDB:&lt;/strong&gt; &lt;a href="https://liorandb.com" rel="noopener noreferrer"&gt;https://liorandb.com&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Documentation:&lt;/strong&gt; &lt;a href="https://docs.liorandb.com" rel="noopener noreferrer"&gt;https://docs.liorandb.com&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Driver:&lt;/strong&gt; &lt;code&gt;@liorandb/driver@2.0.5&lt;/code&gt;&lt;br&gt;
&lt;strong&gt;CLI:&lt;/strong&gt; &lt;code&gt;@liorandb/cli@1.0.5&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;LioranDB is created by &lt;strong&gt;Swaraj Puppalwar&lt;/strong&gt;, Founder &amp;amp; CTO at Lioran Developer Solutions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/UltronTheAI" rel="noopener noreferrer"&gt;https://github.com/UltronTheAI&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Lioran Developer Solutions:&lt;/strong&gt; &lt;a href="https://lioransolutions.com" rel="noopener noreferrer"&gt;https://lioransolutions.com&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Previous:&lt;/strong&gt; Part 11 → Docker Compose, Caddy &amp;amp; TLS&lt;/p&gt;

&lt;p&gt;That's the end of the LioranDB TypeScript Series.&lt;/p&gt;

&lt;p&gt;Now comes the fun part:&lt;/p&gt;

&lt;p&gt;Build something with it, stress it, benchmark it, find the weird edge cases and tell us what you discover.&lt;/p&gt;

&lt;p&gt;Pre-alpha gets better when developers actually try to break it. 💗&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
      <category>liorandb</category>
      <category>typescript</category>
      <category>database</category>
      <category>rust</category>
    </item>
    <item>
      <title>LioranDB TypeScript Series #11: Deploy LioranDB with Docker Compose, Caddy and TLS</title>
      <dc:creator>Swaraj Puppalwar</dc:creator>
      <pubDate>Sat, 15 Aug 2026 20:14:45 +0000</pubDate>
      <link>https://dev.to/ultrontheai/liorandb-typescript-series-11-deploy-liorandb-with-docker-compose-caddy-and-tls-4egh</link>
      <guid>https://dev.to/ultrontheai/liorandb-typescript-series-11-deploy-liorandb-with-docker-compose-caddy-and-tls-4egh</guid>
      <description>&lt;h1&gt;
  
  
  LioranDB TypeScript Series #11: Deploy LioranDB with Docker Compose, Caddy and TLS
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;LioranDB TypeScript Series:&lt;/strong&gt; Build with a developer-first document database powered by Rust and designed for TypeScript.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Running LioranDB locally is easy.&lt;/p&gt;

&lt;p&gt;Exposing a database server to the internet deserves considerably more care.&lt;/p&gt;

&lt;p&gt;Let's build a cleaner managed deployment.&lt;/p&gt;

&lt;h2&gt;
  
  
  Architecture
&lt;/h2&gt;

&lt;p&gt;Instead of publishing every LioranDB port:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Internet
   ↓
HTTPS / TLS
   ↓
Caddy
   ↓
Docker network
   ↓
LioranDB
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Only the reverse proxy should be publicly reachable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Example Caddy configuration
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;acme.db.example.com {
  reverse_proxy liorandb:27018
}

acme.grpc.example.com {
  reverse_proxy h2c://liorandb:27019
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Caddy handles the public TLS edge while LioranDB remains inside the Docker network.&lt;/p&gt;

&lt;h2&gt;
  
  
  Docker Compose
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;services&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;liorandb&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;liorandb/liorandb:pre-alpha&lt;/span&gt;
    &lt;span class="na"&gt;container_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;liorandb-acme&lt;/span&gt;
    &lt;span class="na"&gt;restart&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;unless-stopped&lt;/span&gt;

    &lt;span class="na"&gt;cpus&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;2.0&lt;/span&gt;
    &lt;span class="na"&gt;mem_limit&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;3.5g&lt;/span&gt;

    &lt;span class="na"&gt;environment&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;LIORANDB_TLS_MODE&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;insecure&lt;/span&gt;
      &lt;span class="na"&gt;LIORANDB_GRPC_BIND_ADDR&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;0.0.0.0:27019&lt;/span&gt;
      &lt;span class="na"&gt;LIORANDB_METRICS_ADDR&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;0.0.0.0:27201&lt;/span&gt;

      &lt;span class="na"&gt;LIORANDB_ADVERTISED_HTTP_ADDR&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;acme.db.example.com:443&lt;/span&gt;
      &lt;span class="na"&gt;LIORANDB_ADVERTISED_GRPC_ADDR&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;acme.grpc.example.com:443&lt;/span&gt;

      &lt;span class="na"&gt;LIORANDB_BOOTSTRAP_PASSWORD_FILE&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;/run/liorandb/bootstrap-password.txt&lt;/span&gt;

    &lt;span class="na"&gt;expose&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;27018"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;27019"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;27201"&lt;/span&gt;

    &lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;liorandb-data:/var/lib/liorandb/data&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;./bootstrap-password.txt:/run/liorandb/bootstrap-password.txt:ro&lt;/span&gt;

    &lt;span class="na"&gt;networks&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;public-edge&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;metrics-private&lt;/span&gt;

  &lt;span class="na"&gt;caddy&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;caddy:2&lt;/span&gt;
    &lt;span class="na"&gt;restart&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;unless-stopped&lt;/span&gt;

    &lt;span class="na"&gt;ports&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;80:80"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;443:443"&lt;/span&gt;

    &lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;./Caddyfile:/etc/caddy/Caddyfile:ro&lt;/span&gt;

    &lt;span class="na"&gt;networks&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;public-edge&lt;/span&gt;

&lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;liorandb-data&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;

&lt;span class="na"&gt;networks&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;public-edge&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;

  &lt;span class="na"&gt;metrics-private&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;internal&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Notice what's missing
&lt;/h2&gt;

&lt;p&gt;There is no:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;ports&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;27018:27018"&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;27019:27019"&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;27201:27201"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;on the LioranDB service.&lt;/p&gt;

&lt;p&gt;That's deliberate.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;expose&lt;/code&gt; makes the ports available to services on the Docker network without publishing them directly on the host.&lt;/p&gt;

&lt;h2&gt;
  
  
  Firewall
&lt;/h2&gt;

&lt;p&gt;For a typical Ubuntu deployment, the public firewall should only need the services you intentionally expose, such as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;22   SSH
80   HTTP
443  HTTPS
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Don't casually expose:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;27018
27019
27201
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;to the public internet.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bootstrap password file
&lt;/h2&gt;

&lt;p&gt;Generate a strong secret:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;openssl rand &lt;span class="nt"&gt;-base64&lt;/span&gt; 32
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Store it in:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;bootstrap-password.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then restrict access:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;chmod &lt;/span&gt;600 bootstrap-password.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The container receives it as a read-only mounted file.&lt;/p&gt;

&lt;h2&gt;
  
  
  Deployment flow
&lt;/h2&gt;

&lt;p&gt;Validate your Compose configuration:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker compose config
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Start everything:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker compose up &lt;span class="nt"&gt;-d&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Inspect:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker compose ps
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then verify health/readiness and advertised endpoints before connecting application traffic.&lt;/p&gt;

&lt;h2&gt;
  
  
  Application connection
&lt;/h2&gt;

&lt;p&gt;Your application can then connect through the public TLS endpoint:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;liorandb://admin:&amp;lt;encoded-password&amp;gt;@acme.db.example.com:443/default
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Remember to URL-encode the password.&lt;/p&gt;

&lt;h2&gt;
  
  
  The important boundary
&lt;/h2&gt;

&lt;p&gt;The database is not your public web server.&lt;/p&gt;

&lt;p&gt;Treat the reverse proxy as the edge and keep the database itself on the private network.&lt;/p&gt;

&lt;p&gt;That one architectural decision removes an impressive collection of future headaches.&lt;/p&gt;

&lt;h2&gt;
  
  
  Resources
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Managed Deployment Guide:&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://docs.liorandb.com/docs/deployment/managed" rel="noopener noreferrer"&gt;https://docs.liorandb.com/docs/deployment/managed&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Documentation:&lt;/strong&gt; &lt;a href="https://docs.liorandb.com" rel="noopener noreferrer"&gt;https://docs.liorandb.com&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Website:&lt;/strong&gt; &lt;a href="https://liorandb.com" rel="noopener noreferrer"&gt;https://liorandb.com&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Previous:&lt;/strong&gt; Part 10 → Official CLI&lt;br&gt;
&lt;strong&gt;Next:&lt;/strong&gt; Part 12 → Production Patterns, Diagnostics &amp;amp; What's Next&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
      <category>liorandb</category>
      <category>typescript</category>
      <category>database</category>
      <category>rust</category>
    </item>
    <item>
      <title>LioranDB TypeScript Series #10: Mastering the Official LioranDB CLI</title>
      <dc:creator>Swaraj Puppalwar</dc:creator>
      <pubDate>Sat, 15 Aug 2026 20:13:15 +0000</pubDate>
      <link>https://dev.to/ultrontheai/liorandb-typescript-series-10-mastering-the-official-liorandb-cli-4i24</link>
      <guid>https://dev.to/ultrontheai/liorandb-typescript-series-10-mastering-the-official-liorandb-cli-4i24</guid>
      <description>&lt;h1&gt;
  
  
  LioranDB TypeScript Series #10: Mastering the Official LioranDB CLI
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;LioranDB TypeScript Series:&lt;/strong&gt; Build with a developer-first document database powered by Rust and designed for TypeScript.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Not everything needs a dashboard.&lt;/p&gt;

&lt;p&gt;Sometimes you just want a terminal and a database that listens.&lt;/p&gt;

&lt;p&gt;Meet the official LioranDB CLI.&lt;/p&gt;

&lt;h2&gt;
  
  
  Install
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; @liorandb/cli@1.0.5
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The executable is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;liorandb
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Initialize
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;liorandb init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Configure a connection:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;liorandb &lt;span class="nb"&gt;set &lt;/span&gt;url &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="s2"&gt;"liorandb://admin:YOUR_PASSWORD@127.0.0.1:27018/default"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Authenticate:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;printf&lt;/span&gt; &lt;span class="s1"&gt;'%s'&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$LIORANDB_PASSWORD&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; |
liorandb login admin &lt;span class="nt"&gt;--password-stdin&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Select a database
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;liorandb db use default
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Create a collection:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;liorandb collection create products
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Insert from stdin
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;printf&lt;/span&gt; &lt;span class="s1"&gt;'{"sku":"bk-001","title":"Blue Notebook","active":true}'&lt;/span&gt; |
liorandb insert-one products &lt;span class="nt"&gt;--stdin&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Count:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;liorandb count products
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then jump into the interactive shell:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;liorandb shell
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Profiles
&lt;/h2&gt;

&lt;p&gt;The CLI supports local profiles, which makes switching environments much less painful.&lt;/p&gt;

&lt;p&gt;Think:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;local
staging
production
client-a
client-b
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;instead of repeatedly pasting connection information.&lt;/p&gt;

&lt;h2&gt;
  
  
  Output formats
&lt;/h2&gt;

&lt;p&gt;Automation doesn't want pretty tables.&lt;/p&gt;

&lt;p&gt;Humans often do.&lt;/p&gt;

&lt;p&gt;The CLI supports output modes including:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;table
json
ndjson
quiet
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Global flags include:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;--profile
--url
--output
--json
--quiet
--no-color
--debug
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  What can the CLI control?
&lt;/h2&gt;

&lt;p&gt;Quite a lot.&lt;/p&gt;

&lt;h3&gt;
  
  
  Data
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;db
collection
find
find-one
insert-one
update-one
delete-many
aggregate
count
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Indexes
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;index list
index create
index create-text
index drop
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Authentication
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;login
logout
whoami
sessions
change-password
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Administration
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;user
role
settings
cors
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Operations
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;status
health
doctor
metrics
cluster
backup
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Safety
&lt;/h2&gt;

&lt;p&gt;Destructive commands should be difficult to trigger accidentally.&lt;/p&gt;

&lt;p&gt;Operations such as drops, broad deletions and backup restore/delete flows use confirmation mechanisms unless explicitly overridden where supported.&lt;/p&gt;

&lt;p&gt;That's intentional.&lt;/p&gt;

&lt;p&gt;A CLI should help you operate the database, not speedrun deleting Tuesday.&lt;/p&gt;

&lt;h2&gt;
  
  
  Local state
&lt;/h2&gt;

&lt;p&gt;CLI state is stored under:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.liorandb/state
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can override the location with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;LIORANDB_STATE_DIR
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Passwords are not persisted as ordinary stored profile values.&lt;/p&gt;

&lt;h2&gt;
  
  
  CLI + Driver
&lt;/h2&gt;

&lt;p&gt;The CLI and TypeScript driver aren't competing interfaces.&lt;/p&gt;

&lt;p&gt;A common setup is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Application code
    → @liorandb/driver

Developers / CI / Operations
    → @liorandb/cli
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Use each where it fits best.&lt;/p&gt;

&lt;h2&gt;
  
  
  Resources
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;CLI Documentation:&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://docs.liorandb.com/docs/cli/overview" rel="noopener noreferrer"&gt;https://docs.liorandb.com/docs/cli/overview&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Documentation:&lt;/strong&gt; &lt;a href="https://docs.liorandb.com" rel="noopener noreferrer"&gt;https://docs.liorandb.com&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Website:&lt;/strong&gt; &lt;a href="https://liorandb.com" rel="noopener noreferrer"&gt;https://liorandb.com&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Previous:&lt;/strong&gt; Part 9 → Operations &amp;amp; Backups&lt;br&gt;
&lt;strong&gt;Next:&lt;/strong&gt; Part 11 → Docker Compose, Caddy &amp;amp; TLS&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
      <category>liorandb</category>
      <category>typescript</category>
      <category>database</category>
      <category>rust</category>
    </item>
  </channel>
</rss>
