<?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: Ricards Taujenis</title>
    <description>The latest articles on DEV Community by Ricards Taujenis (@mozes721).</description>
    <link>https://dev.to/mozes721</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%2F588915%2F9ce2bb62-c020-4524-b62c-d54cd86b5c2f.png</url>
      <title>DEV Community: Ricards Taujenis</title>
      <link>https://dev.to/mozes721</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mozes721"/>
    <language>en</language>
    <item>
      <title>CLAUDE.md &amp; Rules - Before Skills, Hooks, or Agents</title>
      <dc:creator>Ricards Taujenis</dc:creator>
      <pubDate>Mon, 22 Jun 2026 07:19:10 +0000</pubDate>
      <link>https://dev.to/mozes721/claudemd-rules-before-skills-hooks-or-agents-18oi</link>
      <guid>https://dev.to/mozes721/claudemd-rules-before-skills-hooks-or-agents-18oi</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5ohlraufsnbplhfegvu6.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5ohlraufsnbplhfegvu6.jpg" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you're using Claude Code with open-ended prompts and re-explaining your project every session, you're quietly burning through your Pro usage for nothing. CLAUDE.md and Rules fix that — and they're the foundation everything else (Skills, Hooks, Agents) gets built on top of.&lt;/p&gt;

&lt;p&gt;This is part 1 of a 5-part series walking through Claude Code's features in order — CLAUDE.md and Rules first, then Hooks, Skills, MCP, and Subagents, all using the same real project as the example.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem With Open-Ended Prompts
&lt;/h2&gt;

&lt;p&gt;Every time you open a fresh Claude Code session without context, you're paying twice. Once to re-explain your architecture, your conventions, your stack — and again when Claude inevitably guesses wrong on something you already told it last week.&lt;/p&gt;

&lt;p&gt;This is the part that's easy to underestimate. It's not just wasted tokens — it's wasted &lt;em&gt;attention&lt;/em&gt;. Every paragraph you spend re-establishing "this project uses DDD, Redis is for hot data, Airtable is for history" is a paragraph that isn't moving the actual task forward. Multiply that across every session, every week, and the cost adds up fast — especially on a Pro plan where usage isn't infinite.&lt;/p&gt;

&lt;p&gt;Without a persistent source of truth, you're not building a relationship with your codebase. You're starting from zero, every single time. The fix isn't a better prompt. It's not needing to write that prompt at all.&lt;/p&gt;

&lt;h2&gt;
  
  
  Planning First: Sketching the Rules Before Touching the Repo
&lt;/h2&gt;

&lt;p&gt;Before writing anything into the actual repository, the first real step happened in the Claude Desktop app — not Claude Code. This is worth calling out because it's a genuinely useful pattern, not just a detour.&lt;/p&gt;

&lt;p&gt;The idea was simple: rather than improvising a CLAUDE.md prompt cold inside the project, sketch it out in a separate chat first. That conversation surfaced a few specific questions that needed answers before any rule could be written correctly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;What does the project use for the backend/API layer? (Go)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;How should Trading212 data get pulled in? (the public API, if available)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What actually triggers the weekly Redis → Airtable migration? (a Fly.io scheduled cron machine)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These aren't trivial details. They directly shape what the rules say — "store snapshots in Redis" is a vague rule, but "move data older than 7 days from Redis into Airtable via a weekly Fly.io cron job, then purge it from Redis" is a rule Claude can actually enforce and verify against.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fy0r4nj3359v9zvufxrr7.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fy0r4nj3359v9zvufxrr7.png" alt=" " width="799" height="648"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What CLAUDE.md + Rules Actually Do
&lt;/h2&gt;

&lt;p&gt;CLAUDE.md and &lt;code&gt;.claude/rules/&lt;/code&gt; solve two different problems:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;CLAUDE.md&lt;/strong&gt; — the big picture. Project overview, tech stack, architecture, dependency direction. This is what Claude reads to understand &lt;em&gt;what&lt;/em&gt; the project is.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;.claude/rules/&lt;/code&gt;&lt;/strong&gt; — the enforceable specifics. Coding standards, layer boundaries, naming conventions. This is what Claude reads to understand &lt;em&gt;how&lt;/em&gt; to write code for it.
The split matters more than it looks. CLAUDE.md is narrative — it reads like documentation, and it's the kind of thing a new human teammate would also want to read. Rules are closer to a linter's config file: terse, specific, and meant to be checked against rather than just read once and absorbed.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9sa7f4sp582oz53dv46u.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9sa7f4sp582oz53dv46u.png" alt=" " width="799" height="648"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Notice the split: &lt;code&gt;.claude/rules/portfolio.md&lt;/code&gt; holds the enforceable rules, &lt;code&gt;CLAUDE.md&lt;/code&gt; holds the narrative context, and &lt;code&gt;.claudeignore&lt;/code&gt; keeps Claude away from &lt;code&gt;.env&lt;/code&gt; and other files it has no business touching. The folder structure also shows the DDD layering — &lt;code&gt;domain/&lt;/code&gt;, &lt;code&gt;infrastructure/&lt;/code&gt;, &lt;code&gt;application/&lt;/code&gt;, &lt;code&gt;cmd/&lt;/code&gt;, &lt;code&gt;config/&lt;/code&gt; — sitting right alongside the &lt;code&gt;.claude/&lt;/code&gt; directory, which is intentional. The rules aren't bolted on after the fact; they describe the structure that's already there.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Real Test: Fixing an API Issue
&lt;/h2&gt;

&lt;p&gt;The actual proof a rules-based setup works isn't the first prompt — it's the second one. When an API issue came up mid-build, the fix wasn't to re-explain the whole project again. It was a one-line edit to the rules file itself.&lt;/p&gt;

&lt;p&gt;Claude Code was authenticating against Trading212 the wrong way — guessing at a bearer token approach that returned a 401. The fix wasn't a back-and-forth conversation explaining the API again. It was adding a dedicated section to the rules file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gu"&gt;## Trading212 API&lt;/span&gt;
&lt;span class="p"&gt;
-&lt;/span&gt; Official docs: https://docs.trading212.com/api
&lt;span class="p"&gt;-&lt;/span&gt; Base URL: &lt;span class="sb"&gt;`https://live.trading212.com/api/v0`&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Authentication: HTTP Basic Auth — &lt;span class="sb"&gt;`Authorization: Basic base64(accessKey:secretKey)`&lt;/span&gt;.
&lt;span class="p"&gt;  -&lt;/span&gt; &lt;span class="sb"&gt;`TRADING_212_STORAGE_ACCESS_KEY`&lt;/span&gt; is the access key (username)
&lt;span class="p"&gt;  -&lt;/span&gt; &lt;span class="sb"&gt;`TRADING_212_SECRET_STORAGE_ACCESS_KEY`&lt;/span&gt; is the secret key (password)
&lt;span class="p"&gt;-&lt;/span&gt; Do NOT use a plain bearer token or &lt;span class="sb"&gt;`Authorization: Bearer`&lt;/span&gt; — that is the deprecated approach and returns 401.
&lt;span class="p"&gt;-&lt;/span&gt; Portfolio positions endpoint: &lt;span class="sb"&gt;`GET /equity/portfolio`&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Always consult https://docs.trading212.com/api before adding new Trading212 endpoints.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With the official docs link and the correct auth scheme written into the rule, Claude Code referenced the right context immediately and fixed the issue — no re-explaining, no trial and error on a second guess. The rule didn't just patch the bug once; it makes the same mistake structurally impossible to repeat in any future session, because the correct auth method and a link to verify it are now sitting right there in the rules file.&lt;/p&gt;

&lt;p&gt;That's the actual payoff. When something breaks — an API quirk, a naming mismatch, a layer violation — the fix is a targeted edit to the rule that's wrong or missing, not a fresh paragraph of context typed into a new prompt. The next session, and every session after that, inherits the fix for free.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try It Yourself
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Repo:&lt;/strong&gt; &lt;a href="https://github.com/Mozes721/PortfolioPulse" rel="noopener noreferrer"&gt;github.com/Mozes721/PortfolioPulse&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Video:&lt;/strong&gt; &lt;a href="https://youtu.be/4BmACot5BF0" rel="noopener noreferrer"&gt;youtu.be/4BmACot5BF0&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Claude Code best practices:&lt;/strong&gt; &lt;a href="https://code.claude.com/docs/en/best-practices" rel="noopener noreferrer"&gt;code.claude.com/docs/en/best-practices&lt;/a&gt;
Clone the repo, open &lt;code&gt;.claude/rules/portfolio.md&lt;/code&gt;, and adapt it to your own stack. The structure transfers even if your project has nothing to do with stocks or Redis. If you want to try the planning-first approach, sketch your own project's data flow in a Claude Desktop or claude.ai chat before writing a single file — the few minutes spent clarifying triggers, sources, and storage boundaries pays off the moment Claude has to write code against them.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;CLAUDE.md and Rules are the foundation. Next up: &lt;strong&gt;Hooks&lt;/strong&gt; — automating lint fixes, format-on-save, and deploy triggers so Claude isn't just following rules, it's reacting to events in your workflow automatically.&lt;/p&gt;

&lt;p&gt;Subscribe or follow along if you want the rest of the series as it drops — Skills, Hooks, MCP, and Subagents, all built on the same PortfolioPulse project.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>claude</category>
      <category>automation</category>
      <category>productivity</category>
    </item>
    <item>
      <title>DIY Smart Lock: Custom Buzzer Integration with Raspberry Pi Pico 2W, Keypad &amp; LCD</title>
      <dc:creator>Ricards Taujenis</dc:creator>
      <pubDate>Fri, 05 Jun 2026 10:35:24 +0000</pubDate>
      <link>https://dev.to/mozes721/diy-smart-lock-custom-buzzer-integration-with-raspberry-pi-pico-2w-keypad-lcd-4l3j</link>
      <guid>https://dev.to/mozes721/diy-smart-lock-custom-buzzer-integration-with-raspberry-pi-pico-2w-keypad-lcd-4l3j</guid>
      <description>&lt;p&gt;Hey devs! 👋 &lt;/p&gt;

&lt;p&gt;I just put together a security project utilizing the new &lt;strong&gt;Raspberry Pi Pico 2W&lt;/strong&gt; to construct an electronic passcode door lock system. &lt;/p&gt;

&lt;p&gt;If you are getting started with MicroPython or looking for inspiration for a hardware project to tackle over the weekend, this was a fun one to code and wire up.&lt;/p&gt;

&lt;h3&gt;
  
  
  🛠️ The Hardware Setup
&lt;/h3&gt;

&lt;p&gt;The core build features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Raspberry Pi Pico 2W&lt;/strong&gt; running MicroPython.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;4x4 Matrix Keypad&lt;/strong&gt; for secure PIN entry.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;1602 LCD Display&lt;/strong&gt; driven via an I2C backpack interface to minimize our pin usage.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For the wiring, I mapped the I2C lines to &lt;code&gt;GP6&lt;/code&gt; (SDA) and &lt;code&gt;GP7&lt;/code&gt; (SCL). If you try this build yourself and notice your LCD screen is completely blank or too dim, don't panic! You just need to take a small screwdriver and gently adjust the built-in potentiometer knob on the back of the I2C backpack module to fix the contrast.&lt;/p&gt;

&lt;h3&gt;
  
  
  🔊 The Custom Upgrade: Adding a Buzzer
&lt;/h3&gt;

&lt;p&gt;While standard tutorials usually stop at visual screen confirmation, I wanted tactical audio responses to make the system feel like a commercial security device. I custom-wired a physical buzzer into the breadboard logic. &lt;/p&gt;

&lt;p&gt;By modifying the code logic inside the Thonny IDE, the buzzer reacts dynamically based on user interaction:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Tactile Feedback:&lt;/strong&gt; A single short click sound fires on every individual button press so you know the key registered.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Access Granted:&lt;/strong&gt; An extended solid tone triggers when the correct security code (&lt;code&gt;#992306&lt;/code&gt;) is successfully matched.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Access Denied:&lt;/strong&gt; A rapid warning buzz alerts you if an invalid code is input.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  📺 Full Video Walkthrough
&lt;/h3&gt;

&lt;p&gt;I put together a 6-minute video showcasing the project run-through, detailing the pinouts, showing how to upload the necessary library dependencies (&lt;code&gt;lcd_api&lt;/code&gt; and &lt;code&gt;pico_i2c_lcd&lt;/code&gt;) to your Pico 2W board files, and demoing the buzzer sounds:&lt;/p&gt;

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

&lt;h3&gt;
  
  
  ⚙️ What's Next?
&lt;/h3&gt;

&lt;p&gt;The code is highly extensible. The logical next step to make this a true "door lock" would be integrating a physical 5V relay module to trigger an electromagnetic lock or a solenoid dropbolt whenever the screen reads &lt;em&gt;Access Granted&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Base project logic inspired by the SunFounder Pico 2W Kit documentation, with custom script modifications written for the dynamic buzzer responses.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Let me know in the comments if you have worked with the new Pico 2W yet, or what features you would add to an open-source smart lock system!&lt;/p&gt;

</description>
      <category>raspberrypi</category>
      <category>iot</category>
      <category>security</category>
      <category>diy</category>
    </item>
    <item>
      <title>Is Claude Pro Worth $20/Month? A Developer's Honest Take</title>
      <dc:creator>Ricards Taujenis</dc:creator>
      <pubDate>Mon, 18 May 2026 19:34:49 +0000</pubDate>
      <link>https://dev.to/mozes721/is-claude-pro-worth-20month-a-developers-honest-take-2688</link>
      <guid>https://dev.to/mozes721/is-claude-pro-worth-20month-a-developers-honest-take-2688</guid>
      <description>&lt;p&gt;I spent $20/month on Claude Pro for six months and almost cancelled. Then I started building my own AI agents and realized I wasn't just paying for a chatbot—I was paying for a &lt;strong&gt;development environment&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Here's why I'm keeping it, and whether you should too.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem: Free Claude Hits Walls
&lt;/h2&gt;

&lt;p&gt;If you're using the free Claude, you've hit the ceiling. You know the feeling—you're in the middle of something interesting, and suddenly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Rate limits kick in&lt;/li&gt;
&lt;li&gt;You're waiting 5+ minutes between responses&lt;/li&gt;
&lt;li&gt;You can't upload larger files&lt;/li&gt;
&lt;li&gt;Feature access is restricted&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For casual use, free Claude is genuinely great. But the moment you want to &lt;strong&gt;build something&lt;/strong&gt;, automate workflows, or iterate quickly on complex problems, those limitations become friction. Every constraint slows your momentum.&lt;/p&gt;

&lt;p&gt;The real question isn't "Is Claude worth $20?" It's "How much is my time worth?"&lt;/p&gt;

&lt;h2&gt;
  
  
  What You Actually Get With Claude Pro
&lt;/h2&gt;

&lt;p&gt;Let me break down the concrete differences:&lt;/p&gt;

&lt;h3&gt;
  
  
  5x Higher Rate Limits
&lt;/h3&gt;

&lt;p&gt;With Pro, you go from 40 to 200 messages per 10-second window. This sounds technical, but practically? You can iterate without watching loading spinners.&lt;/p&gt;

&lt;p&gt;When I was learning to build agents with Claude, this mattered. I'd test a prompt, adjust it, test again—5 times in a row. On free tier, that's a waiting game. On Pro, it's flow state.&lt;/p&gt;

&lt;h3&gt;
  
  
  Extended Thinking (The Game Changer)
&lt;/h3&gt;

&lt;p&gt;This is the feature that actually justifies the cost. Extended thinking lets Claude spend extra compute time reasoning through complex problems before answering.&lt;/p&gt;

&lt;p&gt;Example: I used it to debug a multi-step agent workflow where the logic was breaking in unexpected ways. Instead of Claude giving me a quick (and wrong) answer, extended thinking let me see its reasoning process and catch the actual issue in the agent loop.&lt;br&gt;
Problem: Agent not passing context between steps&lt;br&gt;
Extended thinking output:&lt;/p&gt;

&lt;p&gt;Step 1: Identified where context was getting lost&lt;br&gt;
Step 2: Traced the data flow through three functions&lt;br&gt;
Step 3: Found the specific line causing the issue&lt;br&gt;
Step 4: Suggested three different fixes with tradeoffs&lt;/p&gt;

&lt;p&gt;That depth of analysis is worth $20 right there if you do it once a month.&lt;/p&gt;

&lt;h3&gt;
  
  
  Larger File Uploads &amp;amp; Vision
&lt;/h3&gt;

&lt;p&gt;Pro lets you upload larger documents and use vision capabilities. When I'm building automation workflows, I can paste screenshots directly and get Claude to analyze UI layouts or debug visual issues.&lt;/p&gt;

&lt;h3&gt;
  
  
  Early Access to New Features
&lt;/h3&gt;

&lt;p&gt;Claude Pro gets first access to new capabilities. Right now, that means you're testing Claude Code (improved coding capabilities) and Agent integration before the general public.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Real Cost/Benefit: Productivity Gains
&lt;/h2&gt;

&lt;p&gt;Here's where the math gets interesting:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Monthly Cost:&lt;/strong&gt; $20&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Realistic Time Saved (conservative estimate):&lt;/strong&gt; 2-3 hours/month&lt;/p&gt;

&lt;p&gt;If your time is worth:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Hobbyist ($0/hr):&lt;/strong&gt; Probably not worth it&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Freelancer ($50/hr):&lt;/strong&gt; $100-150 in time saved = &lt;strong&gt;net +$80-130/month&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Employed developer ($75/hr):&lt;/strong&gt; $150-225 in time saved = &lt;strong&gt;net +$130-205/month&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Startup founder ($∞/hr):&lt;/strong&gt; The faster iteration speed is worth way more than $20&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I'm in the "startup/learning" category right now, which is why I keep it. The extended thinking feature alone helps me debug agent architectures that would take 3x longer to figure out on free tier.&lt;/p&gt;

&lt;h2&gt;
  
  
  Building Agents: The Use Case That Changed My Mind
&lt;/h2&gt;

&lt;p&gt;Here's my honest personal context: I'm learning to build AI agents right now, and I'm using Claude directly through this platform. The speed of iteration matters &lt;strong&gt;a lot&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;When you're testing an agent workflow:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;You adjust the system prompt&lt;/li&gt;
&lt;li&gt;You run the agent&lt;/li&gt;
&lt;li&gt;You check the output&lt;/li&gt;
&lt;li&gt;You're back at step 1&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;On free tier, steps 1-4 take 15 minutes when you hit rate limits. On Pro, it's 2 minutes. Over a week of learning, that's hours of reclaimed time.&lt;/p&gt;

&lt;p&gt;I actually built this blog post with the help of an AI agent I'm developing—the agent helped structure my thoughts, suggested sections, and gave me feedback. That kind of iterative work is &lt;strong&gt;only&lt;/strong&gt; pleasant with higher rate limits.&lt;/p&gt;

&lt;p&gt;![INSERT_IMAGE_HERE: Screenshot of Claude Agent creating blog structure]&lt;br&gt;
&lt;em&gt;A glimpse of using Claude Agent for content iteration—faster feedback loops with Pro&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Watch my detailed video on getting started with Claude: &lt;a href="https://youtu.be/wg02wUYnxQs" rel="noopener noreferrer"&gt;https://youtu.be/wg02wUYnxQs&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Who Should Actually Buy Claude Pro?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definitely buy it if:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You're a developer iterating on code/prompts (time savings compound)&lt;/li&gt;
&lt;li&gt;You're building AI agents or automation (extended thinking is essential)&lt;/li&gt;
&lt;li&gt;You're using Claude for work (ROI on 2 hours saved is obvious)&lt;/li&gt;
&lt;li&gt;You hit rate limits regularly (that's the biggest sign you need it)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Maybe skip it if:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You use Claude casually (few times a week)&lt;/li&gt;
&lt;li&gt;You're learning but don't need rapid iteration&lt;/li&gt;
&lt;li&gt;You have unlimited budget from a company already paying&lt;/li&gt;
&lt;li&gt;You primarily need basic chat, not advanced reasoning&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Definitely skip it if:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You're completely broke and have other priorities&lt;/li&gt;
&lt;li&gt;You only use Claude for simple Q&amp;amp;A&lt;/li&gt;
&lt;li&gt;You can work around rate limits with patience&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Real Comparison: What Changes
&lt;/h2&gt;

&lt;p&gt;Here's a side-by-side of the most important differences:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Free Claude&lt;/th&gt;
&lt;th&gt;Claude Pro&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Rate Limit&lt;/td&gt;
&lt;td&gt;40 msg/10s&lt;/td&gt;
&lt;td&gt;200 msg/10s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Extended Thinking&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Vision/File Size&lt;/td&gt;
&lt;td&gt;Limited&lt;/td&gt;
&lt;td&gt;Generous&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Response Speed&lt;/td&gt;
&lt;td&gt;Normal&lt;/td&gt;
&lt;td&gt;Priority queue&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cost&lt;/td&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;td&gt;$20/month&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Time saved per month&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;2-5 hours&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The rate limit difference is &lt;em&gt;the&lt;/em&gt; productivity multiplier. Everything else is nice-to-have.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Honest Take
&lt;/h2&gt;

&lt;p&gt;After six months, I'm keeping Claude Pro. Not because it's expensive (it's not), but because I've now structured my workflow around it—building agents, iterating on prompts, debugging complex logic.&lt;/p&gt;

&lt;p&gt;The $20 covers about &lt;strong&gt;one hour of saved time&lt;/strong&gt; at a decent freelance rate. Once you're in that mode, you'll easily hit that target.&lt;/p&gt;

&lt;p&gt;But if you're using Claude for casual questions, the free tier is legitimately perfect. There's no shame in skipping Pro.&lt;/p&gt;

&lt;h2&gt;
  
  
  Next Steps
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Try Pro free for a week&lt;/strong&gt; — Claude offers a trial period. See if you hit rate limits.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use extended thinking for ONE complex problem&lt;/strong&gt; — see if the reasoning helps.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Decide based on your workflow&lt;/strong&gt; — not based on FOMO.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you're building anything with AI, coding, or automating workflows, give Pro a shot. If you're purely using it as a search engine replacement, stick with free.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What's your Claude use case?&lt;/strong&gt; Drop a comment and let me know if you're Pro or sticking with free—I'm curious what tipped the scales for other developers.&lt;/p&gt;

&lt;p&gt;P.S this was a learning material type of post with own Agent creation.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fagye3yureahw2uuiq159.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%2Fagye3yureahw2uuiq159.png" alt=" " width="800" height="443"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Want to dive deeper?&lt;/strong&gt; Check out the video I referenced: &lt;a href="https://youtu.be/wg02wUYnxQs" rel="noopener noreferrer"&gt;https://youtu.be/wg02wUYnxQs&lt;/a&gt; for more on Claude's capabilities.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>claude</category>
      <category>development</category>
      <category>automation</category>
    </item>
    <item>
      <title>Why I'm Heading to Warsaw for NBX 2026</title>
      <dc:creator>Ricards Taujenis</dc:creator>
      <pubDate>Thu, 19 Mar 2026 11:56:47 +0000</pubDate>
      <link>https://dev.to/mozes721/why-im-heading-to-warsaw-for-nbx-2026-29fp</link>
      <guid>https://dev.to/mozes721/why-im-heading-to-warsaw-for-nbx-2026-29fp</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9vr9qif41hpbihfrdiid.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%2F9vr9qif41hpbihfrdiid.jpg" alt=" " width="474" height="266"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There's no shortage of Web3 conferences these days.&lt;/p&gt;

&lt;p&gt;But every now and then, an event stands out - not because of the hype, but because of the people and opportunities it brings together.&lt;/p&gt;

&lt;p&gt;That's why I'm excited to share that I'll be joining &lt;a href="https://nextblockexpo.com/" rel="noopener noreferrer"&gt;&lt;strong&gt;Next Block Expo 2026&lt;/strong&gt;&lt;/a&gt; as an Official Ambassador.&lt;/p&gt;

&lt;h2&gt;
  
  
  Warsaw Is Becoming a Web3&amp;nbsp;Hotspot
&lt;/h2&gt;

&lt;p&gt;On March 24–25, Warsaw will turn into one of the most important meeting points for the European Web3 ecosystem.&lt;/p&gt;

&lt;p&gt;We're talking about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;2,000+ attendees&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;140+ speakers&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Builders, investors, founders - all in one place&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But scale isn't what makes an event valuable.&lt;/p&gt;

&lt;p&gt;What really matters is what happens between people.&lt;/p&gt;

&lt;p&gt;The Underrated Advantage: Smart Networking&lt;/p&gt;

&lt;p&gt;One thing that really stood out to me this year is the networking experience.&lt;/p&gt;

&lt;p&gt;As part of the event, attendees get access to a dedicated app designed to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Schedule 1:1 meetings&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Discover relevant people&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Navigate the event efficiently&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Because the difference between a "good" conference and a truly valuable one usually comes down to one thing:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Who you meet - and how intentionally you meet them.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I Decided to Get&amp;nbsp;Involved
&lt;/h2&gt;

&lt;p&gt;Joining as an ambassador wasn't just about attending.&lt;/p&gt;

&lt;p&gt;It's about being part of something that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Connects the right people&lt;/li&gt;
&lt;li&gt;Supports early-stage builders&lt;/li&gt;
&lt;li&gt;Pushes the ecosystem forward&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Web3 is at a stage where signal matters more than noise.&lt;/p&gt;

&lt;p&gt;And events like this help surface that signal.&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%2Fohr3tiifbuqp33bcl3du.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%2Fohr3tiifbuqp33bcl3du.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  See You&amp;nbsp;There?
&lt;/h2&gt;

&lt;p&gt;If you're planning to attend Next Block Expo 2026, I'd love to connect.&lt;/p&gt;

&lt;p&gt;🎟️ You can register here: &lt;a href="https://lnkd.in/d4m4Y4pV" rel="noopener noreferrer"&gt;https://lnkd.in/d4m4Y4pV&lt;/a&gt;&lt;br&gt;
&amp;nbsp;Use promo code: &lt;strong&gt;Mozes721&lt;/strong&gt;&lt;br&gt;
If not this time - hopefully we'll cross paths at a future edition.&lt;/p&gt;

</description>
      <category>web3</category>
      <category>blockchain</category>
      <category>networking</category>
      <category>startup</category>
    </item>
    <item>
      <title>OpenClaw AI Agent on Raspberry Pi</title>
      <dc:creator>Ricards Taujenis</dc:creator>
      <pubDate>Tue, 24 Feb 2026 11:47:23 +0000</pubDate>
      <link>https://dev.to/mozes721/openclaw-ai-agent-on-raspberry-pi-4o4n</link>
      <guid>https://dev.to/mozes721/openclaw-ai-agent-on-raspberry-pi-4o4n</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyu0roxx81c04wkqhs0m4.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%2Fyu0roxx81c04wkqhs0m4.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;OpenClaw is an open-source personal AI assistant that runs locally on hardware like a Raspberry Pi, keeping your data private and under your control. If you enjoy self-hosting and experimenting with AI agents, this setup is surprisingly straightforward.&lt;/p&gt;

&lt;p&gt;Related video you can find bellow 👇&lt;/p&gt;

&lt;p&gt;&lt;a href="https://youtu.be/GO5WVQ-lds8" rel="noopener noreferrer"&gt;https://youtu.be/GO5WVQ-lds8&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Raspberry Pi&amp;nbsp;Prep
&lt;/h1&gt;

&lt;p&gt;SSH into your Pi and update the system for stability:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo apt update &amp;amp;&amp;amp; sudo apt upgrade -y
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Install Node.js 22+ if missing (required for OpenClaw), plus Python for potential dependencies:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo apt install nodejs npm python3 python3-pip -y
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run the one-liner installer, which handles Node detection and onboarding:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;curl -fsSL https://openclaw.ai/install.sh | bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Post-install, check setup:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;openclaw doctor
openclaw status
openclaw dashboard
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  OpenClaw Overview
&lt;/h1&gt;

&lt;p&gt;In a nutshell it acts as a 24/7 AI agent with persistent memory.&amp;nbsp;&lt;/p&gt;

&lt;p&gt;It integrated with apps like Telegram, WhatsApp, Discord etc. You can choose from multiple LLM providers depending on your needs and setup.&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%2Fz4qsmcut4zy8ei475dgp.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%2Fz4qsmcut4zy8ei475dgp.png" alt=" " width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Onboarding process
&lt;/h2&gt;

&lt;p&gt;After installation, launch the guided wizard:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;openclaw onboard
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Process Breakdown
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Step 1: LLM Selection&lt;/strong&gt;-- Prompts for model (e.g., Gemini), then API key entry.​&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Step 2: Channel Setup&lt;/strong&gt;-- Picks interface like Telegram; inputs bot token from &lt;a class="mentioned-user" href="https://dev.to/botfather"&gt;@botfather&lt;/a&gt;.​ &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Step 3: Provider Link&lt;/strong&gt;-- Links accounts (Google for Gemini, GitHub, etc.) for skills/tools.​&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Telegram Setup
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Message &lt;strong&gt;&lt;a class="mentioned-user" href="https://dev.to/botfather"&gt;@botfather&lt;/a&gt;&lt;/strong&gt; on Telegram.&lt;/li&gt;
&lt;li&gt;Send &lt;code&gt;/newbot&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Name your bot (e.g., &lt;code&gt;MyOpenClawBot&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Copy the API token provided by BotFather.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Approve pairing
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;In Telegram, search for your new bot.&lt;/li&gt;
&lt;li&gt;Send &lt;code&gt;/start&lt;/code&gt; (or any message) to generate a pairing code.&lt;/li&gt;
&lt;li&gt;On your Pi, run:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;openclaw pairing approve telegram [pairing-code]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can now test by messaging the bot - responses should sync via your selected LLM across both the dashboard and Telegram.&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%2F4o9n0bl6uh56qg1adav5.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%2F4o9n0bl6uh56qg1adav5.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Final Thoughts
&lt;/h1&gt;

&lt;p&gt;OpenClaw is still very new and evolving quickly. Some users are already running it on devices like the Mac mini. I'll continue testing it on my Mac and plan to link Google Calendar, Mail, and Drive to explore its full potential.&lt;/p&gt;

</description>
      <category>openclaw</category>
      <category>raspberrypi</category>
      <category>ai</category>
      <category>agents</category>
    </item>
    <item>
      <title>Kickstart OpenCode with OpenRouter</title>
      <dc:creator>Ricards Taujenis</dc:creator>
      <pubDate>Sun, 11 Jan 2026 16:32:16 +0000</pubDate>
      <link>https://dev.to/mozes721/kickstart-opencode-with-openrouter-32o7</link>
      <guid>https://dev.to/mozes721/kickstart-opencode-with-openrouter-32o7</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgl38qnc5kwgopg2gg5oe.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%2Fgl38qnc5kwgopg2gg5oe.png" alt=" " width="800" height="417"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;AI coding tools evolve fast, and OpenCode stands out as an open-source agent rivaling Cursor or Claude Code CLI - fully terminal-native with LSP support, multi-session handling, and 75+ LLM providers via Models.dev.&lt;/p&gt;

&lt;p&gt;Compared to locked-in alternatives that are subscription base you can pick models pay-as-you-go prioritizing privacy and flexibility.&lt;br&gt;
Check my 5-minute setup video for a quick demo.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://youtu.be/VSN3fCJcoIc" rel="noopener noreferrer"&gt;https://youtu.be/VSN3fCJcoIc&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Installation
&lt;/h1&gt;

&lt;p&gt;Start with the one-liner curl install - no Docker or complex deps needed:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;curl -fsSL https://opencode.ai/install | bash ​.&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;This adds the opencode CLI globally. Verify with opencode --version, then launch via opencode. For VS Code integration, it pairs seamlessly as an LSP client. Full docs: opencode.ai/docs.​​&lt;/p&gt;
&lt;h1&gt;
  
  
  OpenRouter Setup
&lt;/h1&gt;

&lt;p&gt;OpenRouter powers model access via its OpenAI-compatible API - sign up at openrouter.ai, grab a key, and fund credits (pay-per-token, starting free tiers).​​​&lt;br&gt;
Export these env vars (add to ~/.zshrc for persistence):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;export OPENAI_API_BASE=https://openrouter.ai/api/v1
export OPENAI_API_KEY=your-openrouter-api-key
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Source your shell &lt;code&gt;(source ~/.zshrc)&lt;/code&gt; and relaunch. Screenshot your API keys page for readers to match. This unlocks 300+ models without switching providers.&lt;br&gt;
I added some credits to OpenRouter just for more advanced models for different projects.&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%2Fz35tdanhq779aip3cw6f.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%2Fz35tdanhq779aip3cw6f.png" alt=" " width="800" height="313"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Source your shell &lt;code&gt;(source ~/.zshrc)&lt;/code&gt; and relaunch. Screenshot your API keys page for readers to match. This unlocks 300+ models without switching providers.&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%2Fpl6o9skeyy5myrqla39i.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%2Fpl6o9skeyy5myrqla39i.jpg" alt=" " width="800" height="411"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Basic Usage
&lt;/h1&gt;

&lt;p&gt;Run &lt;code&gt;opencode&lt;/code&gt; in a repo to init: It prompts project context, then use slash commands in the TUI.​&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;/connect&lt;/code&gt;: Link OpenRouter (auto-detects env vars).&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/models&lt;/code&gt;: List/select (e.g., Claude 3.5 Sonnet or GPT-4o-filter free ones).&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/init&lt;/code&gt;: Scans repo, suggests plan (e.g., "Analyze main.rs and create layers").&lt;/li&gt;
&lt;li&gt;Core flow: &lt;code&gt;/plan&lt;/code&gt; for outline, &lt;code&gt;/build&lt;/code&gt; to generate&lt;code&gt;/run&lt;/code&gt; code, &lt;code&gt;/improve&lt;/code&gt; for refinements.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>automation</category>
      <category>llm</category>
    </item>
    <item>
      <title>Self-Hosting n8n in 5 Minutes: Local Docker or VPS Setup</title>
      <dc:creator>Ricards Taujenis</dc:creator>
      <pubDate>Fri, 12 Dec 2025 12:57:10 +0000</pubDate>
      <link>https://dev.to/mozes721/self-hosting-n8n-in-5-minutes-local-docker-or-vps-setup-m80</link>
      <guid>https://dev.to/mozes721/self-hosting-n8n-in-5-minutes-local-docker-or-vps-setup-m80</guid>
      <description>&lt;p&gt;As a powerful open-source workflow automation tool running locally or in own server free of charge brings huge value to build future projects!&lt;br&gt;
For more info check the website &lt;a href="https://docs.n8n.io/" rel="noopener noreferrer"&gt;https://docs.n8n.io/&lt;/a&gt; otherwise lets get started! 🏁🏁🏁&lt;/p&gt;
&lt;h1&gt;
  
  
  Docker Setup
&lt;/h1&gt;

&lt;p&gt;To run locally you just need a simple Docker command.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Build image
docker build -t my-n8n .

# Run container
docker run -it --rm \
  --name n8n \
  -p 5678:5678 \
  -v ~/.n8n:/home/node/.n8n \
  n8nio/n8n
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here, &lt;code&gt;--name&lt;/code&gt; sets the container name, &lt;code&gt;-p&lt;/code&gt; maps the port, and &lt;code&gt;-v&lt;/code&gt; ensures your workflows are saved persistently."&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%2Fony2k2y669rkp9qu01w7.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%2Fony2k2y669rkp9qu01w7.png" alt=" " width="690" height="508"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then in some time(because the size is 1.3GB) it should run and in the localhost port will see above internal sign in.&lt;/p&gt;

&lt;p&gt;And that's practically it and you can start building your workflows!&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Just don't rebuild the image without saving the volumes as you may delete them as I have before!&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Webhooks &amp;amp;&amp;nbsp;ngrok
&lt;/h2&gt;

&lt;p&gt;Locally if you want n8n to communicate with external applications &lt;strong&gt;Webhook&lt;/strong&gt; needs to work, and for that ngrok is required.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;ngrok exposes your local n8n instance to the internet, so external apps can reach your webhooks.&lt;/p&gt;
&lt;/blockquote&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%2Fuiubz4b9s23umlorscsi.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%2Fuiubz4b9s23umlorscsi.png" alt=" " width="800" height="327"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once a domain has been created and API key shared the docker file would be better to be replaced with &lt;strong&gt;docker-compose.yml&lt;/strong&gt; file.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;version: '3.8'
services:
  n8n:
    image: n8nio/n8n:latest
    ports:
      - "5555:5678"
    environment:
      - N8N_BASIC_AUTH_ACTIVE=true
      - N8N_BASIC_AUTH_USER=admin
      - N8N_BASIC_AUTH_PASSWORD=your-secure-password
      - N8N_HOST=0.0.0.0
      - N8N_PORT=5678
    volumes:
      - n8n_data:/home/node/.n8n

  ngrok:
    image: ngrok/ngrok:latest
    command: ["http", "n8n:5678"]
    environment:
      - NGROK_AUTHTOKEN=your-ngrok-authtoken
    ports:
      - "4040:4040"
    depends_on:
      - n8n

volumes:
  n8n_data:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then ones this is done and rebuild you can use Webhooks. 💪&lt;/p&gt;

&lt;h1&gt;
  
  
  Server setup
&lt;/h1&gt;

&lt;p&gt;On a VPS with a public IP or domain, you don't need ngrok. Just point your DNS to the server and configure n8n with your domain.&lt;/p&gt;

&lt;p&gt;As well let's then use compose file &lt;code&gt;docker-compose.server.yml&lt;/code&gt; (tweak &lt;code&gt;N8N_HOST&lt;/code&gt; to your domain):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;version: '3.8'
services:
  n8n:
    image: n8nio/n8n:latest
    ports:
      - "5555:5678"
    environment:
      - N8N_BASIC_AUTH_ACTIVE=true
      - N8N_BASIC_AUTH_USER=admin
      - N8N_BASIC_AUTH_PASSWORD=your-secure-password
      - N8N_HOST=0.0.0.0
      - N8N_PORT=5678
    volumes:
      - n8n_data:/home/node/.n8n

  ngrok:
    image: ngrok/ngrok:latest
    command: ["http", "n8n:5678"]
    environment:
      - NGROK_AUTHTOKEN=your-ngrok-authtoken
    ports:
      - "4040:4040"
    depends_on:
      - n8n

volumes:
  n8n_data:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;restart: always&lt;/code&gt; ensures n8n restarts automatically if the server reboots.&lt;/p&gt;

&lt;p&gt;And run &lt;code&gt;docker compose -f docker-compose.server.yml up -d&lt;/code&gt;.&lt;/p&gt;




&lt;p&gt;Whether you're experimenting locally or deploying on a VPS, n8n gives you full control over your workflows. With Docker Compose, you can scale easily, secure your instance, and connect to external apps. Start building your automations today - without subscription costs.&lt;/p&gt;

</description>
      <category>automation</category>
      <category>tooling</category>
      <category>ai</category>
      <category>opensource</category>
    </item>
    <item>
      <title>How AI slop impacted content creators</title>
      <dc:creator>Ricards Taujenis</dc:creator>
      <pubDate>Mon, 06 Oct 2025 07:44:23 +0000</pubDate>
      <link>https://dev.to/mozes721/how-ai-slop-impacted-content-creators-1feg</link>
      <guid>https://dev.to/mozes721/how-ai-slop-impacted-content-creators-1feg</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuhyz22qps1xoqa88t62v.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%2Fuhyz22qps1xoqa88t62v.jpg" alt=" " width="626" height="358"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As a content creator across different media types(blogging, YT) I have been “gutted” of how much of an impact it has made personally both on view count and financial.&lt;/p&gt;

&lt;p&gt;While AI does help tremendously it as well at the same time diminishes importance in most ‘white collar’ jobs.&lt;/p&gt;

&lt;p&gt;📉 View Count &amp;amp; Revenue Decline&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It is no shocker that AI-generated content flooded a lot of platforms, pushing authentic creators down in search and recommendation algorithms due to sheer&lt;/li&gt;
&lt;li&gt;Lower visibility leads to reduced engagement, watch time, and ad revenue.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Thus, these platforms have also cut our earnings in half due to it as it’s tough to compete and less people go to platforms to gain insight on different topics.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;😞 Emotional Toll on Creators&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Creators feel demoralized, questioning value of their work.
The joy of creating is replaced by frustration and disillusionment.&lt;/li&gt;
&lt;li&gt;Any level of authenticity seems feels diminished even if AI can construct cases a lot better.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;🧭 Why Creators Are Going Silent&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Some creators step back due to the overwhelming noise and lack of reward.&lt;/li&gt;
&lt;li&gt;Others pause to reassess their purpose and whether authenticity still has a place.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;While I have kept YT to some decent level of consistency, with blogging I have not due to this ‘AI slop’ and cutting of any sorts of rewards in the platforms.&lt;/p&gt;

&lt;p&gt;🧠 Oversaturation &amp;amp; Algorithmic Noise&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Creators who invest time and emotion into their work get buried under generic output.&lt;/li&gt;
&lt;li&gt;Platforms are overwhelmed with mass-produced, low-effort content.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Before AI there was already competition in the field and just raising in all “white collar” type of job, but now it really disrupts it all.&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%2Fv6ri2r34q6fu82gfqoor.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%2Fv6ri2r34q6fu82gfqoor.png" alt=" " width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;My drop in view count and earnings made me demotivated to post a article for around 3 months. Whether this is my final post or just a pause, one thing is clear — authenticity has to find new ways to shine in a noisy, AI-saturated world.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>contentwriting</category>
      <category>automation</category>
      <category>writing</category>
    </item>
    <item>
      <title>How to setup RAG with VectorDB</title>
      <dc:creator>Ricards Taujenis</dc:creator>
      <pubDate>Sat, 21 Jun 2025 14:08:04 +0000</pubDate>
      <link>https://dev.to/mozes721/how-to-setup-rag-with-vectordb-m85</link>
      <guid>https://dev.to/mozes721/how-to-setup-rag-with-vectordb-m85</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjnfqsbu7r85fgbch9z7t.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%2Fjnfqsbu7r85fgbch9z7t.png" alt=" " width="800" height="457"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You may come across a term called RAG by now it's being rapidly adopted and introduced in 2020.&lt;br&gt;
&amp;nbsp;&lt;br&gt;
Mainly it's heavily in use for LLM-based apps, chatbots AI customer support, internal knowledge assistants etc.&lt;/p&gt;
&lt;h1&gt;
  
  
  📊 Brief&amp;nbsp;overview
&lt;/h1&gt;

&lt;p&gt;Let's create a ticker-specific RAG database table example using Pinecone. In my project I needed to map stock, crypto name: ticker symbols to extract just the ticker symbol. I have as well a Youtube video what you can check bellow. 👇️&lt;/p&gt;

&lt;p&gt;&lt;a href="https://youtu.be/QDe3Gi2tXR8" rel="noopener noreferrer"&gt;https://youtu.be/QDe3Gi2tXR8&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Database setup
&lt;/h1&gt;

&lt;p&gt;As mentioned I used Pinecone but there are as well other options like using Reddis and even Postgres has some support.&lt;br&gt;
So ones you have created an account create a new index(table)&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%2F1a2t6prxornnijafsy3q.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%2F1a2t6prxornnijafsy3q.png" alt=" " width="800" height="381"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There are many options and it depends of course on the LLM model you use. If you use GPT then by all means use one of the predefined GPT embeddings. There is as well Llama and Microsoft configuration, for my use case I made a "Manual configuration" due to embeddings based on all-MiniLM-L6-v2 model in HuggingFace.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://huggingface.co/sentence-transformers/all-MiniLM-L6-v2" rel="noopener noreferrer"&gt;https://huggingface.co/sentence-transformers/all-MiniLM-L6-v2&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; It's really important to setup configs correctly as otherwise embeddings won't work. My Metric: cosine, Dimensions: 384, Type: Dense your's however may differ.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Ones created and running extract your API key and add to your&amp;nbsp;.env for further embeddings.&lt;/p&gt;
&lt;h1&gt;
  
  
  📊 Prepare&amp;nbsp;Dataset
&lt;/h1&gt;

&lt;p&gt;Bellow you can see fraction of my&amp;nbsp;.csv just to get a glimpse what I am embedding&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;text,label
TSLA,Tesla
AAPL,Apple
MSFT,Microsoft
BABA,Alibaba Group Holding Limited
...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For LLM I recommend using Jupyter or Google Colab rather then a regular IDE.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import os
from dotenv import load_dotenv
from sentence_transformers import SentenceTransformer
from datasets import load_dataset
from pinecone import Pinecone

load_dotenv()
pc_api_key= os.getenv("PINECONE_API_KEY")

dataset = load_dataset("Mozes721/stock-crypto-weather-dataset", data_files="crypto_mapppings.csv")
df = dataset["train"].to_pandas()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In above code I just import required packages like pinecone, and sentence_transformers used for embeddings.&amp;nbsp;&lt;/p&gt;

&lt;p&gt;I stored my training data in &lt;a href="https://huggingface.co/new-dataset" rel="noopener noreferrer"&gt;https://huggingface.co/new-dataset&lt;/a&gt; due to the fact it's LLM related same as for fine tunning rather then locally, but that is individual choice.&lt;/p&gt;

&lt;h1&gt;
  
  
  Build Alias&amp;nbsp;Map
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Step 2: Create alias map
alias_to_ticker = {}

for _, row in df.iterrows():
    ticker = row['text'].upper()
    name = row['label'].lower()
    alias_to_ticker[ticker] = ticker
    alias_to_ticker[name] = ticker
    # Optional: add lowercase ticker too
    alias_to_ticker[ticker.lower()] = ticker

# Step 3: Prepare for embedding
aliases = list(alias_to_ticker.keys())
tickers = [alias_to_ticker[a] for a in aliases]

# Embed
model = SentenceTransformer('all-MiniLM-L6-v2')
embeddings = model.encode(aliases, convert_to_numpy=True)

# Step 5: Load Pinecone table
pc = Pinecone(api_key=pc_api_key)
index = pc.Index("stock-index")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;So alias map is created and in the for loop iterate over rows on text and label. Append to alias tuple both name and ticker( in my mappings it should work on both ends if AAPL given should return AAPL if Apple then AAPL).&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Then we fetch the model we want to embed it to and encode by converting to numpy ad then for now just load the index table.&lt;/p&gt;

&lt;h1&gt;
  
  
  Embed &amp;amp; Store in&amp;nbsp;Pinecone
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Prepare vectors in correct format
vectors = []
for i in range(len(aliases)):
    vectors.append({
        "id": f"stock_{i}",
        "values": embeddings[i].tolist(),
        "metadata": {"ticker": tickers[i], "alias": aliases[i]}
    })

# Batch upsert to avoid 2MB limit
batch_size = 50
total_batches = (len(vectors) + batch_size - 1) // batch_size

for i in range(0, len(vectors), batch_size):
    batch = vectors[i:i + batch_size]
    index.upsert(vectors=batch)
    batch_num = i // batch_size + 1
    print(f"Batch {batch_num}/{total_batches} has been embedded and uploaded ({len(batch)} vectors)")

print("All city batches completed!")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The vectors should be prepared in an array, we go through a for loop in aliases. Then append to vector and have id, values and metadata defined.&lt;/p&gt;

&lt;p&gt;Uploading to Pinecone needs to be done in batches to avoid 2MB upsert limit. When its done with batch_size we can upsert to stock-index table.&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%2Ffdjwc91mcacwi5696w6a.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%2Ffdjwc91mcacwi5696w6a.png" alt=" " width="800" height="248"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  🤖 Querying with&amp;nbsp;RAG
&lt;/h1&gt;

&lt;p&gt;The testing face should be quite simple as long as data has been embedded properly and same LLM model is used.]&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import os
from dotenv import load_dotenv
from sentence_transformers import SentenceTransformer
from pinecone import (
    Pinecone
)

class EmbeddingStockMapper:
    def __init__(self, model_name: str, pinecone_api_key: str):
        # Initialize the embedding model
        self.model = SentenceTransformer(model_name)

        pc = Pinecone(api_key=pinecone_api_key)
        self.index = pc.Index("stock-index")

    def get_stock_ticker(self, query):
        # Get embedding for the query
        query_embedding = self.model.encode(query, convert_to_numpy=True)

        # Search in Pinecone
        results = self.index.query(
            vector=query_embedding.tolist(),
            top_k=1,
            include_metadata=True
        )

        if results.matches:
            return results.matches[0].metadata['ticker']
        return None

# Initialize the mapper
load_dotenv()
pc_api_key= os.getenv("PINECONE_API_KEY")
mapper = EmbeddingStockMapper(model_name="all-MiniLM-L6-v2", pinecone_api_key=pc_api_key)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;So we initialize the model with all-MiniLM-L6-v2 same as used before in embedings. Then create a method &lt;strong&gt;&lt;em&gt;get_stock_ticker&lt;/em&gt;&lt;/strong&gt; that will encode the query passed to it. It will then return a result.matches[0].metadata['ticker'] as per own specification that most closely matches.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;test_queries = ["AAPL", "Apple Inc.", "apple", "What is the current stock price of Tesla.", "Google", "google", "TSLA", "Tesla", "tesla", "Microsoft Corporation", "microsoft"]

for query in test_queries:
    ticker = mapper.get_stock_ticker(query)
    print(f"Query: {query} -&amp;gt; Ticker: {ticker}")

//Output
Query: AAPL -&amp;gt; Ticker: AAPL
Query: Apple Inc. -&amp;gt; Ticker: AAPL
Query: apple -&amp;gt; Ticker: AAPL
Query: What is the current stock price of Tesla. -&amp;gt; Ticker: TSLA
Query: Google -&amp;gt; Ticker: GOOGL
Query: google -&amp;gt; Ticker: GOOGL
Query: TSLA -&amp;gt; Ticker: TSLA
Query: Tesla -&amp;gt; Ticker: TSLA
Query: tesla -&amp;gt; Ticker: TSLA
Query: Microsoft Corporation -&amp;gt; Ticker: MSFT
Query: microsoft -&amp;gt; Ticker: MSFT
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;Above you can see how it gracefully returned ticker symbols as per my request!&lt;/p&gt;




&lt;p&gt;In all honesty I was astonished by the results. RAG is slowly getting traction and I think a this is a lot better approach even if there is a learning curve compared to just using ChatGPT API calls. But most of us have simple need for AI implementation so using the whole AI model can be deemed as an "overkill".&lt;br&gt;
&amp;nbsp;&lt;br&gt;
My repo you can find here for any questions feel &lt;a href="https://github.com/Mozes721/RAGxTune" rel="noopener noreferrer"&gt;free&lt;/a&gt; to ask.&lt;/p&gt;

</description>
      <category>rag</category>
      <category>ai</category>
      <category>vectordatabase</category>
      <category>automation</category>
    </item>
    <item>
      <title>Vibe Coding: The Good and the Ugly</title>
      <dc:creator>Ricards Taujenis</dc:creator>
      <pubDate>Thu, 08 May 2025 13:27:40 +0000</pubDate>
      <link>https://dev.to/mozes721/vibe-coding-the-good-and-the-ugly-20n4</link>
      <guid>https://dev.to/mozes721/vibe-coding-the-good-and-the-ugly-20n4</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc4y3sjq3r9b0dbs4n26l.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%2Fc4y3sjq3r9b0dbs4n26l.jpg" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you have been around the dev block recently, you most likely heard of this new trend "vibe coding" my friend roped me into trying it with Cursor, and let me just tell you I have mixed feelings about it. Here's why.&lt;/p&gt;

&lt;h1&gt;
  
  
  The Good
&lt;/h1&gt;

&lt;p&gt;When it comes to building a new project it feels liberating to vibe yourself to success! Not the same with legacy code however but not impossible.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Real-time feedback and rapid iteration&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Cursor(like WindSurf) updates on the fly, making it a lot more faster and you don't have to switch between writing and running as not only it updates scripts but it can as well create new ones!&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%2F44mo71rweqnh4wbqwa60.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%2F44mo71rweqnh4wbqwa60.png" alt=" " width="800" height="369"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As you can see from above screenshot for Cursor it at first asked for permission to mkdir and then automatically created schema.sql script.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Fresh start&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Vibe coding on fresh project creates less baggage compared to legacy code. In addition it gives you sense of momentum, exploration and blazingly fast builds!&amp;nbsp;&lt;br&gt;
In addition it can do deploys to your Cloud provider if ssh keys are present and manage it in terminal(so not just code).&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Great for ideation and brainstorming&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Stuck on what tools to use? Postgres or Mongo? RabbitMQ? Kubernetes? Or what API system to use and even language Cursor and other AI IDEs can help with that by leveraging it's deep understanding of all the tools in the disposal.&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Just have to be explicit and scaffold based on my goals, and then gives me full stack with languages, reasoning and tools.&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%2F9vnwj1azwkblj8xw3w7a.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%2F9vnwj1azwkblj8xw3w7a.png" alt=" " width="800" height="409"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I asked a question of what I am included to build and to follow up with README.md tech stack and architecture tree including language of choice and other tools that would be optimal. ☝️&lt;/p&gt;

&lt;h1&gt;
  
  
  The Ugly
&lt;/h1&gt;

&lt;p&gt;Even though these AI IDEs have access to your whole repo, they can still duplicate logic and other issues mentioned bellow. Thus extensive monitoring and NOT commiting before checking is a must. 🕵🏻&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Code duplication&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;While code assistant IDEs have access to whole repo, it still sometimes create same functions in different directories. Like I had with my Rust project bellow. 👇&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%2F5tpicorlrm22cm6axdg5.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%2F5tpicorlrm22cm6axdg5.png" alt=" " width="800" height="329"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you pay attention you can see that verify_pin function was created in plugin, service and utils module lvl by Cursor, so when some code doesn't work it can often recreate similar logic elsewhere and forget that there is already something implemented.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Tooling mismatch&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This hits hardest in JavaScript and Python. With massive ecosystems, AI assistants often install libraries that don't play well together - or that are outdated.&lt;br&gt;
&amp;nbsp;&lt;br&gt;
With React it can install certain dependencies like Supabase client and server side dependencies, same as with TS that are not compatible.&lt;/p&gt;

&lt;p&gt;As we all know we can not always use the latest packages and documentation/methods are not available for some packages or are stale with AI not knowing it but just pasting.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Too fast, lack of reasoning&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Sometimes it feels too easy to "vibe yourself to success", but often context of repo is misunderstood and explanation of WHY particular approach was taken falls short. Thus it's easy to fall into deep woods when you see 10 scripts generate and instead of reasoning and understand it you just close a blind eye and hope for AI Gods to fix possible issues.&lt;/p&gt;




&lt;p&gt;To conclude I must say Cursor undeniably is a game-changer. But just because something becomes 3x easier doesn't mean it can not wrap up "technical debt" in the future, especially if your not fully familiar with the tech like me when it comes to Rust.&amp;nbsp;&lt;/p&gt;

&lt;p&gt;The $20/month price is a bit steep, especially when WindSurf offers a free tier and GitHub Copilot is cheaper. Still, for now, I'm sticking with Cursor.&lt;/p&gt;

&lt;p&gt;That said, I'll be more cautious. Just because the assistant offers changes doesn't mean you should accept them blindly. Review them. Test them. Because duplicated functions, unnecessary utils, and mismatched packages can snowball fast.&lt;/p&gt;

</description>
      <category>vibecoding</category>
      <category>ai</category>
      <category>programming</category>
      <category>softwaredevelopment</category>
    </item>
    <item>
      <title>Local Llama Setup: A Python Developer's Guide</title>
      <dc:creator>Ricards Taujenis</dc:creator>
      <pubDate>Thu, 23 Jan 2025 00:42:53 +0000</pubDate>
      <link>https://dev.to/mozes721/local-llama-setup-a-python-developers-guide-56fb</link>
      <guid>https://dev.to/mozes721/local-llama-setup-a-python-developers-guide-56fb</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo6sd347d9k01zfbw3f51.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%2Fo6sd347d9k01zfbw3f51.jpg" alt=" " width="800" height="526"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As using chatGPTis API is becoming more and more expensive and number of tokens are limited there comes a point in your life that have to look for alternatives. Thats where Llama comes in!&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Alternatively you can use smaller models (3B parameters instead of 7B)&lt;br&gt;
Use bitsandbytes for 8-bit quantization, which reduces memory usage significantly.&lt;br&gt;
If you don't have strong GPU can always outsource to cloud options that are out there like Google Colab, Hugging Face Inference API, RunPod&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h1&gt;
  
  
  Accessing Llama&amp;nbsp;Models
&lt;/h1&gt;

&lt;p&gt;To start off Hugging Face is the primary platform used for accessing Llama models(e.g., &lt;code&gt;meta-llama/Llama-2-7b-chat-hf&lt;/code&gt;).&lt;/p&gt;

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

&lt;p&gt;Create your account in &lt;strong&gt;Hugging Face&lt;/strong&gt;👆 to start using LLM models provided by Llama.&amp;nbsp;&lt;br&gt;
If your ambitious can as well create own model if not there are a bunch of models to choose from. 🤖&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%2Fgobielcejrm1grvwqo2q.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%2Fgobielcejrm1grvwqo2q.png" alt=" " width="800" height="545"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Most people including me just need text-to-text model so typical choose would be &lt;em&gt;meta-llama/Llama-2–7b-chat-hf&lt;/em&gt;.&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Once the model has been selected be sure to request access to the model by adding credentials.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;huggingface-cli login
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then you will have to login in terminal to use the models. In your huggingface profile go to Settings &amp;gt; Access Tokens, generate your access token that you will paste in.&lt;/p&gt;

&lt;h1&gt;
  
  
  Using the&amp;nbsp;Model
&lt;/h1&gt;

&lt;p&gt;In your python app we should use &lt;strong&gt;conda&lt;/strong&gt; instead of regular &lt;strong&gt;venv&lt;/strong&gt; be sure to install it activating it is similar as venv.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.anaconda.com/working-with-conda/environments/" rel="noopener noreferrer"&gt;https://docs.anaconda.com/working-with-conda/environments/&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//Required instalation for conda PyTorch
conda install pytorch torchvision torchaudio cpuonly -c pytorch
//Required python packages for huggingface etc
pip install transformers accelerate sentencepiece huggingface_hub
//To reduce memory usage you can as well install
pip install bitsandbytes
//Activate conda
conda activate myenv
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For this demonstration will just make it a simple as possible in main.py the power lies when implementing &lt;strong&gt;RAG&lt;/strong&gt; (Retrieval-Augmented Generation)) or fine tuning the model.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import transformers
import torch

def main():
    # Load Llama model using transformers pipeline
    pipeline = transformers.pipeline(
        "text-generation",
        model="meta-llama/Llama-2-7b-chat-hf",  # Replace with your model path if using a local model
        model_kwargs={"torch_dtype": torch.bfloat16},
        device_map="auto"
    )

    # Start the Llama pipeline
    while True:
        # Get user input
        query = input("\nYou: ")

        # Exit condition
        if query.lower() in ["exit", "quit"]:
            print("Goodbye!")
            break

        # Handle the query
        try:
            # Construct the prompt
            messages = [
                {"role": "user", "content": query},
            ]

            # Generate a response using the Llama model
            outputs = pipeline(
                messages,
                max_new_tokens=256,  # Adjust as needed
            )

            # Extract and print the response
            response = outputs[0]["generated_text"][-1]["content"]
            print(f"Bot: {response}")
        except Exception as e:
            print(f"Error handling query: {e}")

if __name__ == "__main__":
    main()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Note: The model i used computation heavy(CPU, GPU) and due to enormous parameters this particular 7 Billion parameters so if it doesn't break and hangs it may be due to weak&amp;nbsp;PC.&lt;/p&gt;
&lt;/blockquote&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%2F43ajlojh10ql6nmmvnrj.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%2F43ajlojh10ql6nmmvnrj.png" alt=" " width="800" height="953"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;As AI doesn't seem to fade and hype keeps on going good good to be more familiarized with it if not building own model might as well implement in own project with fine tuning or implementing it with RAG.&amp;nbsp;&lt;br&gt;
Of course IF your PC can handle it. 😉&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Can Pinterest Help Build Your Personal Brand?</title>
      <dc:creator>Ricards Taujenis</dc:creator>
      <pubDate>Tue, 10 Dec 2024 21:33:04 +0000</pubDate>
      <link>https://dev.to/mozes721/can-pinterest-help-build-your-personal-brand-39b0</link>
      <guid>https://dev.to/mozes721/can-pinterest-help-build-your-personal-brand-39b0</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb476pcpfc3jqq6y4yxsc.jpeg" 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%2Fb476pcpfc3jqq6y4yxsc.jpeg" alt=" " width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In todays age personal branding is more important then ever, while most of us focus on YouTube, blogging, personal website, GitHub(as a developer), Link bio(like linktree).&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Pinterest works similarly to affiliate links, directing users to external content where the shared content actually resides.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;While it's true that Pinterest is better suited for creative, visually-driven fields like art, tattoos, and fashion, it can also be a valuable tool for IT professionals. Although results may not be instantaneous, men and women alike can leverage Pinterest for personal branding.&lt;/p&gt;

&lt;p&gt;Setting up Pinterest&lt;/p&gt;

&lt;p&gt;Ones you login with email, google or facebook you can start by creating different boards based on content that you want to share.&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%2Fkx99mkk52pz3hqqfup4w.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%2Fkx99mkk52pz3hqqfup4w.png" alt=" " width="800" height="425"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Above you can see my different boards i have created over time(the last one i have been invited to).&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Some social platforms like &lt;strong&gt;YouTube&lt;/strong&gt; will automatically suggest option to create a Pin on Pinterest. If not I suggest create manually through Canva by selecting Pinterest pin 👇&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.canva.com/" rel="noopener noreferrer"&gt;https://www.canva.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Pinterest offers SEO benefits that can drive traffic to your website or content. Additionally, there are paid options for promoting pins, but I use the free version.&lt;/p&gt;

&lt;h2&gt;
  
  
  Statistics
&lt;/h2&gt;

&lt;p&gt;Out of the many pins I've created, some have performed exceptionally well. For instance, my article '&lt;strong&gt;How to Stop Vaping for Good&lt;/strong&gt;' received 25 clicks, with 8 coming from Pinterest.&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%2Fb7c9eed11tza7abivm1t.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%2Fb7c9eed11tza7abivm1t.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As you can see from above picture while most dont get any traction I made one article listed bellow.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://richard-taujenis.medium.com/how-to-stop-vaping-for-good-bb3e0563648e" rel="noopener noreferrer"&gt;https://richard-taujenis.medium.com/how-to-stop-vaping-for-good-bb3e0563648e&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So while it doesn't occur often it doesn't take as much time to create a Pin.&lt;/p&gt;

&lt;p&gt;Bellow you can see how much pins i have created reality paints a different picture often in life compared to what we expect.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://pl.pinterest.com/richardtaujenis/" rel="noopener noreferrer"&gt;https://pl.pinterest.com/richardtaujenis/&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;Branding yourself in a digital landscape has never been as competitive and saturated as it is now. While people say "you have to stand out from the rest" has never been more difficult, as when everyone is doing the same thing how to stand out?&lt;/p&gt;

&lt;p&gt;While Pinterest may not always bring immediate results, its potential for long-term brand building is significant. Don't overlook this powerful platform in your personal branding strategy.&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
