<?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: Mustafa Vatandaş</title>
    <description>The latest articles on DEV Community by Mustafa Vatandaş (@mvtandas).</description>
    <link>https://dev.to/mvtandas</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3876615%2F9fcb905c-a898-49c3-a75d-fff2bf68f915.png</url>
      <title>DEV Community: Mustafa Vatandaş</title>
      <link>https://dev.to/mvtandas</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mvtandas"/>
    <language>en</language>
    <item>
      <title>How to Make Claude Code &amp; Cursor Write Perfect Vue/Nuxt Code</title>
      <dc:creator>Mustafa Vatandaş</dc:creator>
      <pubDate>Tue, 14 Apr 2026 09:09:15 +0000</pubDate>
      <link>https://dev.to/mvtandas/how-to-make-claude-code-cursor-write-perfect-vuenuxt-code-cpg</link>
      <guid>https://dev.to/mvtandas/how-to-make-claude-code-cursor-write-perfect-vuenuxt-code-cpg</guid>
      <description>&lt;p&gt;If you're using Claude Code, Cursor, or GitHub Copilot for Vue/Nuxt development, you've probably seen this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Options API instead of Composition API&lt;/li&gt;
&lt;li&gt;JavaScript instead of TypeScript&lt;/li&gt;
&lt;li&gt;Vuex instead of Pinia&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;any&lt;/code&gt; everywhere&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;this.something&lt;/code&gt; in &lt;code&gt;&amp;lt;script setup&amp;gt;&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The fix is simple: &lt;strong&gt;tell the AI your project's rules.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Setup
&lt;/h2&gt;

&lt;p&gt;I created &lt;a href="https://github.com/mvtandas/vue-claude-stack" rel="noopener noreferrer"&gt;vue-claude-stack&lt;/a&gt; — a drop-in config that makes AI tools generate correct Vue 3 &amp;amp; Nuxt 3 code.&lt;/p&gt;

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

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;File&lt;/th&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;CLAUDE.md&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Claude Code&lt;/td&gt;
&lt;td&gt;Project conventions &amp;amp; rules&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;.cursorrules&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Cursor&lt;/td&gt;
&lt;td&gt;AI behavior rules&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;.github/copilot-instructions.md&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Copilot&lt;/td&gt;
&lt;td&gt;Code generation guidelines&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;skills/&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Claude Code&lt;/td&gt;
&lt;td&gt;5 generation commands&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  What the AI learns
&lt;/h2&gt;

&lt;p&gt;Once you drop these files in your project, the AI knows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Always&lt;/strong&gt; use &lt;code&gt;&amp;lt;script setup lang="ts"&amp;gt;&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Always&lt;/strong&gt; use &lt;code&gt;defineProps&amp;lt;T&amp;gt;()&lt;/code&gt; with TypeScript&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Always&lt;/strong&gt; use Pinia setup stores (&lt;code&gt;defineStore('name', () =&amp;gt; {...})&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Never&lt;/strong&gt; use Options API, mixins, or &lt;code&gt;any&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use&lt;/strong&gt; &lt;code&gt;useFetch&lt;/code&gt;/&lt;code&gt;useAsyncData&lt;/code&gt; for data fetching in Nuxt&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use&lt;/strong&gt; &lt;code&gt;storeToRefs()&lt;/code&gt; when destructuring Pinia stores&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Generation Skills
&lt;/h2&gt;

&lt;p&gt;The repo includes 5 Claude Code skills you can invoke directly:&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
bash
/generate-component UserProfile --props "name, avatar" --emits "edit"
/generate-composable useSearch
/generate-store cart --actions "add, remove, clear"  
/generate-test components/UserProfile.vue
/generate-api users/[id] --methods "get, put, delete"
Each skill generates fully typed, convention-following code.

Quick Start

# Copy everything
npx degit mvtandas/vue-claude-stack ai-config
cp -r ai-config/{CLAUDE.md,.cursorrules,.github,skills} .
Or just grab what you need:


# Just CLAUDE.md
curl -o CLAUDE.md https://raw.githubusercontent.com/mvtandas/vue-claude-stack/main/CLAUDE.md

# Just Cursor rules
curl -o .cursorrules https://raw.githubusercontent.com/mvtandas/vue-claude-stack/main/.cursorrules
Before &amp;amp; After
Before (no config):


&amp;lt;script&amp;gt;
export default {
  data() {
    return { name: '' }
  },
  methods: {
    async fetchUser() {
      const res = await fetch('/api/user')
      this.name = res.data.name
    }
  }
}
&amp;lt;/script&amp;gt;
After (with vue-claude-stack):


&amp;lt;script setup lang="ts"&amp;gt;
interface User {
  name: string
}

const { data: user } = await useFetch&amp;lt;User&amp;gt;('/api/user')
&amp;lt;/script&amp;gt;

&amp;lt;template&amp;gt;
  &amp;lt;p&amp;gt;{{ user?.name }}&amp;lt;/p&amp;gt;
&amp;lt;/template&amp;gt;
Same prompt. Completely different output.

Stack Covered
Vue 3.5+, Nuxt 3, TypeScript strict, Pinia, VueUse, Tailwind CSS, Vitest, Zod, Vue Router.

GitHub: mvtandas/vue-claude-stack

MIT licensed. Star it if you find it useful, and feel free to fork &amp;amp; customize for your team.



&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
      <category>vue</category>
      <category>nuxt</category>
      <category>ai</category>
      <category>typescript</category>
    </item>
    <item>
      <title>I Built an AI-Powered Stock Analysis Platform with Next.js and Claude AI</title>
      <dc:creator>Mustafa Vatandaş</dc:creator>
      <pubDate>Mon, 13 Apr 2026 12:12:06 +0000</pubDate>
      <link>https://dev.to/mvtandas/i-built-an-ai-powered-stock-analysis-platform-with-nextjs-and-claude-ai-1k05</link>
      <guid>https://dev.to/mvtandas/i-built-an-ai-powered-stock-analysis-platform-with-nextjs-and-claude-ai-1k05</guid>
      <description>&lt;h1&gt;
  
  
  I Built an AI-Powered Stock Analysis Platform with Next.js and Claude AI
&lt;/h1&gt;

&lt;p&gt;After months of manually analyzing stocks and switching between multiple tools, I decided to build my own platform. Meet &lt;strong&gt;BistBase&lt;/strong&gt; — an AI-powered stock analysis platform for the Turkish stock market (BIST).&lt;/p&gt;

&lt;h2&gt;
  
  
  🤔 The Problem
&lt;/h2&gt;

&lt;p&gt;As a developer who trades on BIST, I was frustrated with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Switching between 5+ tabs for different analysis tools&lt;/li&gt;
&lt;li&gt;No AI-powered insights in Turkish market context&lt;/li&gt;
&lt;li&gt;Expensive premium tools with features I didn't need&lt;/li&gt;
&lt;li&gt;No backtesting capability for my strategies&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  💡 The Solution
&lt;/h2&gt;

&lt;p&gt;I built BistBase — a full-stack platform that combines:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Real-time market data&lt;/strong&gt; via Yahoo Finance API&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI analysis&lt;/strong&gt; using Anthropic Claude SDK&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Technical indicators&lt;/strong&gt; (RSI, MACD, Bollinger Bands)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backtesting engine&lt;/strong&gt; for strategy validation&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Portfolio tracking&lt;/strong&gt; with email alerts&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  🛠 Tech Stack
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Layer&lt;/th&gt;
&lt;th&gt;Technology&lt;/th&gt;
&lt;th&gt;Why?&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Frontend&lt;/td&gt;
&lt;td&gt;Next.js 16 + React 19&lt;/td&gt;
&lt;td&gt;App Router, Server Components, great DX&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Language&lt;/td&gt;
&lt;td&gt;TypeScript 5&lt;/td&gt;
&lt;td&gt;Type safety across full stack&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Database&lt;/td&gt;
&lt;td&gt;PostgreSQL + Prisma&lt;/td&gt;
&lt;td&gt;Relational data, type-safe ORM&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cache&lt;/td&gt;
&lt;td&gt;Upstash Redis&lt;/td&gt;
&lt;td&gt;Rate limiting + data caching&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AI&lt;/td&gt;
&lt;td&gt;Anthropic Claude SDK&lt;/td&gt;
&lt;td&gt;Best at understanding financial context&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Auth&lt;/td&gt;
&lt;td&gt;NextAuth 5&lt;/td&gt;
&lt;td&gt;Flexible, built for Next.js&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Charts&lt;/td&gt;
&lt;td&gt;Lightweight Charts&lt;/td&gt;
&lt;td&gt;TradingView-quality charts, lightweight&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Monitoring&lt;/td&gt;
&lt;td&gt;Sentry&lt;/td&gt;
&lt;td&gt;Error tracking + performance&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Styling&lt;/td&gt;
&lt;td&gt;Tailwind CSS 4 + shadcn/ui&lt;/td&gt;
&lt;td&gt;Rapid UI development&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  🤖 Why Claude for Financial Analysis?
&lt;/h2&gt;

&lt;p&gt;I tested three AI models:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Claude&lt;/strong&gt; — Best at understanding Turkish market context. Long context window helps analyze larger datasets. ~85% accuracy on backtesting predictions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GPT-4&lt;/strong&gt; — Good general analysis but misses BIST-specific patterns.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gemini&lt;/strong&gt; — Fast but less accurate for technical indicators.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The key insight: &lt;strong&gt;combine AI analysis with traditional technical indicators&lt;/strong&gt; rather than relying solely on LLM output.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Simplified AI analysis flow&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;analysis&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;anthropic&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;messages&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;claude-sonnet-4-20250514&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;messages&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[{&lt;/span&gt;
    &lt;span class="na"&gt;role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;user&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`Analyze &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;stock&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;symbol&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; with these indicators:
      RSI: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;indicators&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;rsi&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;
      MACD: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;indicators&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;macd&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;
      Volume trend: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;indicators&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;volume&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;
      Provide buy/sell/hold recommendation with reasoning.`&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;h2&gt;
  
  
  📊 Architecture
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;┌─────────────────────────────────────────┐
│           Next.js 16 App Router         │
├──────────┬──────────┬──────────────────┤
│ Dashboard│ Analysis │ Backtesting      │
├──────────┴──────────┴──────────────────┤
│              API Routes (25+)           │
├──────────┬──────────┬──────────────────┤
│ Prisma   │ Claude   │ Yahoo Finance    │
│ (PgSQL)  │ SDK      │ API              │
├──────────┼──────────┼──────────────────┤
│ Upstash  │ NextAuth │ Sentry           │
│ Redis    │          │                  │
└──────────┴──────────┴──────────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  🔑 Key Learnings
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Rate limiting is crucial&lt;/strong&gt; — Yahoo Finance API has strict limits. Redis-based rate limiter saved me from getting blocked.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cache aggressively&lt;/strong&gt; — Stock data doesn't change every millisecond. 30-second cache reduced API calls by 80%.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI needs guardrails&lt;/strong&gt; — Raw LLM output is unreliable for financial decisions. Always validate with real indicators.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Server Components = Performance&lt;/strong&gt; — Moving data fetching to RSC reduced client-side JS by 60%.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  📈 Results
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;25+ API endpoints&lt;/li&gt;
&lt;li&gt;Sub-200ms response times (thanks to Redis caching)&lt;/li&gt;
&lt;li&gt;~85% accuracy on AI-assisted backtesting&lt;/li&gt;
&lt;li&gt;Dark mode because traders trade at night 🌙&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🔗 Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/mvtandas/bistbase" rel="noopener noreferrer"&gt;github.com/mvtandas/bistbase&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Author:&lt;/strong&gt; &lt;a href="https://github.com/mvtandas" rel="noopener noreferrer"&gt;Mustafa Vatandaş&lt;/a&gt; — Lead Frontend Developer&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;What AI-powered tools have you built? I'd love to hear about your experience with integrating LLMs into production apps. Drop a comment below!&lt;/em&gt;&lt;/p&gt;

</description>
      <category>nextjs</category>
      <category>ai</category>
      <category>typescript</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
