<?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: Jenil Savani</title>
    <description>The latest articles on DEV Community by Jenil Savani (@jenilsavani_).</description>
    <link>https://dev.to/jenilsavani_</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3594545%2F451f3e2b-8906-47b4-b01b-f9f6ac83d962.png</url>
      <title>DEV Community: Jenil Savani</title>
      <link>https://dev.to/jenilsavani_</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jenilsavani_"/>
    <language>en</language>
    <item>
      <title>I Built a Codebase Graph Viewer to Understand My System’s True Shape</title>
      <dc:creator>Jenil Savani</dc:creator>
      <pubDate>Wed, 03 Dec 2025 17:35:28 +0000</pubDate>
      <link>https://dev.to/jenilsavani_/i-built-a-codebase-graph-viewer-to-understand-my-systems-true-shape-1laf</link>
      <guid>https://dev.to/jenilsavani_/i-built-a-codebase-graph-viewer-to-understand-my-systems-true-shape-1laf</guid>
      <description>&lt;h2&gt;
  
  
  What I Built Today
&lt;/h2&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.amazonaws.com%2Fuploads%2Farticles%2Ftf8478gnxifoor3yarma.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.amazonaws.com%2Fuploads%2Farticles%2Ftf8478gnxifoor3yarma.png" alt="Graph View of Codebase" width="800" height="526"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Today I added a new feature to Secrin: a live &lt;strong&gt;graph view of the entire codebase&lt;/strong&gt;. Every file, class, function, and connection is now represented as a node and edge, giving developers a visual map of how their system fits together.&lt;/p&gt;

&lt;p&gt;The goal was to solve a persistent issue: it’s easy for a codebase to become a maze of hidden dependencies. With this graph, the structure becomes visible and much easier to reason about.&lt;/p&gt;

&lt;h2&gt;
  
  
  Thought Process / Reasoning
&lt;/h2&gt;

&lt;p&gt;Software isn’t a tidy tree. It behaves more like a web of interconnected logic. Adding a graph view fits perfectly with Secrin’s mission to understand &lt;em&gt;why&lt;/em&gt; code works the way it does, not just &lt;em&gt;what&lt;/em&gt; it does.&lt;/p&gt;

&lt;p&gt;I extracted relationships from the project by parsing imports, references, and call patterns, then converted everything into a simple adjacency format. This allowed Secrin to generate a graph that’s both interactive and meaningful.&lt;/p&gt;

&lt;h2&gt;
  
  
  Problems I Faced
&lt;/h2&gt;

&lt;p&gt;The first problem was noise. Codebases create many tiny connections that don’t matter. Showing everything made the graph overwhelming.&lt;/p&gt;

&lt;p&gt;I fixed this by filtering out trivial edges and grouping related modules together. Another issue was visual clutter large graphs get messy instantly. I added clustering and basic spacing logic to keep things readable.&lt;/p&gt;

&lt;p&gt;Next step: weight edges based on activity (commits, recent changes, or user queries) so developers see the most important paths first.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Learned Today
&lt;/h2&gt;

&lt;p&gt;Making the structure visible changes how you think. I immediately spotted modules that had become too central and others that depended on unexpected files. Seeing the truth removes illusions. This reinforced a lesson: &lt;strong&gt;tools that reveal structure increase developer clarity&lt;/strong&gt;.&lt;/p&gt;




&lt;p&gt;Momentum builds on small, achievable progress. Today’s graph view is one of those steps that quietly transforms the developer experience in Secrin.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>python</category>
      <category>secrin</category>
    </item>
    <item>
      <title>Making Repos Talk Back: Live Webhooks + Knowledge Graph Sync in Secrin</title>
      <dc:creator>Jenil Savani</dc:creator>
      <pubDate>Mon, 01 Dec 2025 19:11:59 +0000</pubDate>
      <link>https://dev.to/jenilsavani_/making-repos-talk-back-live-webhooks-knowledge-graph-sync-in-secrin-2ndg</link>
      <guid>https://dev.to/jenilsavani_/making-repos-talk-back-live-webhooks-knowledge-graph-sync-in-secrin-2ndg</guid>
      <description>&lt;h2&gt;
  
  
  What I Built Today
&lt;/h2&gt;

&lt;p&gt;I added GitHub App integration into the Secrin.&lt;br&gt;
Now, whenever someone merges a pull request in a connected repository, the webhook fires and triggers an update in the Knowledge Graph. This means the system can learn continuously from code changes instead of relying on manual ingestion or periodic sync.&lt;/p&gt;

&lt;p&gt;The goal was simple: repositories evolve every day, often every hour, the knowledge base should evolve with them. This integration closes the loop between code written and knowledge stored.&lt;/p&gt;
&lt;h2&gt;
  
  
  Thought Process
&lt;/h2&gt;

&lt;p&gt;I focused on deeper integration instead of one time imports.&lt;br&gt;
Knowledge that does not update becomes stale, and stale knowledge leads to bad answers, especially when working with codebases that change often.&lt;/p&gt;

&lt;p&gt;Using GitHub webhooks felt like the most direct and reliable path. Once a PR is merged, we instantly know. No polling, no unnecessary API load, no guess-based syncing.&lt;/p&gt;

&lt;p&gt;It aligns with the idea of live context systems that reflect reality as it changes.&lt;/p&gt;

&lt;p&gt;Example pseudo-flow:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;PR Merged → GitHub Webhook → Handler → Parse Changes → Update KG
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Small chain, fast feedback.&lt;/p&gt;

&lt;h2&gt;
  
  
  Problems I Faced
&lt;/h2&gt;

&lt;p&gt;The tricky part was wiring the webhook processing cleanly.&lt;br&gt;
GitHub sends a lot of metadata, and not all of it is relevant. Extracting only what matters for the Knowledge Graph requires structure.&lt;/p&gt;

&lt;p&gt;Next iteration will focus on parsing file diffs more smartly not just storing events, but understanding them.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Learned Today
&lt;/h2&gt;

&lt;p&gt;Live integrations compound value over time.&lt;br&gt;
A system that updates itself is more powerful than one that needs human maintenance. Automation isn’t just speed, it’s memory, continuity, and reliability.&lt;/p&gt;

&lt;p&gt;Also: shipping small pieces every day is better than delaying for perfection. When the integration works, new possibilities open up.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tomorrow’s Plan
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Parse merged PR files and extract meaningful changes&lt;/li&gt;
&lt;li&gt;Insert extracted knowledge into the KG with context&lt;/li&gt;
&lt;li&gt;Add logs/observability to track update flow&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>python</category>
      <category>opensource</category>
      <category>secrin</category>
    </item>
    <item>
      <title>Typescript Language Code Parser for Secrin</title>
      <dc:creator>Jenil Savani</dc:creator>
      <pubDate>Sun, 30 Nov 2025 12:33:51 +0000</pubDate>
      <link>https://dev.to/jenilsavani_/typescript-language-code-parser-for-secrin-41d9</link>
      <guid>https://dev.to/jenilsavani_/typescript-language-code-parser-for-secrin-41d9</guid>
      <description>&lt;p&gt;This week was an important step forward for Secrin. Until now, we could ingest repositories, commits, and file diffs, but only for languages we explicitly supported. TypeScript was always on the horizon, but now it is officially part of the system.&lt;/p&gt;

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

&lt;p&gt;I implemented TypeScript language support directly into Secrin's ingestion pipeline. That means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Any repository written in TypeScript can now be parsed.&lt;/li&gt;
&lt;li&gt;We can extract file level changes, commit information, and incremental diffs cleanly.&lt;/li&gt;
&lt;li&gt;Secrin can now track and understand the evolution of TypeScript codebases just like it does for other languages.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It may look like a small feature, but it unlocks a huge segment of real world projects, including frontend applications, backend services, libraries, and modern JavaScript tooling.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why it matters
&lt;/h2&gt;

&lt;p&gt;TypeScript is used widely across engineering teams and ecosystems. Supporting it brings Secrin closer to becoming a universal commit aware knowledge engine.&lt;/p&gt;

&lt;p&gt;More language support leads to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;More repositories Secrin can learn from.&lt;/li&gt;
&lt;li&gt;Better insights extracted from real codebases.&lt;/li&gt;
&lt;li&gt;A more complete understanding of how software evolves.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each step pushes Secrin closer toward a system that remembers and understands code the way developers do.&lt;/p&gt;

&lt;h2&gt;
  
  
  Explore the Secrin Project
&lt;/h2&gt;

&lt;p&gt;If you want to try Secrin, explore the codebase, or contribute, here are the links:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GitHub Repository: &lt;a href="https://github.com/SecrinLabs/secrin" rel="noopener noreferrer"&gt;github.com/SecrinLabs/secrin&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Star the project to support development&lt;/li&gt;
&lt;li&gt;Open issues, suggest improvements, or contribute directly&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Building in public. Iterating every week.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>architecture</category>
      <category>python</category>
      <category>secrin</category>
    </item>
    <item>
      <title>Building the Full AST to Embedding Pipeline for Secrin</title>
      <dc:creator>Jenil Savani</dc:creator>
      <pubDate>Tue, 25 Nov 2025 17:33:05 +0000</pubDate>
      <link>https://dev.to/jenilsavani_/building-the-full-ast-to-embedding-pipeline-for-secrin-3pjh</link>
      <guid>https://dev.to/jenilsavani_/building-the-full-ast-to-embedding-pipeline-for-secrin-3pjh</guid>
      <description>&lt;p&gt;Today was one of those days where everything finally starts connecting like LEGO blocks. I worked on the full pipeline that will let Secrin take any code repository, break it down into tiny meaningful pieces, and store them in a graph database so we can do some seriously smart search later.&lt;/p&gt;

&lt;p&gt;Think of it like teaching Secrin to read code like a detective spotting characters, events, relationships, and breadcrumbs.&lt;/p&gt;

&lt;p&gt;Here’s what I tackled today:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Cloning the Repository&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is the “bring the book home” step. Before Secrin can understand anything, it needs a local copy of the code. I built the logic that cleanly clones a Git repo and prepares it for scanning.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Parsing the AST (Abstract Syntax Tree)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Imagine turning a story into a family tree of words, sentences, and meaning.&lt;br&gt;
That’s what AST parsing does for code. I wired up the system so Secrin can take a file and break it down into all the little nodes functions, classes, variables, conditions, loops, the whole cast of characters.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Inserting Nodes into the Graph DB&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Once we have these AST nodes, we drop them into the graph database.&lt;br&gt;
Graph is perfect for this because it lets us:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;store relationships naturally&lt;/li&gt;
&lt;li&gt;connect nodes like “function A calls function B”&lt;/li&gt;
&lt;li&gt;track code structure like a real map instead of forcing everything into tables&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Today I finished the core logic for inserting these nodes and connecting their relationships.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Storing Commits&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Code changes over time.&lt;br&gt;
Commits are like diary entries.&lt;br&gt;
Now we store every commit as a node too, and link it to the files and AST structures it changed.&lt;br&gt;
This makes the knowledge graph “time-aware,” which will help answer questions like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“When did this function break?”&lt;/li&gt;
&lt;li&gt;“Who last touched this part of the code?”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;5. Adding Embeddings for Hybrid Search&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is where things get fun.&lt;br&gt;
Embeddings give meaning to text and code so Secrin can understand similarity.&lt;br&gt;
We combine:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;graph search (precise)&lt;/li&gt;
&lt;li&gt;embedding search (fuzzy but smart)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This hybrid approach means the user can ask anything from “where is this variable used?” to “why does this function exist?” and Secrin can dig deep into both structure and meaning.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>secrin</category>
      <category>programming</category>
      <category>architecture</category>
    </item>
    <item>
      <title>Building Live Code Knowledge Graph: AST Layer Is Coming Alive</title>
      <dc:creator>Jenil Savani</dc:creator>
      <pubDate>Mon, 24 Nov 2025 19:36:02 +0000</pubDate>
      <link>https://dev.to/jenilsavani_/building-live-code-knowledge-graph-ast-layer-is-coming-alive-elb</link>
      <guid>https://dev.to/jenilsavani_/building-live-code-knowledge-graph-ast-layer-is-coming-alive-elb</guid>
      <description>&lt;p&gt;Today I worked on one of the core pieces of Secrin: turning code into a living, connected knowledge graph. The heart of this system is the AST layer—the part that reads a file, understands its structure, and converts it into meaningful relationships.&lt;/p&gt;

&lt;p&gt;I made a few important improvements:&lt;/p&gt;

&lt;p&gt;The parser now extracts functions, classes, variables, and imports with much better accuracy.&lt;/p&gt;

&lt;p&gt;Each of these pieces is mapped into graph nodes in real time, so the system can answer questions like “where is this used?” almost instantly.&lt;/p&gt;

&lt;p&gt;I added early support for linking function calls, which means the graph is finally starting to look like a real map of how the code works behind the scenes.&lt;/p&gt;

&lt;p&gt;Updates happen only when a file changes, which keeps everything fast and lightweight.&lt;/p&gt;

&lt;p&gt;These changes may look small from the outside, but they unlock the core experience I want: a tool that understands your code the moment you write it and can explain any part of it like a teammate who never forgets anything.&lt;/p&gt;

&lt;p&gt;Next up: connecting commit history so the graph can answer the “why” behind each change.&lt;/p&gt;

&lt;p&gt;Secrin is slowly turning into the engineering brain I always wished I had. Excited for the next jump.&lt;/p&gt;

</description>
      <category>secrin</category>
      <category>ai</category>
      <category>architecture</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Day 3 of Building Secrin</title>
      <dc:creator>Jenil Savani</dc:creator>
      <pubDate>Wed, 05 Nov 2025 19:50:27 +0000</pubDate>
      <link>https://dev.to/jenilsavani_/day-3-of-building-secrin-4aij</link>
      <guid>https://dev.to/jenilsavani_/day-3-of-building-secrin-4aij</guid>
      <description>&lt;p&gt;Today’s focus was on extracting and counting structural elements from code repositories. We built a component that parses Python and JavaScript projects, identifies their key elements, and represents them as nodes and relationships in a graph structure.&lt;/p&gt;

&lt;p&gt;The system now tracks:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Nodes extracted:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;  Files:       &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;files&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;  Classes:     &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;classes&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;  Functions:   &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;functions&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;  Variables:   &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;variables&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;  Packages:    &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;packages&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;  Docs:        &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;docs&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;  Total:       &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;graph_data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;nodes&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;Relationships: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;graph_data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;relationships&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This output summarizes the architecture that Secrin now understands. Every file, class, and function becomes a node. Dependencies and references between them become edges. The result is a &lt;strong&gt;knowledge graph&lt;/strong&gt; that represents the structure and logic of a codebase in a connected form.&lt;/p&gt;

&lt;p&gt;This graph-based view lays the foundation for everything that follows. With it, we can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Visualize how code components depend on each other.&lt;/li&gt;
&lt;li&gt;Query relationships between files and functions.&lt;/li&gt;
&lt;li&gt;Build higher-level understanding of repositories for documentation, onboarding, and AI-based code reasoning.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;The Grand Line of Open Source continues. ⚓️&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Follow the project:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/SecrinLabs/secrin" rel="noopener noreferrer"&gt;https://github.com/SecrinLabs/secrin&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Twitter (X):&lt;/strong&gt; &lt;a href="https://x.com/jenilsavani_" rel="noopener noreferrer"&gt;x.com/jenilsavani_&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>machinelearning</category>
      <category>startup</category>
    </item>
    <item>
      <title>Day 2 of building Secrin</title>
      <dc:creator>Jenil Savani</dc:creator>
      <pubDate>Wed, 05 Nov 2025 02:53:43 +0000</pubDate>
      <link>https://dev.to/jenilsavani_/day-2-of-building-secrin-28a9</link>
      <guid>https://dev.to/jenilsavani_/day-2-of-building-secrin-28a9</guid>
      <description>&lt;p&gt;Today, we started integrating LangGraph to turn Secrin’s parsed data into a real knowledge graph.&lt;/p&gt;

&lt;p&gt;Yesterday, the parser could identify relationships between functions, classes, and modules. Now, with LangGraph, we’re structuring those relationships, defining how each piece of code connects and what those links represent.&lt;/p&gt;

&lt;p&gt;The goal is to give Secrin the ability to reason over these connections. Instead of just seeing which functions exist, it should understand how data flows between them, how dependencies form, and how logic is organized across a repository.&lt;/p&gt;

&lt;p&gt;Next step: visualize this graph so we can explore it directly and verify that the structure matches the underlying codebase.&lt;/p&gt;

&lt;p&gt;GitHub: &lt;a href="https://github.com/SecrinLabs/secrin" rel="noopener noreferrer"&gt;https://github.com/SecrinLabs/secrin&lt;/a&gt;&lt;br&gt;
Twitter (X): &lt;a href="https://x.com/jenilsavani_" rel="noopener noreferrer"&gt;https://x.com/jenilsavani_&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>python</category>
      <category>langchain</category>
    </item>
    <item>
      <title>Day 1 of building Secrin</title>
      <dc:creator>Jenil Savani</dc:creator>
      <pubDate>Mon, 03 Nov 2025 19:22:57 +0000</pubDate>
      <link>https://dev.to/jenilsavani_/day-1-of-building-secrin-517n</link>
      <guid>https://dev.to/jenilsavani_/day-1-of-building-secrin-517n</guid>
      <description>&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.amazonaws.com%2Fuploads%2Farticles%2Fpbq6shzo3xt068e7w3gs.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.amazonaws.com%2Fuploads%2Farticles%2Fpbq6shzo3xt068e7w3gs.png" alt="Day 1 of building Secrin: The Parser Sets Sail" width="800" height="183"&gt;&lt;/a&gt;Today, we built something big, a graph-based parser for Python and JavaScript. It’s the kind of thing that turns plain code into a map of meaning. Now, Secrin can look at a repo and understand how the code connects, not just what files exist.&lt;/p&gt;

&lt;p&gt;The start wasn’t smooth. Each language had its own storms Python with its hidden indents and JavaScript with its chaotic syntax waves. For hours, it felt like fighting sea monsters that spoke two different dialects. But in the end, the crew made it through.&lt;/p&gt;

&lt;p&gt;Now, the parser doesn’t just read files; it builds relationships between functions, classes, and modules. Each node is like an island, and each link a sea route together, they form the start of Secrin’s knowledge graph.&lt;/p&gt;

&lt;p&gt;Tomorrow, we’ll sail toward visualization bringing this graph to life so we can see how knowledge connects. The seas ahead look promising.&lt;/p&gt;

&lt;p&gt;The Grand Line of Open Source continues.&lt;/p&gt;

&lt;p&gt;🌊 Follow the journey&lt;br&gt;
GitHub: &lt;a href="https://github.com/SecrinLabs/secrin" rel="noopener noreferrer"&gt;https://github.com/SecrinLabs/secrin&lt;/a&gt;&lt;br&gt;
Twitter (X): &lt;a href="https://x.com/jenilsavani_" rel="noopener noreferrer"&gt;https://x.com/jenilsavani_&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>architecture</category>
      <category>opensource</category>
      <category>github</category>
    </item>
  </channel>
</rss>
