<?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: Marcus Wright</title>
    <description>The latest articles on DEV Community by Marcus Wright (@marcus_wright__).</description>
    <link>https://dev.to/marcus_wright__</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%2F3317605%2Fe1f3f402-d34b-45ba-a299-d3f667cf3292.png</url>
      <title>DEV Community: Marcus Wright</title>
      <link>https://dev.to/marcus_wright__</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/marcus_wright__"/>
    <language>en</language>
    <item>
      <title>Being a software engineering student with a $5K/month side hustle</title>
      <dc:creator>Marcus Wright</dc:creator>
      <pubDate>Wed, 06 Aug 2025 18:22:43 +0000</pubDate>
      <link>https://dev.to/marcus_wright__/being-a-software-engineering-student-with-a-5kmonth-side-hustle-321c</link>
      <guid>https://dev.to/marcus_wright__/being-a-software-engineering-student-with-a-5kmonth-side-hustle-321c</guid>
      <description>&lt;p&gt;My high school side project (Steampunk Education) is now bringing in around $5K/month this summer. It’s not life changing money, but as a 4th year software engineering student, it means I can pay rent, eat well, and not constantly worry about my bank account dipping into the red.&lt;/p&gt;

&lt;p&gt;This business isn’t some wild success story. It’s just working. When I was starting out, I looked for a no BS step by step guide on how to build a business out of nothing. I couldn’t really find one, I’m writing this for my past self.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1. Copy&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Steal like an artist. Everyone does. There is no shame in looking for great businesses, and copying their model. Everyone does it. Mark Zuckerberg copied Snapchat to build Instagram Stories. Steve Jobs copied Xerox PARC to build the Mac. The list goes on.&lt;/p&gt;

&lt;p&gt;So: find a business you like. Study it. See if the shape of it makes sense for you.&lt;/p&gt;

&lt;p&gt;Let's use a real example.&lt;br&gt;
I'm a huge fan of Sam Parr. He has a copy work course called CopyThat. You get a well-written sales email in your inbox every day. Each sales letter has detailed annotations that explain why each sentence works and what you can learn. It's $169 for the course and Sam has ≈260 customers. That's about $44,000 of passive income.&lt;/p&gt;

&lt;p&gt;Imma copy this idea.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2. Make it your own&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I'm not a copywriter. I'm not writing a sales email course.&lt;/p&gt;

&lt;p&gt;My niche is going to be schools that focus on the classics. Homeschools and some classical private schools use copy work. Students copy out poetry and the great works of literature by hand to help them memorize it. I'm going to build a web app for this niche.&lt;/p&gt;

&lt;p&gt;After poking around a bit, I found it was super hard to Google good copy work sheets. They were all for little kids, great authors like Hunter S. Thompson and Jack London used copy work. There should be more copy work resources for older students.&lt;/p&gt;

&lt;p&gt;My idea is to have a collection of poetry and the classics. It's searchable based on age, content and themes like "courage" or "patience". Teachers can print copy work sheets for students to practice cursive or print handwriting.&lt;/p&gt;

&lt;p&gt;I named this new business idea "Clio". We're cooking boys.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3. Make a mockup&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Once you have an idea, prototype the product. The product is bound to change, so don't spend too much time on the first version. I spent about 2 hours on the first version of Clio.&lt;br&gt;
I used Gadget to spin up Clio so users could see how the search would work. It only had two copy work sheets to search through, but it was demo-able and gave the user a sense of how the app could work once more worksheets were added to the site.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4. Validate&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Here’s the hard part: talk to people. Specifically, the people you think will pay for this.&lt;/p&gt;

&lt;p&gt;I contacted all the private schools in my network that emphasized classical education. I set up a 15 minute meeting with them and asked each one "once the works literature you suggested are on the platform, would you pay $20/month for it?".&lt;/p&gt;

&lt;p&gt;I hate this part. I'm not an outgoing person naturally, and asking for money is the most awkward thing in the world. Unfortunately, this is the best way to test whether you have a viable business.&lt;/p&gt;

&lt;p&gt;If you're lucky, you'll come out of step 4 with 5 or 6 paying customers. If not, return to step 3 and change the mockup based on customer feedback. Do step 4 again to see whether customers will pay for your improved product.&lt;/p&gt;

&lt;p&gt;Repeat this process as many times as you need to until you have your first 5 customers.&lt;/p&gt;

</description>
      <category>softwareengineering</category>
      <category>webdev</category>
      <category>software</category>
      <category>ai</category>
    </item>
    <item>
      <title>Anyone check out Gadget.dev for vibe coding?</title>
      <dc:creator>Marcus Wright</dc:creator>
      <pubDate>Wed, 30 Jul 2025 16:39:09 +0000</pubDate>
      <link>https://dev.to/marcus_wright__/anyone-check-out-gadgetdev-for-vibe-coding-3mbb</link>
      <guid>https://dev.to/marcus_wright__/anyone-check-out-gadgetdev-for-vibe-coding-3mbb</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/marcus_wright__/monitoring-shopify-app-health-without-the-boilerplate-thanks-gadget-1dp" class="crayons-story__hidden-navigation-link"&gt;Monitoring Shopify App Health Without the Boilerplate (Thanks Gadget)&lt;/a&gt;


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

          &lt;a href="/marcus_wright__" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3317605%2Fe1f3f402-d34b-45ba-a299-d3f667cf3292.png" alt="marcus_wright__ profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/marcus_wright__" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Marcus Wright
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Marcus Wright
                
              
              &lt;div id="story-author-preview-content-2742298" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/marcus_wright__" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3317605%2Fe1f3f402-d34b-45ba-a299-d3f667cf3292.png" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Marcus Wright&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/marcus_wright__/monitoring-shopify-app-health-without-the-boilerplate-thanks-gadget-1dp" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Jul 30 '25&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/marcus_wright__/monitoring-shopify-app-health-without-the-boilerplate-thanks-gadget-1dp" id="article-link-2742298"&gt;
          Monitoring Shopify App Health Without the Boilerplate (Thanks Gadget)
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/webdev"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;webdev&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/shopify"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;shopify&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/ai"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;ai&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/monitoring"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;monitoring&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/marcus_wright__/monitoring-shopify-app-health-without-the-boilerplate-thanks-gadget-1dp" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/fire-f60e7a582391810302117f987b22a8ef04a2fe0df7e3258a5f49332df1cec71e.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/exploding-head-daceb38d627e6ae9b730f36a1e390fca556a4289d5a41abb2c35068ad3e2c4b5.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;6&lt;span class="hidden s:inline"&gt; reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/marcus_wright__/monitoring-shopify-app-health-without-the-boilerplate-thanks-gadget-1dp#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              &lt;span class="hidden s:inline"&gt;Add Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            3 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
      <category>webdev</category>
      <category>shopify</category>
      <category>ai</category>
      <category>monitoring</category>
    </item>
    <item>
      <title>Monitoring Shopify App Health Without the Boilerplate (Thanks Gadget)</title>
      <dc:creator>Marcus Wright</dc:creator>
      <pubDate>Wed, 30 Jul 2025 16:37:47 +0000</pubDate>
      <link>https://dev.to/marcus_wright__/monitoring-shopify-app-health-without-the-boilerplate-thanks-gadget-1dp</link>
      <guid>https://dev.to/marcus_wright__/monitoring-shopify-app-health-without-the-boilerplate-thanks-gadget-1dp</guid>
      <description>&lt;p&gt;I’m a backend dev based in Chicago, and like most backend folks, I live for clean data flows and low-friction tools. Recently, I wanted to build something small but useful — a lightweight internal tool to monitor the health of a Shopify app I’ve been working on. Stuff like webhook failures, slow response times, and retry logic.&lt;/p&gt;

&lt;p&gt;The goal wasn’t a full observability suite, just a simple dashboard that could tell me: is the app alive, or is it quietly failing in the background?&lt;/p&gt;

&lt;p&gt;Why Gadget?&lt;br&gt;
I found Gadget while deep in the Shopify docs rabbit hole, trying to figure out how to scaffold an embedded app without setting up the whole stack manually. I’ve spun up enough Node/Express/Postgres apps in my life. I wasn’t trying to waste another weekend wiring up OAuth and migrations.&lt;/p&gt;

&lt;p&gt;Gadget came with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Shopify auth already wired in&lt;/li&gt;
&lt;li&gt;A built-in Postgres DB with a schema UI + code access&lt;/li&gt;
&lt;li&gt;Prebuilt API routes&lt;/li&gt;
&lt;li&gt;File storage + background jobs&lt;/li&gt;
&lt;li&gt;TypeScript all the way down&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So I gave it a shot.&lt;/p&gt;

&lt;p&gt;What I Built&lt;br&gt;
I created a small tool that logs request metrics from my Shopify app: response times, status codes, and webhook delivery outcomes. The goal was to see patterns over time and catch flakiness early.&lt;/p&gt;

&lt;p&gt;Step 1: Create a Model&lt;br&gt;
Inside Gadget’s data modeling UI, I defined a RequestLog model with the following fields:&lt;/p&gt;

&lt;p&gt;model RequestLog {&lt;br&gt;
  id: ID!&lt;br&gt;
  shop: ShopifyShop @relation&lt;br&gt;
  path: String&lt;br&gt;
  statusCode: Int&lt;br&gt;
  responseTimeMs: Int&lt;br&gt;
  timestamp: DateTime &lt;a class="mentioned-user" href="https://dev.to/default"&gt;@default&lt;/a&gt;(now())&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;I love that I could tweak this either via the UI or by editing the .schema file directly. Once saved, Gadget automatically gives you API access and a full CRUD interface for the model.&lt;/p&gt;

&lt;p&gt;Step 2: Capture the Data&lt;br&gt;
Inside my Shopify app, I routed all outgoing requests through a small wrapper that records timing and outcome, then sends the data to my Gadget backend using the built-in API routes:&lt;/p&gt;

&lt;p&gt;async function logRequest(path, statusCode, responseTimeMs) {&lt;br&gt;
  await fetch(&lt;code&gt;${process.env.GADGET_API_URL}/api/requestLogs&lt;/code&gt;, {&lt;br&gt;
    method: "POST",&lt;br&gt;
    headers: {&lt;br&gt;
      "Content-Type": "application/json",&lt;br&gt;
      Authorization: &lt;code&gt;Bearer ${session.token}&lt;/code&gt;, // Gadget handles session&lt;br&gt;
    },&lt;br&gt;
    body: JSON.stringify({&lt;br&gt;
      path,&lt;br&gt;
      statusCode,&lt;br&gt;
      responseTimeMs,&lt;br&gt;
      timestamp: new Date().toISOString(),&lt;br&gt;
    }),&lt;br&gt;
  });&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;Simple. No need to manually build an auth layer or endpoint.&lt;/p&gt;

&lt;p&gt;Step 3: Build a Dashboard&lt;br&gt;
I exposed a GET /api/requestLogs route in Gadget and filtered by store + recent logs. This lets me pull the last N requests and render them in a basic table or chart.&lt;/p&gt;

&lt;p&gt;Here's what a basic GET handler looks like in Gadget:&lt;/p&gt;

&lt;p&gt;export async function get(request, { session, api }) {&lt;br&gt;
  const shopId = session.shopId;&lt;br&gt;
  const logs = await api.requestLog.findMany({&lt;br&gt;
    filter: { shop: { equals: shopId } },&lt;br&gt;
    sort: { timestamp: "Descending" },&lt;br&gt;
    first: 100,&lt;br&gt;
  });&lt;/p&gt;

&lt;p&gt;return {&lt;br&gt;
    statusCode: 200,&lt;br&gt;
    body: logs,&lt;br&gt;
  };&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;It’s all serverless, and Gadget handles execution and scaling behind the scenes.&lt;/p&gt;

&lt;p&gt;Takeaways&lt;br&gt;
I’ve worked with Heroku, Supabase, Firebase, and even self-hosted stacks. Gadget feels different since its more opinionated, but in a way that actually saves time. If you're building a backend-heavy app and don’t want to start from zero every time, it's a solid option.&lt;/p&gt;

&lt;p&gt;Pros:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fastest setup I’ve had for an authenticated, DB-backed app&lt;/li&gt;
&lt;li&gt;Schema modeling + real code&lt;/li&gt;
&lt;li&gt;TypeScript all the way through&lt;/li&gt;
&lt;li&gt;Background job support is built-in (though I didn’t need it for this one)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Cons:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Some limits if you want to customize every layer&lt;/li&gt;
&lt;li&gt;Still maturing as a platform (but very responsive team)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you’re a backend dev building on Shopify, or just tired of spinning up the same boilerplate, give Gadget a look.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://x.com/MarcusWrig49344" rel="noopener noreferrer"&gt;🔗 &lt;/a&gt;DM me on X/Twitter if you’re building anything similar or want to trade horror stories about bad API docs.&lt;/p&gt;

&lt;p&gt;Happy building.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>shopify</category>
      <category>ai</category>
      <category>monitoring</category>
    </item>
    <item>
      <title>🚀 Building a Shopify App Backend in a Weekend with Gadget</title>
      <dc:creator>Marcus Wright</dc:creator>
      <pubDate>Sun, 20 Jul 2025 17:44:21 +0000</pubDate>
      <link>https://dev.to/marcus_wright__/building-a-shopify-app-backend-in-a-weekend-with-gadget-ab8</link>
      <guid>https://dev.to/marcus_wright__/building-a-shopify-app-backend-in-a-weekend-with-gadget-ab8</guid>
      <description>&lt;p&gt;I’m a backend dev in Chicago who lives for clean data flows and skipping boilerplate. I recently built a small Shopify app prototype using Gadget, and I honestly haven’t moved this fast on a side project in months.&lt;/p&gt;

&lt;p&gt;This post walks through how I got from zero to a working backend in a single weekend, without fighting auth, database setup, or a million YAML configs.&lt;/p&gt;

&lt;p&gt;🛠️ The Idea&lt;br&gt;
I’ve been tinkering with Shopify APIs lately. I wanted to build a small app that monitors certain store metrics and alerts merchants when thresholds are hit, kind of like a lightweight store health monitor.&lt;/p&gt;

&lt;p&gt;This meant I needed:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Auth with Shopify&lt;/li&gt;
&lt;li&gt;A place to store store-specific data&lt;/li&gt;
&lt;li&gt;Background jobs for polling or checking thresholds&lt;/li&gt;
&lt;li&gt;A REST API for a lightweight frontend&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;🧱 Setting Up in Gadget&lt;br&gt;
I signed up for Gadget and chose the “Shopify App” template. In under 2 minutes, I had a project scaffolded with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Shopify OAuth&lt;/li&gt;
&lt;li&gt;A PostgreSQL DB&lt;/li&gt;
&lt;li&gt;File storage&lt;/li&gt;
&lt;li&gt;Prewired API routes&lt;/li&gt;
&lt;li&gt;Background job support&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Modeling Store Data&lt;br&gt;
I needed a StoreMetrics model that tracks key values over time. Gadget’s data modeling UI is clean and lets you drop into code when needed.&lt;/p&gt;

&lt;p&gt;Fields I added:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;store (relationship to built-in Shopify Shop model)&lt;/li&gt;
&lt;li&gt;metricName (string)&lt;/li&gt;
&lt;li&gt;value (number)&lt;/li&gt;
&lt;li&gt;timestamp (datetime)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Exposing the API&lt;br&gt;
I exposed a GET endpoint at /api/metrics that returns recent metrics for the current store. Gadget auto-authenticates requests and gives you access to the session context (including which store is making the call). No need to build that from scratch.&lt;/p&gt;

&lt;p&gt;💡 Takeaways&lt;br&gt;
As a backend dev, I’m used to spinning up my own stack: Express, Postgres, Redis, SQS, etc. That’s fine for client work, but for side projects? I just want to build the thing.&lt;/p&gt;

&lt;p&gt;Gadget let me:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Skip 80% of the setup&lt;/li&gt;
&lt;li&gt;Stay in TypeScript the whole way&lt;/li&gt;
&lt;li&gt;Focus on logic instead of scaffolding&lt;/li&gt;
&lt;li&gt;Actually ship something useful&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you’re a backend dev who likes building fast (without giving up control), Gadget is 100% worth checking out.&lt;/p&gt;

&lt;p&gt;🔗 Try it yourself: &lt;a href="https://gadget.dev" rel="noopener noreferrer"&gt;https://gadget.dev&lt;/a&gt;&lt;br&gt;
💬 Hit me up on Twitter/X (@marcus_wright3) if you’re building something similar or just want to rant about bad API docs.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>beginners</category>
      <category>ai</category>
    </item>
    <item>
      <title>Quick Internal App: Tracking Pushups at Work</title>
      <dc:creator>Marcus Wright</dc:creator>
      <pubDate>Fri, 11 Jul 2025 15:49:15 +0000</pubDate>
      <link>https://dev.to/marcus_wright__/quick-internal-app-tracking-pushups-at-work-5eci</link>
      <guid>https://dev.to/marcus_wright__/quick-internal-app-tracking-pushups-at-work-5eci</guid>
      <description>&lt;p&gt;Ok so I just vibecoded my very first app with Gadget and I gotta say I did not expect to actually finish. It's just a silly personal app but I'm still happy with the turnout.&lt;/p&gt;

&lt;p&gt;Someone threw out the idea of doing a pushup challenge at my company. Everyone was super into it, basically just do pushups whenever and track how many you did.The idea was simple: do sets throughout the day, log your reps, and try to beat your coworkers. At first we just used a piece of paper taped to the wall, which got crumpled up and unreadable fast.&lt;/p&gt;

&lt;p&gt;I figured I could put together a quick app to replace it. Ended up building the whole thing in a couple hours using Gadget. It’s nothing fancy, but it works and people actually use it, which is more than I expected. I put up a demo version without auth if you want to try it: &lt;a href="https://pushup-app.gadget.app" rel="noopener noreferrer"&gt;https://pushup-app.gadget.app&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;Gadget handled most of the heavy lifting. Google login was basically two clicks, the database setup was visual, and deployment was automatic. The databases and hosting was also completely taken care off. Found it much easier than netlify or vercel imo.&lt;/p&gt;

&lt;p&gt;All of this ran on their free Hobby plan. I used 23 AI credits (basically their version of code assist). Didn’t hit any limits.&lt;/p&gt;

&lt;p&gt;Not shipping this anywhere, it’s just a simple internal tool. But I’m glad I actually finished something.&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%2Feurafve77ncoqptazung.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%2Feurafve77ncoqptazung.png" alt=" " width="800" height="461"&gt;&lt;/a&gt;&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%2Fqhivx18eqs6ouijmw6i4.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%2Fqhivx18eqs6ouijmw6i4.png" alt=" " width="800" height="465"&gt;&lt;/a&gt;&lt;/p&gt;

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