<?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: Mark Kop</title>
    <description>The latest articles on DEV Community by Mark Kop (@heymarkkop).</description>
    <link>https://dev.to/heymarkkop</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%2F217830%2F71496d44-8c01-4e86-bc10-1b98ae120003.png</url>
      <title>DEV Community: Mark Kop</title>
      <link>https://dev.to/heymarkkop</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/heymarkkop"/>
    <language>en</language>
    <item>
      <title>Should I replace my VPS with a Mac mini?</title>
      <dc:creator>Mark Kop</dc:creator>
      <pubDate>Sun, 30 Aug 2026 17:10:14 +0000</pubDate>
      <link>https://dev.to/heymarkkop/should-i-replace-my-vps-with-a-mac-mini-3448</link>
      <guid>https://dev.to/heymarkkop/should-i-replace-my-vps-with-a-mac-mini-3448</guid>
      <description>&lt;p&gt;I've had a Hostinger KVM 4 for a while with &lt;strong&gt;4 vCPUs, 16 GB RAM and 200 GB NVMe&lt;/strong&gt; with the following applications:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Project&lt;/th&gt;
&lt;th&gt;7d CPU&lt;/th&gt;
&lt;th&gt;7d RAM&lt;/th&gt;
&lt;th&gt;Allocated&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Coolify&lt;/td&gt;
&lt;td&gt;9%&lt;/td&gt;
&lt;td&gt;660 MB&lt;/td&gt;
&lt;td&gt;host&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Langfuse&lt;/td&gt;
&lt;td&gt;21%&lt;/td&gt;
&lt;td&gt;1.8 GB&lt;/td&gt;
&lt;td&gt;7 GB, 5 CPU&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hermes&lt;/td&gt;
&lt;td&gt;3%&lt;/td&gt;
&lt;td&gt;1.1 GB&lt;/td&gt;
&lt;td&gt;2 GB, 1.5 CPU&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Forgejo&lt;/td&gt;
&lt;td&gt;1%&lt;/td&gt;
&lt;td&gt;210 MB&lt;/td&gt;
&lt;td&gt;2 GB, 1.5 CPU&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Multica&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;270 MB now&lt;/td&gt;
&lt;td&gt;5 GB, 1.5 CPU&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Garage&lt;/td&gt;
&lt;td&gt;0%&lt;/td&gt;
&lt;td&gt;40 MB&lt;/td&gt;
&lt;td&gt;1 GB, 1 CPU&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5 side projects&lt;/td&gt;
&lt;td&gt;8%&lt;/td&gt;
&lt;td&gt;1.4 GB&lt;/td&gt;
&lt;td&gt;14 GB, 11 CPU&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;My next 2-year renewal is &lt;strong&gt;R$3,119.76&lt;/strong&gt;, or roughly &lt;strong&gt;R$130/month&lt;/strong&gt;, so I started checking what else I could get for the same money. I originally got it during a Black Friday promotion for around &lt;strong&gt;R$55/month&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  VPS alternatives
&lt;/h2&gt;

&lt;p&gt;I compared a few options with roughly the same amount of RAM.&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;CPU&lt;/th&gt;
&lt;th&gt;RAM&lt;/th&gt;
&lt;th&gt;Storage&lt;/th&gt;
&lt;th&gt;~Price/month&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Netcup VPS 2000 G12&lt;/td&gt;
&lt;td&gt;8 vCore&lt;/td&gt;
&lt;td&gt;16 GB&lt;/td&gt;
&lt;td&gt;512 GB NVMe&lt;/td&gt;
&lt;td&gt;R$65 (€10)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hetzner CX43&lt;/td&gt;
&lt;td&gt;8 vCPU&lt;/td&gt;
&lt;td&gt;16 GB&lt;/td&gt;
&lt;td&gt;160 GB&lt;/td&gt;
&lt;td&gt;R$95 (€16)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OVH VPS-4&lt;/td&gt;
&lt;td&gt;8 vCore&lt;/td&gt;
&lt;td&gt;24 GB&lt;/td&gt;
&lt;td&gt;200 GB NVMe&lt;/td&gt;
&lt;td&gt;R$120 (US$23)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hostinger renewal&lt;/td&gt;
&lt;td&gt;4 vCPU&lt;/td&gt;
&lt;td&gt;16 GB&lt;/td&gt;
&lt;td&gt;200 GB NVMe&lt;/td&gt;
&lt;td&gt;R$130&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HostGator NVMe 16&lt;/td&gt;
&lt;td&gt;6 vCPU&lt;/td&gt;
&lt;td&gt;16 GB&lt;/td&gt;
&lt;td&gt;400 GB NVMe&lt;/td&gt;
&lt;td&gt;R$160&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;I'm considering &lt;strong&gt;Hetzner&lt;/strong&gt; mostly because of how popular it is with developers and the self-hosting community.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;HostGator&lt;/strong&gt; would be an option if I wanted to keep the server in Brazil, but I would probably only consider it if a &lt;strong&gt;good promotion or discount&lt;/strong&gt; appeared.&lt;/p&gt;

&lt;h2&gt;
  
  
  What about a Mac mini?
&lt;/h2&gt;

&lt;p&gt;Then I started wondering where buying my own hardware starts to make sense.&lt;/p&gt;

&lt;p&gt;A &lt;strong&gt;Mac mini M4 with 16 GB&lt;/strong&gt; for around &lt;strong&gt;R$5,000&lt;/strong&gt; is roughly in this territory:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Option&lt;/th&gt;
&lt;th&gt;Initial cost&lt;/th&gt;
&lt;th&gt;Monthly&lt;/th&gt;
&lt;th&gt;~4 years&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Hostinger VPS&lt;/td&gt;
&lt;td&gt;R$0&lt;/td&gt;
&lt;td&gt;~R$130&lt;/td&gt;
&lt;td&gt;~R$6,200&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mac mini M4&lt;/td&gt;
&lt;td&gt;~R$5,000&lt;/td&gt;
&lt;td&gt;~R$12 power&lt;/td&gt;
&lt;td&gt;~R$5,600&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;So the hardware cost can roughly catch up with the VPS after around &lt;strong&gt;4 years&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The comparison isn't exactly fair, though. A machine at home also means dealing with &lt;strong&gt;power outages&lt;/strong&gt;, CGNAT, internet availability, backups and hardware failures.&lt;/p&gt;

&lt;p&gt;I don't think I would use it as a direct replacement for production infrastructure.&lt;/p&gt;

&lt;p&gt;What I'm considering instead is &lt;strong&gt;keeping production&lt;/strong&gt; and services/products that people pay for &lt;strong&gt;on rented VPS&lt;/strong&gt; infrastructure, while eventually having a dedicated machine at &lt;strong&gt;home for hobby projects&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;And you, how much are you paying for your own hosted solutions and hobby projects?&lt;/p&gt;

</description>
      <category>devops</category>
      <category>webdev</category>
      <category>opensource</category>
      <category>cloud</category>
    </item>
    <item>
      <title>Coding a Feature in 2026</title>
      <dc:creator>Mark Kop</dc:creator>
      <pubDate>Tue, 17 Feb 2026 22:58:08 +0000</pubDate>
      <link>https://dev.to/heymarkkop/coding-a-feature-in-2026-4bel</link>
      <guid>https://dev.to/heymarkkop/coding-a-feature-in-2026-4bel</guid>
      <description>&lt;p&gt;If it's a legacy/unknown codebase, it's a good idea to &lt;strong&gt;research it by asking questions&lt;/strong&gt; to Cursor/Claude Code/Codex&lt;/p&gt;

&lt;p&gt;Then it's important to have &lt;strong&gt;minimal testing&lt;/strong&gt; to validate that there are no errors in the code (&lt;strong&gt;lint&lt;/strong&gt;, &lt;strong&gt;typecheck&lt;/strong&gt;) after AI changes. Some agents will need &lt;strong&gt;rules&lt;/strong&gt;, others will always try to do some testing.&lt;/p&gt;

&lt;p&gt;It's vital to test every code change manually, so having &lt;strong&gt;local debugging tools&lt;/strong&gt; setup is also very valuable (&lt;strong&gt;scripts&lt;/strong&gt;, &lt;strong&gt;commands&lt;/strong&gt;, ui/&lt;strong&gt;browser&lt;/strong&gt; interactions). This might be skipped in the future as iterations are faster and safer/bug-free.&lt;/p&gt;

&lt;p&gt;Asking for the feature itself really depends on each engineer's experience. Usually, describing the feature as much as possible with &lt;strong&gt;voice transcription tools&lt;/strong&gt; does the trick. Using "&lt;strong&gt;Plan&lt;/strong&gt;" modes + &lt;strong&gt;"make me questions"&lt;/strong&gt; or &lt;strong&gt;"interview me"&lt;/strong&gt; is another good trick for getting more context and planning.&lt;/p&gt;

&lt;p&gt;Sometimes, just trying out a &lt;strong&gt;one-shot solution&lt;/strong&gt; is also a good way of starting a feature since we can get misconceptions really quick.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Prototype first, design it later.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-2023876832874139925-804" src="https://platform.twitter.com/embed/Tweet.html?id=2023876832874139925"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-2023876832874139925-804');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=2023876832874139925&amp;amp;theme=dark"
  }



 &lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>webdev</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Creating hobby websites in 2025</title>
      <dc:creator>Mark Kop</dc:creator>
      <pubDate>Mon, 17 Nov 2025 21:24:04 +0000</pubDate>
      <link>https://dev.to/heymarkkop/creating-hobby-websites-in-2025-305</link>
      <guid>https://dev.to/heymarkkop/creating-hobby-websites-in-2025-305</guid>
      <description>&lt;p&gt;Hey, guys!&lt;br&gt;
Let me show you how I build new hobby websites with AI tools nowadays. &lt;/p&gt;

&lt;h2&gt;
  
  
  🧠 Brainstorm with AI agent
&lt;/h2&gt;

&lt;p&gt;Using a voice transcription AI tool, like Cursor's native recorder or "Wispr Flow", I brain dump all my ideas and requirements into text and save it in a PRD.md file or in a Google Doc. I also attach a bunch of other copy-pasted text that might be related to that project.&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%2F2khnzwxw4q4svdqj6usw.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%2F2khnzwxw4q4svdqj6usw.png" alt=" " width="800" height="353"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🧱 Init a codebase
&lt;/h2&gt;

&lt;p&gt;I personally go with &lt;code&gt;npx create-next-app@latest my-next-app --tailwind --typescript --eslint --app --turbopack&lt;br&gt;
--use-pnpm&lt;/code&gt; and &lt;code&gt;npx shadcn@latest init&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Then, I use an AI Agent tool, such as Claude Code, to create the project. I paste the document create before into a prompt and add some extra details, for example:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Project in nextjs, tailwind, shadcn components (don't create them, import them using shadcn commands), @neondatabase/serverless Neon DB, &lt;a class="mentioned-user" href="https://dev.to/stackframe"&gt;@stackframe&lt;/a&gt;/stack Stack Auth&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Full Prompt: &lt;a href="https://gist.github.com/Markkop/765612eecb7f6a7e1c2564eda03b228b" rel="noopener noreferrer"&gt;https://gist.github.com/Markkop/765612eecb7f6a7e1c2564eda03b228b&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  ⚒️ Fixes and features
&lt;/h1&gt;

&lt;p&gt;Now, using Claude Code and Cursor, I finish the integrations I want and the fixes needed. I also try to leverage AI at max via Playwright MCP/Chrome MCP/Cursor (browser testing) and Neon MCP (db updates).&lt;/p&gt;

&lt;p&gt;This is where I most leverage my dev knowledge: I guide the AI to build the features I plan, change libraries, follow patterns and so on. &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%2F1igaxp5vehfhosqv3qcx.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%2F1igaxp5vehfhosqv3qcx.png" alt=" " width="800" height="492"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  🌎 Publish and Release
&lt;/h1&gt;

&lt;p&gt;Finally, when I have something okayish to release, I setup Vercel and domains.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;When I started writing this post, I realized there's a lot of more profound knowledge applied to the process that is too much for write in a single post, so take this more as an overview of the process&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>productivity</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>My Top Cursor Tips (Oct 2025)</title>
      <dc:creator>Mark Kop</dc:creator>
      <pubDate>Tue, 21 Oct 2025 16:47:25 +0000</pubDate>
      <link>https://dev.to/heymarkkop/my-top-cursor-tips-oct-2025-3bi2</link>
      <guid>https://dev.to/heymarkkop/my-top-cursor-tips-oct-2025-3bi2</guid>
      <description>&lt;h2&gt;
  
  
  Why Cursor over Claude Code?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Code-generation diffs are easier to review and roll back (the checkout system is great).&lt;/li&gt;
&lt;li&gt;You can test and use other models for different tasks (&lt;code&gt;o3&lt;/code&gt; for complex tasks, &lt;code&gt;gemini-2.5-pro&lt;/code&gt; for creativity, &lt;code&gt;grok-code-fast-1&lt;/code&gt; for quick tasks, etc.).*&lt;/li&gt;
&lt;li&gt;Good IDE integration (e.g., accept/reject actions work great across the UI).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;*That said, I’m only using &lt;code&gt;claude-4.5-sonnet&lt;/code&gt; since its launch.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fchv3hb1y2ur1yan1view.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%2Fchv3hb1y2ur1yan1view.png" alt="Cursor accept/reject UI" width="398" height="498"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How to 10x Productivity on Cursor
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Good pre-prompt
&lt;/h3&gt;

&lt;p&gt;Use &lt;code&gt;.cursorrules&lt;/code&gt; or &lt;a href="https://cursor.com/docs/context/rules#project-rules" rel="noopener noreferrer"&gt;similar&lt;/a&gt; to enforce behavior. For example:&lt;/p&gt;

&lt;h4&gt;
  
  
  // .cursorrules for a frontend project
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="p"&gt;-&lt;/span&gt; Always use the project’s Tailwind colors.
&lt;span class="p"&gt;-&lt;/span&gt; Always use named exports with object parameters: &lt;span class="sb"&gt;`sum({ a, b })`&lt;/span&gt; instead of &lt;span class="sb"&gt;`sum(a, b)`&lt;/span&gt;.
&lt;span class="p"&gt;-&lt;/span&gt; Use "pnpm" instead of "npm" for all package-management commands.
&lt;span class="p"&gt;-&lt;/span&gt; Use the "use client" directive when using client-side state like useState, useEffect, etc.
&lt;span class="p"&gt;-&lt;/span&gt; Don’t modify package.json dependencies directly.
&lt;span class="p"&gt;-&lt;/span&gt; Always write fail-safe code using optional chaining and default values.
&lt;span class="p"&gt;-&lt;/span&gt; Use DayJS for all date and time operations — don’t use &lt;span class="sb"&gt;`new Date()`&lt;/span&gt;, &lt;span class="sb"&gt;`Date.now()`&lt;/span&gt;, or other date functions.
&lt;span class="p"&gt;-&lt;/span&gt; When searching the codebase for context, do at least three semantic searches and three grep searches (do more if needed).
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h4&gt;
  
  
  // .cursorrules for a blockchain dapp project
&lt;/h4&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="p"&gt;-&lt;/span&gt; Don’t run dev-server commands; let me do it. If you want to run something, ask me first.
&lt;span class="p"&gt;-&lt;/span&gt; You won’t be able to run smart-contract deployment commands when needed; ask me and I will do it.
&lt;span class="p"&gt;-&lt;/span&gt; Run &lt;span class="sb"&gt;`npm run typecheck`&lt;/span&gt; after making changes in the frontend and fix errors. Avoid &lt;span class="sb"&gt;`any`&lt;/span&gt; types.
&lt;span class="p"&gt;-&lt;/span&gt; Run &lt;span class="sb"&gt;`npm run compile:check`&lt;/span&gt; after making changes to the contracts and fix errors.
&lt;span class="p"&gt;-&lt;/span&gt; When updating a smart contract, remember to generate the ABI and update the FE accordingly.
&lt;span class="p"&gt;-&lt;/span&gt; When coding a smart contract, check BYTECODE_OPTIMIZATION.md for best practices.
&lt;span class="p"&gt;-&lt;/span&gt; Don’t write .md files unless asked to.
&lt;span class="p"&gt;-&lt;/span&gt; If updating a smart contract, at the end ask me to deploy the contract with &lt;span class="sb"&gt;`npm run redeploy:all`&lt;/span&gt;.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Good MCPs
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://support.atlassian.com/atlassian-rovo-mcp-server/docs/setting-up-ides/" rel="noopener noreferrer"&gt;Atlassian MCP&lt;/a&gt; (Jira ticket integration)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://developer.chrome.com/blog/chrome-devtools-mcp" rel="noopener noreferrer"&gt;Chrome DevTools MCP&lt;/a&gt; (or Cursor’s &lt;a href="https://cursor.com/docs/agent/browser" rel="noopener noreferrer"&gt;in-browser&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;del&gt;GitHub MCP&lt;/del&gt; I’d rather use GH CLI commands instead&lt;/li&gt;
&lt;li&gt;Figma MCP&lt;/li&gt;
&lt;li&gt;Neon MCP (for hobby projects)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I’ve also heard these are good:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Svelte MCP&lt;/li&gt;
&lt;li&gt;Stripe MCP&lt;/li&gt;
&lt;li&gt;Sentry MCP&lt;/li&gt;
&lt;li&gt;AWS / Cloudflare / Vercel MCPs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Enable them on demand to avoid filling up context.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Fireship has a good video showing several of them:&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/PLKrSVuT-Dg" width="710" height="399"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;
&lt;h3&gt;
  
  
  Automation
&lt;/h3&gt;

&lt;p&gt;Create &lt;code&gt;.md&lt;/code&gt; files with reusable instructions to automate small wins, such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Creating and enhancing GitHub PRs and releases with links and more (Atlassian MCP + GitHub CLI)&lt;/li&gt;
&lt;li&gt;UI testing (Chrome MCP / Playwright MCP / Cursor’s browser)&lt;/li&gt;
&lt;li&gt;SVG → React component conversion using a template&lt;/li&gt;
&lt;li&gt;API testing&lt;/li&gt;
&lt;/ul&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%2Fjn8gk7bmdxh3q7clb3z9.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%2Fjn8gk7bmdxh3q7clb3z9.png" alt="Browser Cursor UI" width="800" height="507"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Other 10x Modifiers
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Use the “Plan” feature — always try it first.&lt;/li&gt;
&lt;li&gt;Voice transcription tools to dictate detailed prompts.&lt;/li&gt;
&lt;li&gt;Screenshot and text-recognition tools to provide extra context.&lt;/li&gt;
&lt;/ul&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%2Fe90mcdbquv58w7l2r17i.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%2Fe90mcdbquv58w7l2r17i.png" alt="Plan feature UI" width="478" height="140"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Other Cursor features I don’t use much
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Bugbot (PR review — too expensive)&lt;/li&gt;
&lt;li&gt;cursor-agent (too specific tasks)&lt;/li&gt;
&lt;li&gt;
&lt;a class="mentioned-user" href="https://dev.to/doc"&gt;@doc&lt;/a&gt; (usually web search does the trick)&lt;/li&gt;
&lt;li&gt;/commands (I kinda prefer .md files)&lt;/li&gt;
&lt;li&gt;Background Agents (It's quicker just to open the project locally)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  See also
&lt;/h2&gt;


&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/heymarkkop/my-top-cursor-tips-v043-1kcg" class="crayons-story__hidden-navigation-link"&gt;My Top Cursor Tips (v0.43)&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

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

          &lt;/div&gt;
          &lt;a href="https://dev.to/heymarkkop/my-top-cursor-tips-v043-1kcg" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Dec 16 '24&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/heymarkkop/my-top-cursor-tips-v043-1kcg" id="article-link-2159797"&gt;
          My Top Cursor Tips (v0.43)
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/tutorial"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;tutorial&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/ai"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;ai&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/productivity"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;productivity&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/learning"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;learning&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/heymarkkop/my-top-cursor-tips-v043-1kcg" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/raised-hands-74b2099fd66a39f2d7eed9305ee0f4553df0eb7b4f11b01b6b1b499973048fe5.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/multi-unicorn-b44d6f8c23cdd00964192bedc38af3e82463978aa611b4365bd33a0f1f4f3e97.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;227&lt;span class="hidden s:inline"&gt;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/heymarkkop/my-top-cursor-tips-v043-1kcg#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

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


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


</description>
      <category>webdev</category>
      <category>ai</category>
      <category>productivity</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>How to create video transcription with ffmpeg and whisper</title>
      <dc:creator>Mark Kop</dc:creator>
      <pubDate>Wed, 09 Apr 2025 21:13:57 +0000</pubDate>
      <link>https://dev.to/heymarkkop/how-to-create-video-transcription-with-ffmpeg-and-whisper-1pc0</link>
      <guid>https://dev.to/heymarkkop/how-to-create-video-transcription-with-ffmpeg-and-whisper-1pc0</guid>
      <description>&lt;h2&gt;
  
  
  Requirements
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;ffmpeg&lt;/li&gt;
&lt;li&gt;whisper&lt;/li&gt;
&lt;li&gt;Python 3.10+ (for Whisper)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Installation
&lt;/h2&gt;

&lt;h3&gt;
  
  
  macOS
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Install Homebrew if you don't have it&lt;/span&gt;
/bin/bash &lt;span class="nt"&gt;-c&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;

&lt;span class="c"&gt;# Install ffmpeg&lt;/span&gt;
brew &lt;span class="nb"&gt;install &lt;/span&gt;ffmpeg

&lt;span class="c"&gt;# Install Python (if needed)&lt;/span&gt;
brew &lt;span class="nb"&gt;install &lt;/span&gt;python

&lt;span class="c"&gt;# Install Whisper&lt;/span&gt;
pip3 &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--upgrade&lt;/span&gt; pip
pip3 &lt;span class="nb"&gt;install &lt;/span&gt;git+https://github.com/openai/whisper.git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Windows
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Install Chocolatey if you don't have it&lt;/span&gt;
&lt;span class="c"&gt;# Run in PowerShell as administrator:&lt;/span&gt;
Set-ExecutionPolicy Bypass &lt;span class="nt"&gt;-Scope&lt;/span&gt; Process &lt;span class="nt"&gt;-Force&lt;/span&gt;
&lt;span class="o"&gt;[&lt;/span&gt;System.Net.ServicePointManager]::SecurityProtocol &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;System.Net.ServicePointManager]::SecurityProtocol &lt;span class="nt"&gt;-bor&lt;/span&gt; 3072
iex &lt;span class="o"&gt;((&lt;/span&gt;New-Object System.Net.WebClient&lt;span class="o"&gt;)&lt;/span&gt;.DownloadString&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'https://community.chocolatey.org/install.ps1'&lt;/span&gt;&lt;span class="o"&gt;))&lt;/span&gt;

&lt;span class="c"&gt;# Install ffmpeg&lt;/span&gt;
choco &lt;span class="nb"&gt;install &lt;/span&gt;ffmpeg

&lt;span class="c"&gt;# Install Python (from python.org)&lt;/span&gt;
&lt;span class="c"&gt;# Make sure to check "Add Python to PATH" during installation&lt;/span&gt;

&lt;span class="c"&gt;# Install Whisper&lt;/span&gt;
pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-U&lt;/span&gt; openai-whisper
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Linux
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Install ffmpeg&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt update &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;ffmpeg

&lt;span class="c"&gt;# Install Python and pip&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;python3 python3-pip

&lt;span class="c"&gt;# Install Whisper&lt;/span&gt;
pip3 &lt;span class="nb"&gt;install &lt;/span&gt;git+https://github.com/openai/whisper.git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Transcription Steps
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Extract audio from video using ffmpeg&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   ffmpeg &lt;span class="nt"&gt;-i&lt;/span&gt; input_video.mp4 &lt;span class="nt"&gt;-vn&lt;/span&gt; &lt;span class="nt"&gt;-acodec&lt;/span&gt; mp3 output.mp3
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Transcribe audio with Whisper&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   whisper output.mp3 &lt;span class="nt"&gt;--language&lt;/span&gt; English &lt;span class="nt"&gt;--model&lt;/span&gt; small &lt;span class="nt"&gt;--output_format&lt;/span&gt; txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Model Options
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;tiny&lt;/code&gt;: Fastest, lowest accuracy (~1GB RAM)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;base&lt;/code&gt;: Fast, decent accuracy (~1GB RAM)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;small&lt;/code&gt;: Balanced speed/accuracy (~2GB RAM)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;medium&lt;/code&gt;: Good accuracy (~5GB RAM)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;large&lt;/code&gt;: Best accuracy (~10GB RAM)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Output Formats
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;txt&lt;/code&gt;: Plain text transcript&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;srt&lt;/code&gt;: Standard subtitle format&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;vtt&lt;/code&gt;: Web Video Text Tracks format&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;json&lt;/code&gt;: Detailed JSON with timestamps&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Additional Options
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;--task translate&lt;/code&gt;: Translates non-English audio to English&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;--language en&lt;/code&gt;: Specifies the source language (faster and more accurate)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;--model&lt;/code&gt;: Selects the model size (tiny/base/small/medium/large)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://macos.gadgethacks.com/how-to/whisper-transcribe-audio-video-terminal-mac/" rel="noopener noreferrer"&gt;Source: macos.gadgethacks.com&lt;/a&gt;&lt;br&gt;
&lt;a href="https://dev.to/chris-pennington/how-i-use-ai-to-transcribe-in-my-terminal-4n0d"&gt;Source: dev.to&lt;/a&gt;&lt;/p&gt;

</description>
      <category>tutorial</category>
    </item>
    <item>
      <title>My Top Cursor Tips (v0.43)</title>
      <dc:creator>Mark Kop</dc:creator>
      <pubDate>Mon, 16 Dec 2024 21:38:22 +0000</pubDate>
      <link>https://dev.to/heymarkkop/my-top-cursor-tips-v043-1kcg</link>
      <guid>https://dev.to/heymarkkop/my-top-cursor-tips-v043-1kcg</guid>
      <description>&lt;p&gt;I've been using Cursor extensively for 4 months in both professional and hobby ways, mostly on frontend projects.&lt;/p&gt;

&lt;p&gt;During this time, I learned several tips and tricks I want to share. I won't cover the Cursor basics and how to use them, but I will give a few references you can look into if you're just starting&lt;/p&gt;

&lt;h1&gt;
  
  
  📚 Basics
&lt;/h1&gt;

&lt;p&gt;Cursor has tons of AI features and you can discover most of them here:&lt;br&gt;
&lt;a href="https://www.cursor.com/features" rel="noopener noreferrer"&gt;https://www.cursor.com/features&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can also watch a few videos, but bear in mind they can get outdated quickly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cursor.AI Basics in 10 Mins (Is it Worth Using?)&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://youtu.be/gDzND0M6SGE" rel="noopener noreferrer"&gt;https://youtu.be/gDzND0M6SGE&lt;/a&gt; (23 October 2024)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cursor AI Tutorial for Beginners (How I Code 159% Faster)&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://youtu.be/yk9lXobJ95E" rel="noopener noreferrer"&gt;https://youtu.be/yk9lXobJ95E&lt;/a&gt; (16 August 2024)&lt;/p&gt;


&lt;h1&gt;
  
  
  🕵️ Agent
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;TL;DR: It is great, but still has a lot to improve&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Let's start talking about the current AI &lt;strong&gt;hot topic&lt;/strong&gt; out there: Agents&lt;/p&gt;

&lt;p&gt;Cursor has an Agent mode in the Composer panel that can &lt;strong&gt;search&lt;/strong&gt; through the code base, go back and forth between files, and have better &lt;strong&gt;reasoning&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;It still has a long way to go, but it's pretty good for &lt;strong&gt;small changes or features&lt;/strong&gt; across several files and even &lt;strong&gt;bug-hunting&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9kefqxb6jww0npyubhoc.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%2F9kefqxb6jww0npyubhoc.png" alt=" " width="702" height="594"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;My issue with the Agent mode is that I can't add folders to the context like in the normal Composer mode, only direct files. This is probably going to change in the future. The &lt;code&gt;/&lt;/code&gt; tip I'm going to share next does the trick for now&lt;/p&gt;


&lt;h2&gt;
  
  
  🔧 Use "Reference Open Editors" command
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;TL;DR: Easy way to add several related files to the context&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Like most tools, if the context is filled with content that is not related to the prompt, the AI "loses itself" when providing a response, so we want to &lt;strong&gt;keep the context minimal&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;In Cursor, we can manually add files to the context by mentioning them with @ or by clicking on the &lt;code&gt;+&lt;/code&gt; button, but that can get boring quickly. &lt;/p&gt;

&lt;p&gt;The best trick I found out is actually &lt;strong&gt;closing&lt;/strong&gt; all editor tabs, &lt;strong&gt;opening&lt;/strong&gt; the ones I'm sure it will help the AI to figure out what to do and &lt;strong&gt;adding&lt;/strong&gt; them all together in the prompt by pressing &lt;code&gt;/&lt;/code&gt; and selecting &lt;strong&gt;"Reference Open Editors"&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgjdtrgg4flx4eb1obg5w.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%2Fgjdtrgg4flx4eb1obg5w.png" alt=" " width="708" height="294"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Sometimes, you will notice the AI trying to change other files that are not in the context, and sometimes, it will even (wrongly) rewrite the entire file. &lt;br&gt;
That means you want to add that file to the context (or, if you're sure, you can tell the AI to not modify that file).  &lt;/p&gt;

&lt;p&gt;So more often than not you will be reverting changes and editing your initial prompt to add more files to the context.&lt;/p&gt;

&lt;p&gt;This used to be smooth before, but nowadays is kinda buggy, so I usually end up copying the prompt, opening a new chat, opening the extra files, pressing / to add everything and pasting the chat. &lt;/p&gt;

&lt;p&gt;Sometimes, for the / to work correctly, you need to empty the text prompt, but you can do this &lt;strong&gt;combo: Ctrl+A, Ctrl+X, /, "Reference Open Editors", Ctrl+V&lt;/strong&gt;.&lt;/p&gt;


&lt;h2&gt;
  
  
  🗒️ Notepads
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;TL;DR: Easy way to use repeated files and prompts&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In my last weeks, I've been &lt;strong&gt;doing too much&lt;/strong&gt; of this process of opening related files and adding them to the context so I started to use another Cursor feature: notepads.&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%2Fbvoxvv7rtr496miaupl5.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%2Fbvoxvv7rtr496miaupl5.png" alt=" " width="774" height="234"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In a notepad, you can &lt;strong&gt;explain a feature&lt;/strong&gt; in plain text and &lt;strong&gt;mention particular files&lt;/strong&gt; in it and then mention that notepad in the prompt so the &lt;strong&gt;AI is aware&lt;/strong&gt; of anything you want it to know about the feature you're working on.&lt;/p&gt;

&lt;p&gt;You can also use notepad to save a prompt you usually use, like &lt;strong&gt;code review&lt;/strong&gt; or vulnerability search.&lt;/p&gt;

&lt;p&gt;Works very well for the agent mode too&lt;/p&gt;


&lt;h2&gt;
  
  
  🛂 Cursor Rules
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;TL;DR: Add custom project instructions to the context&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;By this point you probably already heard about &lt;code&gt;.cursorrules&lt;/code&gt;. It's a file with instructions that will always be present in the AI context. &lt;/p&gt;

&lt;p&gt;It's very useful to add things you see the AI doing wrong,  like using specific libraries and code design. &lt;/p&gt;

&lt;p&gt;It can also help the AI to have &lt;strong&gt;more context&lt;/strong&gt; about the project itself, resulting in better responses, although for that you might want to use the "PRD" tip I will share more at the end.&lt;/p&gt;

&lt;p&gt;You can find templates for the .cursorrules file here and use them as inspiration on what you can add to yours:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://cursor.directory/" rel="noopener noreferrer"&gt;https://cursor.directory/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you're using NextJs, for example, a great instruction to add is:  &lt;/p&gt;

&lt;p&gt;&lt;code&gt;- Use "use client" on the top of the file when using client-side states like useState, useEffect, etc.&lt;/code&gt;&lt;/p&gt;


&lt;h1&gt;
  
  
  💬 Pre-prompt
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;TL;DR: Add custom personal instructions to the context&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Similar to the &lt;code&gt;.cursorrule&lt;/code&gt;, we can add instructions that will go along our prompt to the "Rules for AI" section in the Cursor settings.&lt;/p&gt;

&lt;p&gt;On 4 Nov. 2024, &lt;a href="https://x.com/kayladotdev/status/1853272891023872450" rel="noopener noreferrer"&gt;@kayladotdev&lt;/a&gt; shared a tweet with those instructions from a Cursor employee &lt;a href="https://x.com/shaoruu" rel="noopener noreferrer"&gt;@shaoruu&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1853272891023872450-640" src="https://platform.twitter.com/embed/Tweet.html?id=1853272891023872450"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1853272891023872450-640');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1853272891023872450&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;p&gt;I've been using that myself, and the results have been pretty great; I suggest you try.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;DO NOT GIVE ME HIGH LEVEL SHIT, IF I ASK FOR FIX OR EXPLANATION, I WANT ACTUAL CODE OR EXPLANATION!!! I DON'T WANT "Here's how you can blablabla"

- Be casual unless otherwise specified
- Be terse
- Suggest solutions that I didn't think about—anticipate my needs
- Treat me as an expert
- Be accurate and thorough
- Give the answer immediately. Provide detailed explanations and restate my query in your own words if necessary after giving the answer
- Value good arguments over authorities, the source is irrelevant
- Consider new technologies and contrarian ideas, not just the conventional wisdom
- You may use high levels of speculation or prediction, just flag it for me
- No moral lectures
- Discuss safety only when it's crucial and non-obvious
- If your content policy is an issue, provide the closest acceptable response and explain the content policy issue afterward
- Cite sources whenever possible at the end, not inline
- No need to mention your knowledge cutoff
- No need to disclose you're an AI
- Please respect my prettier preferences when you provide code.
- Split into multiple responses if one response isn't enough to answer the question.

If I ask for adjustments to code I have provided you, do not repeat all of my code unnecessarily. Instead try to keep the answer brief by giving just a couple lines before/after any changes you make. Multiple code blocks are ok.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can use that in the &lt;code&gt;.cursorrules&lt;/code&gt; file too, the main difference is that the file is subject to &lt;strong&gt;git versioning&lt;/strong&gt; and therefore team sharing, while the "Rules for AI" is more of a personal preference.&lt;/p&gt;




&lt;h2&gt;
  
  
  👀 Use Diff of Working State
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;TL;DR: Add current diff from files changed to the context&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Sometimes, you want the AI to change something that has not been committed yet, or you can even use it to review to find bugs or vulnerabilities. &lt;/p&gt;

&lt;p&gt;The command &lt;code&gt;@Commit (Diff of Working State)&lt;/code&gt; is very useful for those cases.&lt;/p&gt;

&lt;p&gt;Sadly, it currently doesn't work on agent mode.&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%2F9mxhu32wy6snzex4yuu6.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%2F9mxhu32wy6snzex4yuu6.png" alt=" " width="708" height="330"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  ⚙️ Always check Cursor Settings
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;TL;DR: Toggle features and resync index&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You can toggle useful and &lt;strong&gt;experimental features&lt;/strong&gt; in there.  &lt;/p&gt;

&lt;p&gt;They change a lot on every update (which you can keep track of &lt;a href="https://www.cursor.com/changelog" rel="noopener noreferrer"&gt;here&lt;/a&gt;) so make sure to revisit it often&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%2Fq3nvrxmalyzc4sdc3u8u.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%2Fq3nvrxmalyzc4sdc3u8u.png" alt=" " width="800" height="607"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Also, you can resync the &lt;strong&gt;codebase index&lt;/strong&gt; there, which is VERY helpful when you're creating and deleting files a lot, especially when using scripts that do that&lt;/p&gt;




&lt;h2&gt;
  
  
  💾 Auto Save
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;2025 Update: now Cursor saves automatically and this is not needed anymore&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TL;DR: A dangerous, but handy feature for a faster progress loop&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In Twitter/X, &lt;a href="https://x.com/hive_echo" rel="noopener noreferrer"&gt;@hive_echo&lt;/a&gt; shared a great tip on enabling the editor's Auto Save feature.&lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1865991903503856062-5" src="https://platform.twitter.com/embed/Tweet.html?id=1865991903503856062"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1865991903503856062-5');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1865991903503856062&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;p&gt;Since most changes I make in the code when using Composer are safe enough to be applied and saved directly, this change made the frontend hot reload/compile time way &lt;strong&gt;faster&lt;/strong&gt; and smoother.&lt;/p&gt;

&lt;p&gt;The only issue is that it is an editor feature and not really Cursor's feature, so that means every file will auto-save even when you're coding manually, which will trigger unwanted reloads and break the page on several occasions.&lt;/p&gt;




&lt;h2&gt;
  
  
  📒 Use a Product Requirement Document
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;TL;DR Plan everything and make the AI to the rest&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A great way to use Cursor is by creating a PRD and defining and laying down all the product features, specifications and requirements. &lt;/p&gt;

&lt;p&gt;Then, you can reference that to the AI so it knows more about the project and know what to work next.&lt;/p&gt;

&lt;p&gt;This video describes this strategy in details. I'd suggest watching at least its first 18 minutes if you want to know more&lt;/p&gt;

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

&lt;h2&gt;
  
  
  🔗 References and other links
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Videos&lt;/strong&gt;&lt;br&gt;
AI tools for software engineers, but without the hype&lt;br&gt;
&lt;a href="https://www.youtube.com/watch?v=uRuLgar5XZw" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=uRuLgar5XZw&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Cursor + Playwright&lt;br&gt;
&lt;a href="https://www.youtube.com/watch?v=kH4hM0H_WPg" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=kH4hM0H_WPg&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Podcast with the Cursor Team&lt;br&gt;
&lt;a href="https://www.youtube.com/watch?v=oFfVt3S51T4" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=oFfVt3S51T4&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Channels&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/@intheworldofai" rel="noopener noreferrer"&gt;https://www.youtube.com/@intheworldofai&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/@YifanBTH" rel="noopener noreferrer"&gt;https://www.youtube.com/@YifanBTH&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/@AICodeKing" rel="noopener noreferrer"&gt;https://www.youtube.com/@AICodeKing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/@AIJasonZ" rel="noopener noreferrer"&gt;https://www.youtube.com/@AIJasonZ&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Twitter&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://x.com/HeyMarkKop" rel="noopener noreferrer"&gt;https://x.com/HeyMarkKop&lt;/a&gt; (me)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://x.com/kayladotdev" rel="noopener noreferrer"&gt;https://x.com/kayladotdev&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://x.com/echo_hive" rel="noopener noreferrer"&gt;https://x.com/echo_hive&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://x.com/YifanBTH" rel="noopener noreferrer"&gt;https://x.com/YifanBTH&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://x.com/rohanpaul_ai" rel="noopener noreferrer"&gt;https://x.com/rohanpaul_ai&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>tutorial</category>
      <category>ai</category>
      <category>productivity</category>
      <category>learning</category>
    </item>
    <item>
      <title>Switching Auth Method in Postman dinamically</title>
      <dc:creator>Mark Kop</dc:creator>
      <pubDate>Mon, 18 Nov 2024 18:15:43 +0000</pubDate>
      <link>https://dev.to/heymarkkop/switching-auth-method-in-postman-dinamically-1j33</link>
      <guid>https://dev.to/heymarkkop/switching-auth-method-in-postman-dinamically-1j33</guid>
      <description>&lt;p&gt;We're using Postman's Mock Server feature to develop the endpoints and payloads for our new API and I came to the issue where I couldn't easily switch auth methods to use the same request to call the API itself or the Mock Server&lt;/p&gt;

&lt;p&gt;The solution was creating a Pre-request script to the root folder that would detect the active environment and add the correct authentication method header and secret&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;environment&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toLowerCase&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;includes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;mock&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;upsert&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="na"&gt;key&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;x-api-key&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;environment&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;api-key&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)});&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;upsert&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="na"&gt;key&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Authorization&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Bearer &lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;environment&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;accessToken&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)});&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2F1nqt0d4ngr5lkwc60a3f.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%2F1nqt0d4ngr5lkwc60a3f.png" alt=" " width="799" height="318"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Hope that helps anyone looking for something similar&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>api</category>
      <category>postman</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Cursor Tips</title>
      <dc:creator>Mark Kop</dc:creator>
      <pubDate>Sun, 17 Nov 2024 19:15:34 +0000</pubDate>
      <link>https://dev.to/heymarkkop/cursor-tips-10f8</link>
      <guid>https://dev.to/heymarkkop/cursor-tips-10f8</guid>
      <description>&lt;p&gt;Hey people! &lt;/p&gt;

&lt;p&gt;I've been using Cursor AI IDE for about 2 months, every day, for both work and hobby coding and I feel I can share some great tips about it&lt;/p&gt;

&lt;p&gt;First of all, if you're not familiar with Cursor or AI in Web Development in general, I highly suggest watching the videos below:&lt;/p&gt;

&lt;p&gt;AI tools for software engineers, but without the hype – with Simon Willison (Co-Creator of Django) (must watch/listen)&lt;br&gt;
&lt;a href="https://www.youtube.com/watch?v=uRuLgar5XZw" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=uRuLgar5XZw&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;General Cursor Usage: Cursor AI Tutorial for Beginners (How I Code 159% Faster) (2 months old. It is not that old yet, but it might be&lt;br&gt;
worth looking for a more recent one)&lt;br&gt;
&lt;a href="https://youtu.be/yk9lXobJ95E" rel="noopener noreferrer"&gt;https://youtu.be/yk9lXobJ95E&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Using it with PRD and documentation: Best Cursor Workflow that no one talks about... (no need to watch everything; the first 18 min&lt;br&gt;
are enough to get the idea)&lt;br&gt;
&lt;a href="https://www.youtube.com/watch?v=2PjmPU07KNs" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=2PjmPU07KNs&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Effective Code Review: Getting Cursor AI to Review Its Own Code&lt;br&gt;
&lt;a href="https://www.youtube.com/watch?v=vOlAniUTlCY" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=vOlAniUTlCY&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Cursor + Playwright: How to Build Robust Applications with Cursor AI + Playwright&lt;br&gt;
&lt;a href="https://www.youtube.com/watch?v=kH4hM0H_WPg" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=kH4hM0H_WPg&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Podcast with the Cursor Team: Cursor Team: Future of Programming with AI | Lex Fridman Podcast #447&lt;br&gt;
&lt;a href="https://www.youtube.com/watch?v=oFfVt3S51T4" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=oFfVt3S51T4&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  .cursorrules
&lt;/h2&gt;

&lt;p&gt;Use a .cursorrules file in the root directory of your project to automatically use its content as context for all Cursor prompts.&lt;/p&gt;

&lt;p&gt;It is shared for everyone and subject to git versioning.&lt;/p&gt;

&lt;p&gt;Great to guide the AI to code like you’d do&lt;/p&gt;

&lt;p&gt;Great to remind the AI about outdated things (like 'use client' on top of client-side files in Nextjs)&lt;/p&gt;

&lt;p&gt;Use &lt;a href="https://cursor.directory/" rel="noopener noreferrer"&gt;https://cursor.directory/&lt;/a&gt; to get some sample usage.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Composer
&lt;/h2&gt;

&lt;p&gt;The Composer feature helps you create and edit multiple files simultaneously, making saving, testing and validating changes easy.&lt;/p&gt;

&lt;p&gt;Easy Testing: Save all changes without individually applying changes to them&lt;/p&gt;

&lt;p&gt;Creating Tests Together: Develop code and corresponding tests or Storybook components side by side.&lt;/p&gt;

&lt;p&gt;Possible use case: It could be useful to add an extra simple/easy API payload field by adding all related files in the context.&lt;/p&gt;

&lt;p&gt;Passing React Props: Pass props down through related components easily.&lt;/p&gt;

&lt;p&gt;There are three ways to view the composer panel: Expanded, Floating, and Side Bar. I’m sticking with the third one currently.&lt;/p&gt;

&lt;p&gt;Tip: Open all related files in your editor. In the Chat or Composer input, press / and select "Reference Open Editors" to include them in the context.&lt;/p&gt;

&lt;p&gt;Golden tip: open all related files and add them at once to the context&lt;/p&gt;

&lt;h2&gt;
  
  
  Leveraging Markdown Files for Context
&lt;/h2&gt;

&lt;p&gt;Include markdown files as instructions to provide the AI with project context.&lt;/p&gt;

&lt;p&gt;Enhanced Understanding: Helps the AI grasp the specifics of your project.&lt;/p&gt;

&lt;p&gt;Detailed Guidance: Offers more information than usual for better assistance.&lt;/p&gt;

&lt;p&gt;Tip: Mention these instruction files in your prompts to incorporate their content.&lt;/p&gt;

&lt;p&gt;Watch the start of this video to get a better understanding: &lt;a href="https://youtu.be/2PjmPU07KNs" rel="noopener noreferrer"&gt;https://youtu.be/2PjmPU07KNs&lt;/a&gt; &lt;/p&gt;

&lt;h2&gt;
  
  
  Keeping a Clean Working Directory
&lt;/h2&gt;

&lt;p&gt;Always keep your working directory free of uncommitted changes.&lt;/p&gt;

&lt;p&gt;Easy Reversion: Revert unwanted AI changes easily.&lt;/p&gt;

&lt;p&gt;Manageable Commits: Make small, focused commits.&lt;/p&gt;

&lt;h2&gt;
  
  
  Linking to Documentation
&lt;/h2&gt;

&lt;p&gt;Add links to library documentation in your prompts to guide the AI.&lt;/p&gt;

&lt;p&gt;Up-to-Date Implementations: Ensures the AI uses the latest methods.&lt;/p&gt;

&lt;p&gt;Avoid Deprecated Code: Prevents outdated implementations.&lt;/p&gt;

&lt;p&gt;Tip: Include documentation links in your prompts.&lt;/p&gt;

&lt;p&gt;Example: "Refer to Library X Documentation to implement the new feature."&lt;/p&gt;

&lt;p&gt;Press @ do add a new documentation. We can even share them with the team&lt;/p&gt;

&lt;h2&gt;
  
  
  Using Voice-to-Text Tools and Chatbots
&lt;/h2&gt;

&lt;p&gt;Utilize tools like Wispr Flow and ChatGPT to streamline your workflow.&lt;/p&gt;

&lt;p&gt;Wispr Flow: Transcribes voice to text for faster prompt creation.&lt;/p&gt;

&lt;p&gt;ChatGPT: Generates documentation without extensive typing.&lt;/p&gt;

&lt;p&gt;Complex Prompts: Provides detailed context for better AI responses.&lt;/p&gt;

&lt;p&gt;Tip: Combine voice transcription with chatbots to create and refine prompts efficiently.&lt;/p&gt;

&lt;h2&gt;
  
  
  Models
&lt;/h2&gt;

&lt;p&gt;Use claude-3.5-sonnet for everything. Sometimes, o1-mini is more helpful when the task involves more thinking. The o1-preview model is pretty expensive in Cursor ($0.40/request), and using it on the ChatGPT Plus website is worthwhile.&lt;/p&gt;

&lt;p&gt;(TODO: This is a published draft version of this blog post, I still want to format it better and add images)&lt;/p&gt;

</description>
      <category>ai</category>
      <category>tooling</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Como separar a rede 2.4/5G híbrida da Vivo</title>
      <dc:creator>Mark Kop</dc:creator>
      <pubDate>Sat, 31 Aug 2024 18:21:57 +0000</pubDate>
      <link>https://dev.to/heymarkkop/como-separar-a-rede-245g-hibrida-da-vivo-1nb2</link>
      <guid>https://dev.to/heymarkkop/como-separar-a-rede-245g-hibrida-da-vivo-1nb2</guid>
      <description>&lt;p&gt;This is for brazilian people who has Vivo as their internet provider ;)&lt;/p&gt;




&lt;p&gt;Se você estiver com problemas para configurar algum dispositivo doméstico como Robô Aspirador, Assistente de Voz, Tomada Inteligente, Smart TV ou coisas similares - e você usa um modem da Vivo - pode ser que o seu dispositivo não seja compatível com a rede híbrida 2.4/5G que o modem oferece.&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%2F3i3303yyezp7gw05skxa.jpg" 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%2F3i3303yyezp7gw05skxa.jpg" alt=" " width="576" height="1280"&gt;&lt;/a&gt;&lt;br&gt;
(Imagem: Note as redes com 2.4G/5G ao lado do nome - são redes híbridas)&lt;/p&gt;

&lt;p&gt;Tive esse problema com um Robô Aspirador da Xiaomi e é algo recorrente com outros usuários, como podemos ver com esse tópico nesse forum:&lt;br&gt;
&lt;a href="https://forum.adrenaline.com.br/threads/problemas-de-conexao-com-o-robo-aspirador-kabum-smart-500-e-700.703527/#post-1076709367" rel="noopener noreferrer"&gt;https://forum.adrenaline.com.br/threads/problemas-de-conexao-com-o-robo-aspirador-kabum-smart-500-e-700.703527/#post-1076709367&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Inclusive, graças a esse fórum, encontrei uma forma de separar essas redes. Nota que nenhum técnico da Vivo que me atendeu soube como configurar e tive que me virar.&lt;/p&gt;

&lt;p&gt;Para separar as redes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Entre na página &lt;code&gt;&amp;lt;endereço de IP do modem&amp;gt;/padrao&lt;/code&gt; usando o login  &lt;code&gt;support&lt;/code&gt; e a senha. O endereço de IP e a senha estão disponível debaixo do modem&lt;/li&gt;
&lt;li&gt;Ao entrar nessa página, pode ser que você seja redirecionado para &lt;code&gt;/me_configuracao_avancada.asp&lt;/code&gt;. Tudo bem, entre com as credenciais mesmo assim.&lt;/li&gt;
&lt;li&gt;Ao logar, você será redirecionado para &lt;code&gt;/avanzada.asp&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Lá, entre no menu na esquerda e vá em &lt;code&gt;Wireless Lan - 5G&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Então, em &lt;code&gt;AP Settings&lt;/code&gt;, você verá que há duas redes com Enabled: a 2.4 e a 5G.&lt;/li&gt;
&lt;li&gt;Clique no número index da que está com "2.4" e mude &lt;code&gt;Adm.State&lt;/code&gt; para &lt;code&gt;Disable&lt;/code&gt;. &lt;/li&gt;
&lt;li&gt;Salve clicando em &lt;code&gt;Apply&lt;/code&gt;. Nisso o modem deve reiniciar.&lt;/li&gt;
&lt;li&gt;Note que se você mudar o nome do Wifi, terá que fazer o processo novamente.&lt;/li&gt;
&lt;/ul&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%2Feiiclk9dvgq33m03tctb.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%2Feiiclk9dvgq33m03tctb.png" alt="image" width="799" height="290"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>tutorial</category>
    </item>
    <item>
      <title>How to use React Server Components components on Storybook 8</title>
      <dc:creator>Mark Kop</dc:creator>
      <pubDate>Tue, 21 May 2024 21:31:34 +0000</pubDate>
      <link>https://dev.to/heymarkkop/how-to-use-react-server-components-components-on-storybook-8-5ia</link>
      <guid>https://dev.to/heymarkkop/how-to-use-react-server-components-components-on-storybook-8-5ia</guid>
      <description>&lt;p&gt;Let's say you have a NextJS page that uses React Server Components (RSC) and you have to use the &lt;code&gt;async&lt;/code&gt; keyword when exporting that page&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// app/page.js&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;Home&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;clients&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;getHomeContent&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
  &lt;span class="c1"&gt;// ...code that displays clients cards on the home page&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you try to import this component/page into Storybook 8, you will get this error:&lt;br&gt;
&lt;strong&gt;async/await is not yet supported in Client Components, only Server Components&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To get around it, simply enable the &lt;code&gt;experimentalRSC&lt;/code&gt; flag on &lt;code&gt;.storybook/main.js&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="cm"&gt;/** @type { import('@storybook/nextjs').StorybookConfig } */&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;config&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;features&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;experimentalRSC&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;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="c1"&gt;// ...other configs&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;config&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Read more about it here:&lt;br&gt;
&lt;a href="https://storybook.js.org/blog/storybook-react-server-components/" rel="noopener noreferrer"&gt;https://storybook.js.org/blog/storybook-react-server-components/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>todayilearned</category>
      <category>webdev</category>
      <category>frontend</category>
    </item>
    <item>
      <title>How to use NextAuth useSession on Storybook 8</title>
      <dc:creator>Mark Kop</dc:creator>
      <pubDate>Tue, 14 May 2024 21:28:56 +0000</pubDate>
      <link>https://dev.to/heymarkkop/how-to-use-nextauth-usesession-on-storybook-8-3eon</link>
      <guid>https://dev.to/heymarkkop/how-to-use-nextauth-usesession-on-storybook-8-3eon</guid>
      <description>&lt;p&gt;If you want to mock some NextAuth session data so a Story on Storybook 8 behaves as the user is logged in, you can use the &lt;code&gt;&amp;lt;SessionContext&amp;gt;&lt;/code&gt; provider in the Story decorator as follows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;  &lt;span class="nx"&gt;decorators&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;Story&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;NextAuthProvider&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="c1"&gt;// Put your mocked session data here&lt;/span&gt;
          &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;SessionContext&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Provider&lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{{&lt;/span&gt; &lt;span class="na"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt; &lt;span class="p"&gt;}}&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Story&lt;/span&gt; &lt;span class="o"&gt;/&amp;gt;&lt;/span&gt;
          &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/SessionContext.Provider&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/NextAuthProvider&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;      &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;],&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A guy made an addon once, but it's now outdated:&lt;br&gt;
&lt;a href="https://github.com/TomFreudenberg/next-auth-mock" rel="noopener noreferrer"&gt;https://github.com/TomFreudenberg/next-auth-mock&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>tutorial</category>
      <category>todayilearned</category>
      <category>frontend</category>
    </item>
    <item>
      <title>How to use NextJS pathname in Storybook 8</title>
      <dc:creator>Mark Kop</dc:creator>
      <pubDate>Mon, 29 Apr 2024 20:38:10 +0000</pubDate>
      <link>https://dev.to/heymarkkop/how-to-use-nextjs-pathname-in-storybook-8-5ac9</link>
      <guid>https://dev.to/heymarkkop/how-to-use-nextjs-pathname-in-storybook-8-5ac9</guid>
      <description>&lt;p&gt;When you're using &lt;code&gt;usePathname&lt;/code&gt; from NextJS&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&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;usePathname&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;next/navigation&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;pathname&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;usePathname&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And want to change the pathname for Storybook purposes, update your story as follows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Default&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;parameters&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;nextjs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;appDirectory&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;span class="na"&gt;navigation&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;pathname&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/games&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;args&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Source: qcatch on Feb 22, 2024&lt;br&gt;
&lt;a href="https://github.com/storybookjs/storybook/discussions/25470" rel="noopener noreferrer"&gt;https://github.com/storybookjs/storybook/discussions/25470&lt;/a&gt;&lt;/p&gt;

</description>
      <category>todayilearned</category>
      <category>webdev</category>
      <category>tutorial</category>
      <category>frontend</category>
    </item>
  </channel>
</rss>
