1<!DOCTYPE html><html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="Astro v6.2.2"><!-- SEO Meta Tags --><!-- Primary Meta Tags --><title>Services - Kunjan Dalal</title><meta name="title" content="Services - Kunjan Dalal"><meta name="description" content="Software architecture, full-stack development, AI/RAG systems, and LegalTech consulting. 18 years of building systems that don't wake you up at 3 AM."><link rel="canonical" href="https://kunjan.in/services/"><!-- Open Graph / Facebook --><meta property="og:type" content="website"><meta property="og:url" content="https://kunjan.in/services/"><meta property="og:title" content="Services - Kunjan Dalal"><meta property="og:description" content="Software architecture, full-stack development, AI/RAG systems, and LegalTech consulting. 18 years of building systems that don't wake you up at 3 AM."><meta property="og:image" content="https://kunjan.in/og-default.png"><meta property="og:site_name" content="Kunjan's Tech Space"><!-- Twitter --><meta property="twitter:card" content="summary_large_image"><meta property="twitter:url" content="https://kunjan.in/services/"><meta property="twitter:title" content="Services - Kunjan Dalal"><meta property="twitter:description" content="Software architecture, full-stack development, AI/RAG systems, and LegalTech consulting. 18 years of building systems that don't wake you up at 3 AM."><meta property="twitter:image" content="https://kunjan.in/og-default.png"><meta name="twitter:creator" content="@kunjee"><!-- JSON-LD Structured Data -->
1<script type="application/ld+json">{"@context":"https://schema.org","@type":"Person","name":"Kunjan's Tech Space","url":"https://kunjan.in","jobTitle":"Software Architect & Consultant","description":"Software architect and consultant specializing in system design, AI/RAG integration, and production-grade applications.","sameAs":["https://github.com/kunjee17","https://twitter.com/kunjee","https://linkedin.com/in/kunjandalal"]}</script>
1<!-- Favicon --><link rel="icon" type="image/gif" href="/favicon.gif"><link rel="apple-touch-icon" href="/apple-touch-icon.png"><!-- Google Analytics -->
vendor: 63 bytes, line 1
1<script async src="https://www.googletagmanager.com/gtag/js?id=
1G-F3VMNQ2JFV
vendor: 11 bytes, line 1
1"></script>
1<script> 2
vendor: 151 bytes, lines 2-7
2window.dataLayer = window.dataLayer || []; 3 function gtag() { 4 dataLayer.push(arguments); 5 } 6 gtag("js", new Date()); 7 gtag("config", "
7G-F3VMNQ2JFV
vendor: 84 bytes, lines 7-11
7", { 8 anonymize_ip: true, 9 cookie_flags: "SameSite=None;Secure", 10 }); 11
11</script>
11<!-- Google AdSense -->
11<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-9262989861643749" crossorigin="anonymous"></script>
11<link rel="stylesheet" href="/_astro/BaseLayout.CLdym_dK.css">
11<script>!(function(w,p,f,c){if(!window.crossOriginIsolated && !navigator.serviceWorker) return;c=w[p]=Object.assign(w[p]||{},{"lib":"/~partytown/","debug":false});c[f]=(c[f]||[]).concat(["dataLayer.push","gtag","adsbygoogle.push"])})(window,'partytown','forward');/* Partytown 0.13.2 - MIT QwikDev */ 12const t={preserveBehavior:!1},e=e=>{if("string"==typeof e)return[e,t];const[n,r=t]=e;return[n,{...t,...r}]},n=Object.freeze((t=>{const e=new Set;let n=[];do{Object.getOwnPropertyNames(n).forEach((t=>{"function"==typeof n[t]&&e.add(t)}))}while((n=Object.getPrototypeOf(n))!==Object.prototype);return Array.from(e)})());!function(t,r,o,i,a,s,c,l,d,p,u=t,f){function h(){f||(f=1,"/"==(c=(s.lib||"/~partytown/")+(s.debug?"debug/":""))[0]&&(d=r.querySelectorAll('script[type="text/partytown"]'),i!=t?i.dispatchEvent(new CustomEvent("pt1",{detail:t})):(l=setTimeout(v,(null==s?void 0:s.fallbackTimeout)||1e4),r.addEventListener("pt0",w),a?y(1):o.serviceWorker?o.serviceWorker.register(c+(s.swPath||"partytown-sw.js"),{scope:c}).then((function(t){t.active?y():t.installing&&t.installing.addEventListener("statechange",(function(t){"activated"==t.target.state&&y()}))}),console.error):v())))}function y(e){p=r.createElement(e?"script":"iframe"),t._pttab=Date.now(),e||(p.style.display="block",p.style.width="0",p.style.height="0",p.style.border="0",p.style.visibility="hidden",p.setAttribute("aria-hidden",!0)),p.src=c+"partytown-"+(e?"atomics.js?v=0.13.2":"sandbox-sw.html?"+t._pttab),r.querySelector(s.sandboxParent||"body").appendChild(p)}function v(n,o){for(w(),i==t&&(s.forward||[]).map((function(n){const[r]=e(n);delete t[r.split(".")[0]]})),n=0;n<d.length;n++)(o=r.createElement("script")).innerHTML=d[n].innerHTML,o.nonce=s.nonce,r.head.appendChild(o);p&&p.parentNode.removeChild(p)}function w(){clearTimeout(l)}s=t.partytown||{},i==t&&(s.forward||[]).map((function(r){const[o,{preserveBehavior:i}]=e(r);u=t,o.split(".").map((function(e,r,o){var a;u=u[o[r]]=r+1<o.length?u[o[r]]||(a=o[r+1],n.includes(a)?[]:{}):(()=>{let e=null;if(i){const{methodOrProperty:n,thisObject:r}=((t,e)=>{let n=t;for(let t=0;t<e.length-1;t+=1)n=n[e[t]];return{thisObject:n,methodOrProperty:e.length>0?n[e[e.length-1]]:void 0}})(t,o);"function"==typeof n&&(e=(...t)=>n.apply(r,...t))}return function(){let n;return e&&(n=e(arguments)),(t._ptf=t._ptf||[]).push(o,arguments),n}})()}))})),"complete"==r.readyState?h():(t.addEventListener("DOMContentLoaded",h),t.addEventListener("load",h))}(window,document,navigator,top,window.crossOriginIsolated);;(e=>{e.addEventListener("astro:before-swap",e=>{let r=document.body.querySelector("iframe[src*='/~partytown/']");if(r)e.newDocument.body.append(r)})})(document);</script>
12</head> <body class="min-h-screen flex flex-col"> <!-- Navigation --> <nav class="navbar bg-base-100 shadow-sm sticky top-0 z-50"> <div class="content-wrapper flex-nowrap"> <div class="navbar-start"> <!-- Mobile menu button --> <div class="dropdown lg:hidden"> <label tabindex="0" class="btn btn-ghost btn-square"> <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" class="inline-block w-6 h-6 stroke-current"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16M4 18h16"></path> </svg> </label> <ul tabindex="0" class="menu menu-sm dropdown-content mt-3 z-[1] p-2 shadow-lg bg-base-100 rounded-box w-52"> <li><a href="/" class="nav-link">Home</a></li> <li><a href="/services" class="nav-link">Services</a></li> <li><a href="/writings" class="nav-link">Writing</a></li> <li><a href="/about" class="nav-link">About</a></li> <li><a href="/contact" class="nav-link">Contact</a></li> </ul> </div> <!-- Logo and site name --> <a href="/" class="btn btn-ghost normal-case text-xl text-display"> <span class="text-script text-2xl">K</span>unjan Dalal 13</a> </div> <!-- Desktop menu --> <div class="navbar-center hidden lg:flex flex-1 justify-center min-w-0"> <ul class="menu menu-horizontal px-1 gap-1 flex-nowrap"> <li class="flex-shrink-0"><a href="/" class="nav-link">Home</a></li> <li class="flex-shrink-0"><a href="/services" class="nav-link">Services</a></li> <li class="flex-shrink-0"><a href="/writings" class="nav-link">Writings</a></li> <li class="flex-shrink-0"><a href="/about" class="nav-link">About</a></li> <li class="flex-shrink-0"><a href="/contact" class="nav-link">Contact</a></li> </ul> </div> <div class="navbar-end gap-2 flex-shrink-0"> <!-- Search button --> <button class="btn btn-ghost btn-square" aria-label="Search" id="search-button"> <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="w-6 h-6"> <path stroke-linecap="round" stroke-linejoin="round" d="M21 21l-5.197-5.197m0 0A7.5 7.5 0 105.196 5.196a7.5 7.5 0 0010.607 10.607z"></path> </svg> </button> <!-- Theme toggle --> <label class="swap swap-rotate btn btn-ghost btn-square"> <input type="checkbox" class="theme-controller" value="kunjan-dark"> <!-- Sun icon --> <svg class="swap-off fill-current w-6 h-6" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"> <path d="M5.64,17l-.71.71a1,1,0,0,0,0,1.41,1,1,0,0,0,1.41,0l.71-.71A1,1,0,0,0,5.64,17ZM5,12a1,1,0,0,0-1-1H3a1,1,0,0,0,0,2H4A1,1,0,0,0,5,12Zm7-7a1,1,0,0,0,1-1V3a1,1,0,0,0-2,0V4A1,1,0,0,0,12,5ZM5.64,7.05a1,1,0,0,0,.7.29,1,1,0,0,0,.71-.29,1,1,0,0,0,0-1.41l-.71-.71A1,1,0,0,0,4.93,6.34Zm12,.29a1,1,0,0,0,.7-.29l.71-.71a1,1,0,1,0-1.41-1.41L17,5.64a1,1,0,0,0,0,1.41A1,1,0,0,0,17.66,7.34ZM21,11H20a1,1,0,0,0,0,2h1a1,1,0,0,0,0-2Zm-9,8a1,1,0,0,0-1,1v1a1,1,0,0,0,2,0V20A1,1,0,0,0,12,19ZM18.36,17A1,1,0,0,0,17,18.36l.71.71a1,1,0,0,0,1.41,0,1,1,0,0,0,0-1.41ZM12,6.5A5.5,5.5,0,1,0,17.5,12,5.51,5.51,0,0,0,12,6.5Zm0,9A3.5,3.5,0,1,1,15.5,12,3.5,3.5,0,0,1,12,15.5Z"></path> </svg> <!-- Moon icon --> <svg class="swap-on fill-current w-6 h-6" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"> <path d="M21.64,13a1,1,0,0,0-1.05-.14,8.05,8.05,0,0,1-3.37.73A8.15,8.15,0,0,1,9.08,5.49a8.59,8.59,0,0,1,.25-2A1,1,0,0,0,8,2.36,10.14,10.14,0,1,0,22,14.05,1,1,0,0,0,21.64,13Zm-9.5,6.69A8.14,8.14,0,0,1,7.08,5.22v.27A10.15,10.15,0,0,0,17.22,15.63a9.79,9.79,0,0,0,2.1-.22A8.11,8.11,0,0,1,12.14,19.73Z"></path> </svg> </label> </div> </div> </nav>
13<script> 14 // Initialize theme from localStorage or system preference 15 (function() { 16 const theme = localStorage.getItem("theme") || 17 (window.matchMedia("(prefers-color-scheme: dark)").matches ? "kunjan-dark" : "kunjan-light"); 18 document.documentElement.setAttribute("data-theme", theme); 19 20 // Theme toggle handler 21 const themeToggle = document.querySelector(".theme-controller"); 22 if (themeToggle) { 23 themeToggle.checked = theme === "kunjan-dark"; 24 themeToggle.addEventListener("change", (e) => { 25 const newTheme = e.target.checked ? "kunjan-dark" : "kunjan-light"; 26 document.documentElement.setAttribute("data-theme", newTheme); 27 localStorage.setItem("theme", newTheme); 28 }); 29 } 30 })(); 31</script>
31
31<script type="module">const e=document.getElementById("search-button");e&&e.addEventListener("click",()=>{const t=document.querySelector("pagefind-ui");t&&t.shadowRoot?.querySelector("input")?.focus()});</script>
31 <!-- Main Content --> <main class="flex-1"> <div class="hero bg-base-200 py-20"> <div class="hero-content text-center"> <div class="max-w-3xl"> <h1 class="text-display text-5xl font-bold mb-4">I build systems that don't wake you up at 3 AM</h1> <p class="text-xl opacity-80">18 years of making mistakes so you don't have to. Expensive, but worth it.</p> </div> </div> </div><article class="content-wrapper py-12"> <div class="max-w-4xl mx-auto"> <section class="mb-16"> <h2 class="text-display text-3xl font-bold mb-8">What I offer</h2> <div class="space-y-12"> <!-- Consulting & Architecture --> <div class="card bg-base-200"> <div class="card-body"> <h3 class="card-title text-display text-2xl mb-4">Architecture & System Design</h3> <div class="space-y-4"> <div> <h4 class="font-semibold mb-2">What you get:</h4> <p class="opacity-80"> 32I'll review your architecture and tell you what's going to break before it costs you money. No sugar-coating. System design, technical strategy, and the kind of honest opinions that save you from expensive mistakes down the line. 33</p> </div> <div> <h4 class="font-semibold mb-2">My approach:</h4> <p class="opacity-80"> 34I've been woken up at 3 AM by production failures. My architectures are designed by someone who's paid the price for bad decisions. I optimize for three things: your AW
34S bill, your sleep schedule, and your sanity when you need to change something six months from now. 35</p> </div> <div> <h4 class="font-semibold mb-2">Good fit for:</h4> <ul class="list-disc list-inside opacity-80 space-y-1"> <li>Companies where downtime costs actual money</li> <li>Teams stuck with legacy systems that need evolution, not rewrite</li> <li>CTOs who want a technical sounding board, not a yes-man</li> <li>Organizations where "move fast and break things" has lost its charm</li> </ul> </div> </div> </div> </div> <!-- Full-stack Delivery --> <div class="card bg-base-200"> <div class="card-body"> <h3 class="card-title text-display text-2xl mb-4">Full-Stack Development</h3> <div class="space-y-4"> <div> <h4 class="font-semibold mb-2">What you get:</h4> <p class="opacity-80"> 36End-to-end systems built with functional programming principles. From frontend to backend to infrastructure, with proper testing, monitoring, and documentation. The kind of code you won't be embarrassed to maintain in year three. 37</p> </div> <div> <h4 class="font-semibold mb-2">Technology stack:</h4> <p class="opacity-80"> <strong>Frontend:</strong> React, Next.js, Astro, Alpine, Angular, SolidJS. <strong>Backend:</strong> F#, Scala (cats/zio), Rust, TypeScript with effect systems (Effect-TS, fp-ts). <strong>Cloud:</strong> Azure, AWS. <strong>Tooling:</strong> Monorepos (Turbo, Nx) for teams that actually need to coordinate. I choose technologies based on your constraints, not Twitter trends. 38</p> </div> <div> <h4 class="font-semibold mb-2">Good fit for:</h4> <ul class="list-disc list-inside opacity-80 space-y-1"> <li>Systems that need to scale without turning into a maintenance nightmare</li> <li>Teams who care about type safety and don't want to debug undefined at 2 AM</li> <li>Projects where functional programming actually makes sense (not everything needs monads)</li> <li>Organizations tired of "it works on my machine"</li> </ul> </div> </div> </div> </div> <!-- AI & RAG Integration --> <div class="card bg-base-200"> <div class="card-body"> <h3 class="card-title text-display text-2xl mb-4">AI & RAG Systems</h3> <div class="space-y-4"> <div> <h4 class="font-semibold mb-2">What you get:</h4> <p class="opacity-80"> 39RAG systems that actually work, LLM integrations that don't bankrupt you, and AI strategy that's grounded in reality. I'll help you figure out what AI can actually do for your business versus what the hype cycle promises. 40</p> </div> <div> <h4 class="font-semibold mb-2">My approach:</h4> <p class="opacity-80"> 41AI is a tool, not magic. If someone promises you AGI in your CRM, run. I focus on boring, proven patterns: embedding pipelines that work, retrieval that's fast enough, prompts that don't hallucinate your business into legal trouble. Cost-effective solutions with realistic ROI expectations. 42</p> </div> <div> <h4 class="font-semibold mb-2">Good fit for:</h4> <ul class="list-disc list-inside opacity-80 space-y-1"> <li>Companies tired of AI demos that never make it to production</li> <li>Organizations that need RAG systems with actual retrieval quality</li> <li>Teams who want to understand their LLM costs before the bill arrives</li> <li>Businesses exploring AI without drinking the Kool-Aid</li> </ul> </div> </div> </div> </div> <!-- LegalTech Consulting --> <div class="card bg-base-200"> <div class="card-body"> <h3 class="card-title text-display text-2xl mb-4">LegalTech & Compliance Systems</h3> <div class="space-y-4"> <div> <h4 class="font-semibold mb-2">What you get:</h4> <p class="opacity-80"> 43Software architecture for legal systems, compliance platforms, contract management, and legal document processing. I understand both the technical architecture and the legal requirements â completed my LLB in 2025, because apparently 18 years of software wasn't enough. 44</p> </div> <div> <h4 class="font-semibold mb-2">My approach:</h4> <p class="opacity-80"> 45Most developers don't understand legal requirements. Most lawyers don't understand software architecture. I speak both languages. I've designed systems that process health data, financial transactions, and legal documents â domains where mistakes aren't just expensive, they're liability. 46</p> </div> <div> <h4 class="font-semibold mb-2">Good fit for:</h4> <ul class="list-disc list-inside opacity-80 space-y-1"> <li>Law firms modernizing their practice management systems</li> <li>Companies building compliance or contract management platforms</li> <li>Organizations that need someone who understands both code and law</li> <li>LegalTech startups tired of explaining legal concepts to developers</li> </ul> </div> </div> </div> </div> <!-- System Reviews --> <div class="card bg-base-200"> <div class="card-body"> <h3 class="card-title text-display text-2xl mb-4">System Reviews & Audits</h3> <div class="space-y-4"> <div> <h4 class="font-semibold mb-2">What you get:</h4> <p class="opacity-80"> 47Honest architecture audits that tell you what's actually going to fail. I'll review your code, infrastru
47cture, and decisions, then deliver a report with the things that will cost you money if you ignore them. Prioritized by "fix this now" vs "fix this before your Series B." 48</p> </div> <div> <h4 class="font-semibold mb-2">Deliverable:</h4> <p class="opacity-80"> 49A detailed report you can actually act on: findings ranked by risk and cost, recommendations that consider your constraints, and an implementation roadmap that doesn't assume unlimited budget. No consultant speak, just what needs to happen. 50</p> </div> <div> <h4 class="font-semibold mb-2">Good fit for:</h4> <ul class="list-disc list-inside opacity-80 space-y-1"> <li>Due diligence before acquisition (someone needs to read that code)</li> <li>Pre-funding tech assessment (VCs will ask someone, might as well be someone honest)</li> <li>Production systems that make you nervous</li> <li>Second opinions when your gut says something's wrong</li> </ul> </div> </div> </div> </div> </div> </section> <section class="mb-16"> <h2 class="text-display text-3xl font-bold mb-8">How engagements work</h2> <div class="prose-custom"> <p> 51Fixed-term contracts, typically 1-6 months. Clear deliverables. No surprises. For longer projects, rolling 3-month commitments with quarterly reviews â because no one actually knows what they'll need a year from now. 52</p> <h3>Process:</h3> <ol> <li><strong>Discovery call:</strong> 30 minutes to discuss your needs and see if we're a fit. Free, because I'm not going to charge you to figure out if I can help.</li> <li><strong>Proposal:</strong> Detailed scope, timeline, and cost. No hidden fees, no "it depends" pricing.</li> <li><strong>Engagement:</strong> Regular check-ins, transparent communication, and honest updates when things change (they always do).</li> <li><strong>Delivery:</strong> Working software, documentation that doesn't lie, and knowledge transfer so you're not stuck calling me forever.</li> </ol> <p>
52I don't do one-night stands. If your codebase will be in production for years, let's build something that won't embarrass you in year three. Many of my clients stick around because maintenance is cheaper when things are built right.</p> </div> </section> <section class="mb-16"> <h2 class="text-display text-3xl font-bold mb-8">Are we a good fit?</h2> <div class="grid grid-cols-1 md:grid-cols-2 gap-8"> <!-- Good Fit --> <div class="card bg-success/10 border border-success/20"> <div class="card-body"> <h3 class="card-title text-success">â Yes, if you:</h3> <ul class="space-y-2 opacity-80"> <li>⢠Care more about systems that work than systems that ship fast</li> <li>⢠Think about your AWS bill and maintenance costs</li> <li>⢠Want pragmatic trade-offs, not architectural purity</li> <li>⢠Need someone who'll tell you when your ideas are bad</li> <li>⢠Build systems where downtime costs actual money</li> <li>⢠Understand that good work isn't cheap</li> </ul> </div> </div> <!-- Not a Fit --> <div class="card bg-error/10 border border-error/20"> <div class="card-body"> <h3 class="card-title text-error">â No, if you:</h3> <ul class="space-y-2 opacity-80"> <li>⢠Need it shipped yesterday, quality be damned</li> <li>⢠Want the cheapest developer you can find</li> <li>⢠Chase whatever's trending on Hacker News</li> <li>⢠Just need someone who says yes to everything</li> <li>⢠Think technical expertise is a commodity</li> <li>⢠Expect free "quick questions" to turn into free consulting</li> </ul> </div> </div> </div> </section> <section class="mb-16"> <h2 class="text-display text-3xl font-bold mb-8">Why I'm expensive</h2> <div class="prose-custom"> <p> 53I'm not cheap. You're not paying for my time â you're paying for 18 years of experience, production scars, and the mistakes I've already made so you don't have to. You're paying for someone who knows what breaks at 3 AM because they've been woken up by those failures. 54</p> <p>My rates reflect:</p> <ul> <li>18 years of building, breaking, and fixing production systems</li> <li>Architecture knowledge that prevents expensive mistakes (cheaper than the alternative)</li> <li>Legal background (LLB 2025) for compliance-heavy domains</li> <li>Deep expertise in functional programming, not just following tutorials</li> <li>Honest opinions, even when you don't want to hear them</li> <li>Ownership of outcomes â if it fails, I own it</li> </ul> <p> 55Rates vary by project scope and duration. Contact me for a quote. If you're looking for the cheapest option, you're looking in the wrong place. 56</p> </div> </section> <section class="mb-16"> <h2 class="text-display text-3xl font-bold mb-8">Quick consultation</h2> <div class="card bg-base-200"> <div class="card-body"> <p class="mb-4"> 57Need a quick consultation or second opinion? Book a paid session via Topmate: 58</p> <!-- Topmate widget iframe --> <div class="aspect-video w-full max-w-2xl mx-auto"> <iframe src="https://topmate.io/embed/profile/kunjee?theme=D5534D" frameborder="0" width="100%" height="500" style="border-radius: 8px;"></iframe> </div> <p class="text-sm opacity-70 mt-4 text-center"> 59Sessions are 30-60 minutes. Serious inquiries only, please. 60</p> </div> </div> </section> <section class="text-center bg-base-200 rounded-lg p-12"> <h2 class="text-display text-3xl font-bold mb-4">Ready to get started?</h2> <p class="text-xl opacity-80 mb-8"> 61Let's discuss your project and see if we're a good fit. 62</p> <a href="/contact" class="btn btn-primary btn-lg"> 63Get in touch 64</a> </section> </div> </article> </main> <!-- Footer --> <footer class="footer footer-center bg-base-200 text-base-content p-10 mt-20"> <div class="content-wrapper"> <!-- Main footer content --> <div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-8 w-full max-w-5xl mx-auto"> <!-- About section --> <div class="text-left"> <h3 class="text-display text-lg font-semibold mb-4">Kunjan Dalal</h3> <p class="text-sm opacity-80"> 65Software Architect & Product Advisor. Advising on production systems with boring reliability and pragmatic trade-offs. 66</p> </div> <!-- Writing links --> <div class="text-left"> <h3 class="text-display text-lg font-semibold mb-4">Writing Links</h3> <nav class="flex flex-col gap-2"> <a href="/writings" class="link link-hover text-sm">Writings</a> <a href="/archives" class="link link-hover text-sm">Archives</a> <a href="/categories" class="link link-hover text-sm">Categories</a> <a href="/tags" class="link link-hover text-sm">Tags</a> </nav> </div> <!-- Quick links --> <div class="text-left"> <h3 class="text-display text-lg font-semibold mb-4">Quick Links</h3> <nav class="flex flex-col gap-2"> <a href="/services" class="link link-hover text-sm">Services</a> <a href="/about" class="link link-hover text-sm">About</a> <a href="/contact" class="link link-hover text-sm">Contact</a> </nav> </div> <!-- Legal links --> <div class="text-left"> <h3 class="text-display text-lg font-semibold mb-4">Legal</h3> <nav class="flex flex-col gap-2"> <a href="/privacy-policy" class="link link-hover text-sm">Privacy Policy</a> <a href="/terms-of-service" class="link link-hover text-sm">Terms of Service</a> </nav> </div> <!-- Connect section --> <div class="text-left"> <h3 class="text-display text-lg font-semibold mb-4">Connect</h3> <div class="flex gap-4"> <a href="https://github.com/kunjee17" target="_blank" rel="noopener noreferrer" class="btn btn-ghost btn-square btn-sm" aria-label="GitHub"> <svg class="w-5 h-5" fill="currentColor" viewBox="0 0 24 24"> <path d="M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z"></path> </svg> </a> <a href="https://twitter.com/kunjee" target="_blank" rel="noopener noreferrer" class="btn btn-ghost btn-square btn-sm" aria-label="Twitter"> <svg class="w-5 h-5" fill="currentColor" viewBox="0 0 24 24"> <path d="M23 3a10.9 10.9 0 01-3.14 1.53 4.48 4.48 0 00-7.86 3v1A10.66 10.66 0 013 4s-4 9 5 13a11.64 11.64 0 01-7 2c9 5 20 0 20-11.5a4.5 4.5 0 00-.08-.83A7.72 7.72 0 0023 3z"></path> </svg> </a> <a href="https://linkedin.com/in/kunjandalal" target="_blank" rel="noopener noreferrer" class="btn btn-ghost btn-square btn-sm" aria-label="LinkedIn"> <svg class="w-5 h-5" fill="currentColor" viewBox="0 0 24 24"> <path d="M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433c-1.144 0-2.063-.926-2.063-2.065 0-1.138.92-2.063 2.063-2.063 1.14 0 2.064.925 2.064 2.063 0 1.139-.925 2.065-2.064 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z"></path> </svg> </a> </div> <div class="mt-4 text-sm"> <a href="mailto:null" class="link link-hover"> </a> </div> </div> </div> <!-- Bottom section --> <div class="divider"></div> <div class="flex flex-col sm:flex-row justify-center items-center w-full max-w-5xl mx-auto gap-4"> <p class="text-sm opacity-70"> 67© 2026 Kunjan Dalal. All rights reserved. 68</p> </div> </div> </footer> <!-- Search Modal --> <div id="pagefind-search" class="pagefind-ui-container"></div>
68<script type="module">typeof window<"u"&&(document.addEventListener("click",e=>{const t=e.target;if(t.id==="search-button"||t.closest("#search-button")){e.preventDefault();const n=document.getElementById("pagefind-search");n&&(n.classList.toggle("active"),setTimeout(()=>{n.querySelector("input")?.focus()},100))}}),document.addEventListener("keydown",e=>{if(e.key==="Escape"){const t=document.getElementById("pagefind-search");t&&t.classList.contains("active")&&t.classList.remove("active")}}),document.addEventListener("click",e=>{const t=document.getElementById("pagefind-search"),n=e.target;t&&t.classList.contains("active")&&!t.contains(n)&&!n.closest("#search-button")&&t.classList.remove("active")}));</script>
68 <!-- Pagefind UI --> <link href="/pagefind/pagefind-ui.css" rel="stylesheet">
68<script src="/pagefind/pagefind-ui.js"></script>
68
68<script type="module">window.addEventListener("DOMContentLoaded",()=>{const e=document.getElementById("pagefind-search");e&&new PagefindUI({element:e,showImages:!1,showSubResults:!0,excerptLength:30})});</script>
68 </body> </html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.