PageSourceSearch

https://www.kishans.in/contact

html kishans.in collected 2026-10-01 14:02:31 UTC 21,997 bytes, 131 lines download raw bytes

1<!DOCTYPE html><html lang="en" class="no-js" data-astro-cid-ju4pidww><head><meta name="astro-view-transitions-enabled" content="true"><meta name="astro-view-transitions-fallback" content="animate">
1<script type="module" src="/_astro/ClientRouter.astro_astro_type_script_index_0_lang.XvdBj9Ef.js"></script>
1<meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><!-- Theme init: applies before paint to avoid a flash of the wrong theme.
2         Runs on first load, on every View Transition swap, and on OS theme change. -->
2<script>
3      (() => {
4        const STORAGE_KEY = "theme";
5        const applyTheme = () => {
6          const stored = localStorage.getItem(STORAGE_KEY);
7          const prefersDark = window.matchMedia(
8            "(prefers-color-scheme: dark)",
9          ).matches;
10          // Default (no stored choice) is light; only follow the OS when the
11          // visitor has explicitly picked "system".
12          const isDark =
13            stored === "dark" || (stored === "system" && prefersDark);
14          document.documentElement.classList.toggle("dark", isDark);
15          document
16            .querySelector('meta[name="theme-color"]')
17            ?.setAttribute("content", isDark ? "#0a0a0a" : "#ffffff");
18        };
19        applyTheme();
20        // Re-apply after Astro swaps the DOM on client-side navigation.
21        document.addEventListener("astro:after-swap", applyTheme);
22        // Live-update while following the OS (no explicit preference stored).
23        window
24          .matchMedia("(prefers-color-scheme: dark)")
25          .addEventListener("change", () => {
26            if (localStorage.getItem(STORAGE_KEY) === "system") applyTheme();
27          });
28      })();
29    </script>
29<link rel="icon" type="image/svg+xml" href="/favicon.svg"><link rel="alternate icon" type="image/png" href="/favicon.ico"><meta name="generator" content="Astro v7.0.6"><title>Contact Kishan Kumar | Product Engineer</title><meta name="description" content="Contact Kishan Kumar to discuss AI agent systems, developer tools, native apps, or full-stack product engineering."><link rel="canonical" href="https://www.kishans.in/contact/"><!-- Open Graph / Facebook --><meta property="og:type" content="website"><meta property="og:url" content="https://www.kishans.in/contact/"><meta property="og:title" content="Contact Kishan Kumar | Product Engineer"><meta property="og:description" content="Contact Kishan Kumar to discuss AI agent systems, developer tools, native apps, or full-stack product engineering."><meta property="og:image" content="https://www.kishans.in/assets/kishans-og-banner.png"><meta property="og:site_name" content="Kishan Kumar - Product Engineer"><!-- Twitter --><meta name="twitter:card" content="summary_large_image"><meta name="twitter:url" content="https://www.kishans.in/contact/"><meta name="twitter:title" content="Contact Kishan Kumar | Product Engineer"><meta name="twitter:description" content="Contact Kishan Kumar to discuss AI agent systems, developer tools, native apps, or full-stack product engineering."><meta name="twitter:image" content="https://www.kishans.in/assets/kishans-og-banner.png"><meta name="twitter:creator" content="@jst_kishan"><!-- Additional SEO tags --><meta name="author" content="Kishan Kumar"><meta name="robots" content="index, follow"><meta name="keywords" content="product engineer, AI agents, AI tools, web development, native macOS apps, performance optimization, Plivo"><!-- Theme Color --><meta name="theme-color" content="#ffffff">
29<script type="module">document.documentElement.classList.remove(`no-js`);</script>
29<link rel="stylesheet" href="/_astro/global.B9Cu81FO.css"><style>.astro-route-announcer{clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;top:0;left:0;overflow:hidden}html.dark{background-color:hsl(var(--background));color:hsl(var(--foreground))}html{scroll-behavior:smooth}html.no-js #homepage[data-astro-cid-ju4pidww]{opacity:1!important}
30</style>
30<script type="module" src="/_astro/page.BNgT0lHs.js"></script>
30<script>window.va = window.va || function () { (window.vaq = window.vaq || []).push(arguments); };
31		var script = document.createElement('script');
32		script.defer = true;
33		script.src = '/_vercel/insights/script.js';
34		var head = document.querySelector('head');
35		head.appendChild(script);
36	</script>
36</head><body data-astro-cid-ju4pidww><nav class="flex flex-col sm:flex-row justify-between items-center container my-8 sm:my-12"><a href="/" class="font-semibold mb-4 sm:mb-0 font-mono">KK</a><div class="flex gap-4 sm:gap-5 text-sm font-semibold font-mono"><a data-astro-prefetch="viewport" href="/#projects">Projects</a><a data-astro-prefetch="viewport" href="/blogs">Writings</a><a data-astro-prefetch="viewport" href="/contact">Contact</a></div></nav><div class="mb-12 sm:mb-20 min-h-screen"><div class="container mb-8 sm:mb-12"><h1 class="text-3xl sm:text-4xl font-bold text-foreground">Contact</h1><p class="text-lg sm:text-xl text-foreground/80 mt-3">Book a slot with me to discuss your project or just to say hi.</p></div><div class="min-h-[570px]"><!-- Cal inline embed code begins --><div style="width:100%;height:570px;overflow:scroll" id="my-cal-inline"></div>
36<script>
37  (function () {
38    var themeObserver;
39
40    // Mirror the site theme (the .dark class on <html>) rather than the OS,
41    // so the widget follows the in-app switcher, not just prefers-color-scheme.
42    function currentTheme() {
43      return document.documentElement.classList.contains("dark")
44        ? "dark"
45        : "light";
46    }
47
48    function applyCalTheme() {
49      if (!window.Cal || !Cal.ns || !Cal.ns["15min"]) return;
50      var theme = currentTheme();
51      Cal.ns["15min"]("ui", {
52        theme: theme,
53        styles: {
54          branding: { brandColor: theme === "dark" ? "#ffffff" : "#000000" },
55        },
56        hideEventTypeDetails: false,
57        layout: "month_view",
58      });
59    }
60
61    function initCal() {
62      var container = document.getElementById("my-cal-inline");
63      if (!container) return;
64
65      window.Cal = undefined;
66      var scripts = document.querySelectorAll(
67        'script[src*="cal.com/embed/embed.js"]'
68      );
69      for (var i = 0; i < scripts.length; i++) {
70        scripts[i].remove();
71      }
72
73      (function (C, A, L) {
74        var p = function (a, ar) {
75          a.q.push(ar);
76        };
77        var d = C.document;
78        C.Cal =
79          C.Cal ||
80          function () {
81            var cal = C.Cal;
82            var ar = arguments;
83            if (!cal.loaded) {
84              cal.ns = {};
85              cal.q = cal.q || [];
86              d.head.appendChild(d.createElement("script")).src = A;
87              cal.loaded = true;
88            }
89            if (ar[0] === L) {
90              function api() {
91                p(api, arguments);
92              }
93              var namespace = ar[1];
94              api.q = api.q || [];
95              if (typeof namespace === "string") {
96                cal.ns[namespace] = cal.ns[namespace] || api;
97                p(cal.ns[namespace], ar);
98                p(cal, ["initNamespace", namespace]);
99              } else p(cal, ar);
100              return;
101            }
102            p(cal, ar);
103          };
104      })(window, "https://app.cal.com/embed/embed.js", "init");
105
106      var theme = currentTheme();
107      Cal("init", "15min", { origin: "https://cal.com" });
108      Cal.ns["15min"]("inline", {
109        elementOrSelector: "#my-cal-inline",
110        config: { layout: "month_view", theme: theme },
111        calLink: "jst-kishan/15min",
112      });
113      applyCalTheme();
114
115      // Re-theme the widget whenever the site theme toggles.
116      if (themeObserver) themeObserver.disconnect();
117      themeObserver = new MutationObserver(applyCalTheme);
118      themeObserver.observe(document.documentElement, {
119        attributes: true,
120        attributeFilter: ["class"],
121      });
122    }
123
124    document.addEventListener("astro:page-load", initCal);
125  })();
126</script>
126<!-- Cal inline embed code ends --></div><div class="container"><p class="text-lg sm:text-xl text-foreground/80">Or, you can reach me using one of these.</p><div class="grid grid-cols-1 sm:grid-cols-2 my-6 sm:my-8 gap-4 sm:gap-6"><a href="mailto:[email protected][email protected]&subject=Hey%20Kishan%2C%20we%20have%20some%20exciting%20opportunity%20for%20you" class="text-base sm:text-lg text-foreground/80"><div><h2 class="text-xl sm:text-2xl font-bold text-foreground">Email</h2>[email protected]</div></a><a href="https://twitter.com/jst_kishan" target="_blank"><div><h2 class="text-xl sm:text-2xl font-bold text-foreground">Twitter</h2><p class="text-foreground/80">@jst_kishan</p></div></a><a href="https://github.com/kishanhitk" target="_blank"><div><h2 class="text-xl sm:text-2xl font-bold text-foreground">Github</h2><p class="text-foreground/80">git/kishanhitk</p></div></a><a href="https://www.linkedin.com/in/kishanju/" target="_blank"><div><h2 class="text-xl sm:text-2xl font-bold text-foreground">LinkedIn</h2><p class="text-foreground/80">in/kishanju</p></div></a></div></div></div><footer class="container my-5 text-sm text-muted-foreground"><div class="flex flex-col gap-3 border-t border-border/60 py-5 sm:flex-row sm:items-center sm:justify-between"><p>Request an AI summary of Kishan's work</p><div class="flex items-center gap-3"><a class="rounded-md p-1 transition-opacity hover:opacity-60 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring" href="https://chatgpt.com/?q=Summarize%20Kishan%20Kumar's%20portfolio%20(https%3A%2F%2Fwww.kishans.in)%20for%20a%20first-time%20visitor.%20Explain%20his%20background%2C%20strongest%20technical%20areas%2C%20selected%20projects%2C%20writing%2C%20and%20how%20to%20contact%20him.%20Include%20Suniye%20(https%3A%2F%2Fsuniye.app)%20and%20explain%20what%20it%20does.%20Use%20only%20information%20from%20the%20provided%20sites%20and%20their%20linked%20pages.%20Clearly%20distinguish%20stated%20facts%20from%20reasonable%20inferences.%20Keep%20it%20concise." rel="noopener noreferrer" target="_blank" aria-label="Request an AI summary of Kishan's work with ChatGPT"><img src="https://static.levels.fyi/ai/openai.svg" alt="ChatGPT" class="h-6 w-6 object-contain dark:invert" loading="lazy" decoding="async"></a><a class="rounded-md p-1 transition-opacity hover:opacity-60 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring" href="https://claude.ai/new?q=Summarize%20Kishan%20Kumar's%20portfolio%20(https%3A%2F%2Fwww.kishans.in)%20for%20a%20first-time%20visitor.%20Explain%20his%20background%2C%20strongest%20technical%20areas%2C%20selected%20projects%2C%20writing%2C%20and%20how%20to%20contact%20him.%20Include%20Suniye%20(https%3A%2F%2Fsuniye.app)%20and%20explain%20what%20it%20does.%20Use%20only%20information%20from%20the%20provided%20sites%20and%20their%20linked%20pages.%20Clearly%20distinguish%20stated%20facts%20from%20reasonable%20inferences.%20Keep%20it%20concise." rel="noopener noreferrer" target="_blank" aria-label="Request an AI summary of Kishan's work with Claude"><img src="https://static.levels.fyi/ai/claude.svg" alt="Claude" class="h-6 w-6 object-contain dark:invert" loading="lazy" decoding="async"></a><a class="rounded-md p-1 transition-opacity hover:opacity-60 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring" href="https://www.google.com/search?udm=50&amp;source=searchlabs&amp;q=Summarize%20Kishan%20Kumar's%20portfolio%20(https%3A%2F%2Fwww.kishans.in)%20for%20a%20first-time%20visitor.%20Explain%20his%20background%2C%20strongest%20technical%20areas%2C%20selected%20projects%2C%20writing%2C%20and%20how%20to%20contact%20him.%20Include%20Suniye%20(https%3A%2F%2Fsuniye.app)%20and%20explain%20what%20it%20does.%20Use%20only%20information%20from%20the%20provided%20sites%20and%20their%20linked%20pages.%20Clearly%20distinguish%20stated%20facts%20from%20reasonable%20inferences.%20Keep%20it%20concise." rel="noopener noreferrer" target="_blank" aria-label="Request an AI summary of Kishan's work with Gemini"><img src="https://static.levels.fyi/ai/gemini.svg" alt="Gemini" class="h-6 w-6 object-contain dark:invert" loading="lazy" decoding="async"></a><a class="rounded-md p-1 transition-opacity hover:opacity-60 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring" href="https://grok.com/?q=Summarize%20Kishan%20Kumar's%20portfolio%20(https%3A%2F%2Fwww.kishans.in)%20for%20a%20first-time%20visitor.%20Explain%20his%20background%2C%20strongest%20technical%20areas%2C%20selected%20projects%2C%20writing%2C%20and%20how%20to%20contact%20him.%20Include%20Suniye%20(https%3A%2F%2Fsuniye.app)%20and%20explain%20what%20it%20does.%20Use%20only%20information%20from%20the%20prov
126ided%20sites%20and%20their%20linked%20pages.%20Clearly%20distinguish%20stated%20facts%20from%20reasonable%20inferences.%20Keep%20it%20concise." rel="noopener noreferrer" target="_blank" aria-label="Request an AI summary of Kishan's work with Grok"><img src="https://static.levels.fyi/ai/grok.svg" alt="Grok" class="h-6 w-6 object-contain dark:invert" loading="lazy" decoding="async"></a><a class="rounded-md p-1 transition-opacity hover:opacity-60 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring" href="https://www.perplexity.ai/?q=Summarize%20Kishan%20Kumar's%20portfolio%20(https%3A%2F%2Fwww.kishans.in)%20for%20a%20first-time%20visitor.%20Explain%20his%20background%2C%20strongest%20technical%20areas%2C%20selected%20projects%2C%20writing%2C%20and%20how%20to%20contact%20him.%20Include%20Suniye%20(https%3A%2F%2Fsuniye.app)%20and%20explain%20what%20it%20does.%20Use%20only%20information%20from%20the%20provided%20sites%20and%20their%20linked%20pages.%20Clearly%20distinguish%20stated%20facts%20from%20reasonable%20inferences.%20Keep%20it%20concise." rel="noopener noreferrer" target="_blank" aria-label="Request an AI summary of Kishan's work with Perplexity"><img src="https://static.levels.fyi/ai/perplexity.svg" alt="Perplexity" class="h-6 w-6 object-contain dark:invert" loading="lazy" decoding="async"></a></div></div><div class="flex flex-col gap-4 border-t border-border/60 pt-5 sm:flex-row sm:items-center sm:justify-between"><p>&copy; 2026 Kishan</p><div class="flex items-center gap-4 sm:gap-5"><a class="transition-colors hover:text-foreground" rel="noopener noreferrer" target="_blank" href="https://github.com/kishanhitk/kishans.in">View Source</a><style>astro-island,astro-slot,astro-static-slot{display:contents}</style>
126<script>(()=>{var e=async t=>{await(await t())()};(self.Astro||(self.Astro={})).load=e;window.dispatchEvent(new Event("astro:load"));})();</script>
126<script>(()=>{var g=Object.defineProperty;var w=(c,s,d)=>s in c?g(c,s,{enumerable:!0,configurable:!0,writable:!0,value:d}):c[s]=d;var l=(c,s,d)=>w(c,typeof s!="symbol"?s+"":s,d);var E=new Set(["__proto__","constructor","prototype"]);{let c={0:t=>y(t),1:t=>d(t),2:t=>new RegExp(t),3:t=>new Date(t),4:t=>new Map(d(t)),5:t=>new Set(d(t)),6:t=>BigInt(t),7:t=>new URL(t),8:t=>new Uint8Array(t),9:t=>new Uint16Array(t),10:t=>new Uint32Array(t),11:t=>Number.POSITIVE_INFINITY*t},s=t=>{let[p,e]=t;return p in c?c[p](e):void 0},d=t=>t.map(s),y=t=>typeof t!="object"||t===null?t:Object.fromEntries(Object.entries(t).map(([p,e])=>[p,s(e)]));class f extends HTMLElement{constructor(){super(...arguments);l(this,"Component");l(this,"hydrator");l(this,"hydrate",async()=>{var b;if(!this.hydrator||!this.isConnected)return;let e=(b=this.parentElement)==null?void 0:b.closest("astro-island[ssr]");if(e){e.addEventListener("astro:hydrate",this.hydrate,{once:!0});return}let n=this.querySelectorAll("astro-slot"),r={},i=this.querySelectorAll("template[data-astro-template]");for(let o of i){let a=o.closest(this.tagName);a!=null&&a.isSameNode(this)&&(r[o.getAttribute("data-astro-template")||"default"]=o.innerHTML,o.remove())}for(let o of n){let a=o.closest(this.tagName);a!=null&&a.isSameNode(this)&&(r[o.getAttribute("name")||"default"]=o.innerHTML)}let u;try{u=this.hasAttribute("props")?y(JSON.parse(this.getAttribute("props"))):{}}catch(o){let a=this.getAttribute("component-url")||"<unknown>",v=this.getAttribute("component-export");throw v&&(a+=` (export ${v})`),console.error(`[hydrate] Error parsing props for component ${a}`,this.getAttribute("props"),o),o}let h;await this.hydrator(this)(this.Component,u,r,{client:this.getAttribute("client")}),this.removeAttribute("ssr"),this.dispatchEvent(new CustomEvent("astro:hydrate"))});l(this,"unmount",()=>{this.isConnected||this.dispatchEvent(new CustomEvent("astro:unmount"))})}disconnectedCallback(){document.removeEventListener("astro:after-swap",this.unmount),document.addEventListener("astro:after-swap",this.unmount,{once:!0})}connectedCallback(){if(!this.hasAttribute("await-children")||document.readyState==="interactive"||document.readyState==="complete")this.childrenConnectedCallback();else{let e=()=>{document.removeEventListener("DOMContentLoaded",e),n.disconnect(),this.childrenConnectedCallback()},n=new MutationObserver(()=>{var r;((r=this.lastChild)==null?void 0:r.nodeType)===Node.COMMENT_NODE&&this.lastChild.nodeValue==="astro:end"&&(this.lastChild.remove(),e())});n.observe(this,{childList:!0}),document.addEventListener("DOMContentLoaded",e)}}async childrenConnectedCallback(){let e=this.getAttribute("before-hydration-url");e&&await import(e),this.start()}getRetryImportUrl(e){let n=new URL(e,document.baseURI),r=`astro-retry=${Date.now()}`,i=n.hash.replace(/^#/,"");return n.hash=i?`${i}&${r}`:r,n.toString()}async importWithRetry(e){try{return await import(e)}catch(n){return await new Promise(r=>setTimeout(r,1e3)),import(this.getRetryImportUrl(e))}}handleHydrationError(e){let n=this.getAttribute("component-url"),r=new CustomEvent("astro:hydration-error",{cancelable:!0,bubbles:!0,composed:!0,detail:{error:e,componentUrl:n}});this.dispatchEvent(r)&&console.error(`[astro-island] Error hydrating ${n}`,e)}async start(){let e=JSON.parse(this.getAttribute("opts")),n=this.getAttribute("client");if(Astro[n]===void 0){window.addEventListener(`astro:${n}`,()=>this.start(),{once:!0});return}try{await Astro[n](async()=>{let r=this.getAttribute("renderer-url");try{let[i,{default:u}]=await Promise.all([this.importWithRetry(this.getAttribute("component-url")),r?this.importWithRetry(r):Promise.resolve({default:()=>()=>{}})]),h=this.getAttribute("component-export")||"default";if(h.includes(".")){this.Component=i;for(let m of h.split(".")){if(E.has(m)||!this.Component||typeof this.Component!="object"&&typeof this.Component!="function"||!Object.hasOwn(this.Component,m))throw new Error(`Invalid component export path: ${h}`);this.Component=this.Component[m]}}else{if(E.has(h))throw new Error(`Invalid component export path: ${h}`);this.Component=i[h]}return this.hydrator=u,this.hydrate}catch(i){return this.handleHydrationError(i),()=>{}}},e,this)}catch(r){this.handleHydrationError(r)}}attributeChangedCallback(){this.hydrate()}}l(f,"observedAttributes",["props"]),customElements.get("astro-island")||customElements.define("astro-island",f)}})();</script>
126<astro-island uid="Z1i6bhO" prefix="r1" component-url="/_astro/ThemeSwitcher.DOrp8TA4.js" component-export="default" renderer-url="/_astro/client.Bv3O21T9.js" props="{}" ssr client="load" opts="{&quot;name&quot;:&quot;ThemeSwitcher&quot;,&quot;value&quot;:true}" await-children><div role="radiogroup" aria-label="Theme" class="inline-flex items-center gap-0.5 rounded-full border border-border p-0.5"><button type="button" role="radio" aria-checked="false" aria-label="System theme" title="System theme" class="flex h-7 w-7 items-center justify-center rounded-full transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring text-muted-foreground hover:text-foreground"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-monitor h-4 w-4" aria-hidden="true"><rect width="20" height="14" x="2" y="3" rx="2"></rect><line x1="8" x2="16" y1="21" y2="21"></line><line x1="12" x2="12" y1="17" y2="21"></line></svg></button><button type="button" role="radio" aria-checked="true" aria-label="Light theme" title="Light theme" class="flex h-7 w-7 items-center justify-center rounded-full transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring bg-secondary text-foreground"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-sun h-4 w-4" aria-hidden="true"><circle cx="12" cy="12" r="4"></circle><path d="M12 2v2"></path><path d="M12 20v2"></path><path d="m4.93 4.93 1.41 1.41"></path><path d="m17.66 17.66 1.41 1.41"></path><path d="M2 12h2"></path><path d="M20 12h2"></path><path d="m6.34 17.66-1.41 1.41"></path><path d="m19.07 4.93-1.41 1.41"></path></svg></button><button type="button" role="radio" aria-checked="false" aria-label="Dark theme" title="Dark theme" class="flex h-7 w-7 items-center justify-center rounded-full transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring text-muted-foreground hover:text-foreground"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-moon h-4 w-4" aria-hidden="true"><path d="M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401"></path></svg></button></div><!--astro:end--></astro-island></div></div></footer></body></html>
126<script>
127  document.addEventListener("astro:after-swap", () => {
128    const homepage = document.getElementById("homepage");
129    homepage?.classList.remove("opacity-0");
130  });
131</script>

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.