<?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: Arjun Varma</title>
    <description>The latest articles on DEV Community by Arjun Varma (@arjun_varma_fd5bac95e3b24).</description>
    <link>https://dev.to/arjun_varma_fd5bac95e3b24</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%2F3604001%2F383ab162-287e-4528-9a6e-1e6da875aa3f.jpg</url>
      <title>DEV Community: Arjun Varma</title>
      <link>https://dev.to/arjun_varma_fd5bac95e3b24</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/arjun_varma_fd5bac95e3b24"/>
    <language>en</language>
    <item>
      <title>why i built smolanalytics</title>
      <dc:creator>Arjun Varma</dc:creator>
      <pubDate>Sun, 05 Jul 2026 11:35:48 +0000</pubDate>
      <link>https://dev.to/arjun_varma_fd5bac95e3b24/why-i-built-smolanalytics-3dl2</link>
      <guid>https://dev.to/arjun_varma_fd5bac95e3b24/why-i-built-smolanalytics-3dl2</guid>
      <description>&lt;p&gt;&lt;em&gt;originally on my blog: &lt;a href="https://smolanalytics.com/blog/why-i-built-smolanalytics" rel="noopener noreferrer"&gt;smolanalytics.com/blog/why-i-built-smolanalytics&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;i ship products constantly. web apps, a trading bot, a billing engine, side bets that live or die in a month. every one of them needs the same boring answer: is anyone using this, and did the thing i shipped yesterday actually work.&lt;/p&gt;

&lt;p&gt;for years my answer was GA4, because it was free and it was the default. GA4 is also the reason i quit analytics entirely.&lt;/p&gt;

&lt;h2&gt;
  
  
  the ga4 breakup
&lt;/h2&gt;

&lt;p&gt;i would open GA4 to answer something simple, like "how many people hit the pricing page this week." twenty minutes later i'd be three menus deep in explorations and dimensions, looking at thresholded numbers i didn't trust, still without the answer. so i did what a lot of people quietly do: i stopped opening it. then i stopped adding it to new projects at all. i shipped blind for months and told myself i'd feel product-market fit in my gut.&lt;/p&gt;

&lt;p&gt;shipping blind is worse. i just didn't want to admit that the fix was "spend more time inside an analytics dashboard," because every tool i tried had the same shape: the data lives over there, in their app, and you are expected to come visit, learn their UI, and dig. i live in my editor. that's where i build, that's where i want the answer.&lt;/p&gt;

&lt;p&gt;so i built the thing i wanted.&lt;/p&gt;

&lt;h2&gt;
  
  
  what is smolanalytics
&lt;/h2&gt;

&lt;p&gt;smolanalytics is an open source (MIT) web and product analytics tool that runs as a single Go binary you can self-host for free, with a hosted cloud from $9/month. it does web analytics (visitors, referrers, UTM, live view) and product analytics (funnels, retention, trends, paths, cohorts) from the same events, in one tool. it is also an MCP server, so coding assistants like Claude Code and Cursor answer analytics questions right in your editor with exact computed numbers, using the model you already pay for; smolanalytics itself runs no AI, so that part costs nothing. the dashboard opens with a verdict that says what changed and what to fix instead of a wall of charts, and a morning brief digests every site on the instance. answers come from deterministic reports, never AI-generated SQL, and a CI test asserts the editor's answer always equals the dashboard's. it deliberately never does session replay, feature flags, or A/B testing, and your data never leaves your box.&lt;/p&gt;

&lt;h2&gt;
  
  
  analytics that comes to you
&lt;/h2&gt;

&lt;p&gt;the core inversion is simple. every tool wants you to come to the data. smolanalytics sends the data to where you already are:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;the verdict.&lt;/strong&gt; the dashboard doesn't open with charts, it opens with a sentence: what dropped, where the leak is, what to look at. the charts are underneath as evidence. &lt;code&gt;whats_notable&lt;/code&gt; is the same thing as an MCP tool, so your agent can run the morning check for you.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;your editor.&lt;/strong&gt; run &lt;code&gt;smolanalytics connect&lt;/code&gt; once and your coding assistant gets 47 tools and 13 prompts. then you just ask, in the same window you write code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;you ▸ did signups improve this week?
ai  ▸ signups: 212 this week vs 180 last week, up 18%.
      the lift is /pricing traffic from news.ycombinator.com.
      the funnel after signup is unchanged: 62% reach activate.
      want the breakdown by plan?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;those numbers are example output, the shape of a real answer. they are not my traffic. i launched this month; i don't have traffic worth quoting yet.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;the morning email.&lt;/strong&gt; &lt;code&gt;smolanalytics brief&lt;/code&gt; prints a digest across every site on the instance: what grew, what broke, what to look at, split per product. self-hosted, you cron it and pipe it to email or slack. on cloud it just arrives every morning. i point all my projects at one instance and read one digest instead of opening a tab per dashboard.&lt;/p&gt;

&lt;h2&gt;
  
  
  the number can't be made up
&lt;/h2&gt;

&lt;p&gt;this is the part i'd be most skeptical of if someone else wrote this post. AI assistants bolted onto analytics tools mostly work by generating queries: PostHog's MCP, for example, lets the model write HogQL. a generated query is a second path to your data, and a second path can disagree with what the dashboard shows. smolanalytics can't drift like that, structurally. the MCP tools don't generate queries at all; they call the exact same deterministic report functions the dashboard renders, so there is no second query path. and that isn't a promise in a README, it's a test: the agreement test seeds a server, asks the same question through the HTTP API and through the MCP server, and fails the build if the answers aren't identical. it runs in CI on every commit, so the claim can't quietly rot. the honest caveat: your model can still ask the wrong question. it just cannot invent the number.&lt;/p&gt;

&lt;h2&gt;
  
  
  what it will never do
&lt;/h2&gt;

&lt;p&gt;the graveyard of analytics tools is "one tool that became nine." so there's a never-list, written down in the README: no session replay, no feature flags, no A/B testing, no surveys, no data warehouses, no multi-node clustering. other tools do those well, and bundling them is how you end up needing a cluster and a pricing calculator to self-host. this stays one binary that answers questions about your events, exactly. events are about 7 bytes each on disk, and a small VPS is plenty.&lt;/p&gt;

&lt;h2&gt;
  
  
  the trust model
&lt;/h2&gt;

&lt;p&gt;i should be upfront about what this is. it's me, solo. it launched this month. there are no testimonials on the site because there are no testimonials, and i won't fake any.&lt;/p&gt;

&lt;p&gt;so trust can't come from a track record. it has to come from the design: MIT license, no CLA, so no rug-pull relicense is possible on your copy. self-hosting is free forever with no feature gates; the binary you run in dev is the whole product, not a demo of the cloud. the storage format is documented with compatibility guarantees, export is one curl to csv or jsonl, and there's no phone-home. the worst case, if i get hit by a bus or just move on, is that the binary you already have keeps running on your data on your disk. i'm not asking anyone to trust me. i'm asking for one &lt;code&gt;docker run&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;the cloud exists for people who don't want to run a server: a 14-day full trial, then $9/month for unlimited sites, with the brief delivered by email. going over your included events never locks the dashboard. that's the business; the license never will be.&lt;/p&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;docker run &lt;span class="nt"&gt;-p&lt;/span&gt; 8080:8080 ghcr.io/arjun0606/smolanalytics demo
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;that's a populated demo dashboard at localhost:8080, verdict and ask bar included.&lt;/p&gt;

&lt;p&gt;if you're weighing it against what you run now: &lt;a href="https://smolanalytics.com/vs/plausible" rel="noopener noreferrer"&gt;smolanalytics vs plausible&lt;/a&gt; and &lt;a href="https://smolanalytics.com/vs/ga4" rel="noopener noreferrer"&gt;smolanalytics vs GA4&lt;/a&gt;. the 13 built-in prompts, with the shape of each answer, are in &lt;a href="https://github.com/Arjun0606/smolanalytics/blob/main/docs/prompts.md" rel="noopener noreferrer"&gt;docs/prompts.md&lt;/a&gt;. the code is at &lt;a href="https://github.com/Arjun0606/smolanalytics" rel="noopener noreferrer"&gt;github.com/Arjun0606/smolanalytics&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;if you read this far and something's missing before you'd switch, tell me. i'm easy to find and i answer.&lt;/p&gt;

&lt;p&gt;smolanalytics is the analytics that tells you what to fix — &lt;a href="https://smolanalytics.com" rel="noopener noreferrer"&gt;try the cloud&lt;/a&gt; or self-host free.&lt;/p&gt;

</description>
      <category>selfhosting</category>
      <category>analytics</category>
      <category>opensource</category>
      <category>mcp</category>
    </item>
    <item>
      <title>check it out! would love some feedback!</title>
      <dc:creator>Arjun Varma</dc:creator>
      <pubDate>Mon, 10 Nov 2025 10:19:12 +0000</pubDate>
      <link>https://dev.to/arjun_varma_fd5bac95e3b24/check-it-out-would-love-some-feedback-212k</link>
      <guid>https://dev.to/arjun_varma_fd5bac95e3b24/check-it-out-would-love-some-feedback-212k</guid>
      <description>&lt;div class="ltag__link"&gt;
  &lt;a href="/arjun_varma_fd5bac95e3b24" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&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%2Fuser%2Fprofile_image%2F3604001%2F383ab162-287e-4528-9a6e-1e6da875aa3f.jpg" alt="arjun_varma_fd5bac95e3b24"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://dev.to/arjun_varma_fd5bac95e3b24/i-got-tired-of-copy-pasting-git-commands-from-chatgpt-so-i-built-this-1b5n" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;I Got Tired of Copy-Pasting Git Commands From ChatGPT, So I Built This&lt;/h2&gt;
      &lt;h3&gt;Arjun Varma ・ Nov 10&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#ai&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#git&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#productivity&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#showdev&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


</description>
      <category>ai</category>
      <category>git</category>
      <category>productivity</category>
      <category>showdev</category>
    </item>
    <item>
      <title>I Got Tired of Copy-Pasting Git Commands From ChatGPT, So I Built This</title>
      <dc:creator>Arjun Varma</dc:creator>
      <pubDate>Mon, 10 Nov 2025 10:15:05 +0000</pubDate>
      <link>https://dev.to/arjun_varma_fd5bac95e3b24/i-got-tired-of-copy-pasting-git-commands-from-chatgpt-so-i-built-this-1b5n</link>
      <guid>https://dev.to/arjun_varma_fd5bac95e3b24/i-got-tired-of-copy-pasting-git-commands-from-chatgpt-so-i-built-this-1b5n</guid>
      <description>&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.snapcommit.dev/" rel="noopener noreferrer"&gt;https://www.snapcommit.dev/&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The Problem Everyone Has (But Nobody Talks About)&lt;br&gt;
Let me paint a picture:&lt;br&gt;
You're deep in code. Flow state. Everything's clicking.&lt;br&gt;
Then you need to merge a branch.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$ git merge feature-auth&lt;br&gt;
CONFLICT (content): Merge conflict in src/auth.ts&lt;br&gt;
Automatic merge failed; fix conflicts and then commit the result.&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;And just like that, you're on Google.&lt;br&gt;
"git merge conflict resolve"&lt;br&gt;
"how to fix merge conflict"&lt;br&gt;
"git merge conflict accept theirs"&lt;br&gt;
You copy a command from StackOverflow. Paste it. It fails.&lt;br&gt;
Back to Google. Copy. Paste. Fail.&lt;br&gt;
30 minutes later, you've lost your flow state and you're questioning your career choices.&lt;br&gt;
I Thought ChatGPT Would Save Us&lt;br&gt;
When ChatGPT came out, I thought: "Finally! No more Googling Git commands!"&lt;br&gt;
But here's what actually happened:&lt;br&gt;
Me: "How do I undo my last commit but keep the changes?"&lt;br&gt;
ChatGPT: "You can use git reset --soft HEAD~1"&lt;br&gt;
Me: copies command, pastes in terminal&lt;br&gt;
Terminal: ✓ Works!&lt;br&gt;
Me 5 minutes later: "How do I push this now?"&lt;br&gt;
ChatGPT: "Use git push origin main"&lt;br&gt;
Me: copies, pastes&lt;br&gt;
Terminal: "error: failed to push some refs... hint: Updates were rejected because..."&lt;br&gt;
Me: "What does this error mean?"&lt;br&gt;
And we're back to the copy-paste loop.&lt;br&gt;
The Real Problem: ChatGPT Can't See Your Repo&lt;br&gt;
ChatGPT gives great advice... for a hypothetical situation.&lt;br&gt;
But it doesn't know:&lt;br&gt;
What branch you're on&lt;br&gt;
What changes you have&lt;br&gt;
What the actual error is&lt;br&gt;
What your repo structure looks like&lt;br&gt;
So you end up being a messenger between ChatGPT and your terminal.&lt;br&gt;
ChatGPT → You → Terminal → Error → You → ChatGPT → You → Terminal...&lt;br&gt;
It's exhausting.&lt;br&gt;
Reddit Told Me The Brutal Truth&lt;br&gt;
I posted about this problem on Reddit, expecting people to say "just learn Git properly."&lt;br&gt;
Instead, I got hundreds of comments saying:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"I've been coding for 15 years and still Google git commands daily"&lt;br&gt;
"I have a text file with git commands I copy-paste"&lt;br&gt;
"My terminal history is 90% git commands that failed"&lt;br&gt;
"I ask ChatGPT about Git more than anything else"&lt;br&gt;
The most eye-opening comment:&lt;br&gt;
"Git is the only tool where everyone pretends they know what they're doing, but we're all just Googling in private"&lt;br&gt;
That's when I realized: This isn't a knowledge problem. This is a UX problem.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So I Built SnapCommit&lt;br&gt;
The idea is stupidly simple:&lt;br&gt;
What if ChatGPT could actually run the commands for you?&lt;br&gt;
Not just suggest them. Not just explain them.&lt;br&gt;
Actually execute them. See the output. Fix errors. Try again.&lt;/p&gt;

&lt;p&gt;Why This Matters More Than You Think&lt;br&gt;
I initially built this for myself. Solo dev, moving fast, didn't want to waste time on Git.&lt;br&gt;
But here's what I learned from Reddit:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Companies don't allow Cursor/Copilot
Many devs work at companies that block AI coding tools for security reasons. But they can't block a terminal tool that runs locally.&lt;/li&gt;
&lt;li&gt;Git is the #1 reason juniors ask for help
Senior devs spend hours per week helping juniors with Git. This could free up that time.&lt;/li&gt;
&lt;li&gt;Context-switching kills productivity
Every time you leave your terminal to Google or ask ChatGPT, you lose 5-10 minutes of focus.&lt;/li&gt;
&lt;li&gt;Git anxiety is real
People are genuinely scared of Git. They don't experiment because they're afraid of breaking things. This gives them a safety net.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I know some people will say "just learn Git" or "ChatGPT is free" and that's totally fair. This isn't for everyone.&lt;br&gt;
But if you're like me and just want to ship code without memorizing 50 Git commands, give it a shot.&lt;/p&gt;

&lt;p&gt;[&lt;a href="https://www.snapcommit.dev/" rel="noopener noreferrer"&gt;https://www.snapcommit.dev/&lt;/a&gt;]&lt;br&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%2Fcd53reytr9i3tmfxfpko.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%2Fcd53reytr9i3tmfxfpko.png" alt="demo screenshot" width="800" height="1053"&gt;&lt;/a&gt;&lt;br&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%2Fpbbpmzeuqhuadgipp2o8.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%2Fpbbpmzeuqhuadgipp2o8.png" alt="demo screenshot" width="800" height="842"&gt;&lt;/a&gt;&lt;br&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%2F0oziy29niqwx6ux0gok5.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%2F0oziy29niqwx6ux0gok5.png" alt="demo screenshot" width="800" height="1053"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>git</category>
      <category>productivity</category>
      <category>showdev</category>
    </item>
  </channel>
</rss>
