<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[Cactus Blog]]></title><description><![CDATA[Cactus Blog]]></description><link>https://blog.oncactus.com</link><image><url>https://substackcdn.com/image/fetch/$s_!jCX0!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58a6eefe-9a67-4251-9844-74c407e412b5_1024x1024.png</url><title>Cactus Blog</title><link>https://blog.oncactus.com</link></image><generator>Substack</generator><lastBuildDate>Fri, 17 Apr 2026 17:43:29 GMT</lastBuildDate><atom:link href="https://blog.oncactus.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Cactus]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[cravd@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[cravd@substack.com]]></itunes:email><itunes:name><![CDATA[Cravd]]></itunes:name></itunes:owner><itunes:author><![CDATA[Cravd]]></itunes:author><googleplay:owner><![CDATA[cravd@substack.com]]></googleplay:owner><googleplay:email><![CDATA[cravd@substack.com]]></googleplay:email><googleplay:author><![CDATA[Cravd]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Building a Reward System with Rails]]></title><description><![CDATA[After implementing our basic referral system using the Refer gem, we needed to build a flexible reward system on top of it.]]></description><link>https://blog.oncactus.com/p/building-reward-system-rails</link><guid isPermaLink="false">https://blog.oncactus.com/p/building-reward-system-rails</guid><dc:creator><![CDATA[Avinash Joshi]]></dc:creator><pubDate>Fri, 31 Jan 2025 15:59:06 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!qQ2b!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7283df09-fbd0-4d71-8e3b-42e83121bc59_1280x852.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>After <a href="https://blog.cravd.com/p/referral-system-in-rails">implementing our basic referral system</a> using the Refer gem, we needed to build a flexible reward system on top of it. This system needed to handle various reward scenarios: when users refer others, when referred users complete trial bookings, and when they subscribe to our service. Here's how we approached this challenge in our Rails monolith application.</p><h2><strong>Understanding the Components</strong></h2><p>Before diving into the implementation, let's understand the key components:</p><ul><li><p><strong>Trigger</strong>: The specific event that causes a reward to be created (e.g., completing a trial booking)</p></li><li><p><strong>Source</strong>: The original cause that led to the reward (typically the referral)</p></li><li><p><strong>Recipient</strong>: The user or household that receives the reward</p></li><li><p><strong>Amount</strong>: The reward value, stored in cents for precision using the money-rails gem</p></li></ul><h2><strong>The Core: The Reward Model</strong></h2><p>At the heart of our system is the <code>Reward</code> model:</p><pre><code>class Reward &lt; ApplicationRecord
  belongs_to :recipient, polymorphic: true
  belongs_to :trigger, polymorphic: true, optional: true
  belongs_to :source, polymorphic: true, optional: true

  monetize :amount_cents

  enum reason: {
    trial_start: 'trial_start',
    sub_complete: 'sub_complete',
    signup_discount: 'signup_discount'
  }, _prefix: true

  scope :unredeemed, -&gt; { where(redeemed_at: nil) }

  # ... methods for creating specific rewards ...
end</code></pre><h2><strong>The Rewardable Concern</strong></h2><p>To make it easy to add reward functionality to different models, we created a Rewardable concern:</p><pre><code># app/models/concerns/rewardable.rb

module Rewardable
  extend ActiveSupport::Concern

  included do
    has_many :rewards, as: :recipient
  end

  def total_earned
    Money.new(rewards.sum(:amount_cents), "CAD")
  end

  def unredeemed_rewards
    rewards.unredeemed
  end

  def redeem_rewards!
    unredeemed_rewards.update_all(redeemed_at: Time.current)
  end
end</code></pre><h2><strong>Extending the Referral Model</strong></h2><p>We extended the Refer gem's Referral model to integrate with our reward system:</p><pre><code><code>module ReferralExtensions
  extend ActiveSupport::Concern

  included do
    has_many :rewards, as: :source
  end

  def create_trial_rewards(trial_booking)
    Reward.create_for_trial_start(self, trial_booking)
  end

  def complete_subscription(subscription)
    Reward.create_for_sub_complete(self, subscription)
  end
end

# In config/initializers/refer.rb
Rails.application.config.to_prepare do
  Refer::Referral.include ReferralExtensions
end
</code></code></pre><h2><strong>Triggering Rewards</strong></h2><p>We set up our Booking model to trigger rewards when a booking is completed, as an example:</p><pre><code>class Booking &lt; ApplicationRecord
  after_save :create_trial_start_reward, if: :status_changed_to_completed?

  private

  def create_trial_start_reward
    referral = Refer::Referral.find_by(referred: household.owner)
    Reward.create_for_trial_start(referral, self) if referral
  end

  def status_changed_to_completed?
    saved_change_to_status? &amp;&amp; completed?
  end
end</code></pre><h2><strong>Conclusion</strong></h2><p>This flexible reward system allows us to easily add new types of rewards and associate them with different actions in our application. The use of polymorphic associations provides the flexibility to link rewards to various models, while the money-rails gem ensures precise handling of monetary amounts. The system has proven to be robust and easily extendable as our referral program grows.</p><p>The combination of the Refer gem for handling referrals and our custom reward system has created a powerful tool for incentivizing user growth and engagement on our platform.</p><p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!qQ2b!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7283df09-fbd0-4d71-8e3b-42e83121bc59_1280x852.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!qQ2b!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7283df09-fbd0-4d71-8e3b-42e83121bc59_1280x852.png 424w, https://substackcdn.com/image/fetch/$s_!qQ2b!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7283df09-fbd0-4d71-8e3b-42e83121bc59_1280x852.png 848w, https://substackcdn.com/image/fetch/$s_!qQ2b!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7283df09-fbd0-4d71-8e3b-42e83121bc59_1280x852.png 1272w, https://substackcdn.com/image/fetch/$s_!qQ2b!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7283df09-fbd0-4d71-8e3b-42e83121bc59_1280x852.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!qQ2b!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7283df09-fbd0-4d71-8e3b-42e83121bc59_1280x852.png" width="1280" height="852" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7283df09-fbd0-4d71-8e3b-42e83121bc59_1280x852.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:852,&quot;width&quot;:1280,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:81242,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!qQ2b!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7283df09-fbd0-4d71-8e3b-42e83121bc59_1280x852.png 424w, https://substackcdn.com/image/fetch/$s_!qQ2b!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7283df09-fbd0-4d71-8e3b-42e83121bc59_1280x852.png 848w, https://substackcdn.com/image/fetch/$s_!qQ2b!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7283df09-fbd0-4d71-8e3b-42e83121bc59_1280x852.png 1272w, https://substackcdn.com/image/fetch/$s_!qQ2b!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7283df09-fbd0-4d71-8e3b-42e83121bc59_1280x852.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p>]]></content:encoded></item><item><title><![CDATA[Cooking at Home: A Recipe for Better Health]]></title><description><![CDATA[There&#8217;s something magical about the simple act of cooking at home.]]></description><link>https://blog.oncactus.com/p/cooking-at-home-a-recipe-for-better</link><guid isPermaLink="false">https://blog.oncactus.com/p/cooking-at-home-a-recipe-for-better</guid><dc:creator><![CDATA[Ajith Govind]]></dc:creator><pubDate>Thu, 23 Jan 2025 17:05:51 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!JBnZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4d4bb5b-8705-4fa1-875b-d8fe2406aeb2_1280x852.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>There&#8217;s something magical about the simple act of cooking at home. It&#8217;s not just about the food on your plate but the journey to get there, with the slicing, stirring, and savoring that makes the process of preparing meals so fulfilling.</p><p>Beyond the nostalgia of family recipes and the comfort of familiar aromas, home cooking offers undeniable benefits: healthier eating, cost savings, and a stronger connection with the people you share your table with.</p><p>But, life is busy, and sometimes the thought of cooking feels like another chore. There are ways to make this chore easier and turn it into a lifestyle habit.</p><p>After all, the rewards of cooking at home are worth exploring and can be a game-changer for your health, happiness, and wallet.</p><p></p><h2><strong>The benefits of cooking at home</strong></h2><p>Cooking at home is an investment in your physical and financial well-being. A 2025 survey by The Harris Poll found that <a href="https://www.businesswire.com/news/home/20250114988756/en/Survey-Reveals-Majority-of-Americans-Plan-to-Cook-at-Home-More-in-2025-To-Save-Money?utm_source=chatgpt.com">89% of consumers</a> believe cooking meals at home is one of the best ways to save money on food.</p><p>But the savings don&#8217;t stop there. Home cooking helps you manage what goes into your meals. According to <a href="https://www.health.harvard.edu/blog/home-cooking-healthy-family-meals-2018082114580?utm_source=chatgpt.com">Harvard Health</a>, people who prepare meals at home tend to consume more fruits and vegetables and less sugar and fat. From choosing fresh, unprocessed ingredients to controlling portion sizes, the health benefits are clear:</p><p></p><h3><strong>Improved nutrition</strong></h3><p>When you cook at home, you control what goes into your meals, allowing you to prioritize fresh, whole ingredients over processed foods. For example, making your own spaghetti sauce lets you skip the excess sugar and sodium often found in store-bought jars. Similarly, a homemade salad dressing made with olive oil, vinegar, and a dash of mustard is a much healthier option than bottled dressings laden with preservatives and unhealthy fats.</p><p>Cooking also allows you to adjust recipes for your dietary needs. Whether you're reducing salt to manage high blood pressure or avoiding allergens like gluten or dairy, home cooking gives you complete control over every bite.</p><p></p><h3><strong>Reduced risk of chronic diseases</strong></h3><p>Regularly cooking meals with nutrient-dense ingredients can significantly improve your health and reduce the risk of chronic illnesses. For instance:</p><ul><li><p>Swapping out red meat for lean proteins like chicken or fish can lower cholesterol levels, a key factor in preventing heart disease.</p></li><li><p>Preparing meals rich in fiber&#8212;such as lentil soup or whole-grain pasta&#8212;supports better digestion and reduces the risk of type 2 diabetes.</p></li><li><p>Incorporating heart-healthy ingredients, like avocados, nuts, and olive oil, into your cooking mimics the benefits of the Mediterranean diet, which studies show is linked to lower rates of cardiovascular disease.</p></li></ul><p></p><h3><strong>Healthier habits</strong></h3><p>Cooking at home encourages mindfulness in ways restaurant meals or fast food can&#8217;t. The act of measuring ingredients, understanding portion sizes, and exploring the nutritional value of various foods naturally fosters healthier choices. For example:</p><ul><li><p>If you're preparing a stir-fry, you&#8217;ll likely choose fresh vegetables like broccoli, bell peppers, and snap peas instead of the fried, heavily salted options available at many takeout spots.</p></li><li><p>By experimenting with new recipes, you might discover how simple swaps&#8212;like Greek yogurt instead of sour cream&#8212;can boost protein and reduce unhealthy fats in your meals.</p></li></ul><p>Each home-cooked meal is an opportunity to prioritize your health, experiment with real food, and build lasting habits.</p><p></p><h2><strong>Overcoming obstacles to cooking at home</strong></h2><p>Cooking at home has undeniable benefits, but it&#8217;s not without challenges. For many, finding the time, energy, or skills to prepare home-cooked meals can feel overwhelming. That&#8217;s where services like <a href="https://cravd.com/">Cravd</a> come in, letting you <a href="https://blog.cravd.com/p/why-hiring-a-home-chef-is-simpler">hire a home chef</a>. With affordable home chef options starting at just $39, Cravd simplifies meal preparation, allowing you to enjoy healthy, home-cooked meals without the hassle.</p><p>But a home chef isn&#8217;t the only way to overcome these obstacles. Let&#8217;s explore how to tackle common challenges, with a mix of practical tips and testimonials that show what&#8217;s possible.</p><p></p><h3><strong>&#8220;I barely have time to cook with my busy schedule.&#8221;</strong></h3><p>Time constraints are one of the biggest hurdles to home cooking. Instead of relying on fast food or processed options, try solutions like <strong>batch cooking</strong> or meal prepping. Dedicate a few hours on the weekend to prepare staples like roasted vegetables, grilled chicken, or soups that can be reheated during the week. Another tip: plan your meals in advance to minimize last-minute decisions.</p><p>Cravd can be a game-changer for those whose schedules are packed. By hiring a home chef, you save hours otherwise spent on grocery shopping, cooking, and cleaning. One Cravd customer, <strong>Shreema</strong>, shared:</p><blockquote><p>&#8220;As busy professionals, finding the time to cook healthy meals was always a challenge for us. Cravd has made life so much easier by taking care of the cooking, allowing us to save valuable time without compromising on quality.&#8221;</p></blockquote><p></p><h3><strong>&#8220;I&#8217;m too exhausted to cook after a long day.&#8221;</strong></h3><p>Cooking at the end of a tiring day can feel like an uphill battle. To make it easier, simplify the cooking process with quick recipes that require minimal effort, like a one-pan chicken and veggies or a 15-minute stir-fry. Keeping a well-stocked pantry with essentials like olive oil, spices, and grains can also cut down on decision fatigue.</p><p>Alternatively, let Cravd handle the cooking for you. Imagine coming home to a kitchen that smells of freshly cooked meals without lifting a finger. As <strong>Malika</strong>, another Cravd customer, said:</p><blockquote><p>&#8220;Having wholesome meals at home helped us save a lot by cutting down on eating out. The convenience and nutrition of home-cooked food have been a game-changer.&#8221;</p></blockquote><p></p><h3><strong>&#8220;I&#8217;ve never learned how to cook, so I wouldn&#8217;t know where to start.&#8221;</strong></h3><p>Learning to cook can seem intimidating, but it doesn&#8217;t have to be. Start with a few simple recipes that use everyday ingredients, like scrambled eggs, pasta with a homemade sauce, or a basic vegetable soup. Apps, cooking classes, or YouTube tutorials can also provide step-by-step guidance.</p><p>If you&#8217;d rather learn with hands-on help, <a href="https://cravd.com/about">Cravd&#8217;s chefs</a> can teach you new recipes tailored to your preferences, ensuring you gain both confidence and skills in the kitchen.</p><p></p><h3><strong>&#8220;Even when I cook, my family won&#8217;t eat it.&#8221;</strong></h3><p>Picky eaters can make mealtime frustrating, but there are ways to win them over. Try involving family members in the cooking process, letting them choose ingredients or help with simple tasks. Presentation can also make a difference&#8212;calling a vegetable-packed soup &#8220;rainbow stew&#8221; might encourage kids to try it.</p><p>Cravd chefs are skilled at creating meals that balance nutrition with taste, ensuring the whole family enjoys the food. As one customer shared:</p><blockquote><p>&#8220;The meals are always tailored to our preferences. It&#8217;s made it so much easier to get everyone on board with healthy eating.&#8221;</p></blockquote><p></p><h3><strong>&#8220;Hiring a chef sounds expensive. I can&#8217;t afford that.&#8221;</strong></h3><p>Many people assume personal chef services are a luxury, but Cravd&#8217;s model proves otherwise. With trial sessions starting at just $39 and regular bookings as low as $50, Cravd makes it accessible to enjoy home-cooked meals without breaking the bank. Plus, consider the cost savings from reduced eating out, wasted groceries, and better health.</p><p>With these strategies and services like <a href="https://cravd.com/">Cravd</a>, cooking at home doesn&#8217;t have to be a daunting task. Instead, it becomes a manageable, even enjoyable, way to improve your diet and lifestyle.</p><p></p><h3><strong>Quick tips for getting started</strong></h3><p>Ready to make home cooking a habit? Here&#8217;s how:</p><ol><li><p><strong>Plan ahead</strong>: Create a weekly meal plan to simplify grocery shopping and avoid last-minute fast food.</p></li><li><p><strong>Start small</strong>: Focus on recipes with fewer than 10 ingredients to build confidence.</p></li><li><p><strong>Batch cook</strong>: Prepare large portions of staples like soups or roasted vegetables for easy reheating.</p></li><li><p><strong>Invest in the right tools</strong>: A sharp knife, quality cooking oil like extra virgin olive oil or cold pressed peanut oil, and a sturdy cutting board can make the cooking process smoother.</p></li><li><p><strong>Hire a home chef</strong>: <a href="https://cravd.com/">Cravd&#8217;s chefs</a> can teach you cooking skills, prepare meals, or handle the heavy lifting when life gets hectic.</p></li><li><p><strong>Make it fun</strong>: Experiment with new recipes or host a &#8220;cook-off&#8221; with friends to keep things exciting.</p></li></ol><p></p><h2><strong>The future of food is homemade</strong></h2><p>In a world where life moves fast and time feels limited, the idea of home-cooked meals can seem like a distant dream. But Cravd was created to bridge this gap. Born from the shared experiences of two busy dads, <a href="https://cravd.com/about">Cravd</a> understands the challenges families face in balancing health, time, and the daily grind of meal preparation.</p><p>By making home cooking accessible, personalized, and hassle-free, Cravd is helping people rediscover the joy and benefits of home-cooked meals. With dedicated chefs preparing meals right in your kitchen, you gain time for what truly matters, whether it&#8217;s connecting with family, pursuing hobbies, or simply unwinding at the end of the day.</p><p>The future of food isn&#8217;t just about convenience, it&#8217;s about personalization and care. Home-cooked meals meet these needs perfectly, offering a healthier, more sustainable way to eat. Cravd embodies this vision, helping families reclaim their kitchens and embrace the health and happiness that come with real food, made just for them.</p><p>Ready to see how Cravd can transform your mealtime routine? <strong><a href="https://cravd.com/sign_up">Sign up here</a></strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!JBnZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4d4bb5b-8705-4fa1-875b-d8fe2406aeb2_1280x852.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!JBnZ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4d4bb5b-8705-4fa1-875b-d8fe2406aeb2_1280x852.png 424w, https://substackcdn.com/image/fetch/$s_!JBnZ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4d4bb5b-8705-4fa1-875b-d8fe2406aeb2_1280x852.png 848w, https://substackcdn.com/image/fetch/$s_!JBnZ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4d4bb5b-8705-4fa1-875b-d8fe2406aeb2_1280x852.png 1272w, https://substackcdn.com/image/fetch/$s_!JBnZ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4d4bb5b-8705-4fa1-875b-d8fe2406aeb2_1280x852.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!JBnZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4d4bb5b-8705-4fa1-875b-d8fe2406aeb2_1280x852.png" width="1280" height="852" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c4d4bb5b-8705-4fa1-875b-d8fe2406aeb2_1280x852.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:852,&quot;width&quot;:1280,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2089413,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!JBnZ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4d4bb5b-8705-4fa1-875b-d8fe2406aeb2_1280x852.png 424w, https://substackcdn.com/image/fetch/$s_!JBnZ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4d4bb5b-8705-4fa1-875b-d8fe2406aeb2_1280x852.png 848w, https://substackcdn.com/image/fetch/$s_!JBnZ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4d4bb5b-8705-4fa1-875b-d8fe2406aeb2_1280x852.png 1272w, https://substackcdn.com/image/fetch/$s_!JBnZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4d4bb5b-8705-4fa1-875b-d8fe2406aeb2_1280x852.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p></p>]]></content:encoded></item><item><title><![CDATA[Implementing a Referral System in Rails]]></title><description><![CDATA[We recently implemented a referral system for Cravd, our marketplace platform that connects customers with personal home chefs.]]></description><link>https://blog.oncactus.com/p/referral-system-in-rails</link><guid isPermaLink="false">https://blog.oncactus.com/p/referral-system-in-rails</guid><dc:creator><![CDATA[Avinash Joshi]]></dc:creator><pubDate>Sun, 12 Jan 2025 23:34:15 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!UOr5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b4761c2-4605-4432-944b-c36ac2ec2b63_1200x630.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>We recently implemented a referral system for Cravd, our marketplace platform that connects customers with personal home chefs. As we've been growing organically through word of mouth, we wanted to accelerate this growth by implementing a formal referral program. Here's how we set it up using the Refer gem in our Rails application.</p><h2><strong>Setting Up the Refer Gem</strong></h2><p>First, we added the <a href="https://github.com/excid3/refer">Refer gem</a> to our Gemfile:</p><pre><code>gem "refer"</code></pre><p>After running <code>bundle install</code>, we generated the necessary migrations:</p><pre><code>rails generate refer:install
rails db:migrate</code></pre><p>This set up the basic database structure for tracking referrals.</p><h2><strong>Configuring the Referral Code Generator</strong></h2><p>We customized the referral code generation in an initializer file:</p><pre><code># config/initializers/refer.rb

Refer.code_generator = lambda do |referrer|
  get_existing_code(referrer).presence || generate_new_code(referrer.id)
end

Refer.param_name = :code

private

def get_existing_code(referrer)
  referrer.referral_codes.last&amp;.code
end

def generate_new_code(referrer_id)
  letters = ("A".."Z").to_a.sample(4).join
  padded_id = referrer_id.to_s.rjust(4, "0")
  "#{letters}-#{padded_id}"
end</code></pre><p>This creates unique, readable codes combining random letters and the referrer's ID.</p><h2><strong>Integrating with User Model</strong></h2><p>We added the <code>has_referrals</code> macro to our User model:</p><pre><code>class User &lt; ApplicationRecord
  has_referrals
  # ... other code ...
end</code></pre><h2><strong>Handling Referrals in the Controller</strong></h2><p>We updated our RegistrationsController to handle referrals during sign up:</p><pre><code>class RegistrationsController &lt; ApplicationController
  def create
    @user = User.new(user_params)
    if @user.save
      refer @user
      start_new_session_for @user
      send_welcome_email
      redirect_to after_authentication_url, notice: "Welcome to Cravd!"
    else
      render :new, status: :unprocessable_content
    end
  end
end</code></pre><h2><strong>Handling Referrals in the Controller</strong></h2><p>In our <code>ReferralsController</code>, we implemented two key methods to manage referral codes and cookies:</p><pre><code>class ReferralsController &lt; ApplicationController
  set_referral_cookie only: [:show], if: -&gt; { Current.user.blank? &amp;&amp; !browser.bot? }
  before_action :set_referral_code, only: [:index, :show]

  private

  def set_referral_code
    return unless Current.user
    @referral_code = Current.user.referral_codes.last || Current.user.referral_codes.create
  end
end</code></pre><p>The <code>set_referral_cookie</code> method is used to store the referral code in a cookie when it's present in the request parameters, and <code>set_referral_code</code> method is used to create or retrieve a referral code for the current user. It&#8217;s used in the referrals controllers where I want to display the user's referral code.</p><h2><strong>Conclusion</strong></h2><p>With these pieces in place, <a href="https://cravd.com/refer">we now have a functional referral system</a>. Users can generate unique referral codes, share them, and we can track successful referrals. This implementation provides a solid foundation for our referral program, which we'll build upon to create a comprehensive reward system.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!UOr5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b4761c2-4605-4432-944b-c36ac2ec2b63_1200x630.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!UOr5!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b4761c2-4605-4432-944b-c36ac2ec2b63_1200x630.png 424w, https://substackcdn.com/image/fetch/$s_!UOr5!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b4761c2-4605-4432-944b-c36ac2ec2b63_1200x630.png 848w, https://substackcdn.com/image/fetch/$s_!UOr5!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b4761c2-4605-4432-944b-c36ac2ec2b63_1200x630.png 1272w, https://substackcdn.com/image/fetch/$s_!UOr5!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b4761c2-4605-4432-944b-c36ac2ec2b63_1200x630.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!UOr5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b4761c2-4605-4432-944b-c36ac2ec2b63_1200x630.png" width="1200" height="630" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4b4761c2-4605-4432-944b-c36ac2ec2b63_1200x630.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:630,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!UOr5!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b4761c2-4605-4432-944b-c36ac2ec2b63_1200x630.png 424w, https://substackcdn.com/image/fetch/$s_!UOr5!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b4761c2-4605-4432-944b-c36ac2ec2b63_1200x630.png 848w, https://substackcdn.com/image/fetch/$s_!UOr5!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b4761c2-4605-4432-944b-c36ac2ec2b63_1200x630.png 1272w, https://substackcdn.com/image/fetch/$s_!UOr5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b4761c2-4605-4432-944b-c36ac2ec2b63_1200x630.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div>]]></content:encoded></item><item><title><![CDATA[Why hiring a home chef is simpler (and more affordable) than you imagine?]]></title><description><![CDATA[When you think about hiring a home chef service, do images of A-list celebrities enjoying Michelin-star meals at home come to mind?]]></description><link>https://blog.oncactus.com/p/why-hiring-a-home-chef-is-simpler</link><guid isPermaLink="false">https://blog.oncactus.com/p/why-hiring-a-home-chef-is-simpler</guid><dc:creator><![CDATA[Ajith Govind]]></dc:creator><pubDate>Thu, 09 Jan 2025 00:13:24 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!gfYO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F123aa5a8-f765-4812-8dde-49f069a9861c_1280x720.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>When you think about hiring a home chef service, do images of A-list celebrities enjoying Michelin-star meals at home come to mind? It&#8217;s a common misconception that having a personal chef is reserved for the rich and famous.</p><p>But the reality is much more accessible&#8212;and surprisingly relatable. Whether you&#8217;re a busy parent, a working professional, or someone who simply wants to enjoy home-cooked meals without the hassle, a home chef service is the solution you never knew you needed.</p><h3><strong>What is a home chef service?</strong></h3><p>A home chef service brings the expertise of a chef directly to your kitchen. And here&#8217;s the thing: these chefs aren&#8217;t just culinary experts&#8212;they&#8217;re people like you and me. They understand the importance of wholesome, tasty meals made with care. Here&#8217;s how it typically works:</p><ul><li><p><strong>Personalized meal prep</strong>: Your chef creates meals tailored to your dietary preferences, restrictions, and cravings. As they get to know you and your taste buds better, they&#8217;ll even suggest personalized menu options.</p></li><li><p><strong>Time-saving convenience</strong>: They handle grocery shopping if you choose, cooking, and even cleaning up after themselves.</p></li><li><p><strong>Flexible scheduling</strong>: You decide how often they visit, whether it&#8217;s for weekly meal prep or special occasions.</p></li></ul><p>With an online marketplace like <strong><a href="https://cravd.com/">Cravd</a></strong>, a home chef service is no longer a luxury reserved for a few. It&#8217;s a practical choice for anyone who values time, health, and quality dining experiences at home.</p><p></p><h3><strong>Why a home chef service isn&#8217;t just for celebrities</strong></h3><p>The idea of hiring an in-home chef often conjures images of high-end lifestyles, but the truth is far from that stereotype. A home chef service is about solving everyday problems:</p><ul><li><p><strong>Busy schedules</strong>: Juggling work, family, and personal time leaves little room for meal prep and setting daily menus that the family will actually enjoy.</p></li><li><p><strong>Specialized diets</strong>: From gluten-free to keto, chefs can craft meals to meet your needs.</p></li><li><p><strong>Family-focused time</strong>: Instead of spending hours in the kitchen, you can enjoy more meaningful moments with loved ones.</p></li></ul><p><strong>Cravd&#8217;s mission makes it clear: Give busy families access to home-cooked meals.</strong></p><p>You don&#8217;t have to be Oprah to enjoy the perks of a home chef experience. At just <strong>$39</strong> for your first session and subscription options as low as <strong>$50</strong> per booking, it&#8217;s an affordable way to upgrade your daily routine.</p><p></p><h3><strong>The people behind the service: Home chefs like you and me</strong></h3><p>What sets a home chef service apart is the people behind it. These chefs are passionate about food and understand the value of home-cooked meals. They aren&#8217;t just preparing food; they&#8217;re bringing the warmth of home to your table. Here&#8217;s what they bring:</p><ul><li><p><strong>A love for cooking</strong>: Many chefs are inspired by family traditions and authentic recipes.</p></li><li><p><strong>Commitment to hygiene</strong>: Just like you, they prioritize cleanliness and safety in the kitchen.</p></li><li><p><strong>A personal touch</strong>: They&#8217;re not just cooking meals, they&#8217;re creating an experience tailored to your preferences.</p></li></ul><p>As Prajakta, an air hostess-turned-home chef, says </p><blockquote><p><em>&#8220;Being a mom myself, I relate to the difficulties that parents face in putting healthy meals on the table, especially if they&#8217;re working full-time. I find it so rewarding to be able to help them out with meals that not just the adults but the kids relish as well.&#8221;</em></p></blockquote><p>It&#8217;s a win-win, because Prajakta earns an income doing what she loves, and her customers get personalized, healthy, home-cooked meals.</p><p></p><h3><strong>The benefits of a home chef service</strong></h3><p>Choosing a home chef service isn&#8217;t just about convenience. It&#8217;s about choosing your health and making time for what matters. Malika and her husband, a Toronto-based couple, tried out a home chef service and vowed to never go back. </p><blockquote><p><em>&#8220;We've transformed our health and lifestyle. My husband lost 6 kgs, and we both feel more energized and healthier than ever. Having wholesome meals at home helped us save a lot by cutting down on eating out.&#8221;</em></p></blockquote><p>Just like Malika experienced, here are the obvious benefits of having someone cook in your own home:</p><p></p><h4><strong>1. Authentic home-cooked meals</strong></h4><p>Your chef will use fresh ingredients and traditional recipes to create dishes that taste like they&#8217;re straight from your grandmother&#8217;s kitchen. Whether you&#8217;re craving comfort food or want to explore new cuisines, the possibilities are endless and you have complete control over the ingredients. No more guesswork or upset tummies!</p><h4><strong>2. More time for what matters</strong></h4><p>Think about all the time spent grocery shopping, cooking, and cleaning. With a home chef, those hours are yours to reclaim. Spend them with family, pursue hobbies, or simply relax after a long day.</p><h4><strong>3. Environmental impact</strong></h4><p>Unlike meal kits or takeout, a home chef service eliminates unnecessary packaging waste or worrying about the environmental impact of using styrofoam and plastic. Cravd&#8217;s zero-waste approach means you can enjoy delicious meals guilt-free, knowing you&#8217;re making an eco-friendly choice.</p><p></p><h3><strong>How Cravd makes it easy to get started</strong></h3><p>Cravd simplifies the process of hiring a home chef, making it accessible to everyone:</p><ol><li><p><strong>Match with the perfect chef</strong>: Based on your preferences and location, Cravd finds the ideal chef for your needs.</p></li><li><p><strong>Try it out for $39</strong>: Experience your first cooking session without a big financial commitment.</p></li></ol><p><strong>Subscribe and save</strong>: With plans starting as low as $50 per booking, enjoying home-cooked meals has never been more affordable.</p><p></p><h3><strong>Addressing safety concerns</strong></h3><p>Safety is a top priority for Cravd. Their chefs undergo rigorous screening and follow strict hygiene protocols to ensure your peace of mind:</p><ul><li><p><strong>Background checks</strong>: Every chef is thoroughly vetted for quality and trust.</p></li><li><p><strong>Food safety certifications</strong>: All chefs are trained and certified in food safety practices.</p></li><li><p><strong>Hygiene protocols</strong>: Chefs maintain a clean cooking environment and adhere to your specific preferences.</p></li></ul><p></p><h3><strong>Who can benefit from a home chef service?</strong></h3><p>A home chef service isn&#8217;t just for one type of person. It&#8217;s a versatile solution for:</p><ul><li><p><strong>Busy families</strong>: Make dinnertime stress-free and focus on enjoying meals together.</p></li><li><p><strong>Professionals</strong>: Come home to a ready-made meal after a long workday.</p></li><li><p><strong>Seniors</strong>: Enjoy nutritious meals without the physical effort of cooking.</p></li><li><p><strong>Food enthusiasts</strong>: Explore new flavors and cuisines without the hassle of preparation.</p></li></ul><p></p><h3><strong>Finding the right home chef service</strong></h3><p>If you&#8217;re ready to explore the world of home chef services, here are some tips to get started:</p><ul><li><p><strong>Define your needs</strong>: Consider dietary restrictions, meal frequency, and budget.</p></li><li><p><strong>Research options</strong>: Look for services like Cravd that match chefs to your specific preferences.</p></li><li><p><strong>Start small</strong>: Take advantage of trial offers to see if the service fits your lifestyle.</p></li></ul><p></p><h3><strong>Give yourself the gift of a home chef</strong></h3><p>Finding a home chef service really is easier than you think. With services like <a href="https://cravd.com/">Cravd</a>, you can enjoy the luxury of home-cooked meals without the celebrity price tag. It&#8217;s about making your life simpler, healthier, and more enjoyable. The best part? It&#8217;s powered by chefs who share your love for delicious, clean, and thoughtfully prepared meals.</p><p>Ready to try? Your schedule&#8212;and your taste buds&#8212;will thank you.</p><p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!gfYO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F123aa5a8-f765-4812-8dde-49f069a9861c_1280x720.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!gfYO!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F123aa5a8-f765-4812-8dde-49f069a9861c_1280x720.png 424w, https://substackcdn.com/image/fetch/$s_!gfYO!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F123aa5a8-f765-4812-8dde-49f069a9861c_1280x720.png 848w, https://substackcdn.com/image/fetch/$s_!gfYO!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F123aa5a8-f765-4812-8dde-49f069a9861c_1280x720.png 1272w, https://substackcdn.com/image/fetch/$s_!gfYO!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F123aa5a8-f765-4812-8dde-49f069a9861c_1280x720.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!gfYO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F123aa5a8-f765-4812-8dde-49f069a9861c_1280x720.png" width="1280" height="720" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/123aa5a8-f765-4812-8dde-49f069a9861c_1280x720.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:720,&quot;width&quot;:1280,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1631774,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!gfYO!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F123aa5a8-f765-4812-8dde-49f069a9861c_1280x720.png 424w, https://substackcdn.com/image/fetch/$s_!gfYO!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F123aa5a8-f765-4812-8dde-49f069a9861c_1280x720.png 848w, https://substackcdn.com/image/fetch/$s_!gfYO!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F123aa5a8-f765-4812-8dde-49f069a9861c_1280x720.png 1272w, https://substackcdn.com/image/fetch/$s_!gfYO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F123aa5a8-f765-4812-8dde-49f069a9861c_1280x720.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p>]]></content:encoded></item><item><title><![CDATA[Dropping Redis for Rails Slashed Our AWS Bill by 62%]]></title><description><![CDATA[Recently, we integrated Redis through AWS ElastiCache to power real-time updates in our AI-driven menu recommendation system. Our initial cloud setup was straightforward: a Rails 8 application deployed with Kamal on a t3a.small EC2 instance ($27.07/month) and RDS for the database ($32.47/month), totaling around $70/month across environments.]]></description><link>https://blog.oncactus.com/p/dropping-redis-for-rails-slashed</link><guid isPermaLink="false">https://blog.oncactus.com/p/dropping-redis-for-rails-slashed</guid><dc:creator><![CDATA[Avinash Joshi]]></dc:creator><pubDate>Mon, 09 Dec 2024 22:46:00 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!gqxt!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F329f03c3-6eb2-4023-a835-5ee12abeb70c_2676x2847.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Recently, we integrated Redis through AWS ElastiCache to power real-time updates in our <a href="https://cravd.com/maya/overview">AI-driven menu recommendation system</a>. Our initial <a href="https://world.hey.com/avinash/kamal-2-my-upgrade-journey-a1af9920#:~:text=A%20quick%20detour%20with%20my%20%22cloud%22%20setup">cloud setup</a> was straightforward: a Rails 8 application deployed with Kamal on a t3a.small EC2 instance ($27.07/month) and RDS for the database ($32.47/month), totaling around $70/month across environments.</p><h1><strong>Cost Surge</strong></h1><p>What started as an "elegant solution" quickly became a concern. By July 2024, ElastiCache costs had skyrocketed to $120.53, pushing our total AWS expenses to $197.811. The graph clearly shows how ElastiCache dominated our infrastructure costs, accounting for over 60% of monthly expenses.</p><h1><strong>The Solution</strong></h1><p>After successfully implementing <a href="https://github.com/rails/solid_queue">Solid Queue</a> and following the release of <a href="https://github.com/rails/solid_cable">Solid Cable</a> at <a href="https://rubyonrails.org/world/2024">Rails World 2024</a>, we pivoted to this database-backed alternative for real-time features. This eliminated our Redis dependency while maintaining full functionality. The data shows remarkable improvements:</p><ul><li><p>Monthly AWS costs decreased from $197.81 to $74.55</p></li><li><p>Infrastructure costs reduced by approximately 62%</p></li><li><p>Complete elimination of the $120.53 monthly ElastiCache expense</p></li></ul><h1><strong>Beyond the Numbers</strong></h1><p>The switch to Solid Queue significantly reduced our infrastructure complexity. By eliminating Redis, we've simplified our stack, making it easier to maintain, debug, and scale. This change aligns with Rails' philosophy of convention over configuration, keeping things simple and streamlined. Following this success, we integrated <a href="https://github.com/rails/solid_cache">Solid Cache</a>, completing the Solid trifecta.</p><h1><strong>Key Takeaway</strong></h1><p>This migration reinforces a valuable lesson: staying aligned with framework defaults often leads to both technical and financial benefits. Our tech stack is now simpler, more maintainable, and more cost-effective while maintaining all the functionality our application requires.<br><br>The cost breakdown graph demonstrates this transformation, showing sustained lower costs from October 2024 onward, with stable expenses around $75/month</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!gqxt!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F329f03c3-6eb2-4023-a835-5ee12abeb70c_2676x2847.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!gqxt!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F329f03c3-6eb2-4023-a835-5ee12abeb70c_2676x2847.png 424w, https://substackcdn.com/image/fetch/$s_!gqxt!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F329f03c3-6eb2-4023-a835-5ee12abeb70c_2676x2847.png 848w, https://substackcdn.com/image/fetch/$s_!gqxt!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F329f03c3-6eb2-4023-a835-5ee12abeb70c_2676x2847.png 1272w, https://substackcdn.com/image/fetch/$s_!gqxt!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F329f03c3-6eb2-4023-a835-5ee12abeb70c_2676x2847.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!gqxt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F329f03c3-6eb2-4023-a835-5ee12abeb70c_2676x2847.png" width="1456" height="1549" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/329f03c3-6eb2-4023-a835-5ee12abeb70c_2676x2847.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1549,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:353733,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!gqxt!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F329f03c3-6eb2-4023-a835-5ee12abeb70c_2676x2847.png 424w, https://substackcdn.com/image/fetch/$s_!gqxt!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F329f03c3-6eb2-4023-a835-5ee12abeb70c_2676x2847.png 848w, https://substackcdn.com/image/fetch/$s_!gqxt!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F329f03c3-6eb2-4023-a835-5ee12abeb70c_2676x2847.png 1272w, https://substackcdn.com/image/fetch/$s_!gqxt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F329f03c3-6eb2-4023-a835-5ee12abeb70c_2676x2847.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div>]]></content:encoded></item><item><title><![CDATA[Cravd raises $750K pre-seed]]></title><description><![CDATA[&#128680;&#128680; BIG NEWS!]]></description><link>https://blog.oncactus.com/p/cravd-raises-750k-pre-seed</link><guid isPermaLink="false">https://blog.oncactus.com/p/cravd-raises-750k-pre-seed</guid><dc:creator><![CDATA[Ajith Govind]]></dc:creator><pubDate>Fri, 06 Dec 2024 17:23:43 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!mfbh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae69c432-f91c-49dd-97f6-2325152f980b_5001x2617.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>&#128680;&#128680; BIG NEWS! Cravd has raised $750K pre-seed to bring healthy and affordable home cooked meals to more families. Since launching in May, we've grown 40% month-over-month through referrals, hitting $20K+ in monthly subscriptions with 90% renewals &#128640;<br><br>Every day, thousands of busy families struggle to put healthy meals on the table. Our solution at Cravd is to build an AI-powered marketplace connecting families with home chefs who cook in your kitchen.<br><br><a href="https://www.linkedin.com/in/joshi-avinash/">Avinash</a> and I are thrilled to be working on our second company together. As first-time dads building our previous startup, we couldn't find time for healthy meals. It turns out 90% of North Americans spend $4,000+ dining out yearly because they don't have time to cook either.<br><br>With <a href="https://www.linkedin.com/company/cravd/">Cravd</a>, we&#8217;re creating the new default to unhealthy and expensive restaurants, delivery, and meal kits. Here&#8217;s how two recent Cravd subscribers describe the experience,<br><br>- "Thanks to Cravd, we've transformed our health and lifestyle. My husband lost 6 kgs, and we both feel more energized and healthier than ever."<br><br>- "I've been using Cravd for 4 months, and it's great having a personal chef come to our home and prepare meals tailored to our specific diet and macros."<br><br>We couldn&#8217;t have achieved this without our incredible investors and advisors who supported us from the beginning, including <a href="https://www.linkedin.com/company/marketplace-capital-fund/">Marketplace Capital</a> (<a href="https://www.linkedin.com/in/yoroomie/">Mike Williams</a> &amp; <a href="https://www.linkedin.com/in/ajblachman/">Andrew Blachman</a>), <a href="https://www.linkedin.com/company/beondeck/">ODF</a> (<a href="https://www.linkedin.com/in/julianweisser/">Julian Weisser</a>), DLH Investments (<a href="https://www.linkedin.com/in/doug-hickey-62646017/">Doug Hickey</a>), <a href="https://www.linkedin.com/in/neelmurthy/">Neel Murthy</a>, <a href="https://www.linkedin.com/in/manjurajashekhar/">Manju Rajashekhar</a>, <a href="https://www.linkedin.com/in/nicolas-dardenne-6a896b55/">Nicolas Dardenne</a>, <a href="https://www.linkedin.com/in/brian-r-cramer/">Brian Cramer</a>, <a href="https://www.linkedin.com/in/keithschacht/">Keith Schacht</a>, <a href="https://www.linkedin.com/in/rodrigo-de-salvo-braz-412248/">Rodrigo de Salvo Braz</a>, <a href="https://www.linkedin.com/in/thejasmenon/">Thejas Menon</a>, <a href="https://www.linkedin.com/in/anish-srinivas/">Anish Srinivas</a>, <a href="https://www.linkedin.com/in/arun-agarwal-aa3935ab/">Arun Agarwal</a>, <a href="https://www.linkedin.com/in/liambolling/">Liam Bolling</a>, <a href="https://www.linkedin.com/in/abhinavsingh3103/">Abhinav Singh</a>, <a href="https://www.linkedin.com/in/impactlives/">Prince De</a>, <a href="https://www.linkedin.com/in/naveenpitchandi/">Naveen Pitchandi</a> and other highly-valued angels. A huge shoutout to our incredible team as well!!<br><br>Next month we&#8217;re launching in SF/Bay Area. We're on track to become default alive in 6 months and profitable later next year.<br><br>We&#8217;re going to make families happier and healthier on 5 continents in the next 5 years. We'll accomplish it by bringing great food to every dinner table. Visit <a href="http://cravd.com/">cravd.com</a> for more and if you&#8217;re in SF do join the waitlist! <br><br>P.S. Cravd was part of ODF22, which was transformative for us. If you&#8217;re in the early days of starting a company and looking for a supportive community apply for their next cohort at <a href="http://joinodf.com/">joinodf.com</a>! A special shoutout to <a href="https://www.linkedin.com/in/julianweisser/">Julian</a>, <a href="https://www.linkedin.com/in/nfederico/">No&#233;mie</a>, and <a href="https://www.linkedin.com/in/aridutilh/">Ari</a>!!<br><br>We also highly recommend <a href="https://www.linkedin.com/company/everything-marketplaces/">Everything Marketplaces</a> community. It's our go-to platform for all things related to marketplaces and beyond. If you're building or interested in marketplaces, we strongly encourage you to check it out!</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!mfbh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae69c432-f91c-49dd-97f6-2325152f980b_5001x2617.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!mfbh!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae69c432-f91c-49dd-97f6-2325152f980b_5001x2617.jpeg 424w, https://substackcdn.com/image/fetch/$s_!mfbh!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae69c432-f91c-49dd-97f6-2325152f980b_5001x2617.jpeg 848w, https://substackcdn.com/image/fetch/$s_!mfbh!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae69c432-f91c-49dd-97f6-2325152f980b_5001x2617.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!mfbh!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae69c432-f91c-49dd-97f6-2325152f980b_5001x2617.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!mfbh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae69c432-f91c-49dd-97f6-2325152f980b_5001x2617.jpeg" width="1456" height="762" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ae69c432-f91c-49dd-97f6-2325152f980b_5001x2617.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:762,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:307768,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!mfbh!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae69c432-f91c-49dd-97f6-2325152f980b_5001x2617.jpeg 424w, https://substackcdn.com/image/fetch/$s_!mfbh!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae69c432-f91c-49dd-97f6-2325152f980b_5001x2617.jpeg 848w, https://substackcdn.com/image/fetch/$s_!mfbh!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae69c432-f91c-49dd-97f6-2325152f980b_5001x2617.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!mfbh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae69c432-f91c-49dd-97f6-2325152f980b_5001x2617.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.oncactus.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Cravd Blog! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Happy Thanksgiving from Cravd!]]></title><description><![CDATA[Today, we're filled with gratitude - for the warmth of gathering, for the joy of shared meals, and for every family who lets us be part of their story.]]></description><link>https://blog.oncactus.com/p/happy-thanksgiving-from-cravd</link><guid isPermaLink="false">https://blog.oncactus.com/p/happy-thanksgiving-from-cravd</guid><dc:creator><![CDATA[Ajith Govind]]></dc:creator><pubDate>Thu, 28 Nov 2024 20:47:15 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!WuNC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe60c448-2823-42fe-badb-daaed781ebe3_1080x1080.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Today, we're filled with gratitude - for the warmth of gathering, for the joy of shared meals, and for every family who lets us be part of their story. <br><br>May your day be filled with warm hearts, full plates, and the simple joy of being together - yes, even with that one relative who insists on critiquing everyone's cooking &#128516;<br><br>At Cravd, we believe Thanksgiving is about more than just the meal - it's about creating space for what matters most.<br><br>In kitchens across Toronto and beyond, our chefs are honoured to be part of your family's story today.<br><br>Because when we come together, even everyday moments become extraordinary.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!WuNC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe60c448-2823-42fe-badb-daaed781ebe3_1080x1080.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!WuNC!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe60c448-2823-42fe-badb-daaed781ebe3_1080x1080.jpeg 424w, https://substackcdn.com/image/fetch/$s_!WuNC!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe60c448-2823-42fe-badb-daaed781ebe3_1080x1080.jpeg 848w, https://substackcdn.com/image/fetch/$s_!WuNC!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe60c448-2823-42fe-badb-daaed781ebe3_1080x1080.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!WuNC!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe60c448-2823-42fe-badb-daaed781ebe3_1080x1080.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!WuNC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe60c448-2823-42fe-badb-daaed781ebe3_1080x1080.jpeg" width="1080" height="1080" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fe60c448-2823-42fe-badb-daaed781ebe3_1080x1080.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1080,&quot;width&quot;:1080,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;No alt text provided for this image&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="No alt text provided for this image" title="No alt text provided for this image" srcset="https://substackcdn.com/image/fetch/$s_!WuNC!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe60c448-2823-42fe-badb-daaed781ebe3_1080x1080.jpeg 424w, https://substackcdn.com/image/fetch/$s_!WuNC!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe60c448-2823-42fe-badb-daaed781ebe3_1080x1080.jpeg 848w, https://substackcdn.com/image/fetch/$s_!WuNC!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe60c448-2823-42fe-badb-daaed781ebe3_1080x1080.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!WuNC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe60c448-2823-42fe-badb-daaed781ebe3_1080x1080.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.oncactus.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Cravd Blog! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Diwali + Halloween = Gratitude overload]]></title><description><![CDATA[Cravd]]></description><link>https://blog.oncactus.com/p/diwali-halloween-gratitude-overload</link><guid isPermaLink="false">https://blog.oncactus.com/p/diwali-halloween-gratitude-overload</guid><dc:creator><![CDATA[Ajith Govind]]></dc:creator><pubDate>Thu, 31 Oct 2024 19:17:05 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!PjhA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83023038-cb6c-45d3-961e-c91e9d940f09_1080x1080.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>For Cravd, Diwali + Halloween = Gratitude overload.<br><br>Growing up, Diwali was one of the best times of the year. The entire family came together, had some great food, burst crackers, and the underlying message was always clear: Light wins over darkness eventually, and good things happen to good people.<br><br>In recent years, I've been lucky enough to enjoy Halloween. It really encourages us to pause and celebrate the moment we have today because it inevitably reminds us that our time here is short!<br><br>We are giving out festive hampers to both customers and home chefs who were our early adopters. They opened doors. Built our brand. Zero marketing dollars. We are grateful for that.<br><br>Wishing everyone a joyful Halloween and a luminous Diwali! May both festivals bring happiness, prosperity, and endless creativity to your lives. And delicious food!</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!PjhA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83023038-cb6c-45d3-961e-c91e9d940f09_1080x1080.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!PjhA!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83023038-cb6c-45d3-961e-c91e9d940f09_1080x1080.png 424w, https://substackcdn.com/image/fetch/$s_!PjhA!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83023038-cb6c-45d3-961e-c91e9d940f09_1080x1080.png 848w, https://substackcdn.com/image/fetch/$s_!PjhA!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83023038-cb6c-45d3-961e-c91e9d940f09_1080x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!PjhA!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83023038-cb6c-45d3-961e-c91e9d940f09_1080x1080.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!PjhA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83023038-cb6c-45d3-961e-c91e9d940f09_1080x1080.png" width="1080" height="1080" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/83023038-cb6c-45d3-961e-c91e9d940f09_1080x1080.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1080,&quot;width&quot;:1080,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:83143,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!PjhA!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83023038-cb6c-45d3-961e-c91e9d940f09_1080x1080.png 424w, https://substackcdn.com/image/fetch/$s_!PjhA!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83023038-cb6c-45d3-961e-c91e9d940f09_1080x1080.png 848w, https://substackcdn.com/image/fetch/$s_!PjhA!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83023038-cb6c-45d3-961e-c91e9d940f09_1080x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!PjhA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83023038-cb6c-45d3-961e-c91e9d940f09_1080x1080.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!0Orf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa40dd24-148a-42c6-b753-d3bc0845cbc3_1080x1080.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!0Orf!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa40dd24-148a-42c6-b753-d3bc0845cbc3_1080x1080.png 424w, https://substackcdn.com/image/fetch/$s_!0Orf!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa40dd24-148a-42c6-b753-d3bc0845cbc3_1080x1080.png 848w, https://substackcdn.com/image/fetch/$s_!0Orf!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa40dd24-148a-42c6-b753-d3bc0845cbc3_1080x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!0Orf!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa40dd24-148a-42c6-b753-d3bc0845cbc3_1080x1080.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!0Orf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa40dd24-148a-42c6-b753-d3bc0845cbc3_1080x1080.png" width="1080" height="1080" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fa40dd24-148a-42c6-b753-d3bc0845cbc3_1080x1080.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1080,&quot;width&quot;:1080,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:100522,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!0Orf!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa40dd24-148a-42c6-b753-d3bc0845cbc3_1080x1080.png 424w, https://substackcdn.com/image/fetch/$s_!0Orf!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa40dd24-148a-42c6-b753-d3bc0845cbc3_1080x1080.png 848w, https://substackcdn.com/image/fetch/$s_!0Orf!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa40dd24-148a-42c6-b753-d3bc0845cbc3_1080x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!0Orf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa40dd24-148a-42c6-b753-d3bc0845cbc3_1080x1080.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p></p><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.oncactus.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Cravd! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item></channel></rss>