<?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: Calvin Torra</title>
    <description>The latest articles on DEV Community by Calvin Torra (@calvin087).</description>
    <link>https://dev.to/calvin087</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%2F386133%2Fb3fbf86b-19d4-4ee3-a861-5e04ec88a03a.jpg</url>
      <title>DEV Community: Calvin Torra</title>
      <link>https://dev.to/calvin087</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/calvin087"/>
    <language>en</language>
    <item>
      <title>Why Most Startups Waste 6 Months Before Writing a Single Line of Code</title>
      <dc:creator>Calvin Torra</dc:creator>
      <pubDate>Mon, 05 May 2025 11:48:24 +0000</pubDate>
      <link>https://dev.to/calvin087/why-most-startups-waste-6-months-before-writing-a-single-line-of-code-2hf</link>
      <guid>https://dev.to/calvin087/why-most-startups-waste-6-months-before-writing-a-single-line-of-code-2hf</guid>
      <description>&lt;p&gt;At the pre-seed stage, startups often waste months in the planning phase, locked in cycles of research, theoretical validation, and endless brainstorming. This delays product development, leaving founders with nothing to show but a refined idea.&lt;/p&gt;

&lt;p&gt;This “thinking time” does more harm than good.&lt;/p&gt;

&lt;h3&gt;
  
  
  Planning is Overrated
&lt;/h3&gt;

&lt;p&gt;Many startups get bogged down in refining their ideas, waiting for the perfect MVP before they even begin building. It's easy to mistake planning for progress. The reality is that the more time you spend planning, the longer it will take to actually build.&lt;/p&gt;

&lt;p&gt;Waiting for perfection before launching leads to an endless cycle of revisions, and you end up spending months without having a single line of code to show for it. The focus should be on speed and iteration, not perfection.&lt;/p&gt;

&lt;p&gt;Instead of perfecting every detail before launch, get a simple version of the product out there. A basic version that solves the core problem will teach you more than weeks of planning. The sooner you start building, the sooner you can test your assumptions and refine the product based on real user feedback.&lt;/p&gt;

&lt;h3&gt;
  
  
  Don't Overthink Customer Validation
&lt;/h3&gt;

&lt;p&gt;Founders make the mistake of thinking they can validate their ideas with surveys, market research, and customer interviews.&lt;/p&gt;

&lt;p&gt;While these methods can provide valuable insights, they don't offer the real-world data you need to validate your product.&lt;/p&gt;

&lt;p&gt;People might say they want something in a survey or interview, but their actual behavior when using the product will give you far more accurate feedback.&lt;/p&gt;

&lt;p&gt;The only real validation comes when users interact with your product. Build something simple and get it into their hands quickly.&lt;/p&gt;

&lt;p&gt;By shipping early, you start gathering the kind of feedback that drives real progress.&lt;/p&gt;

&lt;h3&gt;
  
  
  Avoid Over-Engineering Early
&lt;/h3&gt;

&lt;p&gt;It's tempting to add features, make everything scalable, and optimize the product from the get-go, but this over-engineering will only slow you down.&lt;/p&gt;

&lt;p&gt;At the pre-seed stage, the focus should be on solving the core problem, not on making everything perfect. Building unnecessary features or trying to scale too early can delay progress and waste valuable resources.&lt;/p&gt;

&lt;p&gt;Instead, focus on building the simplest product that solves the core problem. Keep things lean, functional, and focused on what really matters. Once you've validated the core product with real users, you can begin to iterate and add features as needed. Keep the complexity to a minimum early on—this way, you can move faster, learn faster, and build a stronger foundation for the product.&lt;/p&gt;

&lt;h3&gt;
  
  
  How to Apply This in Practice
&lt;/h3&gt;

&lt;p&gt;Stop over-planning: Get something functional out the door as quickly as possible. Perfection isn't necessary at this stage—just something users can interact with.&lt;/p&gt;

&lt;p&gt;Test assumptions with real users: Build the product and let people use it. Gather feedback from actual usage, not just hypothetical responses.&lt;/p&gt;

&lt;p&gt;Focus on core functionality: Build the simplest version that addresses the primary problem. Don't worry about extra features until the core product is validated.&lt;/p&gt;

&lt;p&gt;Move fast, but stay lean: Avoid adding unnecessary complexity early. Focus on learning and iterating, not scaling or perfecting the product.&lt;/p&gt;

&lt;p&gt;The biggest mistake most pre-seed startups make is wasting time on planning, research, and perfecting their ideas before building. The key to success at this stage is moving quickly, building a simple MVP, and getting it into the hands of real users. It's only by testing, iterating, and learning from actual product usage that you can refine your offering and get closer to product-market fit.&lt;/p&gt;

&lt;p&gt;Start building now. Don't wait for perfection—build, learn, and iterate. The faster you get started, the faster you can start making progress.&lt;/p&gt;




&lt;p&gt;Want to talk through your idea and see what's actually buildable in the next 30 days? &lt;a href="https://calvintorra.com/contact" rel="noopener noreferrer"&gt;Grab a 30-min slot&lt;/a&gt;. No fluff. Just clarity.&lt;/p&gt;

</description>
      <category>mvp</category>
      <category>saas</category>
      <category>aws</category>
    </item>
    <item>
      <title>The MVP Blueprint - How Non-Technical Founders Can Ship Faster</title>
      <dc:creator>Calvin Torra</dc:creator>
      <pubDate>Mon, 05 May 2025 11:43:40 +0000</pubDate>
      <link>https://dev.to/calvin087/the-mvp-blueprint-how-non-technical-founders-can-ship-faster-553i</link>
      <guid>https://dev.to/calvin087/the-mvp-blueprint-how-non-technical-founders-can-ship-faster-553i</guid>
      <description>&lt;p&gt;Most pre-seed startups don't die from bad ideas - they bleed out while trying to build the "perfect" version of them. If you're a non-technical founder, it's easy to fall into the trap of chasing pixel-perfect UIs, overengineered backends, or vague roadmaps written by mercenary freelancers. But if your goal is to raise, not scale, you need to ship something fast, tight, and investor-legible.&lt;/p&gt;

&lt;h3&gt;
  
  
  Speed ≠ Sloppiness
&lt;/h3&gt;

&lt;p&gt;Shipping fast doesn't mean building trash. It means cutting ruthlessly. A proper MVP is not "the first version of your final product" - it's the smallest product that proves your key hypothesis to investors and early users. That's it. Nothing more.&lt;/p&gt;

&lt;p&gt;What you need is momentum, signal, and something demoable that doesn't fall apart when a VC asks, “So what happens after 50 users?”&lt;/p&gt;

&lt;h3&gt;
  
  
  What Non-Technical Founders Get Wrong
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;They don't define success up front.&lt;/strong&gt;&lt;br&gt;
If your MVP doesn't have a clear success condition - X signups, Y usage, Z revenue - you're building in a fog.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;They trust the wrong devs.&lt;/strong&gt;&lt;br&gt;
Not all developers can build MVPs. You don't need a perfectionist who wants to reinvent auth from scratch. You need someone who can prioritize speed and clarity, and still leave you with something maintainable.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;They scope to impress peers, not investors.&lt;/strong&gt;&lt;br&gt;
No one cares if you have a social feed or dark mode. Can your product solve a real problem and show traction? That's what closes your next round.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  My Blueprint (That I've Used to Ship MVPs in 2–6 Weeks)
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Rapid Product Definition.&lt;/strong&gt;&lt;br&gt;
One call. We define your core user, key outcome, and must-have features. No fluff. No endless roadmapping.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Tech Stack Built for Speed + Clarity.&lt;/strong&gt;&lt;br&gt;
I use battle-tested, boring tools that get you to market fast: 99% of the time AWS, Clean codebases. Easy handoff later.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Traction-First Mentality.&lt;/strong&gt;&lt;br&gt;
Every feature has a reason. If it doesn't move a metric or tell a story, it's out. We focus on proving something an investor can believe in.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Demo-Ready in Weeks.&lt;/strong&gt;&lt;br&gt;
You'll have a working, hosted MVP you can walk through in a pitch - plus the confidence that it won't collapse under first contact.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Why This Matters
&lt;/h3&gt;

&lt;p&gt;You don't get a second chance to show that you can execute. You're not being judged on the elegance of your code - you're being judged on whether you can turn vision into momentum.&lt;/p&gt;

&lt;p&gt;I've helped founders go from idea to MVP to seed round with no tech background, no team, and no time. If you've got the vision, I'll build the bridge between here and your next raise.&lt;/p&gt;




&lt;p&gt;Want to talk through your idea and see what's actually buildable in the next 30 days? &lt;a href="https://calvintorra.com/contact" rel="noopener noreferrer"&gt;Grab a 30-min slot&lt;/a&gt;. No fluff. Just clarity.&lt;/p&gt;

</description>
      <category>mvp</category>
      <category>saas</category>
      <category>aws</category>
    </item>
    <item>
      <title>What's the relationship between Free Memory, Active Memory &amp; Freeable Memory In AWS RDS?</title>
      <dc:creator>Calvin Torra</dc:creator>
      <pubDate>Tue, 04 Mar 2025 13:25:14 +0000</pubDate>
      <link>https://dev.to/calvin087/whats-the-relationship-between-free-memory-active-memory-freeable-memory-in-aws-rds-36b6</link>
      <guid>https://dev.to/calvin087/whats-the-relationship-between-free-memory-active-memory-freeable-memory-in-aws-rds-36b6</guid>
      <description>&lt;p&gt;&lt;a href="https://calvintorra.com/hire-me/rds-cost-guide" rel="noopener noreferrer"&gt;6 actionable fixes that lower costs and make your database faster today.&lt;br&gt;
&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When people start digging into AWS RDS monitoring, there's usually questions around these three metrics. What do they mean and how should we be using them?&lt;/p&gt;

&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Free Memory&lt;/strong&gt;: Unused RAM at the OS level.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Active Memory&lt;/strong&gt;: Memory actively in use by processes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Freeable Memory&lt;/strong&gt;: Memory that can be reclaimed (includes cache and buffers).&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Breaking It Down
&lt;/h2&gt;

&lt;p&gt;Free Memory: This is just unused RAM. If it’s high, your instance might be over provisioned. If it’s low, it doesn't necessarily mean a problem - it could just mean the memory is being used efficiently.&lt;/p&gt;

&lt;p&gt;Active Memory: This is what’s actually being used by running processes. It gives you a sense of how much memory your DB engine and other processes are consuming in real-time.&lt;/p&gt;

&lt;p&gt;Freeable Memory: This one is one to watch more closely. It includes both free memory and memory used for caching that can be reclaimed. Low freeable memory means your instance is tight on RAM, and you might start seeing performance issues.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Does This Matter
&lt;/h2&gt;

&lt;p&gt;If Free Memory is low but Freeable Memory is high, you’re fine - the system is just using RAM efficiently for caching.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If both are low, you might be headed for trouble.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Queries could slow down, and you might need a bigger instance.&lt;/p&gt;

&lt;p&gt;If Active Memory is way below the instance’s total RAM, you could be overpaying for capacity you don’t need.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to Do About It
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Enable Enhanced Monitoring for better visibility.&lt;/li&gt;
&lt;li&gt;Watch trends, not just single snapshots.&lt;/li&gt;
&lt;li&gt;Upgrade your instance if Freeable Memory stays low over time.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Bottom line&lt;/strong&gt;: Free Memory isn’t the whole picture - pay closer attention to Freeable Memory instead.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://calvintorra.com/hire-me/rds-cost-guide" rel="noopener noreferrer"&gt;6 actionable fixes that lower costs and make your database faster today.&lt;br&gt;
&lt;/a&gt;&lt;/p&gt;

</description>
      <category>aws</category>
      <category>rds</category>
      <category>postgres</category>
    </item>
    <item>
      <title>RDS Endpoint Name Format</title>
      <dc:creator>Calvin Torra</dc:creator>
      <pubDate>Tue, 04 Mar 2025 13:23:41 +0000</pubDate>
      <link>https://dev.to/calvin087/rds-endpoint-name-format-454c</link>
      <guid>https://dev.to/calvin087/rds-endpoint-name-format-454c</guid>
      <description>&lt;p&gt;&lt;a href="https://calvintorra.com/hire-me/rds-cost-guide" rel="noopener noreferrer"&gt;6 actionable fixes that lower costs and make your database faster today.&lt;br&gt;
&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;In AWS RDS, the endpoint format is my-db-name.&lt;code&gt;AWSIDENTIFIER&lt;/code&gt;.region.rds.amazonaws.com&lt;/p&gt;

&lt;p&gt;&lt;code&gt;AWSIDENTIFIER&lt;/code&gt; is unique. It's an identifier generated by AWS specific to your AWS account and region.&lt;/p&gt;

&lt;p&gt;It stays consistent across all RDS instances within the same account and region.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Endpoint Structure: An RDS endpoint typically follows the pattern my-db-name.&lt;code&gt;AWSIDENTIFIER&lt;/code&gt;.region.rds.amazonaws.com. Here, my-db-name is the database instance identifier, &lt;code&gt;AWSIDENTIFIER&lt;/code&gt; is a unique alphanumeric string and region is... region.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Unique Identifier (&lt;code&gt;AWSIDENTIFIER&lt;/code&gt;): This segment is an identifier generated by AWS. It's unique to each AWS account within a specific region and remains the same for all RDS instances under that account in that region. They don't share the algorithm publicly.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Trade-offs &amp;amp; Gotchas
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Predictability&lt;/strong&gt;: You can't predict or choose the &lt;code&gt;AWSIDENTIFIER&lt;/code&gt; value before creating an RDS instance. But, once an instance is created in a region, this identifier becomes known and remains the same for all future instances in that account and region.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Consistency&lt;/strong&gt;: If you delete an RDS instance and later create a new one with the same name in the same account and region, the endpoint will have the same &lt;code&gt;AWSIDENTIFIER&lt;/code&gt; identifier. This helps with maintaining stable connection strings.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Recommendations
&lt;/h2&gt;

&lt;p&gt;Even if you can't predict the &lt;code&gt;AWSIDENTIFIER&lt;/code&gt; identifier beforehand, you can programmatically get endpoint details after creating an instance using AWS SDKs or CLI tools.&lt;/p&gt;

&lt;p&gt;To simplify data recovery or architecture changes, it could be worth renaming your RDS instance the same as the original instance, this means you don't need to update your application with a new endpoint 🤷🏽‍♂️&lt;/p&gt;

&lt;p&gt;&lt;a href="https://calvintorra.com/hire-me/rds-cost-guide" rel="noopener noreferrer"&gt;6 actionable fixes that lower costs and make your database faster today.&lt;br&gt;
&lt;/a&gt;&lt;/p&gt;

</description>
      <category>aws</category>
      <category>rds</category>
      <category>postgres</category>
    </item>
    <item>
      <title>Create an API to get data from your DynamoDB Database using CDK</title>
      <dc:creator>Calvin Torra</dc:creator>
      <pubDate>Fri, 18 Oct 2024 15:20:59 +0000</pubDate>
      <link>https://dev.to/calvin087/create-an-api-to-get-data-from-your-dynamodb-database-using-cdk-1lb1</link>
      <guid>https://dev.to/calvin087/create-an-api-to-get-data-from-your-dynamodb-database-using-cdk-1lb1</guid>
      <description>&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/k-1gQwpj_QE"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>aws</category>
      <category>lambda</category>
      <category>dynamodb</category>
    </item>
    <item>
      <title>Viewing console.log's of a lambda function</title>
      <dc:creator>Calvin Torra</dc:creator>
      <pubDate>Thu, 17 Oct 2024 11:15:58 +0000</pubDate>
      <link>https://dev.to/calvin087/viewing-consolelogs-of-a-lambda-function-4bfc</link>
      <guid>https://dev.to/calvin087/viewing-consolelogs-of-a-lambda-function-4bfc</guid>
      <description>&lt;p&gt;A lot of developers are used to running their code and seeing console.log locally, but when deploying or debugging a lambda function to AWS, it's not immediately obvious where these debug logs are printed.&lt;/p&gt;

&lt;p&gt;Head over to the AWS console and locate the Lambda in question.&lt;/p&gt;

&lt;p&gt;Open up the Monitor tab under the function overview panel, then View CloudWatch logs.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2Fizi5k56z65bzf66v1i1a.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fizi5k56z65bzf66v1i1a.jpg" alt="Image description" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This opens up a new service page with a list of requests, sometimes grouped, to this lambda function.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2Ftbcxoj0nmz9btng4oyrz.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Ftbcxoj0nmz9btng4oyrz.jpg" alt="Image description" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Choosing the most recent log makes sense here. You'll get a list of data with arrows that you can click to drop down.&lt;/p&gt;

&lt;p&gt;This is where you can find the console.log() statements.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2Fskucaoztgev2rp5i42z4.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fskucaoztgev2rp5i42z4.jpg" alt="Image description" width="800" height="377"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can also use a useful logger with Lumigo.io but that is another service all together.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>lambda</category>
    </item>
    <item>
      <title>How to build an API with Lambdas, API Gateway and deploy with AWS CDK</title>
      <dc:creator>Calvin Torra</dc:creator>
      <pubDate>Fri, 11 Oct 2024 19:24:12 +0000</pubDate>
      <link>https://dev.to/calvin087/how-to-build-an-api-with-lambdas-api-gateway-and-deploy-with-aws-cdk-2jp8</link>
      <guid>https://dev.to/calvin087/how-to-build-an-api-with-lambdas-api-gateway-and-deploy-with-aws-cdk-2jp8</guid>
      <description>&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/yEmb68suPPM"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>aws</category>
      <category>cdk</category>
      <category>lambda</category>
      <category>restapi</category>
    </item>
    <item>
      <title>Creating a new AWS CDK Project and deploying a Lambda Function</title>
      <dc:creator>Calvin Torra</dc:creator>
      <pubDate>Mon, 07 Oct 2024 17:04:32 +0000</pubDate>
      <link>https://dev.to/calvin087/creating-a-new-aws-cdk-project-and-deploying-a-lambda-function-3cc7</link>
      <guid>https://dev.to/calvin087/creating-a-new-aws-cdk-project-and-deploying-a-lambda-function-3cc7</guid>
      <description>&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/cxQc7Cgh0s4"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>cdk</category>
      <category>aws</category>
      <category>lambda</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Build A Responsive Currency Converter app with React.js - Tutorial From Scratch</title>
      <dc:creator>Calvin Torra</dc:creator>
      <pubDate>Wed, 01 Feb 2023 16:17:03 +0000</pubDate>
      <link>https://dev.to/calvin087/build-a-responsive-currency-converter-app-with-reactjs-tutorial-from-scratch-1njb</link>
      <guid>https://dev.to/calvin087/build-a-responsive-currency-converter-app-with-reactjs-tutorial-from-scratch-1njb</guid>
      <description>&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/iCXnHkww79Y"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>crypto</category>
      <category>web3</category>
      <category>blockchain</category>
    </item>
    <item>
      <title>Build a Modern Real Estate React.js App | Next.js Website Tutorial</title>
      <dc:creator>Calvin Torra</dc:creator>
      <pubDate>Tue, 24 Jan 2023 18:36:11 +0000</pubDate>
      <link>https://dev.to/calvin087/build-a-modern-real-estate-reactjs-app-nextjs-website-tutorial-34mm</link>
      <guid>https://dev.to/calvin087/build-a-modern-real-estate-reactjs-app-nextjs-website-tutorial-34mm</guid>
      <description>&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/ep2dikyJ6Es"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>ui</category>
      <category>design</category>
      <category>productivity</category>
    </item>
    <item>
      <title>How to handle multiple queries with React-Query</title>
      <dc:creator>Calvin Torra</dc:creator>
      <pubDate>Sat, 07 Jan 2023 07:56:19 +0000</pubDate>
      <link>https://dev.to/calvin087/how-to-handle-multiple-queries-with-react-query-24gn</link>
      <guid>https://dev.to/calvin087/how-to-handle-multiple-queries-with-react-query-24gn</guid>
      <description>&lt;p&gt;There are two ways to handle multiple queries with React Query.&lt;/p&gt;

&lt;h3&gt;
  
  
  Method 1: Call useQuery Twice
&lt;/h3&gt;

&lt;p&gt;The simplest method is just to call useQuery twice but re-assign the data variable that we're destructuring. They can't both be called data.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;userData&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useQuery&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;users&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;fetchUsers&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;postData&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useQuery&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;posts&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;fetchPosts&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Method 2: useQueries
&lt;/h3&gt;

&lt;p&gt;There is also &lt;code&gt;useQueries&lt;/code&gt; which is perfect for this situation. It returns an array of queries. We can get access to each one using array destructuring.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;posts&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;users&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useQueries&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;queryKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;posts&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="na"&gt;queryFn&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;fetchPosts&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;queryKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;users&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="na"&gt;queryFn&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;fetchUsers&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;]);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The queries that are returned from &lt;code&gt;useQueries&lt;/code&gt; also contains the usual suspects like &lt;code&gt;isLoading&lt;/code&gt; &lt;code&gt;isError&lt;/code&gt; etc.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;posts&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;users&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useQueries&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;queryKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;posts&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="na"&gt;queryFn&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;fetchPosts&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;queryKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;users&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="na"&gt;queryFn&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;fetchUsers&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;]);&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;isLoading&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;posts&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;There are also situations where you may want to wait for everything to finish before rendering any data. In that case, we can check if any / some of the queries are still in their loading state (&lt;code&gt;isLoading&lt;/code&gt; comes from the &lt;code&gt;useQuery&lt;/code&gt; hook).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;results&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useQueries&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;queryKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;posts&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="na"&gt;queryFn&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;fetchPosts&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;queryKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;users&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="na"&gt;queryFn&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;fetchUsers&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;]);&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;isLoading&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;results&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;some&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;query&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;query&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;isLoading&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;isLoading&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;results&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Within our component, we only need to pull in 1 &lt;code&gt;isLoading&lt;/code&gt; value and handle that case until ALL of the results are ready.&lt;/p&gt;

</description>
      <category>programming</category>
      <category>softwaredevelopment</category>
      <category>discuss</category>
    </item>
    <item>
      <title>How do I get the data from useQuery in onSuccess callback?</title>
      <dc:creator>Calvin Torra</dc:creator>
      <pubDate>Thu, 05 Jan 2023 07:20:39 +0000</pubDate>
      <link>https://dev.to/calvin087/how-do-i-get-the-data-from-usequery-in-onsuccess-callback-1o7k</link>
      <guid>https://dev.to/calvin087/how-do-i-get-the-data-from-usequery-in-onsuccess-callback-1o7k</guid>
      <description>&lt;h1&gt;
  
  
  Join my newsletter &lt;a href="https://calvintorra.com/api/l/newsletter" rel="noopener noreferrer"&gt;Here&lt;/a&gt;:
&lt;/h1&gt;

&lt;h3&gt;
  
  
  Once a week, I share my best finds on:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;AWS&lt;/li&gt;
&lt;li&gt;JavaScript&lt;/li&gt;
&lt;li&gt;Web Scraping&lt;/li&gt;
&lt;li&gt;Indie Hacking&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;There was a bit of confusion on how to get data back from useQuery hook. The developer asking this question thought that the onSuccess key was how you finally got your data from useQuery.&lt;/p&gt;

&lt;p&gt;The onSuccess and onError are callback functions that are called after a fetch has succeeded or failed.&lt;/p&gt;

&lt;p&gt;They're optional and useful. They're called and passed the data that has been retrieved from the useQuery call so that you can trigger side effects, such as modal popups or something similar with your new data.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useQuery&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;posts&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;fetchPosts&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;onSuccess&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;table&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="na"&gt;onError&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="cm"&gt;/*
  Updating the name from data to dataRetrieved, makes it more clear.
  We're usually expecting the { data }
*/&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useQuery&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;posts&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;fetchPosts&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;onSuccess&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;dataRetrieved&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;table&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;dataRetrieved&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="na"&gt;onError&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The data that you are expecting is { data }, this is the variable that you are probably looking to return after a successful fetch in most cases, not dataRetrieved.&lt;/p&gt;

&lt;h2&gt;
  
  
  After Post Requests
&lt;/h2&gt;

&lt;p&gt;Similarly, after a post request, we want to invalidate the key, The invalidation of the key tells React Query to re-fetch and update the data.&lt;/p&gt;

&lt;p&gt;So after a post request to our API (updating the database), we'd normally want that new data to be shown. If the key is not invalidated, we'll see old data rather than new data.&lt;/p&gt;

&lt;p&gt;To do this we need to pass onSuccess the queryClient as well as set invalidateQueries with the key we want to update.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Post data to our API&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;poster&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;axios&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`https://yourapi.com/posts`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="c1"&gt;// Tell React Query to invalidate the posts key&lt;/span&gt;
&lt;span class="c1"&gt;// and fetch the new data again to see our changes.&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;useAddPosts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;queryClient&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useQueryClient&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;useMutation&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;poster&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;onSuccess&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;queryClient&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;invalidateQueries&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;posts&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Join my newsletter &lt;a href="https://calvintorra.com/api/l/newsletter" rel="noopener noreferrer"&gt;Here&lt;/a&gt;:
&lt;/h1&gt;

&lt;h3&gt;
  
  
  Once a week, I share my best finds on:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;AWS&lt;/li&gt;
&lt;li&gt;JavaScript&lt;/li&gt;
&lt;li&gt;Web Scraping&lt;/li&gt;
&lt;li&gt;Indie Hacking&lt;/li&gt;
&lt;/ul&gt;




</description>
      <category>javascript</category>
      <category>nextjs</category>
      <category>react</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
