<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[Old Fashioned]]></title><description><![CDATA[offering notes on tech, finance, aviation, and chess all in one eclectic space.]]></description><link>https://blog.virenmohindra.me</link><image><url>https://substackcdn.com/image/fetch/$s_!HVjP!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F8935defa-4d02-402b-879e-d7f8b6ed5e10_76x76.png</url><title>Old Fashioned</title><link>https://blog.virenmohindra.me</link></image><generator>Substack</generator><lastBuildDate>Fri, 10 Apr 2026 20:33:43 GMT</lastBuildDate><atom:link href="https://blog.virenmohindra.me/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Viren Mohindra]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[oldfashioned@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[oldfashioned@substack.com]]></itunes:email><itunes:name><![CDATA[Viren Mohindra]]></itunes:name></itunes:owner><itunes:author><![CDATA[Viren Mohindra]]></itunes:author><googleplay:owner><![CDATA[oldfashioned@substack.com]]></googleplay:owner><googleplay:email><![CDATA[oldfashioned@substack.com]]></googleplay:email><googleplay:author><![CDATA[Viren Mohindra]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[The State of Agent Memory (2026)]]></title><description><![CDATA[what $31.5M in funding and 120K GitHub stars worth of agent memory looks like from the inside]]></description><link>https://blog.virenmohindra.me/p/the-state-of-agent-memory-2026</link><guid isPermaLink="false">https://blog.virenmohindra.me/p/the-state-of-agent-memory-2026</guid><dc:creator><![CDATA[Viren Mohindra]]></dc:creator><pubDate>Thu, 26 Feb 2026 09:38:02 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!M6T3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6169a74-157e-4d11-bc43-26a3208a2d3f_2368x1428.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>8-min read<br>We were four days into reading Mem0&#8217;s source code when we found the graph mentions counter</em></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!M6T3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6169a74-157e-4d11-bc43-26a3208a2d3f_2368x1428.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!M6T3!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6169a74-157e-4d11-bc43-26a3208a2d3f_2368x1428.png 424w, https://substackcdn.com/image/fetch/$s_!M6T3!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6169a74-157e-4d11-bc43-26a3208a2d3f_2368x1428.png 848w, https://substackcdn.com/image/fetch/$s_!M6T3!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6169a74-157e-4d11-bc43-26a3208a2d3f_2368x1428.png 1272w, https://substackcdn.com/image/fetch/$s_!M6T3!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6169a74-157e-4d11-bc43-26a3208a2d3f_2368x1428.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!M6T3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6169a74-157e-4d11-bc43-26a3208a2d3f_2368x1428.png" width="1456" height="878" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a6169a74-157e-4d11-bc43-26a3208a2d3f_2368x1428.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:878,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:223391,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://blog.virenmohindra.me/i/189231943?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6169a74-157e-4d11-bc43-26a3208a2d3f_2368x1428.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!M6T3!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6169a74-157e-4d11-bc43-26a3208a2d3f_2368x1428.png 424w, https://substackcdn.com/image/fetch/$s_!M6T3!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6169a74-157e-4d11-bc43-26a3208a2d3f_2368x1428.png 848w, https://substackcdn.com/image/fetch/$s_!M6T3!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6169a74-157e-4d11-bc43-26a3208a2d3f_2368x1428.png 1272w, https://substackcdn.com/image/fetch/$s_!M6T3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6169a74-157e-4d11-bc43-26a3208a2d3f_2368x1428.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Every time an entity gets referenced, whether a person, a project, a concept, Mem0 increments a <code>mentions</code> count on that node and its edges. It&#8217;s tracked on every update. Written to the database. Never read back. Never used in retrieval scoring. The data&#8217;s there, the infrastructure&#8217;s there &#8212; it just hasn&#8217;t been connected yet.</p><p>That turned out to be the recurring theme. These codebases are full of good infrastructure and good ideas, often in different places than you&#8217;d expect.</p><p>I should back up.</p><h2>Why we did this</h2><p>We&#8217;re building <a href="https://mnem.dev">Mneme</a>, a proactive engineering intelligence system, where it watches your team&#8217;s signals (commits, PRs, Slack threads, Jira tickets, error spikes, stripe txns) and synthesizes context before decisions get made. To build that, we needed to understand what already exists in the memory space. Blog posts or READMEs only get you so far, so we dove into the actual source code.</p><p>So we cloned 10 of the most relevant repos and read through them (read: with some heavy lifting from Claude Code). The list~</p><ol><li><p>Graphiti (23K stars),</p></li><li><p>Mem0 (48K stars, $24M raised),</p></li><li><p>Cognee (12.5K stars, $7.5M seed),</p></li><li><p>Letta (21K stars),</p></li><li><p>memU (11K stars),</p></li><li><p>SimpleMem (3K stars),</p></li><li><p>mcp-memory-service (1.4K stars),</p></li><li><p>A-Mem (800 stars),</p></li><li><p>memsearch (612 stars), and</p></li><li><p>claude-cognitive (310 stars)</p></li></ol><p><em>Over 120K GitHub stars and $31.5M in venture funding aimed at a single thesis: LLMs need persistent memory to be useful.</em></p><p>They&#8217;re right about the thesis. The disagreement is about how to get there. And we have obvious bias since we&#8217;re building in this space. The research is real, but the interpretation is ours. Keep that in mind.</p><h2>Three approaches</h2><p>The approaches fall into three paradigms~</p><ol><li><p><strong>System-managed extraction</strong>: the system decides what to remember</p><ol><li><p>Mem0, Graphiti, Cognee fall into this bucket: expensive writes, clean output</p></li></ol></li><li><p><strong>Agent self-management</strong>: the agent decides what to remember</p><ol><li><p>Letta&#8217;s MemGPT holds its own here - elegant, and depends on agent discipline</p></li></ol></li><li><p><strong>Compression and retrieval</strong>: the system compresses conversation history</p><ol><li><p>SimpleMem, memsearch, mcp-memory-service, claude-cognitive - all trade fidelity for token efficiency</p></li></ol></li></ol><p><em>Most production systems will need some mix of all three. But what I found more interesting than the paradigm choices was what happened when I looked at the actual implementations.</em></p><h2>What we found when we read the code</h2><p>The gap between marketing and implementation runs in both directions. Both directions are worth seeing.</p><p><strong>Graphiti&#8217;s bi-temporal model is as good as advertised.</strong> This is from <code>graphiti_core/edges.py</code>:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;python&quot;,&quot;nodeId&quot;:&quot;73301a2b-a26f-4f7b-af42-545e7147d9f9&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-python">class EntityEdge(Edge):
    # Edge base class provides: uuid, source_node_uuid, target_node_uuid, created_at
    name: str = Field(description='name of the edge, relation name')
    fact: str = Field(description='fact representing the edge and nodes that it connects')
    fact_embedding: list[float] | None = Field(default=None)
    episodes: list[str] = Field(default=[])
    expired_at: datetime | None = Field(
        default=None, description='datetime of when the node was invalidated'
    )
    valid_at: datetime | None = Field(
        default=None, description='datetime of when the fact became true'
    )
    invalid_at: datetime | None = Field(
        default=None, description='datetime of when the fact stopped being true'
    )</code></pre></div><p>Four datetime fields. <code>valid_at</code> and <code>invalid_at</code> track when a fact was true in the real world. <code>created_at</code> and <code>expired_at</code> track when the system <em>learned</em> and <em>retired</em> the fact. When a new fact contradicts an old one, the old edge gets <code>invalid_at</code> set to the new edge&#8217;s <code>valid_at</code>. Nothing is ever deleted. This enables a query you can&#8217;t do anywhere else: &#8220;What did we know about X at time T?&#8221;</p>
      <p>
          <a href="https://blog.virenmohindra.me/p/the-state-of-agent-memory-2026">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Git Identity Crisis: Automating Multi-Account GitHub Like a Sane Person]]></title><description><![CDATA[Stop manually switching between your work and personal GitHub accounts like it's 2015]]></description><link>https://blog.virenmohindra.me/p/git-identity-crisis-automating-multi</link><guid isPermaLink="false">https://blog.virenmohindra.me/p/git-identity-crisis-automating-multi</guid><dc:creator><![CDATA[Viren Mohindra]]></dc:creator><pubDate>Thu, 19 Feb 2026 18:07:40 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!HVjP!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F8935defa-4d02-402b-879e-d7f8b6ed5e10_76x76.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>3-min read<br>I have two GitHub accounts. One for work, one for personal projects. If you&#8217;re reading this, you probably do too. And if you&#8217;re anything like me, you&#8217;ve been committing from the wrong email at least once a month, silently polluting your contribution graph with phantom identities</em></p><p>The problem is deceptively simple: when I <code>git push</code> for any of my various open source projects, I would like it routed through my personal account.</p><p>And when I push from work, it should use my work email. No manual switching. No &#8220;oh crap, wrong email&#8221; moments at 2am.</p><p>Here&#8217;s the setup I landed on. It took a couple minutes and I haven&#8217;t thought about it since.</p><p><em>Note: If you&#8217;re an SSH person, you can solve this with separate keys and ~/.ssh/config Host aliases but I use HTTPS across machines and prefer leaning on </em><code>gh</code>&#8217;s<em> token management rather than juggling key pairs</em></p><h3>The Commit Identity Problem</h3><p>Git uses a global <code>user.name</code> and <code>user.email</code> from <code>~/.gitconfig</code> for every commit. If your global config is your work email, every commit across every repo &#8212; including your weekend passion project &#8212; gets stamped with <code>you@acme.com</code>.</p><p>You <em>could</em> set a <strong>per-repo override</strong> with git config <code>user.email</code> in each project dir, but that&#8217;s fragile. You&#8217;ll forget (read: I have). You&#8217;ll clone a new repo and push three commits before realizing you&#8217;ve been committing as the wrong person.</p><h3>The Fix: <code>includeIf</code> with Remote URL Matching</h3><p>Git <code>v2.36</code> introduced <code>hasconfig:remote</code>,<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</a> which lets you conditionally include config files based on the remote URL. This is the key.</p><p>First, create a separate config file for your personal identity:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;bash&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-bash">  # ~/.gitconfig-personal
  [user]
      name = Your Name
      email = you@gmail.com</code></pre></div><p>Then add conditional includes to your <code>~/.gitconfig</code>:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;bash&quot;,&quot;nodeId&quot;:&quot;c9f47cc1-74fd-4ff3-a213-fc5f2512c67f&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-bash">

  [user]
      name = Your Name
      email = you@work.com
  [includeIf &#8220;hasconfig:remote.*.url:https://github.com/YourPersonalUsername/**&#8221;]
      path = ~/.gitconfig-personal
  [includeIf &#8220;hasconfig:remote.*.url:git@github.com:YourPersonalUsername/**&#8221;]
      path = ~/.gitconfig-personal</code></pre></div><p>That&#8217;s it. Any repo with a remote pointing to your personal GitHub org automatically uses the personal identity. HTTPS and SSH both covered. No per-repo config, no directory-based hacks.</p><h3>The Push / Pull Auth Problem</h3><p>Solving the commit identity is only half the battle. When you <code>git push</code>, <code>git</code> also needs to authenticate with GitHub. If you use <code>gh</code> (the GitHub CLI), it has its own auth &#8212; and it only has one &#8220;active&#8221; account at a time.</p><p>The naive approach: <code>gh auth switch</code> before every push. The correct approach: a custom credential helper that routes automatically.</p><h3>The Fix: A Custom Credential Helper</h3><p>Git&#8217;s credential system supports custom helpers &#8212; scripts that receive the target host and repo path, and return the appropriate credentials. We can write one that checks the repo owner in the URL and picks the right `gh` token:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;bash&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-bash">  #!/bin/bash

  # ~/.local/bin/gh-credential-switcher
  if [ &#8220;$1&#8221; != &#8220;get&#8221; ]; then
    exit 0
  fi

  host=&#8221;&#8220;
  path=&#8221;&#8220;

  while IFS=&#8217;=&#8217; read -r key value; do
    [ -z &#8220;$key&#8221; ] &amp;&amp; break
    case &#8220;$key&#8221; in host) host=&#8221;$value&#8221; ;; path) path=&#8221;$value&#8221; ;;
    esac
  done

  if [[ &#8220;$host&#8221; != &#8220;github.com&#8221; ]]; then
    exit 0
  fi

  if [[ &#8220;$path&#8221; == YourPersonalUsername/* ]]; then
    user=&#8221;YourPersonalUsername&#8221;
  else
    user=&#8221;your-work-username&#8221;
  fi

  token=$(gh auth token --user &#8220;$user&#8221; 2&gt;/dev/null)
  if [ -n &#8220;$token&#8221; ]; then
    echo &#8220;protocol=https&#8221;
    echo &#8220;host=github.com&#8221;
    echo &#8220;username=$user&#8221;
    echo &#8220;password=$token&#8221;
  fi</code></pre></div><p>  Make it executable <code>chmod +x</code>) and wire it into your <code>~/.gitconfig</code>:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;bash&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-bash">  [credential &#8220;https://github.com&#8221;]
      helper =
      helper = !/path/to/gh-credential-switcher
      useHttpPath = true</code></pre></div><p><em>The empty helper = line clears any previously registered credential helpers (looking at you, macOS Keychain). </em>And <code>useHttpPath = true</code> is critical &#8212; without it, <code>git</code> only sends the host to credential helpers, not the repo path, and the script can&#8217;t distinguish between orgs.</p><h3>The macOS Gotcha</h3><p>If you&#8217;re on a Mac, Xcode ships a system-level <code>gitconfig</code> at <code>/Applications/Xcode.app/Contents/Developer/usr/share/git-core/gitconfig</code> that registers <code>osxkeychain</code> as a credential helper. This runs before your custom helper and returns whatever cached credential it has &#8212; defeating the entire setup.</p><p>The <code>helper =</code> line in <code>[credential &#8220;https://github.com&#8221;]</code> clears this. If it doesn&#8217;t stick (system-level configs can be stubborn), you can also add a global <code>[credential]</code> block:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;bash&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-bash">  [credential]
      helper =
      helper = !/path/to/gh-credential-switcher</code></pre></div><h3>Prerequisites</h3><p>Both GitHub accounts need to be logged into gh:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;bash&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-bash">  gh auth login  # login with your work account
  gh auth login  # login with your personal account</code></pre></div><p>You can verify both are available with</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">gh auth status</code></pre></div><p><em>The &#8220;active&#8221; account doesn&#8217;t matter anymore &#8212; the credential helper bypasses it entirely.</em></p><h3>Verification</h3><p>Quick sanity check across repos:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;bash&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-bash"># Personal repo
$ git -C ~/projects/side-project config user.email
you@gmail.com

$ git -C ~/projects/side-project ls-remote --heads origin
a1b2c3d  refs/heads/main</code></pre></div><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;bash&quot;,&quot;nodeId&quot;:&quot;6f279ee2-636f-4ba4-b1f5-1da96fc01956&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-bash"># Work repo

$ git -C ~/projects/work-thing config user.email
you@work.com

$ git -C ~/projects/work-thing ls-remote --heads origin
d4e5f6a  refs/heads/main</code></pre></div><p><em>Different identities, different auth tokens, zero manual switching.</em></p><h3>TL;DR</h3><ol><li><p><strong>Layer</strong></p><ol><li><p>Mechanism</p></li><li><p>Config</p></li></ol></li></ol><div><hr></div><ol><li><p><strong>Commit identity</strong></p><ol><li><p>includeIf hasconfig:remote</p></li><li><p><code>~/.gitconfig</code> + <code>~/.gitconfig-personal</code></p></li></ol></li><li><p><strong>Push / pull auth</strong></p><ol><li><p>Custom credential helper</p></li><li><p><code>~/.local/bin/gh-credential-switcher </code></p></li></ol></li><li><p><strong>macOS Keychain bypass</strong></p><ol><li><p><code>helper =</code> (clear line)</p></li><li><p><code>~/.gitconfig</code></p></li></ol></li><li><p><strong>Path-based routing</strong></p><ol><li><p><code>useHttpPath = true</code></p></li><li><p><code>~/.gitconfig</code></p></li></ol></li></ol><p>Clone any repo and it just works. New personal project? Personal identity and auth. New work repo? Work credentials. The setup is entirely URL-based, so it doesn&#8217;t matter where on disk the repo lives or what branch you&#8217;re on.</p><p><em>Ten minutes of config. Months of not thinking about it.</em></p><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-1" href="#footnote-anchor-1" class="footnote-number" contenteditable="false" target="_self">1</a><div class="footnote-content"><p>Introduced in Git 2.36, see docs: https://git-scm.com/docs/git-config#Documentation/git-config.txt-hasconfigremoteurl</p><p></p></div></div>]]></content:encoded></item><item><title><![CDATA[Building a GitHub PR Diff for ChatGPT analysis]]></title><description><![CDATA[Easiest way to summarize a pull request is via automation (by feeding it into an LLM)]]></description><link>https://blog.virenmohindra.me/p/building-a-github-pr-diff-for-chatgpt</link><guid isPermaLink="false">https://blog.virenmohindra.me/p/building-a-github-pr-diff-for-chatgpt</guid><dc:creator><![CDATA[Viren Mohindra]]></dc:creator><pubDate>Sat, 05 Oct 2024 05:51:06 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!-I2w!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F008eef4e-d716-4955-b900-82798ca0c40f_3368x4048.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>4-min read<br>Convert PRs into useful context with this one simple trick! Head to the bottom to see the actual bookmarklet. Open source <a href="https://github.com/VirenMohindra/github-diff">here</a> and chrome extension <a href="https://chromewebstore.google.com/detail/github-diff/hhopppbhdogliepfdaihcoicedlieibn">here</a></em></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-I2w!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F008eef4e-d716-4955-b900-82798ca0c40f_3368x4048.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-I2w!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F008eef4e-d716-4955-b900-82798ca0c40f_3368x4048.png 424w, https://substackcdn.com/image/fetch/$s_!-I2w!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F008eef4e-d716-4955-b900-82798ca0c40f_3368x4048.png 848w, https://substackcdn.com/image/fetch/$s_!-I2w!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F008eef4e-d716-4955-b900-82798ca0c40f_3368x4048.png 1272w, https://substackcdn.com/image/fetch/$s_!-I2w!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F008eef4e-d716-4955-b900-82798ca0c40f_3368x4048.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-I2w!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F008eef4e-d716-4955-b900-82798ca0c40f_3368x4048.png" width="1456" height="1750" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/008eef4e-d716-4955-b900-82798ca0c40f_3368x4048.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1750,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1216085,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!-I2w!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F008eef4e-d716-4955-b900-82798ca0c40f_3368x4048.png 424w, https://substackcdn.com/image/fetch/$s_!-I2w!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F008eef4e-d716-4955-b900-82798ca0c40f_3368x4048.png 848w, https://substackcdn.com/image/fetch/$s_!-I2w!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F008eef4e-d716-4955-b900-82798ca0c40f_3368x4048.png 1272w, https://substackcdn.com/image/fetch/$s_!-I2w!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F008eef4e-d716-4955-b900-82798ca0c40f_3368x4048.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em>copy-able code is below, this is just a <a href="https://carbon.now.sh/">Carbon</a> screenshot</em></figcaption></figure></div><p>As an engineer, I often find myself sifting through GitHub pull requests, pulling branches down and opening <code>.diffs</code> to review changes. It&#8217;s a tedious process to understand the full context and then provide helpful comments. After repeating this for months, <em>why not automate everything with a bookmarklet?</em></p><p>ChatGPT 4o is powerful enough to give me summaries of PRs but selecting all the text on the site isn&#8217;t good enough and introduces a lot of clutter. It is much better to provide a diff with appropriate context (like full changed source files) so it can paint a clearer picture.</p><p>This also helps when I&#8217;ve finalized my own PR and want to provide useful pointers on what&#8217;s changed. I feed the diff into the LLM along with the GitHub PR template and it spits out the changes instead of having to manually type it out.</p><h3>Step 1: The Simple Idea &#8211; just open the <code>.diff</code></h3><p>GitHub already provides <code>.diff</code> and <code>.patch</code> files for PRs &#8212; by appending the extension to the URL, you get the all the changes in a raw format.</p><pre><code>javascript:window.open(window.location.href + '.diff');</code></pre><p><strong>What if I'm not on a PR page?</strong> I also needed the bookmarklet to know when I was on a valid pull request page and act accordingly.</p><h3>Step 2: Handling Edge Cases (Because I Click Everywhere)</h3><p>I quickly realized that I&#8217;m not always on the "Files changed" tab or even on a valid PR page. Sometimes I&#8217;d hit the bookmarklet while still on the main repo, the list of PRs, or even issues tabs. I needed to handle these cases gracefully.</p><p>So, I added checks for specific pages like <code>/pulls</code>, <code>/issues</code>, and <code>/actions</code>, displaying an alert if I wasn&#8217;t on a valid PR page. That made things a lot smoother:</p><pre><code>if (/\/(pulls|issues|actions)|github\.com\/[^\/]+\/[^\/]+$/.test(window.location.href)) {
  alert('You are not on a valid PR page. Please navigate to a specific PR.');
  return;
}</code></pre><p><em>Update: This guard evolved over time while building out the chrome extension to guard against all pages that do not follow the format of &#8212;</em></p><pre><code>https://github.com/&lt;repo-owner&gt;/&lt;repo-name&gt;/pull/&lt;number&gt;</code></pre><h3>Step 3: Adding the "View raw" for Files</h3><p>Once I had the diff part working, the next natural step was to extend the bookmarklets capabilities by opening each changed file in the pull request. This would be helpful in painting a better picture on how the files related to each other and to create a contextual mind map. The dropdown was just a click away, but why click it manually when I can automate that too?</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!r0AR!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F095ed357-1198-4e39-bf4c-5a1fa3cc8a96_3456x1428.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!r0AR!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F095ed357-1198-4e39-bf4c-5a1fa3cc8a96_3456x1428.png 424w, https://substackcdn.com/image/fetch/$s_!r0AR!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F095ed357-1198-4e39-bf4c-5a1fa3cc8a96_3456x1428.png 848w, https://substackcdn.com/image/fetch/$s_!r0AR!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F095ed357-1198-4e39-bf4c-5a1fa3cc8a96_3456x1428.png 1272w, https://substackcdn.com/image/fetch/$s_!r0AR!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F095ed357-1198-4e39-bf4c-5a1fa3cc8a96_3456x1428.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!r0AR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F095ed357-1198-4e39-bf4c-5a1fa3cc8a96_3456x1428.png" width="1456" height="602" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/095ed357-1198-4e39-bf4c-5a1fa3cc8a96_3456x1428.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:602,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:477913,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!r0AR!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F095ed357-1198-4e39-bf4c-5a1fa3cc8a96_3456x1428.png 424w, https://substackcdn.com/image/fetch/$s_!r0AR!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F095ed357-1198-4e39-bf4c-5a1fa3cc8a96_3456x1428.png 848w, https://substackcdn.com/image/fetch/$s_!r0AR!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F095ed357-1198-4e39-bf4c-5a1fa3cc8a96_3456x1428.png 1272w, https://substackcdn.com/image/fetch/$s_!r0AR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F095ed357-1198-4e39-bf4c-5a1fa3cc8a96_3456x1428.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The script was updated to automatically click the ellipsis buttons for each file, wait for the dropdown to appear, and then click on the "View raw" menu section. Here&#8217;s what it ended up looking like:</p><pre><code>document.querySelectorAll('.file-header').forEach((fileHeader, index) =&gt; {
  const kebabButton = fileHeader.querySelector('.octicon-kebab-horizontal');
  if (kebabButton) {
    setTimeout(() =&gt; {
      kebabButton.closest('summary').click();
      setTimeout(() =&gt; {
        const viewRawLink = fileHeader.closest('.file').querySelector('a[href*="/raw/"]');
        if (viewRawLink) window.open(viewRawLink.href, '_blank');
      }, 500);
    }, index * 1000);
  }
});
</code></pre><p>Learnt the preferred nomenclature is kebab not ellipsis. Now the bookmarklet could handle both the <code>.diff</code> file and individual "View raw" links for all files in the "Files changed" tab.</p><h3><strong>The final code</strong></h3><pre><code>javascript:(function() {
  const prUrl = window.location.href;

  // List of invalid URL patterns (main page, /pulls, /issues, /actions)
  const invalidPatterns = ['/pulls', '/issues', '/actions', /github\.com\/[^\/]+\/[^\/]+$/];

  // Check if the URL matches any invalid patterns
  if (invalidPatterns.some(pattern =&gt; prUrl.match(pattern))) {
    alert('You are not on a valid PR page. Please navigate to a specific PR.');
    return;
  }

  // Part 1: Open the diff file after extracting base PR URL
  const normalizedUrl = prUrl.split('/pull/')[0] + prUrl.match(/\/pull\/\d+/)[0]; // Extract base PR URL
  const diffUrl = normalizedUrl + '.diff';
  window.open(diffUrl, '_blank');

  // Part 2: If not on the "Files changed" tab, exit after opening the diff
  if (!prUrl.includes('/files')) {
    return;
  }

  // Part 3: If on the "Files changed" tab, open the "View raw" links
  const fileHeaders = document.querySelectorAll('.file-header');

  function openRawView(fileHeader) {
    const kebabButton = fileHeader.querySelector('.octicon-kebab-horizontal');

    if (kebabButton) {
      // Click the ellipsis button to open the dropdown
      kebabButton.closest('summary').click();

      // Wait for the dropdown to appear, then click "View raw"
      setTimeout(() =&gt; {
        const viewRawLink = fileHeader.closest('.file').querySelector('a[href*="/raw/"]');
        if (viewRawLink) {
          window.open(viewRawLink.href, '_blank');
        } else {
          console.error('Could not find the "View raw" link.');
        }
      }, 500); // Delay to allow the dropdown to appear
    } else {
      console.error('Could not find the kebab button.');
    }
  }

  // Loop through each file header, trigger the process for "View raw"
  fileHeaders.forEach((fileHeader, index) =&gt; {
    // Stagger the openings to prevent overload
    setTimeout(() =&gt; openRawView(fileHeader), index * 1000);
  });
})();</code></pre><h3><strong>And a</strong> <strong>One-Liner Bookmarklet</strong></h3><pre><code>javascript:(function(){const prUrl=window.location.href;if(/\/(pulls|issues|actions)|github\.com\/[^\/]+\/[^\/]+$/.test(prUrl)){alert('You are not on a valid PR page. Please navigate to a specific PR.');return;}const diffUrl=prUrl.match(/\/pull\/\d+/)?prUrl.split('/pull/')[0]+prUrl.match(/\/pull\/\d+/)[0]+'.diff':null;if(diffUrl)window.open(diffUrl,'_blank');if(!prUrl.includes('/files'))return;document.querySelectorAll('.file-header').forEach((fileHeader,index)=&gt;{const kebabButton=fileHeader.querySelector('.octicon-kebab-horizontal');if(kebabButton){setTimeout(()=&gt;{kebabButton.closest('summary').click();setTimeout(()=&gt;{const viewRawLink=fileHeader.closest('.file').querySelector('a[href*="/raw/"]');if(viewRawLink)window.open(viewRawLink.href,'_blank');},500);},index*1000);}});})();
</code></pre><p>You can add this by either</p><ol><li><p>using this<a href="https://caiorss.github.io/bookmarklet-maker/"> website</a> or</p></li><li><p>bookmarking this site, changing the name to GH - ChatGPT or any equivalent, editing the bookmark and pasting the one-liner above in the URL section</p></li></ol><p><em>Remember to always allow pop-ups when using this for the first time and try not use this on PRs with many files changed, it&#8217;ll open a bunch of tabs.</em></p><h3>Another one - Opening a ChatGPT chat programmatically</h3><p>If you don&#8217;t want to copy the contents of the diff into ChatGPT you can run this bookmarklet which opens a new chat. You do need an account &#8212;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!47Il!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b220fa8-98e9-49bd-ac5e-feb7566c4a17_3368x2036.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!47Il!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b220fa8-98e9-49bd-ac5e-feb7566c4a17_3368x2036.png 424w, https://substackcdn.com/image/fetch/$s_!47Il!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b220fa8-98e9-49bd-ac5e-feb7566c4a17_3368x2036.png 848w, https://substackcdn.com/image/fetch/$s_!47Il!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b220fa8-98e9-49bd-ac5e-feb7566c4a17_3368x2036.png 1272w, https://substackcdn.com/image/fetch/$s_!47Il!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b220fa8-98e9-49bd-ac5e-feb7566c4a17_3368x2036.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!47Il!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b220fa8-98e9-49bd-ac5e-feb7566c4a17_3368x2036.png" width="1456" height="880" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5b220fa8-98e9-49bd-ac5e-feb7566c4a17_3368x2036.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:880,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:579984,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!47Il!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b220fa8-98e9-49bd-ac5e-feb7566c4a17_3368x2036.png 424w, https://substackcdn.com/image/fetch/$s_!47Il!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b220fa8-98e9-49bd-ac5e-feb7566c4a17_3368x2036.png 848w, https://substackcdn.com/image/fetch/$s_!47Il!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b220fa8-98e9-49bd-ac5e-feb7566c4a17_3368x2036.png 1272w, https://substackcdn.com/image/fetch/$s_!47Il!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b220fa8-98e9-49bd-ac5e-feb7566c4a17_3368x2036.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>Code</h3><pre><code>(function() {
  const prUrl = window.location.href;

  // Check if the URL contains ".diff" to ensure it's a valid diff page
  if (!prUrl.includes('.diff')) {
    alert('This bookmarklet only works on .diff pages.');
    return;
  }

  // Get the contents of the diff file
  const diffContent = document.body.innerText;

  // Create the prompt for ChatGPT, broken into multiple lines for readability
  const prompt = encodeURIComponent(
    `You are an expert programmer in React Native and Python. I've provided a diff file.\n\n` +
    `I want you to summarize the changes and provide any helpful comments, feedback, fixes, and optimizations that can be done to the code to make it better in bullet points.\n\n` +
    `I can also provide the files if needed, let me know.\n\n` +
    `Here is the diff:\n\n${diffContent}`
  );

  // Open ChatGPT with the pre-filled prompt
  window.open(`https://chatgpt.com/?q=${prompt}`, '_blank');
})();
</code></pre><h3><strong>And a</strong> <strong>One-Liner Bookmarklet</strong></h3><pre><code>javascript:(function(){if(!window.location.href.includes('.diff')){alert('This bookmarklet only works on .diff pages.');return;}const prompt=encodeURIComponent(`You are an expert programmer in React Native and Python. I've provided a diff file. I want you to summarize the changes and provide any helpful comments, feedback, fixes, and optimizations that can be done to the code to make it better in bullet points. I can also provide the files if needed, let me know.\n\n${document.body.innerText}`);window.open(`https://chatgpt.com/?q=${prompt}`,'_blank');})();</code></pre><p>Same instructions as above to create a bookmarklet. Happy Friday!</p><h3>Chrome Extension</h3><p>Adding bookmarklets is tough. I created a chrome extension that streamlines the workflow for interacting with GitHub pull requests. This tool allows one to quickly open diff files, access raw files, and even send pull request diffs to ChatGPT for feedback&#8212;all with the click of a button! The extension is built with <strong>TypeScript</strong> for type safety and leverages Chrome's powerful <strong>scripting</strong> and <strong>activeTab</strong> permissions to interact directly with the GitHub page.</p><p>The best part? The tool is fully customizable! I added an editable prompt feature for ChatGPT, so one can fine-tune the kinds of feedback they&#8217;re seeking. From improving code quality to reviewing changes more efficiently, this extension has been a game changer in my development workflow. If you prefer a GUI, there is an open source chrome extension available here &#8212;</p><ul><li><p>https://github.com/VirenMohindra/github-diff, and here</p></li><li><p>https://chromewebstore.google.com/detail/github-diff/hhopppbhdogliepfdaihcoicedlieibn</p></li></ul><div><hr></div>]]></content:encoded></item><item><title><![CDATA[age-old adages]]></title><description><![CDATA[If he writes her a few sonnets, he loves her.]]></description><link>https://blog.virenmohindra.me/p/age-old-adages</link><guid isPermaLink="false">https://blog.virenmohindra.me/p/age-old-adages</guid><dc:creator><![CDATA[Viren Mohindra]]></dc:creator><pubDate>Tue, 23 Jul 2024 20:52:34 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!HVjP!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F8935defa-4d02-402b-879e-d7f8b6ed5e10_76x76.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<blockquote><p><em>If he writes her a few sonnets, he loves her. If he writes her 300 sonnets, he loves sonnets</em></p></blockquote><p></p><blockquote><p><em>if you want to size up a distributor, a quick way is one truck or trailer is equivalent to a million in revenue</em></p></blockquote>]]></content:encoded></item><item><title><![CDATA[June]]></title><description><![CDATA[As conservative as possible in protecting the free market and as radical as necessary in securing the welfare of people]]></description><link>https://blog.virenmohindra.me/p/june</link><guid isPermaLink="false">https://blog.virenmohindra.me/p/june</guid><dc:creator><![CDATA[Viren Mohindra]]></dc:creator><pubDate>Tue, 25 Jun 2024 03:24:04 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!HVjP!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F8935defa-4d02-402b-879e-d7f8b6ed5e10_76x76.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>5-min read<br>The makings and beginnings of a true, honest proletariat.</em></p>
      <p>
          <a href="https://blog.virenmohindra.me/p/june">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Be Better (or defining table stakes)]]></title><link>https://blog.virenmohindra.me/p/be-better-or-defining-table-stakes</link><guid isPermaLink="false">https://blog.virenmohindra.me/p/be-better-or-defining-table-stakes</guid><dc:creator><![CDATA[Viren Mohindra]]></dc:creator><pubDate>Thu, 07 Dec 2023 10:26:09 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Y-ou!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c897a79-7fe0-430e-85aa-c059aacab1df_1880x1219.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[
      <p>
          <a href="https://blog.virenmohindra.me/p/be-better-or-defining-table-stakes">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[High School Memories]]></title><description><![CDATA[And the various exploits which lost me my coveted prefect position]]></description><link>https://blog.virenmohindra.me/p/high-school-memories</link><guid isPermaLink="false">https://blog.virenmohindra.me/p/high-school-memories</guid><dc:creator><![CDATA[Viren Mohindra]]></dc:creator><pubDate>Thu, 07 Dec 2023 03:03:42 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!HVjP!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F8935defa-4d02-402b-879e-d7f8b6ed5e10_76x76.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>3-min read<br>From leveraging the school intranet (and other local networks which one could unfortunately hop onto) to create a DDoS SaaS, to pulling vasts amounts of data from the academic servers through specialized means (read: light social engineering), there was never any doubt in why I didn&#8217;t secure the Tech prefect position. In hindsight, them removing the entire placement a couple days later did assuage my adolescent pain.  <br>Disclaimer: I do not support penetration testing into national systems or any systems for that matter without authorized permission. This was purely an academic exercise.</em></p>
      <p>
          <a href="https://blog.virenmohindra.me/p/high-school-memories">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[ l'appel du vide]]></title><link>https://blog.virenmohindra.me/p/lappel-du-vide</link><guid isPermaLink="false">https://blog.virenmohindra.me/p/lappel-du-vide</guid><dc:creator><![CDATA[Viren Mohindra]]></dc:creator><pubDate>Thu, 07 Dec 2023 02:57:50 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!HVjP!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F8935defa-4d02-402b-879e-d7f8b6ed5e10_76x76.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[
      <p>
          <a href="https://blog.virenmohindra.me/p/lappel-du-vide">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Sports Bet Hedging with Free Rolls for +EV]]></title><description><![CDATA[It's called March Madness for a reason -- I don't even watch sports.]]></description><link>https://blog.virenmohindra.me/p/sports-bet-hedging-with-free-rolls</link><guid isPermaLink="false">https://blog.virenmohindra.me/p/sports-bet-hedging-with-free-rolls</guid><dc:creator><![CDATA[Viren Mohindra]]></dc:creator><pubDate>Thu, 07 Dec 2023 02:42:36 GMT</pubDate><enclosure url="https://images.unsplash.com/photo-1581852549708-72910bd52cff?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwzfHxzcG9ydHMlMjBiZXR0aW5nfGVufDB8fHx8MTcwMTkxNjY5OHww&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>6-min read<br>How I made ~$1600 a week churning sports books in &#8216;23. No this isn&#8217;t one of those WFH Google Ads comments that plagued your photography-Wordpress-site, this is the real deal.</em></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://images.unsplash.com/photo-1581852549708-72910bd52cff?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwzfHxzcG9ydHMlMjBiZXR0aW5nfGVufDB8fHx8MTcwMTkxNjY5OHww&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://images.unsplash.com/photo-1581852549708-72910bd52cff?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwzfHxzcG9ydHMlMjBiZXR0aW5nfGVufDB8fHx8MTcwMTkxNjY5OHww&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 424w, https://images.unsplash.com/photo-1581852549708-72910bd52cff?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwzfHxzcG9ydHMlMjBiZXR0aW5nfGVufDB8fHx8MTcwMTkxNjY5OHww&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 848w, https://images.unsplash.com/photo-1581852549708-72910bd52cff?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwzfHxzcG9ydHMlMjBiZXR0aW5nfGVufDB8fHx8MTcwMTkxNjY5OHww&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 1272w, https://images.unsplash.com/photo-1581852549708-72910bd52cff?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwzfHxzcG9ydHMlMjBiZXR0aW5nfGVufDB8fHx8MTcwMTkxNjY5OHww&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 1456w" sizes="100vw"><img src="https://images.unsplash.com/photo-1581852549708-72910bd52cff?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwzfHxzcG9ydHMlMjBiZXR0aW5nfGVufDB8fHx8MTcwMTkxNjY5OHww&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080" width="4032" height="3024" data-attrs="{&quot;src&quot;:&quot;https://images.unsplash.com/photo-1581852549708-72910bd52cff?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwzfHxzcG9ydHMlMjBiZXR0aW5nfGVufDB8fHx8MTcwMTkxNjY5OHww&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:3024,&quot;width&quot;:4032,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;people on ice skating rink&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="people on ice skating rink" title="people on ice skating rink" srcset="https://images.unsplash.com/photo-1581852549708-72910bd52cff?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwzfHxzcG9ydHMlMjBiZXR0aW5nfGVufDB8fHx8MTcwMTkxNjY5OHww&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 424w, https://images.unsplash.com/photo-1581852549708-72910bd52cff?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwzfHxzcG9ydHMlMjBiZXR0aW5nfGVufDB8fHx8MTcwMTkxNjY5OHww&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 848w, https://images.unsplash.com/photo-1581852549708-72910bd52cff?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwzfHxzcG9ydHMlMjBiZXR0aW5nfGVufDB8fHx8MTcwMTkxNjY5OHww&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 1272w, https://images.unsplash.com/photo-1581852549708-72910bd52cff?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwzfHxzcG9ydHMlMjBiZXR0aW5nfGVufDB8fHx8MTcwMTkxNjY5OHww&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em>Photo by <a href="https://unsplash.com/@timhart0421">Tim Hart</a></em></figcaption></figure></div><h1>Premise</h1><p>Sports books in America are synonymous to the credit card companies of yesteryear. They&#8217;re looking to capture the largest market share in the least amount of time, and are willing to cut into their massive profits to make the onboarding process easier.</p><p>This aggressiveness lends them to providing outrageous sign up bonuses for first time users, and follow up bonuses so you don&#8217;t churn away. Let&#8217;s take a look at our players.</p><ol><li><p><strong>BetMGM</strong> - There are many benefits when you&#8217;re working with quite possibly the worst sportsbook user interface. Their </p></li><li><p><strong>Fanduel</strong> - $3000 promo for Super Bowl. I&#8217;ve churned this twice for a neat 1.6K profit. My accounts been marked as a whale with my weekly turnover.</p></li><li><p><strong>Hard Rock Casino</strong> - Can&#8217;t multi state bet which sucks since I really enjoyed turning a tidy profit on Alcaraz&#8217;s game.</p></li><li><p><strong>Caesar&#8217;s</strong> - we&#8217;ll touch on this beauty later.</p></li></ol><h1>A conversation</h1><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Xpgk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7857dc32-5a42-450f-9b83-bfb53381cc9d_1024x1014.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Xpgk!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7857dc32-5a42-450f-9b83-bfb53381cc9d_1024x1014.png 424w, https://substackcdn.com/image/fetch/$s_!Xpgk!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7857dc32-5a42-450f-9b83-bfb53381cc9d_1024x1014.png 848w, https://substackcdn.com/image/fetch/$s_!Xpgk!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7857dc32-5a42-450f-9b83-bfb53381cc9d_1024x1014.png 1272w, https://substackcdn.com/image/fetch/$s_!Xpgk!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7857dc32-5a42-450f-9b83-bfb53381cc9d_1024x1014.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Xpgk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7857dc32-5a42-450f-9b83-bfb53381cc9d_1024x1014.png" width="1024" height="1014" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7857dc32-5a42-450f-9b83-bfb53381cc9d_1024x1014.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1014,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:195724,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Xpgk!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7857dc32-5a42-450f-9b83-bfb53381cc9d_1024x1014.png 424w, https://substackcdn.com/image/fetch/$s_!Xpgk!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7857dc32-5a42-450f-9b83-bfb53381cc9d_1024x1014.png 848w, https://substackcdn.com/image/fetch/$s_!Xpgk!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7857dc32-5a42-450f-9b83-bfb53381cc9d_1024x1014.png 1272w, https://substackcdn.com/image/fetch/$s_!Xpgk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7857dc32-5a42-450f-9b83-bfb53381cc9d_1024x1014.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div>
      <p>
          <a href="https://blog.virenmohindra.me/p/sports-bet-hedging-with-free-rolls">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Navigating a Maze of Frustration: My Grievances with Magic's Services]]></title><description><![CDATA[Raising $80MM to shit the bed]]></description><link>https://blog.virenmohindra.me/p/navigating-a-maze-of-frustration</link><guid isPermaLink="false">https://blog.virenmohindra.me/p/navigating-a-maze-of-frustration</guid><dc:creator><![CDATA[Viren Mohindra]]></dc:creator><pubDate>Wed, 29 Nov 2023 19:03:26 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!HVjP!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F8935defa-4d02-402b-879e-d7f8b6ed5e10_76x76.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>3-min read<br>In the tech world, we often hear stories of seamless integrations (Stripe), stellar customer service (Stripe), and products that seem almost magical in their efficiency (Stripe). Unfortunately, my recent experience with Magic, a third-party provider, starkly contrasts these ideals. I'm writing this post to share the myriad of issues we've faced, highlighting the significant impact on our business and the lessons learned along the way.</em></p><p><strong>Unanticipated Service Downgrades and Billing Confusion:</strong> Our journey into the abyss began with an unexpected downgrade in our Pro Bundle Plan. No communication, no email alerts &#8211; just a sudden change that we stumbled upon. This wasn't just an oversight; it reflected a deeper problem in transparency and customer communication within Magic.</p><p><strong>The Domino Effect on Our Services:</strong> This downgrade triggered a loss of auto-refresh magic sessions. Imagine our shock when this led to a month-long (and counting) disruption of service for all our users. An app-breaking issue, stemming from a change we weren't even informed about!</p><p><strong>Quick Fixes, Lingering Problems:</strong> Magic's response, while prompt, was akin to placing a band-aid on a gaping wound. The fixes resolved nothing substantial, leaving us to grapple with TypeScript issues and untested Expo packages. Our engineering team spent precious time scouring GitHub issues, trying to discern if the problem was on our end or Magic's. Spoiler alert: it was on Magic's.</p><p><strong>Wasted Resources and Stalled Development:</strong> The fallout was immense. We burned through a long weekend and three full working days, troubleshooting, attending calls, and reporting issues &#8211; all to no avail. Our development cycle ground to a halt, as Magic's issues blocked us from pushing out new builds.</p><p><strong>Reluctance to Change, Despite Discontent:</strong> Staying with Magic wasn&#8217;t a choice driven by satisfaction but a lack of bandwidth to switch providers or develop our own authentication solution. This is a crucial point for startups to consider &#8211; sometimes the devil you know seems better than the devil you don't.</p><p><strong>Support Channels: A Labyrinthine Endeavor:</strong> Seeking support from Magic turned into a Herculean task. Immediate help was a myth; we were funneled into scheduled calls and endless back-and-forths, leading nowhere but to increased frustration.</p><p><strong>A Broken Website Experience:</strong> To add insult to injury, Magic's website was a nightmare. A non-functional search feature, a user export request that took months to implement (and still underperforms), and the inability to perform basic sorting &#8211; it was less magic and more tragic.</p><p><strong>Conclusion: A Call for Accountability and Change:</strong> This post isn't just a venting session but a call to action. Service providers like Magic must understand the gravity of their shortcomings and the ripple effect on their clients' businesses. As for fellow entrepreneurs and tech enthusiasts, let this be a reminder to continuously evaluate your service providers, demand transparency, and always have a contingency plan.</p><p>In the end, the magic we seek in technology services lies not in grand promises but in reliability, effective communication, and a commitment to problem-solving. It's time for Magic to step up their game or step aside.</p><div><hr></div>]]></content:encoded></item><item><title><![CDATA[Mandatory Update OTA on React Native]]></title><description><![CDATA[Over the Air Update]]></description><link>https://blog.virenmohindra.me/p/mandatory-update-ota-on-react-native</link><guid isPermaLink="false">https://blog.virenmohindra.me/p/mandatory-update-ota-on-react-native</guid><dc:creator><![CDATA[Viren Mohindra]]></dc:creator><pubDate>Wed, 01 Nov 2023 19:25:19 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!HVjP!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F8935defa-4d02-402b-879e-d7f8b6ed5e10_76x76.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>1-min read<br>Trivial implementation to force update users to the latest version without having to install any number of the various paid libraries out there in React-land.</em></p><p>The optimal use case is when you have access to OTA and can target prior versions to upgrade backend endpoints so that everyone is pushed to the latest version. With expo this fairly easy and can be run with this command</p><pre><code>eas update --branch production -p ios</code></pre><p>Code snippet below - </p><pre><code>// your various imports here

// constants
const LATEST_VERSION = '2.2.8'
const LATEST_VERSION_NUMBER = Number(STABLE_VERSION.split('.').join(''))
const appStoreName = 'gently-shop-fashion-deals'
const appStoreId = 'id6450376418'
const appStoreURL = `itms-apps://apps.apple.com/id/app/${appStoreName}/${appStoreId}?l=id`

const Root = () =&gt; {
  const ver = Number(Constants.expoConfig.version.split('.').join(''))

  if (ver &lt; LATEST_VERSION_NUMBER) {
    Alert.alert(
      'New Update Available',
      'For the best experience and new features, please update your app now.',
      [{ text: 'Update Now', onPress: () =&gt; Linking.openURL(appStoreURL) }]
    )
  } else
    return (
      &lt;SessionProvider&gt;
        &lt;HomeStateProvider&gt;
          &lt;GlobalStateProvider&gt;
            &lt;StripeProvider
              publishableKey={STRIPE_PUBLISHABLE_KEY}
              urlScheme="gently"
              merchantIdentifier="merchant.com.gently"
            &gt;
              &lt;ThemeProvider theme={theme}&gt;
                &lt;Toast&gt;
                &lt;App /&gt;
              &lt;/ThemeProvider&gt;
            &lt;/StripeProvider&gt;
          &lt;/GlobalStateProvider&gt;
        &lt;/HomeStateProvider&gt;
      &lt;/SessionProvider&gt;
    )
}</code></pre><p>A simple explanation of the constants for the uninitiated</p><ol><li><p><code>LATEST_VERSION</code>:  This will be the minimum semver in a string format. Any version below will be forced to update, i.e. a user still on v2.6.0 will see the non-dismissible Alert dialog if the latest app version is v2.8.0.</p></li><li><p><code>appStoreName</code>, <code>appStoreId</code>: You can find these when visiting your app URL and copying it over. Various resources available.</p></li></ol><div><hr></div>]]></content:encoded></item><item><title><![CDATA[Shaping Your Thinking]]></title><description><![CDATA[credit to the realGeorgeHotz]]></description><link>https://blog.virenmohindra.me/p/shaping-your-thinking</link><guid isPermaLink="false">https://blog.virenmohindra.me/p/shaping-your-thinking</guid><dc:creator><![CDATA[Viren Mohindra]]></dc:creator><pubDate>Thu, 12 Oct 2023 00:17:23 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!HVjP!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F8935defa-4d02-402b-879e-d7f8b6ed5e10_76x76.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>8-min read<br>Below is a list of write ups that recently shaped my thinking (via <a href="https://twitter.com/realGeorgeHotz">@realGeorgeHotz</a>), and will hopefully provide some clarity and cut through the nonsense and noise.</em></p><ol><li><p><a href="https://web.archive.org/web/20070613184827/http://yudkowsky.net/singularity.html">Singularity</a>, Eliezer S. Yudkowsky, 18 Nov, 1996.</p></li><li><p><a href="http://www.catb.org/~esr/faqs/hacker-howto.html">How To Become A Hacker</a>, Eric Steven Raymond, 4 Oct, 2007.</p></li><li><p><a href="https://ranprieur.com/essays/dropout.html#HTDO">How to Drop Out</a>, Ran Prieur, 2 Apr, 2004.</p></li><li><p><a href="https://www.unqualified-reservations.org/2008/04/open-letter-to-open-minded-progressives/">An Open Letter To Open-minded Progressives</a>, Mencius Moldbug, 17 Apr, 2008.</p></li><li><p><a href="http://localroger.com/prime-intellect/mopi1.html">The Metamorphosis of Prime Intellect</a>, Roger Williams, 14 Oct, 2003.</p></li></ol><div><hr></div><h3>Singularity</h3><p>Eliezer S. Yudkowsky's "Singularity" essay from 1996 is one of the early writings on the concept of the technological singularity.</p>
      <p>
          <a href="https://blog.virenmohindra.me/p/shaping-your-thinking">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Lighting up Empire State]]></title><description><![CDATA[Conversations and scuffles on Orchard, with a dash of kizomba]]></description><link>https://blog.virenmohindra.me/p/lighting-up-empire-state</link><guid isPermaLink="false">https://blog.virenmohindra.me/p/lighting-up-empire-state</guid><dc:creator><![CDATA[Viren Mohindra]]></dc:creator><pubDate>Sat, 07 Oct 2023 19:10:48 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!zNhF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87024210-f8b8-4a46-aba7-d571d94f6c92_1200x780.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>&#127961;&#65039; &#128154;<br><em>3-min read</em></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!zNhF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87024210-f8b8-4a46-aba7-d571d94f6c92_1200x780.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!zNhF!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87024210-f8b8-4a46-aba7-d571d94f6c92_1200x780.webp 424w, https://substackcdn.com/image/fetch/$s_!zNhF!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87024210-f8b8-4a46-aba7-d571d94f6c92_1200x780.webp 848w, https://substackcdn.com/image/fetch/$s_!zNhF!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87024210-f8b8-4a46-aba7-d571d94f6c92_1200x780.webp 1272w, https://substackcdn.com/image/fetch/$s_!zNhF!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87024210-f8b8-4a46-aba7-d571d94f6c92_1200x780.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!zNhF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87024210-f8b8-4a46-aba7-d571d94f6c92_1200x780.webp" width="1200" height="780" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/87024210-f8b8-4a46-aba7-d571d94f6c92_1200x780.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:780,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:26734,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!zNhF!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87024210-f8b8-4a46-aba7-d571d94f6c92_1200x780.webp 424w, https://substackcdn.com/image/fetch/$s_!zNhF!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87024210-f8b8-4a46-aba7-d571d94f6c92_1200x780.webp 848w, https://substackcdn.com/image/fetch/$s_!zNhF!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87024210-f8b8-4a46-aba7-d571d94f6c92_1200x780.webp 1272w, https://substackcdn.com/image/fetch/$s_!zNhF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87024210-f8b8-4a46-aba7-d571d94f6c92_1200x780.webp 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div>
      <p>
          <a href="https://blog.virenmohindra.me/p/lighting-up-empire-state">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Mohindra Fund]]></title><description><![CDATA[finally soft launching my fund after a year in stealth]]></description><link>https://blog.virenmohindra.me/p/mohindra-fund</link><guid isPermaLink="false">https://blog.virenmohindra.me/p/mohindra-fund</guid><dc:creator><![CDATA[Viren Mohindra]]></dc:creator><pubDate>Tue, 04 Apr 2023 14:22:59 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!N1mO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71b2592e-3c6b-4e28-804c-619bfd6d9cdd_848x308.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>1-min read<br>Last Updated 1 April 2023</em></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!N1mO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71b2592e-3c6b-4e28-804c-619bfd6d9cdd_848x308.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!N1mO!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71b2592e-3c6b-4e28-804c-619bfd6d9cdd_848x308.webp 424w, https://substackcdn.com/image/fetch/$s_!N1mO!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71b2592e-3c6b-4e28-804c-619bfd6d9cdd_848x308.webp 848w, https://substackcdn.com/image/fetch/$s_!N1mO!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71b2592e-3c6b-4e28-804c-619bfd6d9cdd_848x308.webp 1272w, https://substackcdn.com/image/fetch/$s_!N1mO!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71b2592e-3c6b-4e28-804c-619bfd6d9cdd_848x308.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!N1mO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71b2592e-3c6b-4e28-804c-619bfd6d9cdd_848x308.webp" width="848" height="308" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/71b2592e-3c6b-4e28-804c-619bfd6d9cdd_848x308.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:308,&quot;width&quot;:848,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2740,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!N1mO!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71b2592e-3c6b-4e28-804c-619bfd6d9cdd_848x308.webp 424w, https://substackcdn.com/image/fetch/$s_!N1mO!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71b2592e-3c6b-4e28-804c-619bfd6d9cdd_848x308.webp 848w, https://substackcdn.com/image/fetch/$s_!N1mO!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71b2592e-3c6b-4e28-804c-619bfd6d9cdd_848x308.webp 1272w, https://substackcdn.com/image/fetch/$s_!N1mO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71b2592e-3c6b-4e28-804c-619bfd6d9cdd_848x308.webp 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>If you&#8217;re looking to raise money for your prototype (not idea!), I would love to chat. Please send me a link to what you&#8217;ve built and a few sentences on you and why you built it: <a href="mailto:viren@mohindra.fund">viren@mohindra.fund</a></p><p>Website Link: <a href="https://mohindra.fund/">Mohindra Fund</a></p><div><hr></div><p>There are few criteria that I am unwilling to compromise on</p><ol><li><p>Standard check sizes ranging from $5-10k</p><ul><li><p><em>I can&#8217;t do less and I can&#8217;t do more at this time.</em></p></li><li><p><em>For 2023, I&#8217;m planning on cutting a minimum of 20 checks and maximum of 40.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</a></em></p></li></ul></li><li><p>I only invest in domains I have some familiarity with and am a value-add</p><ul><li><p><em>Fintech, and B2B SaaS, Agritech are my personal preferences (in that order).</em></p></li></ul></li><li><p>Founder - Investor fit is imperative</p><ul><li><p><em>Yes, the idea and execution, but I only invest in founders I would work for.</em></p></li></ul></li><li><p>They&#8217;re written off the second the wire hits your account</p><ul><li><p><em>A double-edged sword: this does not mean I&#8217;m averse to advising you in larger capacity &#8212; I&#8217;m instead committed to the cause and growth of your company and do not want monetary incentivization to introduce decisions bias.</em></p></li></ul></li><li><p>Deck is optional, prototype isn&#8217;t</p><ul><li><p><em>I do not care for the TAM, but you&#8217;ve got my attention if you have something I can play around with.</em></p></li></ul></li><li><p>If you&#8217;ve already raised and have lawyers handling the agreements, I&#8217;m open to working with them. Otherwise &#8212;</p><ul><li><p><em>I have standard agreements which are pro-founder and are battle-tested.</em><a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-2" href="#footnote-2" target="_self">2</a></p></li></ul></li><li><p>A safety net is fine for the most part</p><ul><li><p><em>There is no need (or rush) to quit your full-time job but once you&#8217;re fully allocated there is an expectation to pursue this properly.</em></p></li></ul></li><li><p>One can expect (and should expect) to be allocated up to 250K from my network</p><ul><li><p><em>I can and will help with fundraising your pre-seed and complete allocation.</em></p></li></ul></li><li><p>I can&#8217;t and won&#8217;t help with everything (and nor should I)</p><ul><li><p><em>Setting expectations is important.</em></p></li></ul></li><li><p>I don&#8217;t mind or care for big names on the cap table.</p><ul><li><p><em>I&#8217;ll be as hands off or on depending on the domain and founder need.</em></p></li></ul></li><li><p>Once the diligence process kicks off, I prefer to close in less than 60 days</p><ul><li><p><em>Barring any complications &#8212; which there really shouldn&#8217;t be at this stage anyway</em></p></li></ul></li><li><p>Monthly updates are optional, communication is required</p><ul><li><p><em>I index on the primary founder, and check for</em></p><ul><li><p><em>willpower</em></p></li><li><p><em>intelligence</em></p></li><li><p><em>thoughtfulness</em></p></li><li><p><em>appropriate greed</em></p></li><li><p><em>appropriate discipline</em></p></li><li><p><em>high velocity</em></p></li><li><p><em>daily expectations</em></p></li><li><p><em>ability to attract S-tier team</em><a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-3" href="#footnote-3" target="_self">3</a></p></li></ul></li></ul></li></ol><div><hr></div><p><em>References available on request</em></p><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-1" href="#footnote-anchor-1" class="footnote-number" contenteditable="false" target="_self">1</a><div class="footnote-content"><p>I lean towards portcos with 2+ founders.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-2" href="#footnote-anchor-2" class="footnote-number" contenteditable="false" target="_self">2</a><div class="footnote-content"><p>I&#8217;d ideally like to run them through Singapore / Caymans.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-3" href="#footnote-anchor-3" class="footnote-number" contenteditable="false" target="_self">3</a><div class="footnote-content"><p>This early the right founder will figure the rest out</p><p></p></div></div>]]></content:encoded></item><item><title><![CDATA[five business days]]></title><description><![CDATA[what was she wearing? a soft smile.]]></description><link>https://blog.virenmohindra.me/p/five-business-days-a8f</link><guid isPermaLink="false">https://blog.virenmohindra.me/p/five-business-days-a8f</guid><dc:creator><![CDATA[Viren Mohindra]]></dc:creator><pubDate>Thu, 02 Mar 2023 09:28:07 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!HVjP!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F8935defa-4d02-402b-879e-d7f8b6ed5e10_76x76.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>8-min read</em></p>
      <p>
          <a href="https://blog.virenmohindra.me/p/five-business-days-a8f">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Muse]]></title><description><![CDATA[you can either say yes, and be my muse, or say no, and remain my inspiration]]></description><link>https://blog.virenmohindra.me/p/muse</link><guid isPermaLink="false">https://blog.virenmohindra.me/p/muse</guid><dc:creator><![CDATA[Viren Mohindra]]></dc:creator><pubDate>Tue, 14 Feb 2023 15:07:11 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ojef!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1ec323b-83c6-47ba-b8cd-5de47ec25cf8_600x386.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>7-min read</em></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ojef!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1ec323b-83c6-47ba-b8cd-5de47ec25cf8_600x386.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ojef!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1ec323b-83c6-47ba-b8cd-5de47ec25cf8_600x386.jpeg 424w, https://substackcdn.com/image/fetch/$s_!ojef!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1ec323b-83c6-47ba-b8cd-5de47ec25cf8_600x386.jpeg 848w, https://substackcdn.com/image/fetch/$s_!ojef!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1ec323b-83c6-47ba-b8cd-5de47ec25cf8_600x386.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!ojef!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1ec323b-83c6-47ba-b8cd-5de47ec25cf8_600x386.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ojef!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1ec323b-83c6-47ba-b8cd-5de47ec25cf8_600x386.jpeg" width="600" height="386" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d1ec323b-83c6-47ba-b8cd-5de47ec25cf8_600x386.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:386,&quot;width&quot;:600,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:45338,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!ojef!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1ec323b-83c6-47ba-b8cd-5de47ec25cf8_600x386.jpeg 424w, https://substackcdn.com/image/fetch/$s_!ojef!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1ec323b-83c6-47ba-b8cd-5de47ec25cf8_600x386.jpeg 848w, https://substackcdn.com/image/fetch/$s_!ojef!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1ec323b-83c6-47ba-b8cd-5de47ec25cf8_600x386.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!ojef!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1ec323b-83c6-47ba-b8cd-5de47ec25cf8_600x386.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em><a href="https://xkcd.com/162/">From xkcd</a></em></figcaption></figure></div>
      <p>
          <a href="https://blog.virenmohindra.me/p/muse">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[My Thesis]]></title><description><![CDATA[I wasn&#8217;t fibbing when I said SWE by day, farmer by night.]]></description><link>https://blog.virenmohindra.me/p/my-thesis</link><guid isPermaLink="false">https://blog.virenmohindra.me/p/my-thesis</guid><dc:creator><![CDATA[Viren Mohindra]]></dc:creator><pubDate>Wed, 26 Oct 2022 13:43:38 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!OFCa!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F8ff2ecd9-2ba1-40b2-8c65-469094ee8428_2292x1166.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>5-min read<br>It&#8217;s not a matter of if I&#8217;m going back to India, it&#8217;s when. I&#8217;ve listed some of the ideas which take up a not non-significant part of my weekends.</em></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!OFCa!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F8ff2ecd9-2ba1-40b2-8c65-469094ee8428_2292x1166.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!OFCa!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F8ff2ecd9-2ba1-40b2-8c65-469094ee8428_2292x1166.png 424w, https://substackcdn.com/image/fetch/$s_!OFCa!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F8ff2ecd9-2ba1-40b2-8c65-469094ee8428_2292x1166.png 848w, https://substackcdn.com/image/fetch/$s_!OFCa!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F8ff2ecd9-2ba1-40b2-8c65-469094ee8428_2292x1166.png 1272w, https://substackcdn.com/image/fetch/$s_!OFCa!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F8ff2ecd9-2ba1-40b2-8c65-469094ee8428_2292x1166.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!OFCa!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F8ff2ecd9-2ba1-40b2-8c65-469094ee8428_2292x1166.png" width="1456" height="741" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/8ff2ecd9-2ba1-40b2-8c65-469094ee8428_2292x1166.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:741,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:288050,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!OFCa!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F8ff2ecd9-2ba1-40b2-8c65-469094ee8428_2292x1166.png 424w, https://substackcdn.com/image/fetch/$s_!OFCa!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F8ff2ecd9-2ba1-40b2-8c65-469094ee8428_2292x1166.png 848w, https://substackcdn.com/image/fetch/$s_!OFCa!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F8ff2ecd9-2ba1-40b2-8c65-469094ee8428_2292x1166.png 1272w, https://substackcdn.com/image/fetch/$s_!OFCa!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F8ff2ecd9-2ba1-40b2-8c65-469094ee8428_2292x1166.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em>Start small by building capital and networks in other lucrative fields and endeavors and go back to the real problems facing society today.</em></figcaption></figure></div><h1>Brain Drain</h1><p>I have had the chance to renege my Indian passport on a number of occasions, the earliest when I resided in Singapore, and then in Hong Kong. Lion City was an easy decision, they require mandatory conscription and even though they hold a strong passport, I am not willing to serve any country besides my own. While I hold a permanent residency in HK, replacing it with my motherland also doesn&#8217;t solve my main concerns, notably having access to purchase land under my own name.</p><p>Some of the more novel ideas I&#8217;ve been working on for the past few years require me to own farmland in India and without the status I am left to rely on others for help. </p><p>I&#8217;ve bifurcated my projects into a few overarching categories:</p><h2>Food Security</h2><p>Growing world population threatens future food and feed security as natural resources are currently being over exploited. FAO estimates that commercial feed production needs to increase by 70% in the next 30 years to meet the growing demand for protein. This increase of demand has forced the price of fishmeal to increase in land sustainable innovations are critical to combat this issue. Insect feed farms have risen up to combat this issue and has made them extremely attractive for various livestock production systems.</p><p>Producing insect proteins as an alternative to the fish and soybean meal that currently dominates the market can be made at roughly 60-70% of production costs. Fishmeal production as feed is currently unsustainable and has lead to the collapse of many fisheries and now is being considered too expensive to use in most farm animal diets.</p>
      <p>
          <a href="https://blog.virenmohindra.me/p/my-thesis">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Gently.com]]></title><description><![CDATA[Excited to announce our $2MM Pre-seed for Gently.com in a round that included over 20 investors like Jason Calacanis&#8217;s Launch, Bloom Tech&#8217;s Aust&#8230;]]></description><link>https://blog.virenmohindra.me/p/gentlycom</link><guid isPermaLink="false">https://blog.virenmohindra.me/p/gentlycom</guid><dc:creator><![CDATA[Viren Mohindra]]></dc:creator><pubDate>Tue, 27 Sep 2022 15:14:25 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!_IpH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F65915b93-0e1b-48ac-98a0-0e82a23ecb33_1200x675.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Excited to announce our $2MM Pre-seed for <a href="http://gently.com/">Gently.com</a> in a round that included over 20 investors like Jason Calacanis&#8217;s Launch, Bloom Tech&#8217;s Austen Allred, Shutterstock&#8217;s Jon Oringer, RXBar&#8217;s Peter Rahal, Dorm Room Fund and V1.VC.At Gently, we&#8217;re building the demand layer for second hand shopping. Would love to connect with other folks in the space!</p><p><a href="https://techcrunch.com/2022/09/26/gently-shopping-secondhand-apparel">TechCrunch</a> | <a href="https://fortune.com/2022/09/27/thoma-bravo-crypto-investing-break-ethical-concerns/">Fortune Term Sheet</a> | <a href="https://ww.fashionnetwork.com/news/Second-hand-fashion-startup-gently-raises-2-million-in-funds,1442764.html">Fashion Network</a></p><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/samuel_spitz/status/1574444858609004554&quot;,&quot;full_text&quot;:&quot;Excited to officially announce the $2mm pre-seed we raised for <span class=\&quot;tweet-fake-link\&quot;>@gently_com</span>!\n\n&quot;,&quot;username&quot;:&quot;samuel_spitz&quot;,&quot;name&quot;:&quot;Samuel Spitz&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Mon Sep 26 17:04:40 +0000 2022&quot;,&quot;photos&quot;:[],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:27,&quot;like_count&quot;:481,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{&quot;url&quot;:&quot;https://techcrunch.com/2022/09/26/gently-shopping-secondhand-apparel/&quot;,&quot;image&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/65915b93-0e1b-48ac-98a0-0e82a23ecb33_1200x675.jpeg&quot;,&quot;title&quot;:&quot;Gently&#8217;s shopping aggregator aims to remove friction of locating secondhand apparel&quot;,&quot;description&quot;:&quot;Gently shopping aggregator enables users to search, filter and get alerts from their favorite secondhand apparel sites.&quot;,&quot;domain&quot;:&quot;techcrunch.com&quot;},&quot;video_url&quot;:null,&quot;belowTheFold&quot;:false}" data-component-name="Twitter2ToDOM"></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!mCSo!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F800a910d-7c33-4bb1-8955-00453bbbfec1_2212x558.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!mCSo!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F800a910d-7c33-4bb1-8955-00453bbbfec1_2212x558.png 424w, https://substackcdn.com/image/fetch/$s_!mCSo!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F800a910d-7c33-4bb1-8955-00453bbbfec1_2212x558.png 848w, https://substackcdn.com/image/fetch/$s_!mCSo!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F800a910d-7c33-4bb1-8955-00453bbbfec1_2212x558.png 1272w, https://substackcdn.com/image/fetch/$s_!mCSo!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F800a910d-7c33-4bb1-8955-00453bbbfec1_2212x558.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!mCSo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F800a910d-7c33-4bb1-8955-00453bbbfec1_2212x558.png" width="1456" height="367" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/800a910d-7c33-4bb1-8955-00453bbbfec1_2212x558.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:367,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:212722,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!mCSo!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F800a910d-7c33-4bb1-8955-00453bbbfec1_2212x558.png 424w, https://substackcdn.com/image/fetch/$s_!mCSo!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F800a910d-7c33-4bb1-8955-00453bbbfec1_2212x558.png 848w, https://substackcdn.com/image/fetch/$s_!mCSo!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F800a910d-7c33-4bb1-8955-00453bbbfec1_2212x558.png 1272w, https://substackcdn.com/image/fetch/$s_!mCSo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F800a910d-7c33-4bb1-8955-00453bbbfec1_2212x558.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><iframe class="spotify-wrap playlist" data-attrs="{&quot;image&quot;:&quot;https://i.scdn.co/image/ab67706c0000bebbc89cfa6b4d0ccc1a17076413&quot;,&quot;title&quot;:&quot;The Logical Song - Remastered 2010&quot;,&quot;subtitle&quot;:&quot;Supertramp&quot;,&quot;description&quot;:&quot;six letter dot com domains by Viren Mohindra&quot;,&quot;url&quot;:&quot;https://open.spotify.com/playlist/1U7LFFO9Yw8fYFyGuA3J3C&quot;,&quot;belowTheFold&quot;:false,&quot;noScroll&quot;:false}" src="https://open.spotify.com/embed/playlist/1U7LFFO9Yw8fYFyGuA3J3C" frameborder="0" gesture="media" allowfullscreen="true" allow="encrypted-media" data-component-name="Spotify2ToDOM"></iframe><div><hr></div>]]></content:encoded></item><item><title><![CDATA[The case for Ω and next steps]]></title><description><![CDATA[My Aqua Terra Golf won't get me under 72 but at least I can try aping Rory]]></description><link>https://blog.virenmohindra.me/p/the-case-for-and-next-steps</link><guid isPermaLink="false">https://blog.virenmohindra.me/p/the-case-for-and-next-steps</guid><dc:creator><![CDATA[Viren Mohindra]]></dc:creator><pubDate>Tue, 27 Sep 2022 15:07:06 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!HVjP!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F8935defa-4d02-402b-879e-d7f8b6ed5e10_76x76.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>3-min read</em></p><p><em>It&#8217;s been a while since I dropped a watch post and a whole four months since I picked up my latest watch. I&#8217;m back in Delhi which means I have time to push out content since half my free time will likely be spent in hour-long traffic and what better way to utilize that by jotting down some notes for my blog. In this writeup, I&#8217;ll touch upon my reasoning for purchasing the Omega Seamaster Aqua Terra Golf, how it fits into my rainbow collection, how I missed the opportunity to pick up a Grand Seiko, and why gatekeeping the horological industry is an inane and fruitless endeavor (specifically the Swatch incident/ collaboration).</em></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!k4VJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fa16f7ccb-22cf-4c91-94e1-f15755416df0_270x480.gif" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!k4VJ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fa16f7ccb-22cf-4c91-94e1-f15755416df0_270x480.gif 424w, https://substackcdn.com/image/fetch/$s_!k4VJ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fa16f7ccb-22cf-4c91-94e1-f15755416df0_270x480.gif 848w, https://substackcdn.com/image/fetch/$s_!k4VJ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fa16f7ccb-22cf-4c91-94e1-f15755416df0_270x480.gif 1272w, https://substackcdn.com/image/fetch/$s_!k4VJ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fa16f7ccb-22cf-4c91-94e1-f15755416df0_270x480.gif 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!k4VJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fa16f7ccb-22cf-4c91-94e1-f15755416df0_270x480.gif" width="320" height="568.8888888888889" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/a16f7ccb-22cf-4c91-94e1-f15755416df0_270x480.gif&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:480,&quot;width&quot;:270,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2980362,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/gif&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!k4VJ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fa16f7ccb-22cf-4c91-94e1-f15755416df0_270x480.gif 424w, https://substackcdn.com/image/fetch/$s_!k4VJ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fa16f7ccb-22cf-4c91-94e1-f15755416df0_270x480.gif 848w, https://substackcdn.com/image/fetch/$s_!k4VJ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fa16f7ccb-22cf-4c91-94e1-f15755416df0_270x480.gif 1272w, https://substackcdn.com/image/fetch/$s_!k4VJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fa16f7ccb-22cf-4c91-94e1-f15755416df0_270x480.gif 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em>recorded the video a day after my birthday</em></figcaption></figure></div>
      <p>
          <a href="https://blog.virenmohindra.me/p/the-case-for-and-next-steps">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[The Only Pull Request that Passed in the House of Commons]]></title><description><![CDATA[A tail of two merge requests.]]></description><link>https://blog.virenmohindra.me/p/the-only-pull-request-that-passed</link><guid isPermaLink="false">https://blog.virenmohindra.me/p/the-only-pull-request-that-passed</guid><dc:creator><![CDATA[Viren Mohindra]]></dc:creator><pubDate>Tue, 27 Sep 2022 15:06:05 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!HVjP!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F8935defa-4d02-402b-879e-d7f8b6ed5e10_76x76.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>3-min read</em></p><p>Boris Johnson had had a long day. Countless meetings, appraisals, and bills were stacked high upon his desk. He was in no mood for squabble, but took some time out to play the latest <em>Wordle</em>. While deciding between CRANE and ADIEU, the first two  notes of Satie's Gnossienne 5 (but two semi-tones lower &#8212; C, F instead of D, G) played abruptly, leaving a ringing noise in ol&#8217; Bojo&#8217;s ear. For the uninitiated, this was also the Gmail Notification sound on iOS. Unlike his ex-US counterpart, Mr. Johnson was fully prepared to make the switch from Blackberry to iPhone.</p>
      <p>
          <a href="https://blog.virenmohindra.me/p/the-only-pull-request-that-passed">
              Read more
          </a>
      </p>
   ]]></content:encoded></item></channel></rss>