<?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>Forem: Ofer Shapira</title>
    <description>The latest articles on Forem by Ofer Shapira (@ofershap).</description>
    <link>https://forem.com/ofershap</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%2F1410192%2F64553a46-f696-4cf0-b753-567fc9e519d4.png</url>
      <title>Forem: Ofer Shapira</title>
      <link>https://forem.com/ofershap</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/ofershap"/>
    <language>en</language>
    <item>
      <title>I Built a Dozen Projects Without Writing Code (With Sticklight AI) - Here's What I Learned:</title>
      <dc:creator>Ofer Shapira</dc:creator>
      <pubDate>Mon, 09 Mar 2026 20:23:23 +0000</pubDate>
      <link>https://forem.com/ofershap/i-built-a-dozen-projects-without-writing-code-with-sticklight-ai-heres-what-i-learned-1af2</link>
      <guid>https://forem.com/ofershap/i-built-a-dozen-projects-without-writing-code-with-sticklight-ai-heres-what-i-learned-1af2</guid>
      <description>&lt;h2&gt;
  
  
  The Problem Every Non-Developer Knows
&lt;/h2&gt;

&lt;p&gt;You have an idea. You get excited. You ask a developer how much it costs.&lt;br&gt;
Then you quietly close your laptop and pretend you never had that idea.&lt;/p&gt;

&lt;p&gt;I've been there. Multiple times.&lt;/p&gt;
&lt;h2&gt;
  
  
  Then I Found Sticklight
&lt;/h2&gt;

&lt;p&gt;Sticklight is an AI-powered builder where you describe what you want in plain English (or any language — it even works in Hebrew), and it builds a fully working website, app, or game for you. In real-time. With hosting, database, the whole stack.&lt;/p&gt;

&lt;p&gt;No templates. No drag-and-drop. You just... describe it.&lt;/p&gt;
&lt;h2&gt;
  
  
  What I've Built So Far
&lt;/h2&gt;

&lt;p&gt;Here are some examples of things I built in minutes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🎮 A Tetris game&lt;/li&gt;
&lt;li&gt;🛒 An e-commerce store&lt;/li&gt;
&lt;li&gt;🌍 A 3D solar system visualization&lt;/li&gt;
&lt;li&gt;🧰 A developer tools page&lt;/li&gt;
&lt;li&gt;📝 Multiple landing pages&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I recorded a video walkthrough showing these + a live build:&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/D6JbUFpZPwI"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  What Surprised Me
&lt;/h2&gt;

&lt;p&gt;The AI doesn't just generate a static page — it handles the full stack. Things that would normally require:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Hosting setup&lt;/li&gt;
&lt;li&gt;Domain configuration&lt;/li&gt;
&lt;li&gt;Database&lt;/li&gt;
&lt;li&gt;Backend logic&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;...are all handled automatically.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Try It
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Free tier&lt;/strong&gt;: 5 AI credits per day, no credit card needed&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pro plan&lt;/strong&gt;: ~$14/month (custom domain, 200 credits/month, full code access)&lt;/li&gt;
&lt;li&gt;I have a 25% discount code: &lt;strong&gt;OFERS25&lt;/strong&gt; (valid through March 31)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👉 &lt;a href="https://promotion-coupon-25-usd.sticklight.app/" rel="noopener noreferrer"&gt;Try Sticklight&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Have you tried AI builders? I'm curious what other tools people are using and how they compare. Drop a comment!&lt;/em&gt;&lt;/p&gt;

</description>
      <category>nocode</category>
      <category>showdev</category>
      <category>webdev</category>
      <category>ai</category>
    </item>
    <item>
      <title>Your AI Agent Can Now See Your Real Browser (And This Post Was Written With It)</title>
      <dc:creator>Ofer Shapira</dc:creator>
      <pubDate>Mon, 09 Mar 2026 12:32:41 +0000</pubDate>
      <link>https://forem.com/ofershap/your-ai-agent-can-now-see-your-real-browser-and-this-post-was-written-with-it-4fp0</link>
      <guid>https://forem.com/ofershap/your-ai-agent-can-now-see-your-real-browser-and-this-post-was-written-with-it-4fp0</guid>
      <description>&lt;h1&gt;
  
  
  Your AI Agent Can Now See Your Real Browser (And This Post Was Written With It)
&lt;/h1&gt;

&lt;p&gt;You ship a fix. Your agent says "done, please verify." You alt-tab to Chrome, navigate to the page, log in, click around. Your agent just wrote the code — it could verify it too. It already has your browser open. It just couldn't see it.&lt;/p&gt;

&lt;p&gt;Until now.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Real Browser MCP&lt;/strong&gt; is an MCP server plus a Chrome extension that gives your AI agent control of your &lt;em&gt;actual&lt;/em&gt; browser. Same tabs, same cookies, same logins. No headless browser. No replaying auth every time you want a quick "did the button work?" check.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why existing tools fall short
&lt;/h2&gt;

&lt;p&gt;Playwright MCP and Chrome DevTools MCP launch a &lt;em&gt;new&lt;/em&gt; browser. Fresh profile, no state. For anything behind login — your app, internal tools, social accounts — you're stuck replaying the full flow. That's fine for isolated E2E tests. It's useless when you're iterating with an agent and just want it to look at the page you already have open.&lt;/p&gt;

&lt;p&gt;Real Browser MCP is different. The extension runs inside the Chrome you're already using. The MCP server talks to it over a local WebSocket. Your agent can snapshot the page, click, type, scroll, take screenshots — all through the browser you're already using.&lt;/p&gt;

&lt;h2&gt;
  
  
  What you need
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;MCP server&lt;/strong&gt; — one line in Cursor (or Claude Desktop, Windsurf): &lt;code&gt;npx -y real-browser-mcp&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Chrome extension&lt;/strong&gt; — &lt;a href="https://chromewebstore.google.com/detail/real-browser-mcp/fkkimpklpgedomcheiojngaaaicmaidi" rel="noopener noreferrer"&gt;install from the Chrome Web Store&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That's it. Green dot in the extension popup = connected. Your agent can now see your browser.&lt;/p&gt;

&lt;h2&gt;
  
  
  Dog food
&lt;/h2&gt;

&lt;p&gt;I use this every day. And yes — &lt;strong&gt;this post was written and published using Real Browser MCP.&lt;/strong&gt; The agent had the draft, navigated to dev.to/new, filled the form, and hit Publish. Same browser where I'm already logged in.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/ofershap/real-browser-mcp" rel="noopener noreferrer"&gt;Real Browser MCP on GitHub&lt;/a&gt;&lt;/strong&gt; · &lt;strong&gt;&lt;a href="https://chromewebstore.google.com/detail/real-browser-mcp/fkkimpklpgedomcheiojngaaaicmaidi" rel="noopener noreferrer"&gt;Chrome Web Store&lt;/a&gt;&lt;/strong&gt; · MIT, open source.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>The Developer Who Burned $1,500 in One Day on Cursor Without Knowing It</title>
      <dc:creator>Ofer Shapira</dc:creator>
      <pubDate>Sun, 08 Mar 2026 16:37:35 +0000</pubDate>
      <link>https://forem.com/ofershap/the-developer-who-burned-1500-in-one-day-on-cursor-without-knowing-it-40a7</link>
      <guid>https://forem.com/ofershap/the-developer-who-burned-1500-in-one-day-on-cursor-without-knowing-it-40a7</guid>
      <description>&lt;p&gt;We use Cursor at our company on a shared Enterprise account. One budget, one blanket that every developer pulls in their direction. Staying within budget is a challenge every engineering team is dealing with right now.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Happened
&lt;/h2&gt;

&lt;p&gt;Engineering costs used to be two things: headcount and cloud infrastructure. You had tools for both. Then AI coding assistants showed up, and suddenly there's a third cost center that nobody has good tooling for.&lt;/p&gt;

&lt;p&gt;There's also model inflation -- it's genuinely hard to tell which model is better, cheaper, or more expensive. The names don't help. So one developer, in all innocence, picked a model with "Fast" in the name thinking it was the lighter, cheaper option. Turns out it was 10x more expensive per request than what everyone else was using.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;$1,500. One day. Nobody knew.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Cursor's Dashboard Won't Save You
&lt;/h2&gt;

&lt;p&gt;Cursor gives you an admin panel with raw usage numbers. But it won't tell you when something is off. No anomaly detection, no alerts, no spending limits per developer. You find out about cost spikes when the invoice arrives -- weeks after the damage is done.&lt;/p&gt;

&lt;p&gt;For a company with 50, 100, 500 developers, this is a serious blind spot.&lt;/p&gt;

&lt;h2&gt;
  
  
  So We Built Something
&lt;/h2&gt;

&lt;p&gt;After paying our tuition, I decided to build a monitoring tool that connects to Cursor's Enterprise APIs, runs anomaly detection, and sends Slack alerts when something looks off. When a developer's daily spend spikes to 4x their average, we know within the hour, not next month.&lt;/p&gt;

&lt;p&gt;Here's a 90-second demo of how it works:&lt;/p&gt;

&lt;p&gt;

  &lt;iframe src="https://www.youtube.com/embed/DqPjFWGI57A"&gt;
  &lt;/iframe&gt;


&lt;/p&gt;

&lt;p&gt;But monitoring was just the beginning. The dashboard now answers questions we didn't even know we had:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cost monitoring&lt;/strong&gt; -- who's spending how much, on which models, and is it reasonable?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Adoption tracking&lt;/strong&gt; -- is everyone actually using the tool we're paying for? We found "empty chairs" -- developers with active licenses who weren't using Cursor at all.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Model optimization&lt;/strong&gt; -- which models cost more and which cost less, shown with actual per-request pricing from your own usage data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Team comparison&lt;/strong&gt; -- how does each team's usage compare, and where are the optimization opportunities?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Thanks to this tool, we could figure out which models to recommend, which to block, and how to use Cursor more effectively across the entire dev department.&lt;/p&gt;

&lt;h2&gt;
  
  
  Open Source
&lt;/h2&gt;

&lt;p&gt;I built it open source so any team dealing with the same problem can deploy it themselves. It's a Next.js dashboard backed by PostgreSQL, self-hosted with Docker, takes about 10 minutes to set up.&lt;/p&gt;

&lt;p&gt;MIT licensed, free forever: &lt;a href="https://github.com/ofershap/cursor-usage-tracker" rel="noopener noreferrer"&gt;cursor-usage-tracker on GitHub&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Question Every Engineering Leader Should Be Asking
&lt;/h2&gt;

&lt;p&gt;AI coding tools are becoming a real cost center -- right alongside headcount and cloud infrastructure. But unlike AWS or GCP, there's no mature observability tooling for this category yet.&lt;/p&gt;

&lt;p&gt;If your team is on Cursor Enterprise, ask yourself: do you know how much each developer is spending? Do you know which models they're using? Would you find out if someone accidentally switched to a model that costs 10x more?&lt;/p&gt;

&lt;p&gt;If the answer is no, you might want to check your bill.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>webdev</category>
      <category>ai</category>
    </item>
    <item>
      <title>8 README mistakes killing your GitHub stars (and how to fix them)</title>
      <dc:creator>Ofer Shapira</dc:creator>
      <pubDate>Sat, 07 Mar 2026 17:45:38 +0000</pubDate>
      <link>https://forem.com/ofershap/8-readme-mistakes-killing-your-github-stars-and-how-to-fix-them-ong</link>
      <guid>https://forem.com/ofershap/8-readme-mistakes-killing-your-github-stars-and-how-to-fix-them-ong</guid>
      <description>&lt;p&gt;Your code is great. Your README is costing you stars.&lt;/p&gt;

&lt;p&gt;I maintain 40+ open source projects on GitHub. After watching which ones get traction and which ones die in silence, the pattern is clear: the README makes or breaks it. Not the code quality, not the test coverage, not the CI badges. The README.&lt;/p&gt;

&lt;p&gt;Here are 8 mistakes I see constantly, and what to do instead.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Leading with a description instead of a hook
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What people do:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;MyLib is a utility library for JavaScript.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Nobody cares. That tells me nothing about why I should pick this over the 500 other JS utility libraries.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What works:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Parse, validate, and transform dates in 400 bytes. No Moment, no Luxon, no dependencies.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Lead with the value. What pain does it kill? How small or fast is it? Give me a reason to keep reading in the first line.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. No visual, no click
&lt;/h2&gt;

&lt;p&gt;People scroll past text. They stop for images.&lt;/p&gt;

&lt;p&gt;If your project has any kind of UI, a demo GIF is mandatory. For CLI tools, use asciinema or VHS. For web apps, record a short browser demo. For libraries, show code + output side by side.&lt;/p&gt;

&lt;p&gt;Put the visual right after your hook, before the feature list. That's the best spot on the page.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Badge spam
&lt;/h2&gt;

&lt;p&gt;I've seen READMEs with 12 badges. "Made with love", "code style: prettier", "contributions welcome", three different CI statuses.&lt;/p&gt;

&lt;p&gt;Badges should signal project health at a glance. Stick to 3-5:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;npm version&lt;/strong&gt; - proves it's published&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CI status&lt;/strong&gt; - tests pass&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;TypeScript&lt;/strong&gt; - type safety signal&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;License&lt;/strong&gt; - MIT/Apache so people know they can use it&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bundle size&lt;/strong&gt; - only if size is a selling point&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every badge beyond that is noise.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Making installation take more than 30 seconds
&lt;/h2&gt;

&lt;p&gt;From landing on your README to running code should take under 30 seconds.&lt;br&gt;
&lt;/p&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;your-package
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;thing&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;your-package&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;thing&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;option&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Done. No "first make sure you have Node 18+" preamble. No "clone the repo and build from source." The fastest path from zero to working code.&lt;/p&gt;
&lt;h2&gt;
  
  
  5. Writing for readers instead of scanners
&lt;/h2&gt;

&lt;p&gt;Developers don't read READMEs. They scan them. Long paragraphs get skipped entirely.&lt;/p&gt;

&lt;p&gt;What works:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Bold the key terms in the first sentence of each section&lt;/li&gt;
&lt;li&gt;Use tables for API options instead of nested lists&lt;/li&gt;
&lt;li&gt;Keep paragraphs under 3 sentences&lt;/li&gt;
&lt;li&gt;Use &lt;code&gt;code formatting&lt;/code&gt; for anything technical&lt;/li&gt;
&lt;li&gt;GitHub Alerts (&lt;code&gt;&amp;gt; [!TIP]&lt;/code&gt;, &lt;code&gt;&amp;gt; [!WARNING]&lt;/code&gt;) for callouts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If someone skimming for 10 seconds can figure out what your project does and how to install it, you've won.&lt;/p&gt;
&lt;h2&gt;
  
  
  6. Ignoring SEO entirely
&lt;/h2&gt;

&lt;p&gt;Your README is indexed by Google, GitHub search, and increasingly by LLMs. Structure matters.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;One H1 (project name), H2s for sections, H3s for subsections. Don't skip levels.&lt;/li&gt;
&lt;li&gt;Alt text on images that describes what they show, not just "screenshot"&lt;/li&gt;
&lt;li&gt;Mention the problem domain in the first paragraph. "React hook for form validation" beats "a utility for validating things"&lt;/li&gt;
&lt;li&gt;Add a FAQ section. Both LLMs and Google love Q&amp;amp;A format.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A well-structured README ranks better than a bare repo with just code.&lt;/p&gt;
&lt;h2&gt;
  
  
  7. The 500-line README
&lt;/h2&gt;

&lt;p&gt;If your README needs a table of contents, most of it should be in &lt;code&gt;/docs&lt;/code&gt;. The README is a landing page, not a manual.&lt;/p&gt;

&lt;p&gt;Keep the main scroll path lean. Use &lt;code&gt;&amp;lt;details&amp;gt;&lt;/code&gt; blocks for verbose content like full API references or advanced config.&lt;/p&gt;
&lt;h2&gt;
  
  
  8. Outdated examples
&lt;/h2&gt;

&lt;p&gt;This one is silent killer. Your API changed 3 months ago but the README examples still show the old API. Someone copies the code, it breaks, they close the tab and never come back.&lt;/p&gt;

&lt;p&gt;Pin your README examples to real tests when you can. At minimum, try running them after every major change.&lt;/p&gt;


&lt;h2&gt;
  
  
  The tool I built for this
&lt;/h2&gt;

&lt;p&gt;After writing 40+ READMEs by hand, I got tired of juggling badge URLs, table alignment, and pushing to GitHub just to check rendering. So I built &lt;a href="https://ofershap.github.io/readme-builder/" rel="noopener noreferrer"&gt;README Builder&lt;/a&gt; - a visual drag-and-drop editor.&lt;/p&gt;

&lt;p&gt;You drag blocks (headings, badges, code, tables, images, alerts) into place, see exactly how GitHub will render them, and copy the markdown when you're done. Free, open source, no login.&lt;/p&gt;

&lt;p&gt;If this post was useful, give it a try: &lt;a href="https://ofershap.github.io/readme-builder/" rel="noopener noreferrer"&gt;ofershap.github.io/readme-builder&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The full best practices guide is also built into the app: &lt;a href="https://ofershap.github.io/readme-builder/#guide" rel="noopener noreferrer"&gt;README Best Practices Guide&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;

&lt;/p&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/ofershap" rel="noopener noreferrer"&gt;
        ofershap
      &lt;/a&gt; / &lt;a href="https://github.com/ofershap/readme-builder" rel="noopener noreferrer"&gt;
        readme-builder
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Visual drag-and-drop README editor with live GitHub-flavored preview. SEO-optimized templates, 15+ block types, import/export markdown.
    &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;readme-builder&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;
  &lt;strong&gt;Stop writing markdown by hand. Drag blocks, get a README.&lt;/strong&gt;
&lt;/p&gt;

&lt;p&gt;
  Visual editor that turns drag-and-drop blocks into GitHub-flavored markdown.&lt;br&gt;
  Live preview, templates, import from GitHub repos, export when you're done
&lt;/p&gt;

&lt;p&gt;
  &lt;a href="https://ofershap.github.io/readme-builder" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/4f3f8b3dcb1a1ffcd7942ec6ccb954a0a4982d432a9084d92993116a52623ce1/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5472795f49745f4e6f772d3232633535653f7374796c653d666f722d7468652d6261646765266c6f676f436f6c6f723d7768697465" alt="Try It Now"&gt;&lt;/a&gt;
   
  &lt;a href="https://github.com/ofershap/readme-builder#features" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/63b779795dfa8460a573828feff4d08ab69406d6dc830248c2fa23f9edad832c/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f46656174757265732d3362383266363f7374796c653d666f722d7468652d6261646765266c6f676f436f6c6f723d7768697465" alt="Features"&gt;&lt;/a&gt;
   
  &lt;a href="https://github.com/ofershap/readme-builder#self-hosting" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/13f7d2fce20a1478d2f87de9df8335bdaf9678aa5764d7f223e93bc7f6f43d45/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f53656c665f486f73742d3862356366363f7374796c653d666f722d7468652d6261646765266c6f676f436f6c6f723d7768697465" alt="Self Host"&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
  &lt;a href="https://github.com/ofershap/readme-builder/stargazers" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/2d32ad69976422340ab52af2f9382d1bbced2657e805593829e5398b7fad9395/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f73746172732f6f666572736861702f726561646d652d6275696c6465723f7374796c653d736f6369616c" alt="GitHub stars"&gt;&lt;/a&gt;
   
  &lt;a href="https://github.com/ofershap/readme-builder/actions/workflows/ci.yml" rel="noopener noreferrer"&gt;&lt;img src="https://github.com/ofershap/readme-builder/actions/workflows/ci.yml/badge.svg" alt="CI"&gt;&lt;/a&gt;
  &lt;a href="https://www.typescriptlang.org/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/f354d9e2d9c15344414c29db205487bd90012527b7558c212e9a983f455a5099/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f547970655363726970742d7374726963742d626c7565" alt="TypeScript"&gt;&lt;/a&gt;
  &lt;a href="https://github.com/ofershap/readme-builder/LICENSE" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/fdf2982b9f5d7489dcf44570e714e3a15fce6253e0cc6b5aa61a075aac2ff71b/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4d49542d79656c6c6f772e737667" alt="License: MIT"&gt;&lt;/a&gt;
  &lt;a href="https://makeapullrequest.com" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/dd0b24c1e6776719edb2c273548a510d6490d8d25269a043dfabbd38419905da/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5052732d77656c636f6d652d627269676874677265656e2e737667" alt="PRs Welcome"&gt;&lt;/a&gt;
&lt;/p&gt;




&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Your README Shouldn't Take Longer Than Your Code&lt;/h2&gt;
&lt;/div&gt;

&lt;p&gt;You just built something cool. Now you need a README, and suddenly you're juggling markdown syntax, badge URLs, table alignment, and GitHub-flavored quirks. You know the drill:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Copy-paste badge URLs from shields.io, typo the repo name, debug for 10 minutes&lt;/li&gt;
&lt;li&gt;Manually align tables, forget a pipe character, the whole thing breaks&lt;/li&gt;
&lt;li&gt;Check how the markdown renders by pushing to GitHub and refreshing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;README Builder gives you a visual canvas where you drag blocks (headings, badges, code, tables, images, alerts) into place and see exactly how GitHub will render them. When it looks right, copy the markdown or export the file. Done.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://ofershap.github.io/readme-builder/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fofershap%2Freadme-builder%2Fassets%2Fdemo.gif" alt="Demo"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Features&lt;/h2&gt;

&lt;/div&gt;

&lt;p&gt;&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;br&gt;
&lt;thead&gt;
&lt;br&gt;
&lt;tr&gt;


&lt;/tr&gt;
&lt;br&gt;
&lt;/thead&gt;
&lt;br&gt;
&lt;tbody&gt;
&lt;br&gt;
&lt;tr&gt;
&lt;br&gt;
&lt;td&gt;&lt;strong&gt;15 block types&lt;/strong&gt;&lt;/td&gt;
&lt;br&gt;
&lt;td&gt;Headings, badges, code, tables, lists, images,&lt;/td&gt;
&lt;br&gt;
&lt;/tr&gt;
&lt;br&gt;
&lt;/tbody&gt;
&lt;br&gt;
&lt;/table&gt;&lt;/div&gt;…&lt;/p&gt;
&lt;/div&gt;
&lt;br&gt;
  &lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/ofershap/readme-builder" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;





</description>
      <category>opensource</category>
    </item>
    <item>
      <title>I built a visual README builder so you never have to write raw markdown again</title>
      <dc:creator>Ofer Shapira</dc:creator>
      <pubDate>Sat, 07 Mar 2026 11:06:00 +0000</pubDate>
      <link>https://forem.com/ofershap/i-built-a-visual-readme-builder-so-you-never-have-to-write-raw-markdown-again-epo</link>
      <guid>https://forem.com/ofershap/i-built-a-visual-readme-builder-so-you-never-have-to-write-raw-markdown-again-epo</guid>
      <description>&lt;h2&gt;
  
  
  The problem
&lt;/h2&gt;

&lt;p&gt;Every developer knows the pain: you build something cool, then spend 30 minutes fighting with markdown. Badge URLs with typos. Tables that break because you forgot a pipe character. Pushing to GitHub just to check if it renders correctly.&lt;/p&gt;

&lt;h2&gt;
  
  
  The solution
&lt;/h2&gt;

&lt;p&gt;I built &lt;a href="https://ofershap.github.io/readme-builder/" rel="noopener noreferrer"&gt;README Builder&lt;/a&gt; -- a visual drag-and-drop editor that generates GitHub-flavored markdown.&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.amazonaws.com%2Fuploads%2Farticles%2Fn6vz008wwhe2iguy5vcf.gif" 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%2Fn6vz008wwhe2iguy5vcf.gif" alt="Demo" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Features
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;15+ block types&lt;/strong&gt; -- headings, badges, code, tables, lists, images, alerts, collapsible sections, and more&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Live preview&lt;/strong&gt; -- see exactly how GitHub will render your README&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Badge editor&lt;/strong&gt; -- visual builder with shields.io integration, color picker, logo selector&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Import&lt;/strong&gt; -- paste markdown, upload a file, or fetch any GitHub repo's README&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SEO-optimized templates&lt;/strong&gt; -- proper heading hierarchy, descriptive alt text, FAQ sections&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Undo/Redo&lt;/strong&gt; -- full history with Cmd+Z&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dark/Light preview&lt;/strong&gt; -- toggle to match GitHub's theme&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Tech stack
&lt;/h2&gt;

&lt;p&gt;React 19, TypeScript (strict), Tailwind CSS 4, Vite 7, Zustand + zundo, CodeMirror 6, @dnd-kit, react-markdown + remark-gfm&lt;/p&gt;

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

&lt;p&gt;It's fully client-side, no backend, no login, no tracking.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Live:&lt;/strong&gt; &lt;a href="https://ofershap.github.io/readme-builder/" rel="noopener noreferrer"&gt;ofershap.github.io/readme-builder&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Source:&lt;/strong&gt; &lt;a href="https://github.com/ofershap/readme-builder" rel="noopener noreferrer"&gt;github.com/ofershap/readme-builder&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Would love to hear what block types or templates you'd want added.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>productivity</category>
      <category>opensource</category>
    </item>
    <item>
      <title>I Built a Cursor Plugin to Track My Team's AI Spend From the IDE</title>
      <dc:creator>Ofer Shapira</dc:creator>
      <pubDate>Thu, 19 Feb 2026 22:17:46 +0000</pubDate>
      <link>https://forem.com/ofershap/i-built-a-cursor-plugin-to-track-my-teams-ai-spend-from-the-ide-2d53</link>
      <guid>https://forem.com/ofershap/i-built-a-cursor-plugin-to-track-my-teams-ai-spend-from-the-ide-2d53</guid>
      <description>&lt;p&gt;I manage a Cursor Enterprise team with 50+ developers. AI spend has become the new cloud cost problem, except there's no Datadog for it. You find out about cost spikes when the invoice lands, weeks after the damage is done.&lt;/p&gt;

&lt;p&gt;Cursor has an admin dashboard, but it shows raw numbers. It doesn't answer questions like "why did our spend jump 40% last Tuesday?" or "who switched to Opus and tripled their daily cost?"&lt;/p&gt;

&lt;p&gt;So I built a Cursor plugin that wraps the Cursor Enterprise API as MCP tools, so my AI agent can answer those questions for me, right in the IDE.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Cursor MCP server for enterprise usage and spending data
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/ofershap/cursor-usage" rel="noopener noreferrer"&gt;cursor-usage&lt;/a&gt; is a Cursor plugin (also works with Claude Code) that exposes the full Cursor Enterprise Admin and Analytics APIs through the Model Context Protocol (MCP). If you're not familiar with MCP, it's the standard that lets AI agents call external tools. In this case, the "tools" are your team's spending and usage data.&lt;/p&gt;

&lt;p&gt;You install the plugin, set your API key, and start asking questions in natural language.&lt;/p&gt;

&lt;p&gt;It includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;An MCP server&lt;/strong&gt; with 15 tools covering team members, spending, daily usage, billing groups, per-request events, DAU, model adoption, agent edits, tabs, MCP usage, and more&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Two skills&lt;/strong&gt; that teach the agent how to interpret Cursor Enterprise data correctly and how to optimize AI costs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Commands&lt;/strong&gt; for quick access: &lt;code&gt;/usage-report&lt;/code&gt;, &lt;code&gt;/spend-check&lt;/code&gt;, &lt;code&gt;/model-audit&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Composite tools&lt;/strong&gt; like &lt;code&gt;get_team_overview&lt;/code&gt; and &lt;code&gt;get_user_deep_dive&lt;/code&gt; that combine multiple API calls into a single useful answer&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Install is one line:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/add-plugin cursor-usage
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or if you prefer manual MCP server setup, it's just an npx command in your config:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"cursor-usage"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"npx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"-y"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"cursor-usage-mcp"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"env"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"CURSOR_API_KEY"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"your-api-key-here"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Understanding the Cursor Enterprise API gotchas
&lt;/h2&gt;

&lt;p&gt;Anyone can call REST endpoints. The real work was figuring out what the numbers actually mean, because the Cursor API data is misleading without context. Here are some of the gotchas I ran into:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;totalLinesAdded&lt;/code&gt; is not an AI productivity metric.&lt;/strong&gt; It includes manual edits, tab completions, and agent-generated code all lumped together. If you want to know how much code AI actually contributed, you need &lt;code&gt;acceptedLinesAdded&lt;/code&gt;. And even that's incomplete because agent mode auto-applies changes, so those lines don't show up in the acceptance count.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;spendCents&lt;/code&gt; includes the subscription amount.&lt;/strong&gt; A user showing $50 in &lt;code&gt;spendCents&lt;/code&gt; with $40 in &lt;code&gt;includedSpendCents&lt;/code&gt; only has $10 in actual overage. I've seen people freak out about a user "spending $200" when most of it was covered by the plan.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A single user switching from Sonnet to Opus can 10x their daily spend.&lt;/strong&gt; Premium models like Opus and GPT-5 cost roughly 10-50x more per request than standard models like Sonnet or GPT-4o. One developer experimenting with Opus for a day can look like a cost anomaly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Spend limits don't mean what you think.&lt;/strong&gt; Setting a hard limit of $0 means "no overage allowed," not "no usage allowed." The user can still use their included allocation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The acceptance rate formula is wrong if you use the obvious one.&lt;/strong&gt; &lt;code&gt;acceptedLinesAdded / totalLinesAdded&lt;/code&gt; is misleading because the denominator includes manual edits. The real AI acceptance rate is &lt;code&gt;totalAccepts / totalApplies&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;These gotchas are now encoded in the plugin's skills, so the agent knows about them before it even looks at your data. When someone asks "are we getting value from AI?", the agent knows to check acceptance rates (healthy teams see 40-70%) and cross-reference with model costs, not just report raw line counts.&lt;/p&gt;

&lt;h2&gt;
  
  
  Architecture: why a local MCP server, not a hosted service
&lt;/h2&gt;

&lt;p&gt;A few choices I made and why:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;stdio MCP, not HTTP.&lt;/strong&gt; The server runs locally on the user's machine. No hosted service, no data leaving your network. You provide your own API key. This was important because the data includes individual developer spending and usage patterns. Unlike hosted solutions like Vantage, your data never touches a third-party server.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Zod validation on all inputs.&lt;/strong&gt; Every tool validates its arguments with Zod schemas. Dates must be ISO format, emails must be valid, page sizes have bounds. The agent can't accidentally send garbage to the API.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Composite tools for common queries.&lt;/strong&gt; Instead of making the agent figure out that "give me a team overview" requires calling 4 different endpoints, &lt;code&gt;get_team_overview&lt;/code&gt; does it in one call. Same for &lt;code&gt;get_user_deep_dive&lt;/code&gt;. These save tokens and reduce the chance of the agent getting confused mid-chain.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cross-platform from day one.&lt;/strong&gt; The plugin works as a Cursor marketplace plugin, a Claude Code plugin, or standalone via npx. The MCP server is the same regardless of which client runs it.&lt;/p&gt;

&lt;h2&gt;
  
  
  From quick questions to a full AI cost management dashboard
&lt;/h2&gt;

&lt;p&gt;The plugin is great for quick questions, but it has limits. The Cursor API only goes back 30 days for analytics. You can't do anomaly detection in a chat window. You can't set up automated alerts.&lt;/p&gt;

&lt;p&gt;That's where &lt;a href="https://github.com/ofershap/cursor-usage-tracker" rel="noopener noreferrer"&gt;cursor-usage-tracker&lt;/a&gt; comes in. It's the full open-source dashboard I built for the same problem: automated data collection, three-layer anomaly detection (thresholds, z-score, and trend analysis), Slack and email alerts, incident lifecycle tracking with MTTD/MTTI/MTTR, and a web UI with charts.&lt;/p&gt;

&lt;p&gt;The plugin is the quick entry point for Cursor Enterprise cost tracking. When you hit its limits, the dashboard is there. They work together or separately.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting started with cursor-usage
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Install: &lt;code&gt;/add-plugin cursor-usage&lt;/code&gt; (or manual MCP setup above)&lt;/li&gt;
&lt;li&gt;Set your Cursor Enterprise Admin API key&lt;/li&gt;
&lt;li&gt;Ask questions: "How much did my team spend this week?", "Who's using the most expensive models?", "Run a model audit"&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The skills and commands are included automatically with the plugin install.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's next
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Submitted to the Cursor marketplace&lt;/li&gt;
&lt;li&gt;Planning to submit the analysis skill to anthropics/skills&lt;/li&gt;
&lt;li&gt;Adding more composite tools based on feedback&lt;/li&gt;
&lt;li&gt;Exploring the newer per-user analytics endpoints&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you're managing a Cursor Enterprise team and want to try it out, I'd love to hear what queries you find most useful.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Plugin: &lt;a href="https://github.com/ofershap/cursor-usage" rel="noopener noreferrer"&gt;github.com/ofershap/cursor-usage&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;npm: &lt;a href="https://www.npmjs.com/package/cursor-usage-mcp" rel="noopener noreferrer"&gt;cursor-usage-mcp&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Dashboard: &lt;a href="https://github.com/ofershap/cursor-usage-tracker" rel="noopener noreferrer"&gt;github.com/ofershap/cursor-usage-tracker&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>cursor</category>
      <category>mcp</category>
      <category>enterprise</category>
      <category>costmanagement</category>
    </item>
  </channel>
</rss>
