<?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: jdtjenkins</title>
    <description>The latest articles on DEV Community by jdtjenkins (@jdtjenkins).</description>
    <link>https://dev.to/jdtjenkins</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%2F187978%2Fc230c114-2af1-4226-98fd-01f8aa91ce56.jpeg</url>
      <title>DEV Community: jdtjenkins</title>
      <link>https://dev.to/jdtjenkins</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jdtjenkins"/>
    <language>en</language>
    <item>
      <title>Why I moved from Sveltekit to Astro 👋</title>
      <dc:creator>jdtjenkins</dc:creator>
      <pubDate>Thu, 15 Jun 2023 14:44:01 +0000</pubDate>
      <link>https://dev.to/jdtjenkins/why-i-moved-from-sveltekit-to-astro-4b3c</link>
      <guid>https://dev.to/jdtjenkins/why-i-moved-from-sveltekit-to-astro-4b3c</guid>
      <description>&lt;p&gt;Hey all,&lt;/p&gt;

&lt;h2&gt;
  
  
  Trying to make a marketing site in the same project as your app
&lt;/h2&gt;

&lt;p&gt;I've been creating &lt;a href="https://getshiftly.com" rel="noopener noreferrer"&gt;Shiftly&lt;/a&gt; using Sveltekit and I've been absolutely loving it. And for my apps going forward I think I'll be using it all the time.&lt;/p&gt;

&lt;p&gt;However, where it fell down for me was with creating a super fast, SEO-friendly marketing site.&lt;/p&gt;

&lt;p&gt;Yes Sveltekit can do prerendered routes, and can handle no-javascript clients. But it felt like I was forcing it into trying to be a SSG rather than an application framework. I felt it was never quite as performant as I wanted, and there was a weird bug where occasionally it wouldn't load a page going from a prerendered route, to a SSR rendered page. The route would change, but the view wouldn't update! I can't be having that from my homepage!&lt;/p&gt;

&lt;p&gt;So I went in search for a way to split out the marketing site and blog out of Sveltekit and move it away into it's own project.&lt;/p&gt;

&lt;h2&gt;
  
  
  Introducing &lt;a href="https://astro.build/" rel="noopener noreferrer"&gt;Astro&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;I'd heard of Astro in passing but decided to take a closer look. I've used 11ty in the past, and whilst great, was a bit of a learning curve!&lt;/p&gt;

&lt;p&gt;I was instantly impressed with how frictionless Astro was to work with. If you've used any modern framework, NextJS, Qwik, Solid or Sveltekit, you'll feel right at home in Astro.&lt;/p&gt;

&lt;p&gt;It's writing HTML exactly as you would in a framework, even with components, slots and props but then it renders it all to static HTML and CSS, and no Javascript! More on that in a bit.&lt;/p&gt;

&lt;p&gt;I loved how instantly I could get working with Astro, creating layout components and pages exactly how I had them in Sveltekit. There was even a one line installer for Tailwind, which these days I can't live without!&lt;/p&gt;

&lt;h2&gt;
  
  
  A good excuse to redesign the home page
&lt;/h2&gt;

&lt;p&gt;I got so excited with Astro that I had finally taken the time to improve the Shiftly homepage to something a bit more informative and proper!&lt;/p&gt;

&lt;p&gt;Astro let me rewrite the homepage and all the blog pages within a morning. And by lunch I had my whole new marketing site deployed on Vercel.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/jdtjenkins/how-to-deploy-a-monorepo-to-different-subdomains-on-vercel-2chn"&gt;After I had figured out how to deploy to subdomains on Vercel! 👀 &lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Astro is by far the quickest I've ever picked up a new framework, and it's ability for speed is incredible.&lt;/p&gt;

&lt;p&gt;I was also to really see and feel the performance gains from static html and minimal css. And add all the lovely Lighthouse fixes for the homepage which allowed me to get &lt;em&gt;almost&lt;/em&gt; all 100s!&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%2Ffhzqr9m1gt0fgwdr9zqd.png" 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%2Ffhzqr9m1gt0fgwdr9zqd.png" alt="NEARLY ALL 100s BABY"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Next steps
&lt;/h2&gt;

&lt;p&gt;Now I have a rapid Astro site which I can expand on and add whatever features I want to. I will keep improving that definitely.&lt;/p&gt;

&lt;h3&gt;
  
  
  Blog Markdown and prefetched routes and getStaticPaths()
&lt;/h3&gt;

&lt;p&gt;Astro can read local &lt;code&gt;.md&lt;/code&gt; files and render those as static pages, which is awesome. So I'll be looking at converting my blog to use markdown.&lt;/p&gt;

&lt;p&gt;But wait, there's more! Astro &lt;em&gt;also&lt;/em&gt; has a function &lt;code&gt;getStaticPaths()&lt;/code&gt; which lets you return data to a dynamic route which builds out all the pages you return at build time.&lt;/p&gt;

&lt;p&gt;Say you make an api call to get all your blog posts, and return all 5 blogs posts in your &lt;code&gt;getStaticPaths()&lt;/code&gt; method. Astro will generate 5 pages each with whatever slug you specify!&lt;/p&gt;

&lt;p&gt;Very, very cool stuff. Cannot recommend Astro enough! Another tool in the belt to help me develop faster!&lt;/p&gt;

&lt;p&gt;Thank you for reading all!&lt;/p&gt;

&lt;p&gt;Thank you,&lt;/p&gt;

&lt;p&gt;Good luck!&lt;/p&gt;

&lt;p&gt;Jacob&lt;br&gt;
&lt;a href="https://getshiftly.com" rel="noopener noreferrer"&gt;Shiftly&lt;/a&gt;&lt;/p&gt;

</description>
      <category>astro</category>
      <category>svelte</category>
      <category>marketing</category>
      <category>startup</category>
    </item>
    <item>
      <title>How to deploy a monorepo to different subdomains on Vercel 📔🚀</title>
      <dc:creator>jdtjenkins</dc:creator>
      <pubDate>Wed, 14 Jun 2023 12:49:43 +0000</pubDate>
      <link>https://dev.to/jdtjenkins/how-to-deploy-a-monorepo-to-different-subdomains-on-vercel-2chn</link>
      <guid>https://dev.to/jdtjenkins/how-to-deploy-a-monorepo-to-different-subdomains-on-vercel-2chn</guid>
      <description>&lt;p&gt;I recently built &lt;a href="https://getshiftly.com" rel="noopener noreferrer"&gt;Shiftly&lt;/a&gt; completely inside Sveltekit. I loved using Sveltekit for the app, but it seemed tricky when it came to SSG and making the marketing site as pretty, fast and performant as I needed it to be for SEO and user engagement.&lt;/p&gt;

&lt;p&gt;So I decided to wrap it in a monorepo, using Turborepo. But then I wanted to be able to host my apps on different subdomains within Vercel! I got there, but a little guide would've been nice.&lt;/p&gt;

&lt;h3&gt;
  
  
  If you're just tuning in and don't know what a monorepo, Vercel, Sveltekit or Turborepo or Astro is here's a quick rundown. Feel free to skip if you just want to get to the money!
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://en.wikipedia.org/wiki/Monorepo" rel="noopener noreferrer"&gt;Monorepo &lt;/a&gt;- Stuffing all your projects and apps, reusable components and business logic inside one repo so everything is easier to see.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://turbo.build/repo" rel="noopener noreferrer"&gt;Turborepo&lt;/a&gt; - A monorepo framework.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://vercel.com/" rel="noopener noreferrer"&gt;Vercel&lt;/a&gt; - A pretty badass web host. Specializing in zero-config (or low-config) deployments. Also ride-or-die with&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://kit.svelte.dev/" rel="noopener noreferrer"&gt;Sveltekit &lt;/a&gt;- A SSR framework for the Svelte JS framework.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://astro.build/" rel="noopener noreferrer"&gt;Astro &lt;/a&gt;- A modern af framework for building static sites using reusable components with a hint of magic.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Choose your monorepo
&lt;/h2&gt;

&lt;p&gt;Chances are if you're reading this, you have one ready to roll. But I thought I'd throw a shoutout to &lt;a href="https://turbo.build/repo" rel="noopener noreferrer"&gt;Turborepo&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;I had used Nx before, but only with Angular apps. Trying to get it working for a Sveltekit app was complicated and flaky. Nevermind trying to get Astro running inside Nx.&lt;/p&gt;

&lt;p&gt;So I wanted something leaner and easier to learn and maintain. So I tried Turborepo, which I instantly fell in love with.&lt;/p&gt;

&lt;p&gt;Turborepo is a monorepo framework built on top of npm, pnpm or yarn workspaces, so it's backed by your package manager. It doesn't rely on confusing and brittle tsconfig paths to reference your packages inside your apps. You install your packages as you would any other dependency!&lt;/p&gt;

&lt;p&gt;And finally, it lets you use any framework you want, with it's own install command! With Nx you have to use a generator, which means one has to exist (and work!) for the framework you want to use. I guess you &lt;em&gt;could&lt;/em&gt; make your own... 👀&lt;/p&gt;

&lt;p&gt;So in no time I had Shiftly running inside Turborepo. So quick in fact that my local dev folder is still called "turbo-test" because I didn't think it would be so easy to get working with it.&lt;/p&gt;

&lt;h2&gt;
  
  
  So I have my apps in my monorepo ready to deploy, now what?
&lt;/h2&gt;

&lt;p&gt;So this next bit will be exclusive to Vercel. You can do this with any host... Probably. And you can do it with AWS Route53, if you want to have a headache for days as you figure that out. So I'll just be covering Vercel.&lt;/p&gt;

&lt;p&gt;Vercel allows you to connect multiple projects to the same Github repo (oh yeah also this probably works with other git hosts... But I'm using Github, so who knows 🤷‍♀️), up to three projects in the free tier. Paid plans allow you to connect more, you can check &lt;a href="https://vercel.com/docs/concepts/limits/overview#general-limits:~:text=Vercel%20Projects%20Connected%20per%20Git%20Repository" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Create a Vercel project for each app you want to deploy from your Monorepo
&lt;/h2&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%2Fhkkivn8ymh4gc7olyq5e.png" 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%2Fhkkivn8ymh4gc7olyq5e.png" alt="Importing your repo into a new project"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Create a new project, and import your repo.&lt;/p&gt;

&lt;p&gt;On the next page, you should have the Vercel, Turborepo seal of approval in the top-right corner which says that Vercel knows this is a Turborepo monorepo.&lt;/p&gt;

&lt;p&gt;Then choose the framework of your app, Shiftly is using Sveltekit, so I'll choose that.&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%2F5szpj76xkqch2ekkejk3.png" 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%2F5szpj76xkqch2ekkejk3.png" alt="VERCEL TURBOREPO SEAL OF APPROVAL"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Next you'll want to hit "Edit" on the root directory, and change it to be your app. Like so:&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%2Fj6y5izgagwtc2v6qm0bm.png" 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%2Fj6y5izgagwtc2v6qm0bm.png" alt="Edit that repo yo"&gt;&lt;/a&gt;&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%2Fgyq7awse3bh2twhx8k9b.png" 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%2Fgyq7awse3bh2twhx8k9b.png" alt="Choose your app from the dropdowns"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After that, double check all your deploy commands are correct and make any changes you need to get your app running. I'm using Sveltekit which is best buds with Vercel, so I don't need to change anything.&lt;/p&gt;

&lt;p&gt;Then finally, on your Domains page in Settings. You can add your subdomain to point at whichever branch you want live. This branch still maps to your same repo, so double check which branch you want to deploy from.&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%2Fyw43qn6gcvsp2ubl5wwk.png" 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%2Fyw43qn6gcvsp2ubl5wwk.png" alt="Vercel Domains Page"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For example, I added &lt;code&gt;app.getshiftly.com&lt;/code&gt;, and pointed it at my &lt;code&gt;master&lt;/code&gt; branch.&lt;/p&gt;

&lt;p&gt;And now, you can go to &lt;a href="https://app.getshiftly.com/auth/login" rel="noopener noreferrer"&gt;https://app.getshiftly.com&lt;/a&gt; and it all works!&lt;/p&gt;

&lt;p&gt;Congrats, you've routed a subdomain 👏 nicely done.&lt;/p&gt;

&lt;p&gt;That's all from me, thank you so much for reading!&lt;/p&gt;

&lt;p&gt;Thank you,&lt;/p&gt;

&lt;p&gt;Jacob @ Shiftly&lt;br&gt;
&lt;a href="https://www.getshiftly.com" rel="noopener noreferrer"&gt;getshiftly.com&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  BONUS EASTER EGG
&lt;/h3&gt;

&lt;p&gt;For anyone who sees it before I remove it - if you didn't believe how fast I actually got this up and running (it took about 4 hours). But I even did it in such a hurry I left the default index page that comes with Sveltekit 😂 on the root of my app &lt;a href="https://app.getshiftly.com" rel="noopener noreferrer"&gt;https://app.getshiftly.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;what am I like&lt;/p&gt;

</description>
      <category>vercel</category>
      <category>turborepo</category>
      <category>astro</category>
      <category>startup</category>
    </item>
    <item>
      <title>How I built an MVP and got my first user in a month 🚀</title>
      <dc:creator>jdtjenkins</dc:creator>
      <pubDate>Wed, 07 Jun 2023 17:08:17 +0000</pubDate>
      <link>https://dev.to/jdtjenkins/how-i-built-an-mvp-and-got-my-first-user-in-a-month-51gl</link>
      <guid>https://dev.to/jdtjenkins/how-i-built-an-mvp-and-got-my-first-user-in-a-month-51gl</guid>
      <description>&lt;p&gt;Four weeks ago to this day I decided I want to try and start a business on my own and started creating a simply SaaS MVP - Shiftly. It started as an excuse to learn Sveltekit and Vercel, but after I realised how insanely quickly I can work with these tools, I decided to actually give it a real go and start a business.&lt;/p&gt;

&lt;h2&gt;
  
  
  About Me
&lt;/h2&gt;

&lt;p&gt;Hey 👋, I'm Jacob, a Web Developer from the UK, and I've done it all. I've worked at start-ups, big corporates, local family businesses and everything in-between.&lt;/p&gt;

&lt;p&gt;I've been a senior Angular developer for the last 5 years or so and felt I was lagging behind how Web Development is moving these days with SSR frameworks and futuristic zero config tools like Vercel and Supabase. I feel a bit late to the party, but from a long-term dev set in his ways - this new world is amazing.&lt;/p&gt;

&lt;h2&gt;
  
  
  How I used to work 🐌
&lt;/h2&gt;

&lt;p&gt;So I've been an Angular developer for 5 years, however during that time I have done my fair share of Full-stack development with NodeJS. I'm familiar with AWS, servers and databases. But my passion is front-end.&lt;/p&gt;

&lt;p&gt;So every time I've thought about starting an app for reals, I always get to hosting, or the backend or creating an API or authentication and just give up. I &lt;em&gt;hate&lt;/em&gt; doing all of that. I can... But it's always felt like such a blocker.&lt;/p&gt;

&lt;p&gt;My last project ended after weeks of me trying to perfect a Serverless infrastructure with an API and autoscaling EC2s before I'd even thought of a name for my last idea! Clearly, I was getting nowhere fast like this.&lt;/p&gt;

&lt;h2&gt;
  
  
  Introducing Sveltekit 💪
&lt;/h2&gt;

&lt;p&gt;On a whim, I decided that I wanted to see what the hype was with Svelte and set about creating a few small projects thinking "Yeah ok it's nice, but maybe only for small projects..."&lt;/p&gt;

&lt;p&gt;I saw the appeal immediately of how easy computed properties were.&lt;/p&gt;

&lt;p&gt;Just a simple&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$: computedVariable = anotherComputedVariable * 2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And I loved how easy Sveltekit made routing and forms. Suddenly I questioned if I'd ever touch Angular again!&lt;/p&gt;

&lt;h2&gt;
  
  
  Introducing Supabase 🚀
&lt;/h2&gt;

&lt;p&gt;As I was looking at Vercel hosting, which I noticed had a zero-config adapter for Sveltekit applications, I found Supabase and a lightbulb went off in my head.&lt;/p&gt;

&lt;p&gt;Suddenly everything clicked into place. Now I could create complex backend systems, using databases which I'm happy to use, but without any of the ridiculous complexity that comes with creating an initial back-end infrastructure!&lt;/p&gt;

&lt;p&gt;I started looking at Supabase, which also has complete documentation for Sveltekit, and was able to get a prototype working in an afternoon with full Authentication-support and a few CRUD entities.&lt;/p&gt;

&lt;p&gt;This, was, amazing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Creating the Shiftly MVP
&lt;/h2&gt;

&lt;p&gt;So after I had authentication in place, I set about creating a mechanism for users being able to invite other users to their Organisation. Which thanks to this superpowered stack only took a few hours to implement.&lt;/p&gt;

&lt;p&gt;I then decided to implement Stripe into my app if I was ever going to try and get people to use this app.&lt;/p&gt;

&lt;p&gt;Stripe with a traditional hosted API server approach that I used to use would have been a nerve wracking series of protected API routes and environment variable mishaps - as it always is!&lt;/p&gt;

&lt;p&gt;With Sveltekit I was able to use environment variables on both my local machine and in Vercel with, again, zero config. Sveltekit even stops you from using &lt;code&gt;PRIVATE_&lt;/code&gt; environment variables in your front-end code!&lt;/p&gt;

&lt;p&gt;This was the first time I'd used Stripe properly trying to actually create a payment system with it for recurring subscription payments. So it took a few days of tinkering with Stripe to make sure I was properly updating my user's db when a user had signed up. And how do I detect if a user has a card stored in Stripe? But in the end I'm happy with my current integration. It's somewhat rudimentary, but hopefully enough to get this app started!&lt;/p&gt;

&lt;p&gt;So then after I'd implemented Stripe I was looking at adding Tailwind into Shiftly. I have used Tailwind for years now, but I thought I'd do this project without it. But every time I try to get out, Tailwind pulls me back in!&lt;/p&gt;

&lt;p&gt;Then I discovered yet another tool that would increase my power again:&lt;/p&gt;

&lt;h2&gt;
  
  
  Introducing SkeletonUI
&lt;/h2&gt;

&lt;p&gt;By this point in development, after a few weeks of creating Shiftly. I thought the game had been changed so many times I wasn't even playing the same sport anymore compared to how I used to develop apps. I thought it wouldn't change again and I was happy with the stack I had.&lt;/p&gt;

&lt;p&gt;I watched a video by Huntabyte about SkeletonUI for Svelte. And well. Since I was already using Tailwind I decided to give it a shot.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Oh I'll only use it for the table component&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I said. After a few minutes I had the perfect table.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Oh I'll only use it for some form styling&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I said. And again, in less than an hour had refactored all my forms to use the Skeleton &lt;code&gt;variant-form-material&lt;/code&gt; styling.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Oh ok I'll only use it for a top nav inside my application, but that's it&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I mean... Talk about denial much. I instantly fell in love with Skeleton and spent the next two days refactoring my entire app to use Tailwind and Skeleton wherever I could.&lt;/p&gt;

&lt;p&gt;Things now that would've not just taken a while, like a response modal component. Were instant.&lt;/p&gt;

&lt;p&gt;Or even a menu drawer on mobile devices. Not impossible to create, but time consuming. Now is instant. Boom. Import the Svelte component and right awesome, you now have a complete Drawer for navigation on mobile.&lt;/p&gt;

&lt;p&gt;So now I'm feeling pretty invincible, convinced I can implement any feature in only a day or two. Until I decided to implement an AI Shift builder feature. And oh boy was I... Completely correct.&lt;/p&gt;

&lt;p&gt;In 3 hours I had a full feature for creating shifts in Shiftly from a text prompt. A feature that would have taken weeks with my old Angular and Nest setups.&lt;/p&gt;

&lt;h2&gt;
  
  
  Adding ChatGPT
&lt;/h2&gt;

&lt;p&gt;One night, after the son and wife were in bed. I'd been thinking a lot about implemented some ChatGPT into Shiftly and thought "pfft, it can't be that hard!" And it wasn't.&lt;/p&gt;

&lt;p&gt;With Sveltekit I can easily add a modal with a form, send the user's message to the backend where I can message the prompt and the response from ChatGPT. Now I can simply say:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Shiftly, can you create a shift for Bob, tomorrow at 12pm-8pm?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And it will go ahead and create a shift without you having to fill out a form.&lt;/p&gt;

&lt;h2&gt;
  
  
  Releasing Shiftly
&lt;/h2&gt;

&lt;p&gt;So if I wasn't feeling absolutely invincible about how fast Shiftly is to develop, I certainly was now. I am confident I have stumbled into my personal, favourite stack of all time. In my whole life, I now feel as productive as I've always wanted to be thanks to these new technologies.&lt;/p&gt;

&lt;p&gt;I decided to take the plunge and buy a domain and get in touch with some people and small business I knew. My dog walker, groomer, barber, things like that. And pleased to say, through some divine intervention they agreed to sign up and try out my app.&lt;/p&gt;

&lt;h2&gt;
  
  
  To sum up
&lt;/h2&gt;

&lt;p&gt;I'm now super excited about where Shiftly can go. I'm not trying to create the biggest app in the world. I don't care if not everyone uses it. But if it can get any steps closer to leaving my day job, I'm happy!&lt;/p&gt;

&lt;p&gt;This has been a whirlwind journey just from being a bit sick of using Angular and Nest and deciding to explore other tech stacks.&lt;/p&gt;

&lt;p&gt;If you're wanting to really quickly develop an MVP or rebuild an existing one. I would highly recommend Sveltekit, Skeleton, Supabase and Vercel.&lt;/p&gt;

&lt;p&gt;If you read this far, thank you, and good luck!&lt;/p&gt;

&lt;p&gt;Jacob @ Shiftly&lt;br&gt;
&lt;a href="https://www.getshiftly.com"&gt;https://www.getshiftly.com&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>sveltekit</category>
      <category>saas</category>
      <category>startup</category>
    </item>
  </channel>
</rss>
