<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="/rss.xsl"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Nikhilvarma Kandula · kandula.studio</title>
    <link>https://kandula.studio/</link>
    <atom:link href="https://kandula.studio/rss.xml" rel="self" type="application/rss+xml" />
    <description>Case studies from Nikhilvarma Kandula: shipped products, data investigations and peer-reviewed research.</description>
    <language>en</language>
    <item>
      <title>What it actually takes to make a site legible to an AI</title>
      <link>https://kandula.studio/notes/making-a-site-legible-to-ai/</link>
      <guid isPermaLink="true">https://kandula.studio/notes/making-a-site-legible-to-ai/</guid>
      <pubDate>Sat, 29 Aug 2026 00:00:00 GMT</pubDate>
      <description>I build a tool that measures how language models describe law firms, then found my own site invisible to the same systems. Here is what was actually missing.</description>
      <category>Notes</category>
    </item>
    <item>
      <title>Fintech Real Estate Intelligence System</title>
      <link>https://kandula.studio/work/microintech/</link>
      <guid isPermaLink="true">https://kandula.studio/work/microintech/</guid>
      <description>For eighteen months I worked on a US fintech platform that told real-estate investors what their money was doing. It started as one large program that did everything, which meant a report could take hours and every new feature made the next one harder. I broke it into separate services that talk to each other, rebuilt the data pipelines so they process events as they arrive rather than in overnight batches, and wrapped language models around the audit work that analysts were doing by hand. I joined as a data engineer and left as lead developer.</description>
      <category>Professional</category>
    </item>
    <item>
      <title>Rainfall Estimation via Heterogeneous Data Fusion</title>
      <link>https://kandula.studio/work/rainfall-paper/</link>
      <guid isPermaLink="true">https://kandula.studio/work/rainfall-paper/</guid>
      <description>Measuring rain sounds simple and is not. Rain gauges are accurate but there are very few of them. Radar covers more ground but is biased. Satellites see everywhere and resolve almost nothing. Each one is wrong in a way the others are not, so this work combines all three into a single estimate, using a second model that learns which source to believe when they disagree. It beat the interpolation method the field treats as standard, and it matters most in exactly the places where flood warnings currently fail: the gaps between gauges.</description>
      <category>Research</category>
    </item>
    <item>
      <title>Knock</title>
      <link>https://kandula.studio/work/doorstep/</link>
      <guid isPermaLink="true">https://kandula.studio/work/doorstep/</guid>
      <description>Knock is a booking site for local services: a plumber, a cleaner, a tutor. A customer finds a provider, sees which times are genuinely free, and takes one. The provider sees the same calendar from the other side and manages what arrives. Almost none of the work is in the pages you can see. It is in making sure two people can never both walk away believing they hold the same eleven o&apos;clock on Thursday.</description>
      <category>Products</category>
    </item>
    <item>
      <title>FirstChair</title>
      <link>https://kandula.studio/work/firstchair/</link>
      <guid isPermaLink="true">https://kandula.studio/work/firstchair/</guid>
      <description>FirstChair watches how AI assistants talk about a law firm. When someone asks ChatGPT, Gemini or Perplexity to recommend a lawyer in their city, the answer they get is now part of that firm&apos;s reputation, and until recently nobody was measuring it. The tool asks each model the same questions repeatedly and reports what proportion of the time the firm shows up, where in the answer, and how it is described relative to named competitors.</description>
      <category>Products</category>
    </item>
    <item>
      <title>Cartwise</title>
      <link>https://kandula.studio/work/cartwise/</link>
      <guid isPermaLink="true">https://kandula.studio/work/cartwise/</guid>
      <description>Cartwise turns a supermarket receipt into a nutrition summary. You photograph the receipt, it reads the lines, works out what each abbreviated item actually is, and tells you what came into the house on that shop. It does not ask you to log anything, because the receipt was already written for you, and the reason nutrition apps get abandoned is not motivation, it is that logging is a chore you have to remember at the exact moment you least want to.</description>
      <category>Products</category>
    </item>
    <item>
      <title>Bud</title>
      <link>https://kandula.studio/work/habit-game/</link>
      <guid isPermaLink="true">https://kandula.studio/work/habit-game/</guid>
      <description>Bud is a habit tracker that borrows the parts games already solved: visible progress, a reward that lands immediately, and a cost for slipping that does not wipe out your history. There is no account and no sign-up: it opens instantly and your streak lives in your own browser. It exists because the honest problem with habit trackers is not that they lack features, it is that opening them is itself a habit most people fail at.</description>
      <category>Products</category>
    </item>
    <item>
      <title>Witness</title>
      <link>https://kandula.studio/work/witness/</link>
      <guid isPermaLink="true">https://kandula.studio/work/witness/</guid>
      <description>A returned gearbox part arrives with a complaint and almost nothing else. Someone photographs it, writes one sentence in a spreadsheet, and puts the part in a bin. When the same damage appears on a later batch, nobody can prove it, because the first record said &quot;worn&quot; and the second said &quot;pitting&quot; and neither cited a standard. Witness makes the record the product. A photograph becomes a record with a damage mode, a clause number, a severity, a cause and a link to the batch that made the part. The model suggests. The inspector decides.</description>
      <category>Products</category>
    </item>
    <item>
      <title>Ganymede</title>
      <link>https://kandula.studio/work/ganymede/</link>
      <guid isPermaLink="true">https://kandula.studio/work/ganymede/</guid>
      <description>A collections team has more accounts in arrears than it has hours to call them. Ganymede decides which accounts are worth calling, then helps the agent through the call that follows. It ranks by the money a call is expected to recover rather than by the probability the borrower defaults. Those two orderings are not the same, and the difference is most of the value. The outcome of each call becomes the label that retrains the model that picked it.</description>
      <category>Products</category>
    </item>
    <item>
      <title>E-Commerce Return Rate Analysis</title>
      <link>https://kandula.studio/work/return-rate/</link>
      <guid isPermaLink="true">https://kandula.studio/work/return-rate/</guid>
      <description>Returns are treated as an annoyance in most retail analysis. In Germany they are closer to a structural cost: return rates are among the highest in Europe and free returns are near enough a legal expectation. This looks at 541,000 UK retail transactions to ask which categories, price bands and customer segments generate the most returns, and reads the answer against a market where that cost sits inside the margin rather than beside it.</description>
      <category>Analysis</category>
    </item>
    <item>
      <title>Manufacturing Cost Variance Dashboard</title>
      <link>https://kandula.studio/work/qlik-cost-variance/</link>
      <guid isPermaLink="true">https://kandula.studio/work/qlik-cost-variance/</guid>
      <description>A controller&apos;s job when the monthly numbers land is to answer three questions fast: are we over budget, is it getting worse, and where is it coming from. Most variance dashboards answer either none of these (by showing everything at once) or only the first, by showing a single headline figure with no way to trace it. This one fixes a reading order: three questions, three regions of the screen, always in the same place.</description>
      <category>Analysis</category>
    </item>
    <item>
      <title>Does Environmental Performance Drive Economic Growth?</title>
      <link>https://kandula.studio/work/esg-gdp/</link>
      <guid isPermaLink="true">https://kandula.studio/work/esg-gdp/</guid>
      <description>This one asks whether countries that pollute less or use more renewable energy grow their economies faster. Across 38 OECD countries over eleven years, the answer is that this design cannot tell. The model explains essentially none of the variation in growth. It is on the site because a portfolio containing only confirmed hypotheses is a portfolio that has quietly deleted its failures, and because knowing that a plausible relationship does not show up at this level of aggregation is itself worth reporting.</description>
      <category>Analysis</category>
    </item>
    <item>
      <title>Quantifying Data Quality</title>
      <link>https://kandula.studio/work/data-quality/</link>
      <guid isPermaLink="true">https://kandula.studio/work/data-quality/</guid>
      <description>Is this dataset good enough to use? People ask that constantly and answer it by feel. This is an attempt to answer it with a number instead: four dimensions, each scored from 0 to 1, combined into one index. Tested on a real sensor dataset it scores 0.840 overall and looks healthy, except for one dimension: timeliness, at 0.626. Timeliness is also the dimension most frameworks quietly drop, and dropping it here would have reported 0.911 and told everyone that everything was fine.</description>
      <category>Analysis</category>
    </item>
    <item>
      <title>U.S. Flight Delay Analysis</title>
      <link>https://kandula.studio/work/flight-delay/</link>
      <guid isPermaLink="true">https://kandula.studio/work/flight-delay/</guid>
      <description>Almost every airline runs a programme to reduce delays, and most of them aim at weather and crew operations. Across 2.91 million US flights, the largest single cause is neither: 41.1% of all delay minutes come from the aircraft itself arriving late from its previous leg. That is not really a cause. It is yesterday&apos;s delay showing up again, propagating along the aircraft&apos;s route because the schedule has no slack in it. The finding needed no model at all.</description>
      <category>Analysis</category>
    </item>
    <item>
      <title>Cyclistic Bike-Share: Casual to Member</title>
      <link>https://kandula.studio/work/cyclistic/</link>
      <guid isPermaLink="true">https://kandula.studio/work/cyclistic/</guid>
      <description>A bike-share company wanted to know how to turn casual riders into paying members. The standard answer is to offer them a discount. Looking at 5.5 million real trips, that answer is aimed at the wrong person: casual riders are not members who have not signed up yet, they are doing something different on the bike. Members commute for twelve minutes on weekdays. Casual riders ride for nineteen minutes on Saturdays, and their weekday volume collapses by 93%. You cannot convert someone by discounting a product they were never buying.</description>
      <category>Analysis</category>
    </item>
    <item>
      <title>German Job Market Intelligence Corpus</title>
      <link>https://kandula.studio/work/deutschland-nlp/</link>
      <guid isPermaLink="true">https://kandula.studio/work/deutschland-nlp/</guid>
      <description>Careers advice for the German tech market runs on anecdote: learn Python, get good at SQL. Reasonable, but nobody had checked. Job adverts are the one place employers state in writing, at scale, what they will actually pay for, so I collected 3,200 validated German tech postings and read all of them with software. The headline is that Python and SQL appear together in 65% of postings: not two useful skills, but an empirical minimum pair.</description>
      <category>Analysis</category>
    </item>
  </channel>
</rss>
