<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Chrome Extension on Narasimha Karthik J</title><link>https://jnk234.github.io/tags/chrome-extension/</link><description>Recent content in Chrome Extension on Narasimha Karthik J</description><generator>Hugo</generator><language>en</language><lastBuildDate>Thu, 02 Apr 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://jnk234.github.io/tags/chrome-extension/index.xml" rel="self" type="application/rss+xml"/><item><title>LockIn: Browser Focus Tracker</title><link>https://jnk234.github.io/projects/lockin-browser-focus-tracker/</link><pubDate>Thu, 02 Apr 2026 00:00:00 +0000</pubDate><guid isPermaLink="false">https://jnk234.github.io/projects/lockin-browser-focus-tracker/#full</guid><description>&lt;p&gt;&lt;a href="https://github.com/JNK234/lockin" target="_blank" rel="noreferrer"&gt;Code on GitHub&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="what-it-is" class="relative group"&gt;What it is &lt;span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"&gt;&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style="text-decoration-line: none !important;" href="#what-it-is" aria-label="Anchor"&gt;#&lt;/a&gt;&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;You start a session with a goal, such as &amp;ldquo;fix auth bug in login flow&amp;rdquo;. The extension records each page you open. An LLM labels each visit on-task, distraction or ambiguous relative to that goal. If you drift, an overlay nudges you and offers to take you back. When the session ends you get a focus report.&lt;/p&gt;
&lt;p&gt;






 
 
&lt;figure&gt;&lt;img src="https://raw.githubusercontent.com/JNK234/lockin/main/docs/images/report-dashboard.png" alt="Focus report dashboard" class="mx-auto my-0 rounded-md" /&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 id="how-it-works" class="relative group"&gt;How it works &lt;span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"&gt;&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style="text-decoration-line: none !important;" href="#how-it-works" aria-label="Anchor"&gt;#&lt;/a&gt;&lt;/span&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Extension (Manifest V3).&lt;/strong&gt; Sends each page load, with its URL, title and page text, to the backend, and polls a nudge endpoint every 60 seconds.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Backend (FastAPI).&lt;/strong&gt; Stores the visit and returns at once. Classification runs as a background task, so browsing never waits on the model.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Classification.&lt;/strong&gt; A RocketRide pipeline sends GPT-4o the goal, URL, title and the first 2,000 characters of the page, and asks for a JSON label and reason.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Graph storage (Neo4j).&lt;/strong&gt; Sessions, tasks, visits, sites and nudges are nodes. Visits link in order with &lt;code&gt;NEXT&lt;/code&gt; edges, and sites link to tasks as &lt;code&gt;ON_TASK_FOR&lt;/code&gt; or &lt;code&gt;DISTRACTION_FROM&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Report and Q&amp;amp;A.&lt;/strong&gt; The report shows a focus score, a color-coded timeline, a per-site breakdown and LLM insights. A second pipeline answers plain-language questions about past sessions by querying the graph.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Neo4j runs in Docker Compose, and a seed script loads a demo session.&lt;/p&gt;</description></item></channel></rss>