<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: yashraj jangir</title>
    <description>The latest articles on DEV Community by yashraj jangir (@yasshhhraj).</description>
    <link>https://dev.to/yasshhhraj</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F505401%2F5402e6a8-3612-4197-aa56-b018e4a6f39e.png</url>
      <title>DEV Community: yashraj jangir</title>
      <link>https://dev.to/yasshhhraj</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/yasshhhraj"/>
    <language>en</language>
    <item>
      <title>I Know a Spot: Small Discoveries, Open-Weight AI, and a Reason to Go Outside</title>
      <dc:creator>yashraj jangir</dc:creator>
      <pubDate>Sat, 10 Oct 2026 09:38:47 +0000</pubDate>
      <link>https://dev.to/yasshhhraj/i-know-a-spot-small-discoveries-open-weight-ai-and-a-reason-to-go-outside-39ce</link>
      <guid>https://dev.to/yasshhhraj/i-know-a-spot-small-discoveries-open-weight-ai-and-a-reason-to-go-outside-39ce</guid>
      <description>&lt;h2&gt;
  
  
  I Know a Spot: Small Discoveries, Open-Weight AI, and a Reason to Go Outside
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week1-2026-10-05"&gt;Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;Not every reason to go outside needs to be a famous landmark or a carefully planned trip. Sometimes it is a place nearby that you never knew existed: a carved doorway, a patterned wall, a quiet corner, or a small detail someone else noticed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I Know a Spot&lt;/strong&gt; is a mobile-first web app for sharing those small discoveries and finding somewhere worth seeing.&lt;/p&gt;

&lt;p&gt;The idea is simple: &lt;strong&gt;notice → share → discover → go → mark explored.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Get to know your locality better, and when you travel, use the app to discover what other people have noticed.&lt;/p&gt;

&lt;p&gt;A contributor takes or chooses a photo, adds a title and personal note, confirms a destination pin, and chooses who can see the spot. An explorer browses those discoveries, searches for what they feel like seeing, opens directions, and gets back to the real world.&lt;/p&gt;

&lt;p&gt;There are two discovery feeds:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Connections:&lt;/strong&gt; spots from you and your configured connections.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Public:&lt;/strong&gt; spots within your saved discovery radius around an area you explicitly choose.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For this pilot, “Public” means visible to other authenticated, enrolled participants—not anonymous visitors. Public radius is a discovery preference, not a guarantee of privacy: an eligible participant can still open a known Public spot outside their selected radius.&lt;/p&gt;

&lt;p&gt;The AI bridges the gap between how someone describes a place and how someone else searches for it. You can search by meaning instead of hoping a contributor used exactly the same keyword.&lt;/p&gt;

&lt;p&gt;The app deliberately does &lt;strong&gt;not&lt;/strong&gt; include likes, popularity rankings, public visit counts, or an endless engagement loop. Its main call to action is &lt;strong&gt;Open directions&lt;/strong&gt;. “Explored” is a private, self-reported mark—not a GPS-verified achievement.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Deployed web app:&lt;/strong&gt; &lt;a href="https://yasshhhraj.github.io/I-know-a-spot/" rel="noopener noreferrer"&gt;I Know a Spot&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Access note:&lt;/strong&gt; I Know a Spot currently runs as an authenticated pilot. When a new user signs in with Google, the application automatically creates an enrolled membership for that Supabase Auth account. The backend still checks membership before granting access, and signing in again does not re-enable a disabled membership. There is no anonymous feed. The repository includes setup instructions for running the application with your own configuration.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fr5d34kmlzw0i5kn157h2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fr5d34kmlzw0i5kn157h2.png" alt="Sign in with Google or email to start discovering overlooked places." width="330" height="766"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Suggested walkthrough
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Open Discover and switch between Connections and Public.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F92ekx4ux267504sq9ltd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F92ekx4ux267504sq9ltd.png" alt="Browse recent spot discoveries shared by you and your connections." width="330" height="822"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;In Public, choose a discovery center manually or use the explicit current-location button.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgfsjfvwjd5m49n2kwsvy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgfsjfvwjd5m49n2kwsvy.png" alt="Explore publicly shared spots around a selected area on the map." width="330" height="1079"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Change the saved radius in Profile and return to Public.&lt;/li&gt;
&lt;li&gt;Search for a description such as “somewhere tucked away with interesting textures.”&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F92jrc3sjetvsqs7wis5i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F92jrc3sjetvsqs7wis5i.png" alt="Find relevant spots by describing what you feel like seeing." width="330" height="1143"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open a result, read the contributor’s access information, and launch external directions.&lt;/li&gt;
&lt;li&gt;Return and mark the spot explored.&lt;/li&gt;
&lt;li&gt;Add a new discovery with a photo, note, audience, and destination pin.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsyeg4de99tl7kduejpba.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsyeg4de99tl7kduejpba.png" alt="Share a photo, personal note, audience, and destination pin for a new spot." width="330" height="1827"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I also took the project beyond local code checks. Phone testing, a real outing, searching real notes, and an authenticated walkthrough of the deployed application using Google sign-in were part of the build process. These are qualitative pilot observations, not a measured retention study or a controlled real-world search benchmark.&lt;/p&gt;

&lt;p&gt;The frontend and backend are deployed over HTTPS. Deployment checks verified endpoint reachability and CORS, and I completed an authenticated walkthrough using Google sign-in on the final deployment. The deployed flow worked as expected.&lt;/p&gt;

&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/yasshhhraj" rel="noopener noreferrer"&gt;
        yasshhhraj
      &lt;/a&gt; / &lt;a href="https://github.com/yasshhhraj/I-know-a-spot" rel="noopener noreferrer"&gt;
        I-know-a-spot
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;HackW1TouchGrass&lt;/h1&gt;
&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;I Know a Spot — application workspace&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;Mobile-web pilot with a later Capacitor path. See &lt;a href="https://github.com/yasshhhraj/I-know-a-spot/PRD.md" rel="noopener noreferrer"&gt;PRD.md&lt;/a&gt;, the
&lt;a href="https://github.com/yasshhhraj/I-know-a-spot/BUILD_SCOPE_36H.md" rel="noopener noreferrer"&gt;36-hour build plan&lt;/a&gt;, and &lt;a href="https://github.com/yasshhhraj/I-know-a-spot/FUTURE_SCOPE.md" rel="noopener noreferrer"&gt;future scope&lt;/a&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/yasshhhraj/I-know-a-spot/SETUP.md" rel="noopener noreferrer"&gt;SETUP.md&lt;/a&gt;: manual install/environment/run/check commands.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/yasshhhraj/I-know-a-spot/SUPABASE_SETUP.md" rel="noopener noreferrer"&gt;SUPABASE_SETUP.md&lt;/a&gt;: user-run migration, account enrollment
and live auth/RLS verification steps.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/yasshhhraj/I-know-a-spot/SPOT_SHARING_SETUP.md" rel="noopener noreferrer"&gt;SPOT_SHARING_SETUP.md&lt;/a&gt;: user-run spot/private-Storage
migration, backend-only admin configuration and live audience/media checks.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/yasshhhraj/I-know-a-spot/NEXT_FEATURE_PLAN.md" rel="noopener noreferrer"&gt;NEXT_FEATURE_PLAN.md&lt;/a&gt;: implementation handoff for the
Public feed, saved-radius and manual discovery-area slice.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/yasshhhraj/I-know-a-spot/PUBLIC_DISCOVERY_SETUP.md" rel="noopener noreferrer"&gt;PUBLIC_DISCOVERY_SETUP.md&lt;/a&gt;: new Public-feed migration
manual area/radius setup and user-run live boundary checks.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/yasshhhraj/I-know-a-spot/SEMANTIC_SEARCH_SETUP.md" rel="noopener noreferrer"&gt;SEMANTIC_SEARCH_SETUP.md&lt;/a&gt;: MiniLM search, guarded
searchable-spot SQL fixtures/cleanup and user-run checks; no new search migration.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/yasshhhraj/I-know-a-spot/SEMANTIC_SEARCH_EVALUATION.md" rel="noopener noreferrer"&gt;SEMANTIC_SEARCH_EVALUATION.md&lt;/a&gt;: actual local
MiniLM/HTTP synthetic comparison against keywords, with limits.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/yasshhhraj/I-know-a-spot/EXPLORED_SETUP.md" rel="noopener noreferrer"&gt;EXPLORED_SETUP.md&lt;/a&gt;: private self-reported explored state,
new migration0004 and user-run persistence/authorization checks.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/yasshhhraj/I-know-a-spot/REPORTING_SETUP.md" rel="noopener noreferrer"&gt;REPORTING_SETUP.md&lt;/a&gt;: private predefined reports, new
migration0005 and protected local operator review/removal commands and checks.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/yasshhhraj/I-know-a-spot/API_CONTRACT.md" rel="noopener noreferrer"&gt;API_CONTRACT.md&lt;/a&gt;: protected profile and spot/media API contract.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/yasshhhraj/I-know-a-spot/frontend/" rel="noopener noreferrer"&gt;frontend/&lt;/a&gt;: React/TypeScript/Vite app (port 5173).&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/yasshhhraj/I-know-a-spot/backend/" rel="noopener noreferrer"&gt;backend/&lt;/a&gt;…&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/yasshhhraj/I-know-a-spot" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;&lt;a href="https://github.com/yasshhhraj/I-know-a-spot" rel="noopener noreferrer"&gt;Browse the source and setup instructions&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The project is split into a static-buildable frontend and an explicit backend API. Setup guides cover Supabase, sharing, Public discovery, semantic search, explored state, and reporting.&lt;/p&gt;

&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Open-weight AI at the center of discovery
&lt;/h3&gt;

&lt;p&gt;The search model is &lt;strong&gt;&lt;a href="https://huggingface.co/Xenova/all-MiniLM-L6-v2" rel="noopener noreferrer"&gt;Xenova/all-MiniLM-L6-v2&lt;/a&gt;&lt;/strong&gt;, an Apache-2.0-licensed model running through &lt;strong&gt;Transformers.js&lt;/strong&gt; in the Node backend.&lt;/p&gt;

&lt;p&gt;The inference configuration is deliberately small and explicit:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Quantized &lt;strong&gt;q8&lt;/strong&gt; CPU inference.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;384-dimensional&lt;/strong&gt; embeddings.&lt;/li&gt;
&lt;li&gt;Mean pooling and normalization.&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;256-token&lt;/strong&gt; input cap.&lt;/li&gt;
&lt;li&gt;A pinned model revision with checksum-verified artifacts.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The encoder receives query text and spot titles and notes. It does &lt;strong&gt;not&lt;/strong&gt; receive photos, coordinates, or member IDs as model inputs. Notes can still contain personal information, so minimizing structured inputs does not mean that all text is nonsensitive.&lt;/p&gt;

&lt;p&gt;The search flow is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Authenticated request
  → resolve eligible spots for the selected feed
  → apply Public radius filtering where applicable
  → embed query and eligible title/note text
  → rank by cosine similarity
  → revalidate eligibility and current text
  → return up to three existing spots
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Authorization and geographic eligibility happen before ranking.&lt;/strong&gt; AI is not an access-control layer.&lt;/p&gt;

&lt;p&gt;Results show the contributor’s original words. There is no generated claim that a place is safe, open, accessible, or a certain number of minutes away. A low-quality or unavailable search should produce an honest empty or error state, not an invented destination.&lt;/p&gt;

&lt;p&gt;For this small pilot, bounded in-memory vectors and direct comparison are enough. I did not add a vector database or a generative chatbot just to make the architecture look more “AI.”&lt;/p&gt;

&lt;h3&gt;
  
  
  Testing whether semantic search adds anything
&lt;/h3&gt;

&lt;p&gt;I compared the actual cached MiniLM model against a keyword baseline using a &lt;strong&gt;12-query synthetic fixture&lt;/strong&gt;, with synthetic authentication and candidate data rather than live Supabase records.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Of &lt;strong&gt;11 positive queries&lt;/strong&gt;, semantic search returned a relevant result in the top three for &lt;strong&gt;11/11&lt;/strong&gt;, compared with &lt;strong&gt;7/11&lt;/strong&gt; for the keyword baseline.&lt;/li&gt;
&lt;li&gt;One unrelated negative query returned no semantic matches.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is useful regression evidence, but it is a small, purpose-built dataset—not proof of general search quality. The similarity cutoff remains provisional for real contributor notes. Real-note search was tried separately without a new quantified comparison.&lt;/p&gt;

&lt;h3&gt;
  
  
  The rest of the stack
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Layer&lt;/th&gt;
&lt;th&gt;Technology&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Mobile web UI&lt;/td&gt;
&lt;td&gt;React, TypeScript, Vite, Tailwind&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Maps&lt;/td&gt;
&lt;td&gt;Leaflet / React Leaflet&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;API&lt;/td&gt;
&lt;td&gt;Node.js and Fastify&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Photo processing&lt;/td&gt;
&lt;td&gt;Sharp&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Auth, database, protected media&lt;/td&gt;
&lt;td&gt;Supabase Auth, Postgres, Storage&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Frontend hosting&lt;/td&gt;
&lt;td&gt;GitHub Pages&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Backend hosting&lt;/td&gt;
&lt;td&gt;Docker image in ECR, running on ECS Fargate behind an HTTPS Application Load Balancer&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The model artifacts are included in the backend image. Requests never download weights, and inference runs on infrastructure I control rather than a separate hosted model API. This is &lt;strong&gt;server-side inference&lt;/strong&gt;, not on-device or offline inference.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Disclosure: AI assisted with the project and with drafting this article.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  What the difficult parts taught me
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Mobile lifecycle matters.&lt;/strong&gt; Returning from the phone camera could trigger a repeated Supabase &lt;code&gt;SIGNED_IN&lt;/code&gt; event, causing the verified workspace—and the unfinished form—to remount. The fix ignores only an exact same-user, same-token duplicate event. Token changes, account changes, and explicit access checks still reverify access. This does not solve a browser discarding the entire page.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Visual polish can introduce real regressions.&lt;/strong&gt; An early UI pass combined conflicting button color classes, leaving white text on a light background. Explicit primary and selected-state styles fixed that. The navigation also moved into a persistent bottom bar after testing made the long Add form’s bottom-only Cancel action inconvenient.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Container size is not model size.&lt;/strong&gt; The first backend image was about 1.05 GB uncompressed even though its model artifacts were about 23 MB. ONNX runtime dependencies accounted for most of the footprint. I kept the working runtime intact rather than deleting binaries without a tested replacement.&lt;/p&gt;

&lt;p&gt;The final runtime image was tested for non-root startup, health checks, actual normalized 384-dimensional embeddings, and Sharp WebP processing. The latest local backend test run passed &lt;strong&gt;139 tests&lt;/strong&gt;, and the frontend suite passed &lt;strong&gt;67&lt;/strong&gt;. These checks do not independently validate remote Supabase policies.&lt;/p&gt;

&lt;h3&gt;
  
  
  Current limits
&lt;/h3&gt;

&lt;p&gt;This is an online-only, bounded pilot—not an unrestricted public platform. New Google Auth users receive an enrolled application membership automatically, while existing memberships are checked by the backend. Connections are configured by the operator, and the app does not yet include in-app connection requests.&lt;/p&gt;

&lt;p&gt;Full browser-discard draft recovery is not implemented. Independent checks of all direct Storage and forbidden-write boundaries, exact radius boundaries, and media-erasure behavior remain outstanding. I am keeping those gaps visible rather than treating a successful deployment as a security audit.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Does Open Innovation Matter?
&lt;/h2&gt;

&lt;p&gt;For this project, open innovation means being able to choose a small model, understand its role, and run it where it fits the product.&lt;/p&gt;

&lt;p&gt;An open-weight encoder made it possible to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Run inference in the backend container&lt;/strong&gt; without sending every query and eligible note to a separate model provider.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pin and verify the model artifacts&lt;/strong&gt;, making the retrieval setup inspectable and repeatable.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Evaluate semantic ranking against a simple baseline&lt;/strong&gt;, rather than treating a hosted model’s output as an unexplained recommendation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Keep model choice replaceable&lt;/strong&gt;, with explicit evaluation work required if I change models, tokenization, or embedding dimensions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Avoid per-request model API charges&lt;/strong&gt;, while still acknowledging that AWS hosting, storage, and networking cost money.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A closed embedding API could also rank text. The difference here is not that closed systems cannot do semantic search; it is that I can distribute and run the model artifacts, control the inference environment, and investigate retrieval behavior without depending on a remote model endpoint.&lt;/p&gt;

&lt;p&gt;That control does not make the whole app private or offline. Supabase processes application data, and maps and external directions have their own data flows. It lets me make a narrower, defensible statement about where &lt;strong&gt;model inference&lt;/strong&gt; happens.&lt;/p&gt;

&lt;p&gt;The outcome I care about is not a longer AI conversation. It is someone finding one interesting place, closing the app, and going to see it.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Agent Session
&lt;/h2&gt;

&lt;p&gt;I built with assistance from &lt;strong&gt;omnirush.ai&lt;/strong&gt; across implementation, debugging, UI iteration, testing, and deployment. The camera-return bug and deployment configuration were particularly useful examples of turning a broad symptom into a specific, testable change.&lt;/p&gt;

&lt;h3&gt;
  
  
  Community references
&lt;/h3&gt;

&lt;p&gt;Two useful perspectives from DEV informed the UI and packaging work:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://dev.to/pipipi-dev/designing-mobile-first-ux-responsive-design-in-practice-g96"&gt;Designing Mobile-First UX: Responsive Design in Practice&lt;/a&gt;, by &lt;a href="https://dev.to/pipipi-dev"&gt;pipipi-dev&lt;/a&gt;: designing around phone constraints and accounting for safe areas.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://dev.to/amitshuklabag/multi-stage-docker-builds-ship-the-artifact-not-the-build-shop-3o6l"&gt;Multi-stage Docker builds: ship the artifact, not the build shop&lt;/a&gt;, by &lt;a href="https://dev.to/amitshuklabag"&gt;amitshuklabag&lt;/a&gt;: separating build tools from runtime artifacts. Our native inference dependencies still required separate size analysis.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>Starting my blogging journey with this year’s Hacktoberfest. #HF26

I’ll be sharing what I learn, build, break, and figure out along the way.

A lot more coming soon — follow along and learn with me!</title>
      <dc:creator>yashraj jangir</dc:creator>
      <pubDate>Mon, 05 Oct 2026 07:46:06 +0000</pubDate>
      <link>https://dev.to/yasshhhraj/starting-my-blogging-journey-with-this-years-hacktoberfest-hf26-ill-be-sharing-what-i-learn-2deh</link>
      <guid>https://dev.to/yasshhhraj/starting-my-blogging-journey-with-this-years-hacktoberfest-hf26-ill-be-sharing-what-i-learn-2deh</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/yasshhhraj/focus-agent-a-local-ai-focus-companion-built-for-a-friend-56mh" class="crayons-story__hidden-navigation-link"&gt;Focus Agent: A Local AI Focus Companion Built for a Friend&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
      &lt;a href="https://dev.to/yasshhhraj/focus-agent-a-local-ai-focus-companion-built-for-a-friend-56mh" class="crayons-article__context-note crayons-article__context-note__feed"&gt;&lt;p&gt;Hacktoberfest Weekend Challenge: Build for a Friend Submission 🤝&lt;/p&gt;

&lt;/a&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/yasshhhraj" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F505401%2F5402e6a8-3612-4197-aa56-b018e4a6f39e.png" alt="yasshhhraj profile" class="crayons-avatar__image" width="800" height="800"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/yasshhhraj" class="crayons-story__secondary fw-medium m:hidden"&gt;
              yashraj jangir
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                yashraj jangir
                
                
              
              &lt;div id="story-author-preview-content-4799788" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/yasshhhraj" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F505401%2F5402e6a8-3612-4197-aa56-b018e4a6f39e.png" class="crayons-avatar__image" alt="" width="800" height="800"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;yashraj jangir&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/yasshhhraj/focus-agent-a-local-ai-focus-companion-built-for-a-friend-56mh" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Oct 5&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/yasshhhraj/focus-agent-a-local-ai-focus-companion-built-for-a-friend-56mh" id="article-link-4799788"&gt;
          Focus Agent: A Local AI Focus Companion Built for a Friend
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/hf26challenge"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;hf26challenge&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/gemma"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;gemma&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/linux"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;linux&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/productivity"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;productivity&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/yasshhhraj/focus-agent-a-local-ai-focus-companion-built-for-a-friend-56mh" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/multi-unicorn-b44d6f8c23cdd00964192bedc38af3e82463978aa611b4365bd33a0f1f4f3e97.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;3&lt;span class="hidden s:inline"&gt;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/yasshhhraj/focus-agent-a-local-ai-focus-companion-built-for-a-friend-56mh#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              &lt;span class="hidden s:inline"&gt;Add&amp;nbsp;Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            5 min read
          &lt;/small&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
      <category>buildinpublic</category>
      <category>hacktoberfest</category>
      <category>learning</category>
    </item>
    <item>
      <title>Focus Agent: A Local AI Focus Companion Built for a Friend</title>
      <dc:creator>yashraj jangir</dc:creator>
      <pubDate>Mon, 05 Oct 2026 06:51:21 +0000</pubDate>
      <link>https://dev.to/yasshhhraj/focus-agent-a-local-ai-focus-companion-built-for-a-friend-56mh</link>
      <guid>https://dev.to/yasshhhraj/focus-agent-a-local-ai-focus-companion-built-for-a-friend-56mh</guid>
      <description>&lt;h2&gt;
  
  
  Focus Agent: A Local AI Focus Companion Built for a Friend
&lt;/h2&gt;

&lt;p&gt;This is my submission for the &lt;a href="https://dev.to/events/78"&gt;Hacktoberfest Weekend Challenge: Build for a Friend&lt;/a&gt;, including the Best Use of Gemma category.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Project:&lt;/strong&gt; &lt;a href="https://github.com/yasshhhraj/focusagent" rel="noopener noreferrer"&gt;Focus Agent on GitHub&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Demo:&lt;/strong&gt; &lt;a href="https://drive.google.com/file/d/1r-zQqRiEFjOUE3zwqWlYkYvbjhJM1W5O/view?usp=drive_link" rel="noopener noreferrer"&gt;Watch the captioned walkthrough&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4qx33gxr8i518811810l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4qx33gxr8i518811810l.png" alt="Focus Agent dashboard" width="800" height="432"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  The idea: help Raj return to his own priorities
&lt;/h2&gt;

&lt;p&gt;Raj is a friend who is talented and ambitious, but can get pulled into interesting side quests and lose track of the task he meant to finish. A to-do list can remember the plan. A screen-time chart can count applications. Neither can connect the two in a way that gives him a useful, timely nudge.&lt;/p&gt;

&lt;p&gt;So I built Focus Agent: a desktop companion that lets Raj state his priorities, observes which application is active, and checks whether that activity seems connected to the current task. If the relationship is unclear, a local Gemma model helps interpret a small, allowlisted context. If distraction remains likely and Raj ignores the check-in, the intervention becomes more visible. Raj can correct the classification, switch tasks, take a break, or pause monitoring.&lt;/p&gt;

&lt;p&gt;The agent is meant to help someone act on their own intentions, not to judge their productivity. It explains its reasoning and leaves the decision with Raj.&lt;/p&gt;
&lt;h2&gt;
  
  
  What works today
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Turn a natural-language plan into a short list of tasks and set the current priority.&lt;/li&gt;
&lt;li&gt;Track application changes through a small KDE KWin script and local D-Bus bridge.&lt;/li&gt;
&lt;li&gt;Save activity sessions, tasks, corrections, breaks, and intervention responses in local SQLite.&lt;/li&gt;
&lt;li&gt;Use Gemma through Ollama for ambiguous activity, with strict JSON validation and deterministic policy checks.&lt;/li&gt;
&lt;li&gt;Remember Raj's “still related” corrections for a task and application.&lt;/li&gt;
&lt;li&gt;Escalate ignored drift prompts from a quiet notification to a full-window intervention.&lt;/li&gt;
&lt;li&gt;Pause monitoring for 15 or 30 minutes, 1, 2, or 4 hours, or until Raj resumes it.&lt;/li&gt;
&lt;li&gt;Keep planning usable with a deterministic fallback if Ollama or Gemma is unavailable.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Gemma matters to the core loop: application names alone do not tell us whether a window is useful for the task. Running the model locally means activity context does not need to go to a hosted inference service. The project is open source, so the collection and decision flow can be inspected.&lt;/p&gt;
&lt;h2&gt;
  
  
  Development environment
&lt;/h2&gt;

&lt;p&gt;This prototype currently targets &lt;strong&gt;Linux with KDE Plasma 6 on Wayland&lt;/strong&gt;. To run it, you need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Node.js 22 or newer and npm;&lt;/li&gt;
&lt;li&gt;KDE's KWin script and D-Bus support;&lt;/li&gt;
&lt;li&gt;Ollama with a Gemma-family model (the README uses &lt;code&gt;gemma3:1b&lt;/code&gt; as a small starting point).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;After installing dependencies, the repo documents &lt;code&gt;npm test&lt;/code&gt; and &lt;code&gt;npm run dev&lt;/code&gt;, plus commands to install the KWin activity bridge. The model download is needed for local reasoning; once the model and dependencies are installed, inference does not need a hosted AI API.&lt;/p&gt;

&lt;p&gt;This is a Linux prototype, not a cross-platform release. The activity bridge is KDE-specific, and I have not yet validated it on X11, Windows, or macOS.&lt;/p&gt;
&lt;h2&gt;
  
  
  What I saw while testing
&lt;/h2&gt;

&lt;p&gt;In one short real desktop session, Firefox, VS Code, and ChatGPT were classified as related to the active task. I then used Chrome for about ten minutes; Focus Agent left it as &lt;strong&gt;unknown&lt;/strong&gt;. That conservative result is useful: an unfamiliar browser should not automatically be called a distraction just because it is a browser. It also showed me a current limitation: without browser-domain or page context, application-level signals can be too coarse to tell what someone is doing.&lt;/p&gt;

&lt;p&gt;I also exercised the reasoning path with &lt;code&gt;gemma3:1b&lt;/code&gt;: an obvious game launcher produced a high-confidence distraction result, while an unknown browser stayed low-confidence/unknown. These are prototype checks, not a broad accuracy study. More testing with Raj and other users is still needed.&lt;/p&gt;

&lt;p&gt;The demo includes representative preview data for the full intervention sequence. Waiting through real cooldowns made it impractical to capture every escalation level in a short walkthrough, so I used preview data for that part rather than implying the video is a continuous live session.&lt;/p&gt;
&lt;h2&gt;
  
  
  Setbacks that changed the design
&lt;/h2&gt;

&lt;p&gt;One UI bug taught me that activity tracking and interface actions can interfere with each other. When I clicked &lt;strong&gt;Still related&lt;/strong&gt;, Focus Agent itself became the active window before the correction landed, so the action could apply to the wrong activity. I changed the flow to preserve the intended activity target and filter Focus Agent's own window from collected activity.&lt;/p&gt;

&lt;p&gt;Another challenge was deciding what an application name can really prove. My Chrome observation remained unknown, and that is preferable to inventing certainty. The bridge currently sees application-level context, not browser URLs, page contents, or documents. I kept that boundary explicit and made corrections available to the user.&lt;/p&gt;

&lt;p&gt;I also started after missing the first few days of the challenge, so the scope had to stay focused: a working Linux prototype, a clear demo, and a privacy model I could explain rather than a premature promise of support for every desktop.&lt;/p&gt;
&lt;h2&gt;
  
  
  What comes next
&lt;/h2&gt;

&lt;p&gt;I want to finish this as a dependable cross-platform project. The next work is to add activity adapters for other Linux desktop environments and X11, then build and test native activity integrations for Windows and macOS. I also want to test with Raj, improve the app-level ambiguity handling without collecting more personal data than necessary, and make packaging and first-run setup easier.&lt;/p&gt;

&lt;p&gt;If you work on desktop integrations, local AI, privacy-respecting productivity tools, or testing across Linux setups, contributions and issue reports are welcome. Please open an issue or pull request on the &lt;a href="https://github.com/yasshhhraj/focusagent" rel="noopener noreferrer"&gt;GitHub repository&lt;/a&gt;; small, well-scoped contributions are especially helpful.&lt;/p&gt;
&lt;h2&gt;
  
  
  KDE Wayland release candidate
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://github.com/yasshhhraj/focusagent/releases/tag/v0.1.0-rc.1" rel="noopener noreferrer"&gt;Focus Agent v0.1.0-rc.1 GitHub release&lt;/a&gt; is available for KDE Plasma 6 on Wayland, x86_64. The AppImage bundles Electron and its Node.js runtime, so you do not need to install Node.js separately. Ollama with Gemma is still needed for local reasoning, and the KWin activity bridge is available as a separate download on the release page. The README includes setup steps. This is an unsigned release candidate built on Kali Linux Rolling; it has not been validated on other distributions.&lt;/p&gt;
&lt;h2&gt;
  
  
  Related reading from DEV
&lt;/h2&gt;

&lt;p&gt;These community posts cover adjacent parts of the problem: &lt;a href="https://dev.to/rijultp/install-and-run-your-own-llm-locally-with-ollama-gemma-in-minutes-1m99"&gt;running Gemma locally with Ollama&lt;/a&gt; and &lt;a href="https://dev.to/sun_young_517829fc09d0c05/minke-lencxs-local-first-desktop-workspace-for-your-ai-agent-4dbj"&gt;designing a local-first desktop AI workspace&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Agent Session summary&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag-agent-session"&gt;
  &lt;div class="agent-session-header"&gt;
    
    &lt;span class="agent-session-tool-icon-badge" title="Codex"&gt;
&lt;/span&gt;
    &lt;span class="agent-session-title"&gt;Focus Agent: From Friend's Focus Problem to KDE Wayland Release&lt;/span&gt;
  &lt;/div&gt;

  &lt;div class="agent-session-scroll"&gt;

      &lt;div class="agent-session-message agent-session-user"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-user"&gt;
          You
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;I am building a project for Hacktoberfest Weekend Challenge: Build for a Friend. I have a PRD and want to discuss enhancements, boundaries, and improvements.&lt;/p&gt;

                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-assistant"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-assistant"&gt;
          Agent
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;We framed this as a one-person build for the October 5 deadline, with a focused MVP and room to go further. The project should solve a concrete problem for a friend, respect privacy, and state prototype boundaries honestly.&lt;/p&gt;

                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-user"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-user"&gt;
          You
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;The friend is Raj, a pseudonym. He is talented but gets distracted and forgets priorities. The prototype targets Linux with KDE Plasma; I do not yet know whether the session is Xorg or Wayland.&lt;/p&gt;

                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-assistant"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-assistant"&gt;
          Agent
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;We chose KDE as the first prototype target and later used the available KDE Plasma Wayland environment for activity integration and packaging. Raj's chosen priority remains the reference point; the agent should use activity as evidence, not as a verdict.&lt;/p&gt;

                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-user"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-user"&gt;
          You
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;My personal stack is JavaScript. Should we shift to Electron?&lt;/p&gt;

                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-assistant"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-assistant"&gt;
          Agent
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;We aligned the desktop app with the JavaScript stack: Electron for the shell, React and TypeScript for the interface, a KDE KWin script and D-Bus bridge for Linux activity events, SQLite for local state, and Gemma through Ollama for local reasoning.&lt;/p&gt;

                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-user"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-user"&gt;
          You
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;I want the dashboard to contain only essential statistics and core functions. Put the story and other material in an About tab, keep the logo, remove the native window frame, and add in-app minimize, maximize, and close controls.&lt;/p&gt;

                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-assistant"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-assistant"&gt;
          Agent
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;The interface was reorganized around a minimal dashboard and an About view, with a custom frameless window and matching window controls.&lt;/p&gt;

                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-user"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-user"&gt;
          You
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;Interventions should escalate after repeated ignores, eventually showing a full window with current work statistics. The user needs choices to delegate, dismiss, take a break, or pause monitoring for 15 minutes, 30 minutes, 1 hour, 2 hours, 4 hours, or until they resume it.&lt;/p&gt;

                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-assistant"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-assistant"&gt;
          Agent
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;We implemented progressive intervention levels and user-controlled responses, including timed and indefinite monitoring pauses. The high level shows the current priority and relevant work statistics.&lt;/p&gt;

                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-user"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-user"&gt;
          You
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;When clicking Still related for an activity, the active context switches to Focus Agent so the correction can affect the wrong activity. What can we do?&lt;/p&gt;

                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-assistant"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-assistant"&gt;
          Agent
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;We adjusted activity targeting so the correction retains the intended session instead of relying on whichever window has focus after the click, and added filtering so Focus Agent does not classify its own window as user activity.&lt;/p&gt;

                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-user"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-user"&gt;
          You
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;I completed the early test phases. Firefox, VS Code, and ChatGPT were related to the task. I then used Chrome for about ten minutes and it stayed unknown.&lt;/p&gt;

                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-assistant"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-assistant"&gt;
          Agent
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;We recorded that as one observed session, not a general accuracy result. An unknown browser was treated conservatively because application-level tracking does not see the domain or page content. Separate Gemma checks showed high-confidence distraction for an obvious game launcher and low-confidence/unknown for an unfamiliar browser.&lt;/p&gt;

                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-user"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-user"&gt;
          You
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;I am recording the demo. The first recording was imperfect, so we need to redo it. I am considering a voiceless captioned version first, then a later voiceover.&lt;/p&gt;

                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-assistant"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-assistant"&gt;
          Agent
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;We prepared the demo from the project's video, created synchronized captions, and produced a captioned walkthrough. Because waiting through live cooldowns was impractical, the complete escalation sequence in the walkthrough uses representative preview data. The user uploaded the demo to Google Drive.&lt;/p&gt;

                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-user"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-user"&gt;
          You
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;Rewrite the README with dashboard.png, caption-free screenshots from the demo, and the demo video link. There also seems to be a Mermaid syntax error.&lt;/p&gt;

                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-assistant"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-assistant"&gt;
          Agent
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;The README was rewritten for judges with dashboard and walkthrough screenshots, the Drive demo link, feature and privacy explanations, environment requirements, test observations, known limitations, and an architecture diagram. The Mermaid graph was simplified to use ordinary directed arrows and standard SQLite node syntax.&lt;/p&gt;

                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-user"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-user"&gt;
          You
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;Create a DEV submission focused on the idea, current capabilities, environment needs, observed results, setbacks, cross-platform goals, and an invitation to contribute.&lt;/p&gt;

                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-assistant"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-assistant"&gt;
          Agent
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;A post was drafted with the required hf26challenge tag and links to the repository and demo. The user reviewed and published the post, then asked to add release information.&lt;/p&gt;

                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-user"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-user"&gt;
          You
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;After I submit the article, build a release candidate for the current KDE and Wayland configuration and provide it on GitHub.&lt;/p&gt;

                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-assistant"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-assistant"&gt;
          Agent
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;We added electron-builder configuration and release instructions, then built an x86_64 AppImage on Kali Linux Rolling under KDE Plasma 6 Wayland. The AppImage includes Electron's Node.js runtime; Ollama with Gemma and the separate KWin/D-Bus bridge remain requirements. A Debian target was dropped after its maintainer-email requirement could not be met. The release candidate is unsigned and has not been validated on other distributions.&lt;/p&gt;

                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-assistant"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-assistant"&gt;
          Agent
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;The AppImage, KWin bridge archive, and SHA-256 manifest were published as the prerelease v0.1.0-rc.1 at &lt;a href="https://github.com/yasshhhraj/focusagent/releases/tag/v0.1.0-rc.1" rel="noopener noreferrer"&gt;https://github.com/yasshhhraj/focusagent/releases/tag/v0.1.0-rc.1&lt;/a&gt;. The source changes and screenshots were committed as 6f8db3e and pushed to main. The published DEV post was updated with the release link. The package build and AppImage runtime metadata check succeeded, but no interactive launch test was performed.&lt;/p&gt;

                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;
  &lt;/div&gt;

  &lt;div class="agent-session-footer"&gt;
    &lt;span class="agent-session-meta"&gt;
        23 of 24 messages
          · some content was hidden by the author
    &lt;/span&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; &lt;code&gt;#hf26challenge&lt;/code&gt; &lt;code&gt;#gemma&lt;/code&gt; &lt;code&gt;#linux&lt;/code&gt; &lt;code&gt;#productivity&lt;/code&gt;&lt;/p&gt;

</description>
      <category>hf26challenge</category>
      <category>gemma</category>
      <category>linux</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
