<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Informal Engineer · Guides</title><description>Tested procedures with bills of materials, named versions, and changelogs.</description><link>https://informalengineer.com/</link><item><title>My Cursor AI workflow</title><link>https://informalengineer.com/guides/cursor-ai-workflow/</link><guid isPermaLink="true">https://informalengineer.com/guides/cursor-ai-workflow/</guid><description>How I actually use Cursor for day-to-day coding: the setup, the prompting habits that pay off, and the failure modes to expect. Retitled and migrated from the old site, tooling refresh queued.</description><pubDate>Sun, 01 Sep 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;If you&apos;re like me, you&apos;ve probably found yourself diving deep into the world of Cursor AI. The idea of turning a simple concept into functional code within minutes is nothing short of revolutionary. But before you get ahead of yourself, it&apos;s crucial to understand the best practices that can help you harness the full potential of Cursor AI.&lt;/p&gt;
&lt;p&gt;In this post, I&apos;ll share seven essential tips that have transformed the way I use Cursor AI. These insights come from both personal experience and expert advice from seasoned developers. Whether you&apos;re a seasoned coder or just starting out, these strategies will save you hours of time and countless headaches.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Table of Contents&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Plan Before You Code&lt;/li&gt;
&lt;li&gt;Leverage Cursor Directory for Better Prompts&lt;/li&gt;
&lt;li&gt;Tag Relevant Documentation&lt;/li&gt;
&lt;li&gt;Consult Other AI Models When Stuck&lt;/li&gt;
&lt;li&gt;Use AI to Explain and Learn Code&lt;/li&gt;
&lt;li&gt;Duplicate and Modify Existing Functionality&lt;/li&gt;
&lt;li&gt;Utilize Existing Code Templates&lt;/li&gt;
&lt;li&gt;Conclusion&lt;/li&gt;
&lt;/ol&gt;
&lt;hr /&gt;
&lt;h2&gt;Plan Before You Code&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Measure twice, cut once.&lt;/strong&gt; This age-old adage holds true even in the realm of AI-assisted coding. Before jumping into Cursor AI, take the time to plan your project thoroughly.&lt;/p&gt;
&lt;p&gt;I can&apos;t stress this enough: &lt;strong&gt;planning is crucial&lt;/strong&gt;. Before jumping into Cursor AI, take some time to sketch out what you want to build. Whether it&apos;s on paper, Paint, or Figma, having a visual reference makes a huge difference.&lt;/p&gt;
&lt;p&gt;For example, when I was working on a web application recently, I drew a simple wireframe on my iPad. This helped me visualize the layout and functionality before I even started coding. Trust me, spending some time planning can save you hours later on.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Sketch Your Ideas&lt;/strong&gt;: Use tools like &lt;a href=&quot;https://www.figma.com/&quot;&gt;Figma&lt;/a&gt; or even a simple pen and paper to outline your project.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Visualize with V0 (By Vercel)&lt;/strong&gt;: Platforms like &lt;a href=&quot;https://v0.dev/&quot;&gt;V0&lt;/a&gt; can help you create wireframes quickly. For example, if you&apos;re building a marketplace for bicycle sellers, V0 can generate a clean-looking interface based on your prompts.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Why This Matters&lt;/strong&gt;: Providing Cursor AI with a clear plan and visual references gives it more context, resulting in more accurate and efficient code generation.&lt;/p&gt;
&lt;h2&gt;Leverage Cursor Directory for Better Prompts&lt;/h2&gt;
&lt;p&gt;Did you know there&apos;s a resource called &lt;a href=&quot;https://www.cursor.directory/&quot;&gt;Cursor Directory&lt;/a&gt; that can significantly improve your prompts?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Copy Expert Prompts&lt;/strong&gt;: Find prompts tailored to the technologies you&apos;re using, such as Next.js, React, or Python.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Set Up Cursor Rules&lt;/strong&gt;: By creating a &lt;code&gt;cursor-rules&lt;/code&gt; file in the root of your project and pasting the appropriate prompt, you guide Cursor AI to align with your project&apos;s specific needs.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Example Prompt&lt;/strong&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;You are an expert in TypeScript, Node.js, Next.js, React, and Tailwind CSS. Follow best practices and write clean, maintainable code.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Benefits&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Improved Accuracy&lt;/strong&gt;: Cursor AI will generate code that&apos;s consistent with the latest best practices.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Time-Saving&lt;/strong&gt;: Reduces the need for multiple iterations and corrections.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Tag Relevant Documentation&lt;/h2&gt;
&lt;p&gt;Context is king when it comes to AI models.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Add Docs to Cursor&lt;/strong&gt;: Use the &lt;code&gt;Add Docs&lt;/code&gt; feature in Cursor to import relevant documentation, such as the &lt;a href=&quot;https://nextjs.org/docs&quot;&gt;Next.js documentation&lt;/a&gt; or &lt;a href=&quot;https://supabase.io/docs&quot;&gt;Supabase docs&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Stay Updated&lt;/strong&gt;: This ensures Cursor AI references the most current information, helping you avoid outdated methods or deprecated functions.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;How-To&lt;/strong&gt;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Go to the Composer view in Cursor.&lt;/li&gt;
&lt;li&gt;Click on &lt;code&gt;Add&lt;/code&gt; &amp;gt; &lt;code&gt;Docs&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Paste the URL of the documentation you want to add.&lt;/li&gt;
&lt;li&gt;Name it appropriately for easy reference.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Outcome&lt;/strong&gt;: With tagged documentation, Cursor AI can provide more accurate solutions and even help troubleshoot issues using the latest guidelines.&lt;/p&gt;
&lt;h2&gt;Consult Other AI Models When Stuck&lt;/h2&gt;
&lt;p&gt;Even AI has its limitations. If you find yourself stuck, don&apos;t hesitate to consult other AI models like &lt;a href=&quot;https://www.anthropic.com/claude&quot;&gt;Claude&lt;/a&gt; or even &lt;a href=&quot;https://chat.openai.com/&quot;&gt;ChatGPT&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Steps&lt;/strong&gt;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Copy the Problem&lt;/strong&gt;: Include the code that&apos;s causing issues and the solutions you&apos;ve already tried.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Provide Context&lt;/strong&gt;: Explain what you&apos;re trying to achieve and why the previous attempts didn&apos;t work.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ask for Help&lt;/strong&gt;: Paste this into another AI model and see what solutions it offers.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Why This Works&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Different AI models may have varying datasets and can provide alternative solutions.&lt;/li&gt;
&lt;li&gt;Including previous attempts helps the AI avoid suggesting the same ineffective solutions.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Use AI to Explain and Learn Code&lt;/h2&gt;
&lt;p&gt;AI isn&apos;t just for generating code; it&apos;s also a fantastic learning tool.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Explain Code Snippets&lt;/strong&gt;: Ask Cursor AI to explain complex pieces of code as if you were a beginner.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dive Deeper&lt;/strong&gt;: If something doesn&apos;t make sense, ask follow-up questions.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Example&lt;/strong&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Explain this code to me like I&apos;m a beginner. I want to understand the flow, logic, and overall how things work.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Benefits&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Accelerated Learning&lt;/strong&gt;: Understand new technologies or frameworks quickly.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Better Documentation&lt;/strong&gt;: Use AI-generated explanations to create documentation for your projects.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Duplicate and Modify Existing Functionality&lt;/h2&gt;
&lt;p&gt;Reusability is a cornerstone of efficient coding.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Copy Existing Code&lt;/strong&gt;: If you have functionality that works well, copy it as a starting point for new features.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Specify Changes&lt;/strong&gt;: Tell Cursor AI exactly what modifications you need.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Tips&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Provide Context&lt;/strong&gt;: Mention where the code is from and what it currently does.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Detail the Changes&lt;/strong&gt;: Be specific about what you want to alter to avoid unnecessary iterations.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Utilize Existing Code Templates&lt;/h2&gt;
&lt;p&gt;Starting from scratch isn&apos;t always the best approach.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Use Starter Kits&lt;/strong&gt;: Templates often include essential features like authentication, database integration, and basic UI components.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Customize&lt;/strong&gt;: Build on top of these templates to suit your specific needs.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Resources&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;GitHub&lt;/strong&gt;: Search for reputable starter templates related to your tech stack.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Community Contributions&lt;/strong&gt;: Many developers share their own templates, which can be a goldmine for getting started quickly.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Advantages&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Saves Time&lt;/strong&gt;: Skip the boilerplate and focus on unique features.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reduces Errors&lt;/strong&gt;: Templates are often vetted by the community, minimizing bugs.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Harnessing the power of Cursor AI isn&apos;t just about jumping in and coding; it&apos;s about setting yourself up for success through careful planning and leveraging all the tools at your disposal.&lt;/p&gt;
&lt;p&gt;Remember, the journey to mastering AI-assisted coding is a marathon, not a sprint. Embrace the learning process, and don&apos;t be afraid to explore new methods and resources. As someone who&apos;s navigated massive infrastructure projects and complex engineering challenges, I can attest that the time you invest in planning and learning today will pay dividends in the future.&lt;/p&gt;
&lt;p&gt;By implementing these tips, I&apos;ve been able to get the most out of Cursor AI and significantly improve my coding workflow. I hope these insights help you on your journey as well.&lt;/p&gt;
&lt;p&gt;If this tutorial helped you out, I&apos;d really appreciate it if you signed up for my newsletter.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;em&gt;Feel free to share your thoughts or ask questions in the comments below. You can also reach out to me on X (Formerly Twitter) @MeshRHM&lt;/em&gt;&lt;/p&gt;
</content:encoded></item><item><title>Build a website with Ghost, Cloudflare, and DigitalOcean</title><link>https://informalengineer.com/guides/ghost-cloudflare-digitalocean/</link><guid isPermaLink="true">https://informalengineer.com/guides/ghost-cloudflare-digitalocean/</guid><description>A complete walkthrough for self-hosting a Ghost blog on a DigitalOcean droplet behind Cloudflare: droplet setup, DNS, SSL, and the configuration steps that actually trip people up.</description><pubDate>Sun, 19 Jun 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Starting your own website can be really stressful. There are many options you may be tempted to go with, and rightly so. Different platforms will offer different benefits.&lt;/p&gt;
&lt;p&gt;I have always hosted my impulse business and personal websites on my own shared reseller hosting account. My main stack in the past has always been CPanel and Wordpress. I recently came across Ghost, and it has been a game changer for my main website.&lt;/p&gt;
&lt;p&gt;I have always wanted to be able to host my website on my own machines and since Ghost can be spun up on literally any ubuntu virtual machine, I decided to do it on Digital Ocean for its speed and reliability (Plus I have a student credit with GitHub!). In the future, I plan to transition the website to my own lab - be on the lookout for an updated tutorial on how to do this on your own home server!&lt;/p&gt;
&lt;p&gt;Running my own ghost site was a random weekend obsession I fell into, so I am sharing it in the hopes that it will save another poor soul countless hours of frustration of figuring it out.&lt;/p&gt;
&lt;p&gt;Treat this as an answer key to your self hosted ghost problems.&lt;/p&gt;
&lt;h2&gt;The Stack&lt;/h2&gt;
&lt;p&gt;In this section I would like to clarify my website stack:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Ghost&lt;/strong&gt; - Content Management System.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cloudflare&lt;/strong&gt; - Creates a proxy IP to your website. Helps protect your website by adding another layer of protection.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Namecheap&lt;/strong&gt; - Domain Name Registrar.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Digital Ocean&lt;/strong&gt; - Server Hosting.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Namecheap - Domain Name&lt;/h3&gt;
&lt;p&gt;I used &lt;a href=&quot;https://www.namecheap.com/&quot;&gt;Namecheap&lt;/a&gt; to buy my domain name. I have used it for a very long time, I have used it heavily to purchase impulse business ideas for many years. It is nice, simple and easy - Not much else to it.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://meshaelr.com/content/images/2022/07/image.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Buying domain names on namecheap&lt;/p&gt;
&lt;p&gt;Feel free to use your own domain provider, the following steps will work even if you used other providers such as &lt;a href=&quot;https://domains.google/&quot;&gt;domains.google&lt;/a&gt;. Once you have purchased and registered your domain name, you can move onto the next step of getting digital ocean set up.&lt;/p&gt;
&lt;h3&gt;CloudFlare - SSL and CDN&lt;/h3&gt;
&lt;p&gt;I like &lt;a href=&quot;https://www.cloudflare.com/&quot;&gt;CloudFlare&lt;/a&gt;, there are plenty of resources on what it does and why you should use it. Here is why I like to use CloudFlare&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Makes it harder to perform a DDOS attack against your website by creating a proxy link to your site.&lt;/li&gt;
&lt;li&gt;Offers a free Global Content Delivery Network to improve the performance of your site.&lt;/li&gt;
&lt;li&gt;Allows you to create SSL certificates that never expire.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You&apos;re going to want to create a &lt;strong&gt;free account&lt;/strong&gt; and go through the process of adding a site.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://meshaelr.com/content/images/2022/07/image-1.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;CloudFlare makes the free option a little hard to find, it will be below all of the paid options:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://meshaelr.com/content/images/2022/07/image-2.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;After you do this, the site will ask you to check your records, instead you want to click on the overview tab and follow those instructions on your Namecheap account.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://meshaelr.com/content/images/2022/07/image-3.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;So in your Namecheap account, you can navigate to manage the domain you just registered and add the Cloudflare name servers as shown below: (Don&apos;t forget to save)&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://meshaelr.com/content/images/2022/07/image-4.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;While we wait for the name servers to propagate, we can get started with getting the digital ocean account and droplets set up.&lt;/p&gt;
&lt;h3&gt;Digital Ocean - Host Server&lt;/h3&gt;
&lt;p&gt;Create a Digital Ocean account. If you are a student I recommend checking out the GitHub Student Developer Pack, specifically the intro to web developer package. If you have a student email that is associated with Github you should be able to utilize the following deal:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://meshaelr.com/content/images/2022/07/image-6.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;There are plenty of other amazing offers such as Canva Pro free for 12 months, I absolutely recommend you check this amazing resource out.&lt;/p&gt;
&lt;p&gt;Okay, back to Digital Ocean, create a project and create a droplet within that project.&lt;/p&gt;
&lt;p&gt;Instead of using Digital Ocean&apos;s over the counter distributions, you want to go to marketplace and search for Ghost and proceed the rest of the installation with that selected.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://meshaelr.com/content/images/2022/07/image-7.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;For the plan, you can go with the smallest plan available at ($6). However, going with 1GB ram is insufficient for updates and will require you to upgrade to the 2GB ram CPU whenever you want to update your Ghost distribution. So personally, I am going with the ($12/mo) option.  &lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://meshaelr.com/content/images/2022/07/image-8.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;For the data centre locations, choose whichever is closest to you.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://meshaelr.com/content/images/2022/07/image-9.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Create an authentication password or SSH key if you are comfortable with that.&lt;/p&gt;
&lt;p&gt;Once you create your droplet you want to add your domain here and point your CloudFlare DNS to the following IP on your Digital Ocean droplet.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://meshaelr.com/content/images/2022/07/image-18.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;So do not SSH into your IP yet.&lt;/p&gt;
&lt;p&gt;Go back to CloudFlare, navigate to DNS and we will have you add two records with the IP address that you received in the step prior to this.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://meshaelr.com/content/images/2022/07/image-11.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Additionally, you should also create a CNAME Record and have the name point to &lt;code&gt;www&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://meshaelr.com/content/images/2022/07/image-20.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Once these are created, I suggest turning off proxy status for both the CNAME and the A DNS. I have run into a lot of issues getting the initial bit set up without them turned off, you can turn it back on when your website is up and live.&lt;/p&gt;
&lt;p&gt;Navigate to SSL/TLS and select encryption mode as Off.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://meshaelr.com/content/images/2022/07/image-24.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;I suggest going to the overview page of cloudflare and purging the cache. Purging everything should be sufficient.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://meshaelr.com/content/images/2022/07/image-21.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Perfect, we will set up a few other things like SSL later on. For the time being go back to your digital ocean and you will see a get started with ghost button next to your droplet, follow that prompt.&lt;/p&gt;
&lt;p&gt;Going forward, I will be using the terminal on MacOS, but you can also use power shell or PuTTY on windows.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://meshaelr.com/content/images/2022/07/image-22.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Once the terminal is done with the 1-click loading, you will be required to press enter, before you do so, you want to make sure that the IP of your site and the Domain name of your site brings you to this page:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://meshaelr.com/content/images/2022/07/image-23.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Once this is the page you get to with your domain, press enter on terminal and let the fun start.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://meshaelr.com/content/images/2022/07/image-25.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Just follow the prompts for your blog URL and email address.&lt;/p&gt;
&lt;p&gt;When you get to this page, you are good to go, welcome to your new ghost site!&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://meshaelr.com/content/images/2022/07/image-27.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Once all that is complete, your website should be live!&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://meshaelr.com/content/images/2022/07/image-28.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Let&apos;s get SSL set up with Cloudflare, if you were building your site without Cloudflare, you could just ignore this part.&lt;/p&gt;
&lt;p&gt;First you will need to create a SSL Origin Certificate:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://meshaelr.com/content/images/2022/07/image-29.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Once you create the certificate, I like to first SSH into my server, and make sure I change the user to ghost-mgr.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo -i -u ghost-mgr
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;CD into the /etc/ssl/ directory. Then create a directory with your website address as the name.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;cd /etc/ssl/
sudo mkdir yourdomain.com
cd yourdomain.com
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You are going to create two files in this directory.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo nano yourdomain.com.crt
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Paste in the origin certificate that you just created on Cloudflare. Press CTRL-X then Y to Save it. Then we are going to create another file.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo nano yourdomain.com.key
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Copy the private key in there and save it the same way as we suggested above.&lt;/p&gt;
&lt;p&gt;If you do an ls command in your folder, you should find the following.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://meshaelr.com/content/images/2022/07/image-30.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Time to configure your ghost NGINX Server Block.&lt;/p&gt;
&lt;p&gt;By this point, you might be sitting here thinking, why would anyone do this over getting the GhostPro subscription service. You would be correct in thinking this is a tutorial for the select few who enjoy complications in their lives.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://meshaelr.com/content/images/2022/07/i-dont-want-peace-i-want-problems-always.gif&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;You will want to nano your configuration in the following location:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo nano /etc/nginx/sites-available/yourdomain.com-ssl.conf
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This is what you will see:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;

    server_name yourdomain.com;
    root /var/www/ghost/system/nginx-root; # Used for acme.sh SSL verification (https://acme.sh)

    ssl_certificate /etc/letsencrypt/yourdomain.com/fullchain.cer;
    ssl_certificate_key /etc/letsencrypt/yourdomain.com/yourdomain.com.key;
    include /etc/nginx/snippets/ssl-params.conf;

    location / {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $http_host;
        proxy_pass http://127.0.0.1:2368;

    }

    location ~ /.well-known {
        allow all;
    }

    client_max_body_size 50m;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You want to direct your ssl_certificate and key to the files you created earlier, additionally, I would add the &lt;code&gt;www.yourdomain.com&lt;/code&gt; and increase the body size to 100m.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;

    server_name yourdomain.com www.yourdomain.com;
    root /var/www/ghost/system/nginx-root; # Used for acme.sh SSL verification (https://acme.sh)

    ssl_certificate /etc/ssl/yourdomain.com/yourdomain.com.crt;
    ssl_certificate_key /etc/ssl/yourdomain.com/yourdomain.com.key;
    include /etc/nginx/snippets/ssl-params.conf;

    location / {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $http_host;
        proxy_pass http://127.0.0.1:2368;

    }

    location ~ /.well-known {
        allow all;
    }

    client_max_body_size 100m;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Save this file.&lt;/p&gt;
&lt;p&gt;Go to your Cloudflare and change your SSL to Strict.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://meshaelr.com/content/images/2022/07/image-32.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Back to your terminal, we are going to test the NGINX config.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo nginx -t
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;After you get a successful test result run the following command to restart NGINX.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo systemctl restart nginx
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Finally, back on CloudFlare, go into DNS and don&apos;t forget to turn on the proxy&apos;s for your website. Once you turn it on, don&apos;t forget to purge your cache.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://meshaelr.com/content/images/2022/07/image-33.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;With that, you are officially done! Your ghost website will serve users via CloudFlare SSL and you will not have to worry about the renewal of the certificate.&lt;/p&gt;
&lt;p&gt;Congratulations! You have created a new Ghost Publication using Digital Ocean and CloudFlare.&lt;/p&gt;
&lt;p&gt;If this tutorial helped you out, I simply ask you sign up for my newsletter, where you will get plenty of actionable advice to grow your passions!&lt;/p&gt;
&lt;p&gt;I want to thank you for reading. If you need any assistance, please reach out to me on twitter &lt;a href=&quot;https://twitter.com/Meshrhm&quot;&gt;@MeshRHM&lt;/a&gt; and I will do my best to help you out.&lt;/p&gt;
</content:encoded></item></channel></rss>