<?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: Elison Frankowski</title>
    <description>The latest articles on DEV Community by Elison Frankowski (@elison_frank).</description>
    <link>https://dev.to/elison_frank</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%2F3903082%2F0808355a-3422-4868-80cb-a679b096e362.jpg</url>
      <title>DEV Community: Elison Frankowski</title>
      <link>https://dev.to/elison_frank</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/elison_frank"/>
    <language>en</language>
    <item>
      <title>I Built a VS Code Extension That Brings the Visual Studio Experience to .NET Developers</title>
      <dc:creator>Elison Frankowski</dc:creator>
      <pubDate>Fri, 15 May 2026 23:14:50 +0000</pubDate>
      <link>https://dev.to/elison_frank/i-built-a-vs-code-extension-that-brings-the-visual-studio-experience-to-net-developers-1maa</link>
      <guid>https://dev.to/elison_frank/i-built-a-vs-code-extension-that-brings-the-visual-studio-experience-to-net-developers-1maa</guid>
      <description>&lt;p&gt;If you're a .NET developer forced to use VS Code instead of Visual Studio or Rider, you know the pain. The tooling just isn't there. No NuGet manager worth using, no EF migrations from the UI, no build/rebuild/clean on right-click, no proper file nesting.&lt;/p&gt;

&lt;p&gt;So I built it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Introducing .NET Essentials Toolbox
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=elisonfrank.dotnet-essentials" rel="noopener noreferrer"&gt;.NET Essentials Toolbox&lt;/a&gt;&lt;/strong&gt; is a VS Code extension that brings the Visual Studio / Rider experience to .NET developers who live in VS Code.&lt;/p&gt;

&lt;p&gt;Here's what it does:&lt;/p&gt;




&lt;h3&gt;
  
  
  NuGet Package Manager
&lt;/h3&gt;

&lt;p&gt;Not the basic one. A full panel with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Search across &lt;strong&gt;multiple sources&lt;/strong&gt; simultaneously (nuget.org, Azure Artifacts, GitHub Packages, any NuGet v3 feed — reads your &lt;code&gt;nuget.config&lt;/code&gt; automatically)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Package detail panel&lt;/strong&gt; with authors, license, description, tags, and per-framework dependencies&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Outdated package detection&lt;/strong&gt; — highlights packages with newer versions available&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Update All&lt;/strong&gt; button to update everything in one click&lt;/li&gt;
&lt;li&gt;Resizable panels&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Build, Rebuild &amp;amp; Clean from the Context Menu
&lt;/h3&gt;

&lt;p&gt;Right-click any &lt;strong&gt;folder&lt;/strong&gt;, &lt;strong&gt;.csproj&lt;/strong&gt;, or &lt;strong&gt;.sln&lt;/strong&gt; (including the new &lt;strong&gt;.slnx&lt;/strong&gt; format) to build, rebuild, or clean. &lt;code&gt;Ctrl+Shift+B&lt;/code&gt; builds the solution from anywhere in the editor.&lt;/p&gt;




&lt;h3&gt;
  
  
  EF Core Migrations
&lt;/h3&gt;

&lt;p&gt;Right-click your &lt;code&gt;.csproj&lt;/code&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;EF: Add Migration&lt;/strong&gt; — auto-detects your &lt;code&gt;DbContext&lt;/code&gt;, asks for startup project if needed&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;EF: Update Database&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;EF: Remove Migration&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If &lt;code&gt;dotnet-ef&lt;/code&gt; isn't installed, the extension offers to install it automatically.&lt;/p&gt;




&lt;h3&gt;
  
  
  New Item Templates
&lt;/h3&gt;

&lt;p&gt;Right-click any folder and create:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Class, Interface, Enum, Record&lt;/li&gt;
&lt;li&gt;Controller (API), Service, Repository, Middleware&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Namespace is &lt;strong&gt;inferred automatically&lt;/strong&gt; from the folder path. Moving a &lt;code&gt;.cs&lt;/code&gt; file to another folder? The namespace updates automatically too.&lt;/p&gt;




&lt;h3&gt;
  
  
  New Project (&lt;code&gt;dotnet new&lt;/code&gt;)
&lt;/h3&gt;

&lt;p&gt;12 project templates from the Command Palette: Console, Web API, MVC, Class Library, Blazor, Worker, gRPC, xUnit, NUnit, MSTest, Minimal API. Optionally adds the project to your solution automatically.&lt;/p&gt;




&lt;h3&gt;
  
  
  Project References
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Add Project Reference&lt;/strong&gt; — shows only unreferenced projects (multi-select)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Remove Project Reference&lt;/strong&gt; — shows existing references for removal&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  User Secrets
&lt;/h3&gt;

&lt;p&gt;Opens &lt;code&gt;secrets.json&lt;/code&gt; directly in the editor. Initializes &lt;code&gt;UserSecretsId&lt;/code&gt; automatically if the project doesn't have one yet.&lt;/p&gt;




&lt;h3&gt;
  
  
  Launch Profiles
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;Run Project&lt;/code&gt; reads your &lt;code&gt;launchSettings.json&lt;/code&gt; and lets you pick the profile — &lt;code&gt;http&lt;/code&gt;, &lt;code&gt;https&lt;/code&gt;, &lt;code&gt;IIS Express&lt;/code&gt;, or any custom profile you defined.&lt;/p&gt;




&lt;h3&gt;
  
  
  Publish
&lt;/h3&gt;

&lt;p&gt;Choose configuration, framework-dependent or self-contained, and runtime identifier (&lt;code&gt;win-x64&lt;/code&gt;, &lt;code&gt;linux-x64&lt;/code&gt;, &lt;code&gt;osx-arm64&lt;/code&gt;, etc.).&lt;/p&gt;




&lt;h3&gt;
  
  
  Workspace Auto-Configuration
&lt;/h3&gt;

&lt;p&gt;When you open a .NET workspace the extension automatically:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Enables &lt;strong&gt;file nesting&lt;/strong&gt; (&lt;code&gt;appsettings.*.json&lt;/code&gt; under &lt;code&gt;appsettings.json&lt;/code&gt;, etc.)&lt;/li&gt;
&lt;li&gt;Hides &lt;code&gt;bin/&lt;/code&gt; and &lt;code&gt;obj/&lt;/code&gt; folders&lt;/li&gt;
&lt;li&gt;Applies a &lt;strong&gt;Rider-style icon theme&lt;/strong&gt; for &lt;code&gt;.cs&lt;/code&gt;, &lt;code&gt;.csproj&lt;/code&gt;, &lt;code&gt;.sln&lt;/code&gt;, &lt;code&gt;.cshtml&lt;/code&gt;, &lt;code&gt;.json&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Status Bar
&lt;/h3&gt;

&lt;p&gt;The active solution or project name is always visible in the bottom bar. Click it to trigger a build.&lt;/p&gt;




&lt;h2&gt;
  
  
  Install
&lt;/h2&gt;

&lt;p&gt;Search for &lt;strong&gt;.NET Essentials Toolbox&lt;/strong&gt; in the VS Code Extensions panel, or install from the &lt;a href="https://marketplace.visualstudio.com/items?itemName=elisonfrank.dotnet-essentials" rel="noopener noreferrer"&gt;Marketplace&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Source code is on &lt;a href="https://github.com/elisonfrank/dotnet-essentials" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; — PRs and issues welcome.&lt;/p&gt;




&lt;p&gt;This is v0.1.1. A lot more planned. If you're a .NET developer using VS Code, give it a try and let me know what's missing.&lt;/p&gt;

</description>
      <category>dotnet</category>
      <category>vscode</category>
      <category>csharp</category>
      <category>productivity</category>
    </item>
    <item>
      <title>I built a CLI that writes my commit messages and PR descriptions for me</title>
      <dc:creator>Elison Frankowski</dc:creator>
      <pubDate>Tue, 12 May 2026 17:47:46 +0000</pubDate>
      <link>https://dev.to/elison_frank/i-built-a-cli-that-writes-my-commit-messages-and-pr-descriptions-for-me-4bh9</link>
      <guid>https://dev.to/elison_frank/i-built-a-cli-that-writes-my-commit-messages-and-pr-descriptions-for-me-4bh9</guid>
      <description>&lt;p&gt;For several years I've been writing commit messages like "fix stuff" and PR descriptions that say nothing useful. Last week I got tired of it and built &lt;strong&gt;graftai&lt;/strong&gt; — a CLI that handles the annoying parts of git workflow after you finish coding.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it does
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;graft commit   &lt;span class="c"&gt;# analyzes your diff, suggests a commit message&lt;/span&gt;
graft &lt;span class="nb"&gt;pr&lt;/span&gt;       &lt;span class="c"&gt;# generates a PR title and description from your commits&lt;/span&gt;
graft &lt;span class="nb"&gt;sync&lt;/span&gt;     &lt;span class="c"&gt;# syncs with main, resolves merge conflicts with AI&lt;/span&gt;
graft config   &lt;span class="c"&gt;# set your provider, model, language and API key&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  How it works
&lt;/h2&gt;

&lt;p&gt;You run &lt;code&gt;graft commit&lt;/code&gt;, it reads your diff, sends it to the AI model of your choice, and suggests a conventional commit message. You approve, edit, or cancel.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Analyzing diff...

Suggested commit message:
feat(auth): add JWT refresh token rotation with configurable expiry

? Use this message? (Y/n)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Same for PRs — it reads your commit history and writes a title and description that actually explains what changed and why.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;graft sync&lt;/code&gt; is the interesting one: when your branch has diverged from main, it decides whether to rebase or merge (based on whether your branch is published), runs it, and for each conflicted file shows you the AI's proposed resolution with an explanation before applying anything.&lt;/p&gt;

&lt;h2&gt;
  
  
  It works with your own API key
&lt;/h2&gt;

&lt;p&gt;No SaaS, no subscription. You bring your own key. Supported providers:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Provider&lt;/th&gt;
&lt;th&gt;Models&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;OpenAI&lt;/td&gt;
&lt;td&gt;gpt-4o-mini, gpt-4o, gpt-4.1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Anthropic&lt;/td&gt;
&lt;td&gt;claude-haiku, claude-sonnet, claude-opus&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Google&lt;/td&gt;
&lt;td&gt;gemini-2.0-flash, gemini-2.5-pro&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Groq&lt;/td&gt;
&lt;td&gt;llama-3.3-70b, mixtral-8x7b (free tier available)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Config is saved locally at &lt;code&gt;~/.graft/config.json&lt;/code&gt;. You can also use env vars if you prefer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Install
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; graftai
graft config
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it. Next time you finish a feature, instead of staring at a blank commit message box:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git add &lt;span class="nb"&gt;.&lt;/span&gt;
graft commit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  The code
&lt;/h2&gt;

&lt;p&gt;Open source on GitHub: &lt;a href="https://github.com/elisonfrank/graft" rel="noopener noreferrer"&gt;github.com/elisonfrank/graft&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Built with Node.js, TypeScript, and the Vercel AI SDK for provider-agnostic model switching.&lt;/p&gt;

</description>
      <category>git</category>
      <category>productivity</category>
      <category>typescript</category>
      <category>opensource</category>
    </item>
    <item>
      <title>SimCore: I built a social simulation engine where LLM agents live on a real map of your city</title>
      <dc:creator>Elison Frankowski</dc:creator>
      <pubDate>Tue, 28 Apr 2026 20:04:16 +0000</pubDate>
      <link>https://dev.to/elison_frank/simcore-i-built-a-social-simulation-engine-where-llm-agents-live-on-a-real-map-of-your-city-1l2o</link>
      <guid>https://dev.to/elison_frank/simcore-i-built-a-social-simulation-engine-where-llm-agents-live-on-a-real-map-of-your-city-1l2o</guid>
      <description>&lt;h2&gt;
  
  
  The idea
&lt;/h2&gt;

&lt;p&gt;Most agent simulations run on abstract grids. I wanted something that feels personal — so I anchored the simulation to a real map.&lt;/p&gt;

&lt;p&gt;When you run SimCore, it detects your location and resolves scenario places to real POIs via OpenStreetMap. "Town Square" becomes the actual square in your city. "Farm District" becomes real farmland nearby.&lt;/p&gt;

&lt;h2&gt;
  
  
  How it works
&lt;/h2&gt;

&lt;p&gt;Agents have Big Five personalities, memories, relationships, and goals. Every tick (1 simulated hour), each agent observes their surroundings, thinks via LLM, and decides what to do: move, speak, trade, work, or rest.&lt;/p&gt;

&lt;p&gt;Parallel decisions. Emergent conversations. Real crises.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it looks like
&lt;/h2&gt;

&lt;p&gt;The dashboard renders agents as avatars on a live Leaflet map. A breaking banner appears when significant events fire. When the simulation ends, an LLM writes a narrative chronicle of what happened.&lt;/p&gt;

&lt;h2&gt;
  
  
  Stack
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Python 3.11 + FastAPI + asyncio&lt;/li&gt;
&lt;li&gt;LiteLLM (Ollama local, OpenAI, Anthropic — or demo mode, no key needed)&lt;/li&gt;
&lt;li&gt;React + Vite + Leaflet&lt;/li&gt;
&lt;li&gt;OpenStreetMap via Overpass API&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  4 scenarios included
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Outbreak&lt;/strong&gt; — epidemic hits a small town&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Marketplace&lt;/strong&gt; — competing shops face a discount chain moving in&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Urban Life&lt;/strong&gt; — protests, politics, infrastructure failures&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;High School&lt;/strong&gt; — cliques, drama, social pressure&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/elisonfrank/simcore
&lt;span class="nb"&gt;cd &lt;/span&gt;simcore
pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s2"&gt;".[dev]"&lt;/span&gt;
&lt;span class="nb"&gt;cd &lt;/span&gt;dashboard &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; npm run dev &amp;amp;
&lt;span class="nb"&gt;cd&lt;/span&gt; ..
python &lt;span class="nt"&gt;-m&lt;/span&gt; simcore.cli run scenarios/epidemic/config.yaml &lt;span class="nt"&gt;--dashboard&lt;/span&gt; &lt;span class="nt"&gt;--demo&lt;/span&gt; &lt;span class="nt"&gt;--speed&lt;/span&gt; 3.0 &lt;span class="nt"&gt;--port&lt;/span&gt; 8420
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;GitHub: &lt;a href="https://github.com/elisonfrank/simcore" rel="noopener noreferrer"&gt;github.com/elisonfrank/simcore&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Would love feedback — especially on scenario ideas and agent behavior.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>llm</category>
      <category>python</category>
      <category>simulation</category>
    </item>
  </channel>
</rss>
