<?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: Raph Moraes</title>
    <description>The latest articles on DEV Community by Raph Moraes (@raphmoraes).</description>
    <link>https://dev.to/raphmoraes</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%2F710092%2Fda2679b3-dc64-4115-b5af-5e2cf6a5ff75.jpeg</url>
      <title>DEV Community: Raph Moraes</title>
      <link>https://dev.to/raphmoraes</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/raphmoraes"/>
    <language>en</language>
    <item>
      <title>What I learned from using Lovable for 8 months to build beautiful, standardized, and easy-to-maintain websites</title>
      <dc:creator>Raph Moraes</dc:creator>
      <pubDate>Mon, 30 Mar 2026 01:31:05 +0000</pubDate>
      <link>https://dev.to/raphmoraes/o-que-aprendi-usando-lovable-por-8-meses-para-criar-sites-bonitos-padronizados-e-faceis-de-manter-4m1</link>
      <guid>https://dev.to/raphmoraes/o-que-aprendi-usando-lovable-por-8-meses-para-criar-sites-bonitos-padronizados-e-faceis-de-manter-4m1</guid>
      <description>&lt;p&gt;This weekend I decided to upgrade my website, and in just a few hours I was able to completely refresh my visual identity using Lovable.&lt;/p&gt;

&lt;p&gt;Clean, structured, with an AI-generated hero video — and without writing CSS by hand.&lt;/p&gt;

&lt;p&gt;But before getting there, I had to solve a problem most people ignore in vibe coding:&lt;/p&gt;

&lt;p&gt;Without structure, you build fast. And refactor twice as much later.&lt;/p&gt;

&lt;p&gt;Here’s what I’ve learned using Lovable since August 2025 — and the template I created so I never have to start from scratch again.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The trap of vibe coding without a framework&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Lovable is amazing. You describe what you want, it generates it. In minutes, you have something visual working.&lt;/p&gt;

&lt;p&gt;The problem shows up around prompt 5 — when you haven’t defined colors, fonts, folder structure, or coding standards.&lt;/p&gt;

&lt;p&gt;Lovable starts making decisions for you — and not always the same ones across prompts.&lt;/p&gt;

&lt;p&gt;Result: hardcoded colors everywhere, duplicated components, and a structure no one can maintain.&lt;/p&gt;

&lt;p&gt;The solution is not to use less AI. It’s to provide more context.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Define before you generate&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;3 mandatory questions:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Product — What and for whom? Problem, audience, North Star.&lt;/li&gt;
&lt;li&gt;Design System — What will it look like? HSL tokens, typography, components. Everything before building any screen.&lt;/li&gt;
&lt;li&gt;System Design — How will it work under the hood? Stack, architecture, database, deployment.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;These are different things. Confusing them is one of the most common mistakes.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Design System ≠ System Design&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Design System is the visual vocabulary: color tokens, typography, reusable components. How it looks.&lt;/p&gt;

&lt;p&gt;System Design is the technical architecture: how the database connects to the frontend, how modules communicate. How it works.&lt;/p&gt;

&lt;p&gt;On my site:&lt;/p&gt;

&lt;p&gt;→ Design System: HSL tokens, Plus Jakarta Sans + Inter fonts, Button and Badge variants via CVA, glassmorphism, gradient text&lt;br&gt;
→ System Design: React 18 + Vite + Supabase, feature-based architecture, Event Bus, Ports &amp;amp; Adapters&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why I did NOT use microservices&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Lovable + Supabase is a modular monolith — and that’s the right decision.&lt;/p&gt;

&lt;p&gt;Microservices solve operational scale problems for multiple teams with independent deployments. For an early-stage SaaS or personal site, they add complexity with zero return: service discovery, network latency, orchestration overhead.&lt;/p&gt;

&lt;p&gt;What matters here is having well-isolated modules within the same process.&lt;/p&gt;

&lt;p&gt;That’s exactly what feature-based architecture + Event Bus provides — separation of concerns without operational complexity.&lt;/p&gt;

&lt;p&gt;Rule I follow:&lt;br&gt;
Features never import each other directly. Communication happens through a typed Event Bus. External integrations go through Ports &amp;amp; Adapters.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SOLID in React — in practice&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;→ S: a component does one thing. SectionHeader only renders a header.&lt;br&gt;
→ O: extension via CVA variants. Need a new button style? Add a variant. Don’t touch button.tsx.&lt;br&gt;
→ L: Ports &amp;amp; Adapters enable substitution. Swap Supabase Storage for Cloudinary by changing an adapter.&lt;br&gt;
→ I: granular hooks — useAuth, useOrganization, useFeatureGate. No “god hook” like useApp().&lt;br&gt;
→ D: features depend on interfaces, not directly on Supabase.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The hero video? Also AI-generated&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The hero background is a video created with PixVerse (app.pixverse.ai), using text-to-video with a futuristic/tech style.&lt;/p&gt;

&lt;p&gt;Exported as .mp4 and used with video autoPlay muted loop, plus an overlay to ensure readability.&lt;/p&gt;

&lt;p&gt;Cinematic visuals — no stock footage, no designer, no Adobe Premiere.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The result&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;→ Site: &lt;a href="https://raphaelmoraes.dev/" rel="noopener noreferrer"&gt;https://raphaelmoraes.dev/&lt;/a&gt;&lt;br&gt;
→ Stack: React 18 + Vite + Tailwind + shadcn/ui + Supabase + Cloudflare + PixVerse&lt;br&gt;
→ Time: just a few hours of structured vibe coding&lt;/p&gt;

&lt;p&gt;I documented everything in a Playbook with 8 ready-to-use prompts for Lovable — including a full Design System, real tokens from the repo, pt-BR + en translations, SOLID checklists, and cross-cutting rules.&lt;/p&gt;

&lt;p&gt;🔗 Site: &lt;a href="https://raphaelmoraes.dev" rel="noopener noreferrer"&gt;https://raphaelmoraes.dev&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;📄 Full Playbook (Gist): &lt;a href="https://gist.github.com/rdemoraes/e08d7318de3e3aa0e4c67d69fa1d0fa3" rel="noopener noreferrer"&gt;https://gist.github.com/rdemoraes/e08d7318de3e3aa0e4c67d69fa1d0fa3&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🎬 Hero video generated with: &lt;a href="https://app.pixverse.ai" rel="noopener noreferrer"&gt;https://app.pixverse.ai&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>🚀 Boost Your Cloud Dev Workflow with MCP Tools in Cursor + AWS Documentation Integration 🔍📘</title>
      <dc:creator>Raph Moraes</dc:creator>
      <pubDate>Wed, 09 Jul 2025 18:09:13 +0000</pubDate>
      <link>https://dev.to/raphmoraes/boost-your-cloud-dev-workflow-with-mcp-tools-in-cursor-aws-documentation-integration-248</link>
      <guid>https://dev.to/raphmoraes/boost-your-cloud-dev-workflow-with-mcp-tools-in-cursor-aws-documentation-integration-248</guid>
      <description>&lt;p&gt;Just started using the AWS Documentation MCP Server inside Cursor IDE? It’s absolutely game-changing! 😍&lt;/p&gt;

&lt;p&gt;Imagine querying AWS best practices, code samples, or deployment recommendations directly from your IDE using natural language—and getting back curated, structured answers straight from the docs.&lt;/p&gt;

&lt;p&gt;Here’s a quick example:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Please, tell me about AWS best practices recommendations to install ISTIO in Ambient Mode + Envoy per Node on EKS 1.32. Let me know if I should also dedicate node pools for ISTIO control plane services and the same for workloads, considering I'm going to use Envoy proxy per Node instead of sidecar.  &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Cursor called search_documentation from the AWS Documentation MCP server, and returned a comprehensive breakdown including:&lt;br&gt;
 • Istio Ambient Mode support on EKS (with CNI and health probe tuning)&lt;br&gt;
 • DaemonSet deployment for ztunnel (Envoy per node), no need for a dedicated node pool&lt;br&gt;
 • Control Plane Isolation: Yes, dedicate a node pool for istiod, ztunnel, and CNI&lt;br&gt;
 • Workload Isolation: Yes, use separate node pools for your applications&lt;br&gt;
 • Waypoint proxies (L7): Optional dedicated pool depending on traffic&lt;br&gt;
 • PodSecurity, IRSA, and network policy best practices&lt;br&gt;
 • Optionally isolate observability tools (Prometheus, Grafana) into a separate node pool&lt;/p&gt;

&lt;p&gt;All of this came from a single query, instant context-aware guidance that’s production-ready.&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%2Fbewymvi9zqa79ucozwik.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%2Fbewymvi9zqa79ucozwik.png" alt=" " width="800" height="805"&gt;&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;Setup is simple:&lt;/p&gt;

&lt;p&gt;Make sure you have uv installed:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pip3 install uv
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then configure your MCP in ~/.cursor/mcp.json like so:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "mcpServers": {
    "AWS Documentation": {
      "command": "uvx awslabs.aws-documentation-mcp-server@latest",
      "env": {
        "FASTMCP_LOG_LEVEL": "ERROR",
        "AWS_DOCUMENTATION_PARTITION": "aws"
      }
    }
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Note: Cursor’s built-in UI makes it super easy to connect and manage MCP servers. Just toggle the integration and you’re good to go.&lt;/p&gt;

&lt;p&gt;Why this matters:&lt;/p&gt;

&lt;p&gt;As a DevOps/Platform Engineer, this accelerates cloud research, makes best practices discoverable, and integrates perfectly with your daily workflow.&lt;/p&gt;

&lt;p&gt;If you’re working with EKS, Terraform, or GitOps, this combo is a must-try.&lt;/p&gt;

&lt;p&gt;Try it out to see how it goes!&lt;/p&gt;

</description>
      <category>aws</category>
      <category>mcp</category>
      <category>ai</category>
      <category>cursoride</category>
    </item>
  </channel>
</rss>
