<?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"><channel><title><![CDATA[cathzchen]]></title><description><![CDATA[I'm a computer science student with a passion for education that matters.  I love web development, books, design, learning new things, exploring new ideas, and creating unique projects.]]></description><link>https://dev.cathzchen.com</link><generator>RSS for Node</generator><lastBuildDate>Sun, 17 May 2026 23:51:20 GMT</lastBuildDate><atom:link href="https://dev.cathzchen.com/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[How to start learning web development for free]]></title><description><![CDATA[There are so many free resources available online to help you start (and continue) your journey in web development.  In this post, I've gathered a list of my favorite, and most high-quality, materials.  If you have additional suggestions on resources...]]></description><link>https://dev.cathzchen.com/how-to-start-learning-web-development-for-free</link><guid isPermaLink="true">https://dev.cathzchen.com/how-to-start-learning-web-development-for-free</guid><category><![CDATA[Web Development]]></category><category><![CDATA[webdev]]></category><category><![CDATA[Developer]]></category><category><![CDATA[freeCodeCamp.org]]></category><category><![CDATA[learning]]></category><category><![CDATA[resources]]></category><category><![CDATA[free]]></category><dc:creator><![CDATA[Catherine Chen]]></dc:creator><pubDate>Tue, 30 Apr 2024 18:47:18 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1714502601221/c445b5fb-7e2f-455e-a8ed-3ddb50ca14bc.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>There are so many free resources available online to help you start (and continue) your journey in web development.  In this post, I've gathered a list of my favorite, and most high-quality, materials.  If you have additional suggestions on resources to include in this post, feel free to drop a comment below!</p>
<h2 id="heading-dashgeneralassembly-a-taste-of-coding">Dash.GeneralAssemb.ly: A Taste of Coding</h2>
<p>If you aren't sure whether or not web development is for you, or haven't done any coding before, <a target="_blank" href="https://dash.generalassemb.ly">dash.generalassemb.ly</a> is one of the best places to start.</p>
<p>It's a free and fun online course that teaches you the basics of HTML, CSS, and JavaScript while building projects.  A lot of other programs and bootcamps divide HTML / CSS / JavaScript into three separate in-depth courses, but Dash gives you all of it together at once.  The benefit is that you learn how all these components of a website work together from the very beginning, instead of only being able to see one piece at a time.</p>
<p>Dash's projects 1-3 give you a great starting point in the world of web development.  After those you can continue to finish the rest of the projects, or move on to another resource after that.</p>
<h2 id="heading-becoming-a-web-developer">Becoming a Web Developer</h2>
<p>There are a myriad of introductory web development courses and bootcamps online, where you can learn the basics of development.  (Doing a quick search on Udemy reveals so many options; it's hard to sift through all of them.)</p>
<p>Below are some high-quality, free courses I recommend and have used myself.  They're comprehensive, provide practice and knowledge, and prepare you for a fulfilling career.</p>
<h3 id="heading-the-odin-project-foundations-course">The Odin Project: Foundations Course</h3>
<p>The Odin Project's <a target="_blank" href="https://www.theodinproject.com/paths/foundations/courses/foundations">Foundations Course</a> is a solid introduction into the bread and butter of web development.</p>
<p>It's less interactive than most of the other courses I'll mention here, but the content is a solid foundation.  The course equips you with the fundamental knowledge and practical skills you need to build websites.</p>
<p>If you enjoy the Foundations Course, look into Odin Project's <a target="_blank" href="https://www.theodinproject.com/paths/full-stack-javascript">Full Stack JavaScript</a> or <a target="_blank" href="https://www.theodinproject.com/paths/full-stack-ruby-on-rails">Full Stack Ruby on Rails</a> learning paths.</p>
<h3 id="heading-freecodecamp">Freecodecamp</h3>
<p><a target="_blank" href="https://freecodecamp.org">Freecodecamp</a> provides 10+ free web development courses in JavaScript, Python, front-end, and back-end that are more than enough to kickstart any developer's career.  You learn through interactive coding exercises and articles, and can participate in forum discussions when you get stuck or need help.</p>
<p>If you aren't sure which course to begin with, work on their <a target="_blank" href="https://www.freecodecamp.org/learn/2022/responsive-web-design/">Responsive Web Design Certification</a> first, followed by <a target="_blank" href="https://www.freecodecamp.org/learn/javascript-algorithms-and-data-structures-v8/">JavaScript Algorithms and Data Structures</a>.  After that, you can split off to do either <a target="_blank" href="https://www.freecodecamp.org/learn/front-end-development-libraries/">Front End Development Libraries</a> or <a target="_blank" href="https://www.freecodecamp.org/learn/back-end-development-and-apis/">Back End Development and APIs</a>, or both if you're interested in pursuing a full-stack career.</p>
<h3 id="heading-app-academy-open">App Academy Open</h3>
<p>If you enjoy watching videos, or prefer videos as a method of learning, <a target="_blank" href="https://www.appacademy.io/course/app-academy-open">App Academy Open</a> is perfect for you.  It's a free, self-paced version of App Academy's complete full-stack development bootcamp, so it's chock-full of rigorous material.</p>
<p>The learning path gives you access to over 500 hours of videos and resources, covering everything from fundamental HTML and CSS to algorithms and data structures in JavaScript.</p>
<h3 id="heading-codecademy">Codecademy</h3>
<p><a target="_blank" href="https://codecademy.com">Codecademy</a> is a freemium platform with high-quality content.  Their courses range from web development to data science, and are interactive and text-based. </p>
<p>There is a lot of free material to work through, though there are many perks only accessible through a subscription.  However, Codecademy offers a lot more material than Freecodecamp, which is why I've still decided to include it on this list.</p>
<h2 id="heading-choosing-a-career-as-a-developer">Choosing a Career as a Developer</h2>
<p>If you like frontend development, work on your advanced CSS and JavaScript skills.  Pick up a framework such as React, Angular, or VueJS, and focus on learning additional skills like web accessibility and SEO.</p>
<p>If you're interested in backend development, you'll want to focus on one of these specializations: Node.js, Java, PHP, Python, C#, or Ruby.  Do some research on your own before making a choice.  Learn about databases, SQL, and/or MongoDB, as well as popular frameworks in your language: Spring for Java, Laravel for PHP, django for Python, ASP.NET for C#, or Ruby on Rails for Ruby.  Note that there are a lot more frameworks available for Node.js and PHP developers (though Laravel is the most popular for PHP).</p>
<p>If you enjoy doing both (like me!), learn both for full-stack development.  😉</p>
<h3 id="heading-roadmapsh">Roadmap.sh</h3>
<p>Learning the basics of web development opens doors to many other careers in the tech field.  <a target="_blank" href="https://roadmap.sh">Roadmap.sh</a> provides guides, learning paths, and roadmaps to point developers in a direction of their choosing.</p>
<p>It's the perfect place to start if you want to dive deeper into a field.  Once you have the basics under your belt, you have the right foundation to transition into learning mobile app development, game development, AI &amp; machine learning, and more.  The world of technology is at your fingertips.</p>
<h2 id="heading-conclusion">Conclusion</h2>
<p>Are there any other free educational resources you enjoy using as a developer?  Let me know in the comments below!</p>
<p>Happy coding,</p>
<p>Catherine</p>
]]></content:encoded></item><item><title><![CDATA[Best Free Website Hosting Options for Developers]]></title><description><![CDATA[If you're exploring the world of web development, chances are you've created your own sites that you want to put out there for the world to see.
Hosting your own website for free has gotten easier than ever before.  As a developer, you have several o...]]></description><link>https://dev.cathzchen.com/best-free-website-hosting-options-for-developers</link><guid isPermaLink="true">https://dev.cathzchen.com/best-free-website-hosting-options-for-developers</guid><category><![CDATA[hosting]]></category><category><![CDATA[Website Hosting]]></category><category><![CDATA[self-hosted]]></category><category><![CDATA[JavaScript]]></category><dc:creator><![CDATA[Catherine Chen]]></dc:creator><pubDate>Mon, 22 Apr 2024 12:11:03 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1713787508147/25ea96d9-eeb5-46c7-8a05-a2c8279f4168.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>If you're exploring the world of web development, chances are you've created your own sites that you want to put out there for the world to see.</p>
<p>Hosting your own website for free has gotten easier than ever before.  As a developer, you have several options depending on the customization needs and other requirements of your site.  Static sites are the simplest to host for free, but a few hosting providers work with dynamic sites as well.</p>
<p>Most hosting services provide free SSL certificates to secure your site and allow you to connect a custom domain.  They'll usually provide a free subdomain for you to use, but you'll still have to pay for a domain name if you don't want your site on a subdomain.</p>
<h2 id="heading-static-website-hosting-services">Static Website Hosting Services</h2>
<p>If you're looking to host a static site, there are many options available to you. Static sites are websites that are built using only HTML, CSS, and JavaScript, delivering the same fixed content to all visitors.</p>
<ul>
<li><p><a target="_blank" href="http://surge.sh">Surge.sh</a> — a simple cloud platform for deploying static websites</p>
</li>
<li><p><a target="_blank" href="https://pages.github.com">Github Pages</a> — host static websites directly from your GitHub repository for free</p>
</li>
<li><p><a target="_blank" href="https://docs.gitlab.com/ee/user/project/pages/">GitLab Pages</a> —  host static websites for free directly from your GitLab repository</p>
</li>
</ul>
<h2 id="heading-server-side-ssr-hosting-for-javascript">Server-Side (SSR) Hosting for JavaScript</h2>
<p>Dynamic websites adjust their content based on user interaction, time, or other factors.  Web applications, e-commerce stores, or news websites with frequently updated content tend to be dynamic sites.  If you're serving dynamic content on your website, the following places offer free cloud hosting for server-side rendering:</p>
<ul>
<li><p><a target="_blank" href="https://vercel.com/catherine-chens-projects">Vercel</a> — a cloud platform for developers to build, deploy, and scale modern web applications with a focus on performance and ease of use</p>
</li>
<li><p><a target="_blank" href="https://pages.cloudflare.com/">Cloudflare Pages</a> — a developer-friendly platform to build, deploy, and collaborate on lightning-fast websites</p>
</li>
<li><p><a target="_blank" href="https://firebase.google.com/products/hosting/">Firebase Hosting</a> — a secure and scalable platform for deploying web content, including static sites, dynamic content served through Cloud Functions, and microservices</p>
</li>
<li><p><a target="_blank" href="https://www.netlify.com">Netlify</a> — seamless deployment, serverless functions, and global hosting for static sites and web applications</p>
</li>
<li><p><a target="_blank" href="https://glitch.com">Glitch.me</a> — a free, browser-based development environment for building and collaborating on web projects, often used for quick prototypes or learning to code</p>
</li>
</ul>
<h2 id="heading-other-free-website-hosting-options">Other Free Website Hosting Options</h2>
<p>The following options provide even more flexibility over the tools you want to use to host code, and aren't limited to just JavaScript.  Not all of their free plans are suitable for production hosting, but they're a great place to start experimenting.</p>
<ul>
<li><p><a target="_blank" href="https://render.com">Render.com</a> — a pay-as-you-go cloud platform for deploying web applications of all kinds </p>
</li>
<li><p><a target="_blank" href="https://replit.com">Repl.it</a> — a cloud-based platform for coding in various languages, allowing for experimentation and collaboration</p>
</li>
</ul>
<h2 id="heading-free-php-amp-mysql-hosting">Free PHP &amp; MySQL Hosting</h2>
<p>One of the first websites I ever hosted used <a target="_blank" href="https://www.infinityfree.com">InfinityF</a><a target="_blank" href="https://www.infinityfree.com">ree</a>. It's a free hosting service for traditional PHP &amp; MySQL sites, whether you're using a framework like Laravel or a website builder like Wordpress.  It comes with a control panel and other hosting features.</p>
<h2 id="heading-conclusion">Conclusion</h2>
<p>With so many great options available, the perfect free hosting platform depends on your specific needs and skillset.  Are there any free or cheap hosting plans you use that I haven't included here?  Let me know in the comments below!</p>
]]></content:encoded></item><item><title><![CDATA[Coding Training: How to Improve Your Coding Skills]]></title><description><![CDATA[There's a lot that goes into becoming a better programmer, so let's just tackle one way that helps improve your programming skills today: practice, practice, practice solving problems.  😤
Practice Makes Perfect
Mastering any skill takes time, and co...]]></description><link>https://dev.cathzchen.com/coding-training-improve-coding-skills</link><guid isPermaLink="true">https://dev.cathzchen.com/coding-training-improve-coding-skills</guid><category><![CDATA[coding]]></category><category><![CDATA[coding challenge]]></category><category><![CDATA[#codingNewbies]]></category><category><![CDATA[leetcode]]></category><category><![CDATA[Codewars ]]></category><category><![CDATA[exercism]]></category><dc:creator><![CDATA[Catherine Chen]]></dc:creator><pubDate>Sun, 14 Apr 2024 11:43:26 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1713094997410/075e36c8-68c8-4bf5-906a-e61c7de99e6b.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>There's a lot that goes into becoming a better programmer, so let's just tackle one way that helps improve your programming skills today: practice, practice, <em>practice</em> solving problems.  😤</p>
<h2 id="heading-practice-makes-perfect">Practice Makes Perfect</h2>
<p>Mastering any skill takes time, and coding is no different.  To help you get started, I've listed some of my favorite websites below that offer fun and engaging ways to practice your coding skills.</p>
<p>Remember that the more you code, the better you'll become!  🚀🚀</p>
<p><em>Note: One way that can help is to try setting aside specific times in your day to write code.  Morning and evening are my personal favorites, but it's different for everyone.  Whatever you choose, though, consistency is key!</em></p>
<h2 id="heading-codingame">CodinGame</h2>
<p><a target="_blank" href="https://www.codingame.com">CodinGame</a> is probably my top recommended site for someone looking for a place to improve their programming skills.  This platform delivers coding practice through a variety of games, challenges, and contests.  It's a fun way to learn and easy to get started with, but also contains more demanding challenges for advanced coders further along in their careers.</p>
<h2 id="heading-codewars">Codewars</h2>
<p><a target="_blank" href="https://www.codewars.com">Codewars</a> is another online site geared towards programming practice.  This platform centers around the concept of "kata," which are small, focused coding exercises. These kata target specific techniques and problem-solving approaches in various programming languages.</p>
<p>Codewars doesn't have games like CodinGame, but they do incorporate gamification techniques to make learning more engaging. As you solve different exercises, you can progress through ranks and earn points (honor) for completing katas and contributing to the community. You can even create your own challenges!</p>
<h2 id="heading-leetcode">Leetcode</h2>
<p><a target="_blank" href="https://leetcode.com">Leetcode</a>, infamous among computer science students, is a popular online platform designed to help programmers prepare for technical coding interviews.  (It's also, unofficially, known for causing many tears during junior and senior CS years. 🥲)</p>
<p>Leetcode includes guides on different areas of programming, as well as targeted practice.  Their problems challenge users on specific algorithms, data structures, and efficient problem-solving techniques.</p>
<h2 id="heading-exercism">Exercism</h2>
<p><a target="_blank" href="https://exercism.org">Exercism</a> is an awesome online platform for beginner to intermediate-level coders to practice their skills, focusing on a specific programming language.  Experienced programmers can also volunteer to mentor beginners and provide feedback on their code.  This platform is completely free and open source, so anyone can contribute to the exercises and create new ones for different languages!</p>
<h2 id="heading-conclusion">Conclusion</h2>
<p>I hope this list helps you find tools that can help you improve your skills!  There are a lot of other great websites out there - are there any you enjoy using that I haven't mentioned in this short list?  Drop a message in the comments below!</p>
<p>Happy coding!</p>
<p>Catherine</p>
]]></content:encoded></item><item><title><![CDATA[Setting up TailwindCSS + SASS with EmberJS]]></title><description><![CDATA[Let's get started!
Creating an EmberJS project
See https://guides.emberjs.com/release/getting-started/quick-start/ for more information.
If you haven't already, you can install the Ember CLI using the following command:
npm install -g ember-cli

Then...]]></description><link>https://dev.cathzchen.com/setting-up-tailwindcss-sass-with-emberjs</link><guid isPermaLink="true">https://dev.cathzchen.com/setting-up-tailwindcss-sass-with-emberjs</guid><category><![CDATA[Ember.js]]></category><category><![CDATA[Tailwind CSS]]></category><category><![CDATA[Sass]]></category><category><![CDATA[Tutorial]]></category><dc:creator><![CDATA[Catherine Chen]]></dc:creator><pubDate>Tue, 02 May 2023 22:05:04 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1683065016810/41c302d0-ee9a-4b2e-a126-b7a3962ca047.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Let's get started!</p>
<h2 id="heading-creating-an-emberjs-project">Creating an EmberJS project</h2>
<p><em>See</em> <a target="_blank" href="https://guides.emberjs.com/release/getting-started/quick-start/"><em>https://guides.emberjs.com/release/getting-started/quick-start/</em></a> <em>for more information.</em></p>
<p>If you haven't already, you can install the <a target="_blank" href="https://cli.emberjs.com/">Ember CLI</a> using the following command:</p>
<pre><code class="lang-bash">npm install -g ember-cli
</code></pre>
<p>Then, create a fresh new Ember application:</p>
<pre><code class="lang-bash">ember new my-ember-app --lang en
</code></pre>
<p>Navigate into the directory of your new Ember app (<code>cd my-ember-app</code>) before running any of the commands in the next section.</p>
<h2 id="heading-adding-tailwindcss-sass">Adding TailwindCSS + SASS</h2>
<p>First, let's begin by installing the necessary dependencies:</p>
<pre><code class="lang-bash">npm i -D ember-cli-postcss postcss-scss autoprefixer tailwindcss
</code></pre>
<p>Next, create your <code>tailwind.config.js</code> file in the root directory:</p>
<pre><code class="lang-bash">npx tailwind init
</code></pre>
<p>Update <code>module.exports</code> to reflect something like this:</p>
<pre><code class="lang-javascript"><span class="hljs-comment">// tailwind.config.js</span>

<span class="hljs-built_in">module</span>.exports = {
    <span class="hljs-attr">content</span>: [<span class="hljs-string">"./app/**/*.{gjs,gts,hbs,html,js,ts}"</span>],
    <span class="hljs-comment">// ...</span>
}
</code></pre>
<p>Add the following options to <code>ember-cli-build.js</code>:</p>
<pre><code class="lang-diff">// ember-cli-build.js

// ...

module.exports = function (defaults) {
    const app = new EmberApp(defaults, {
<span class="hljs-addition">+       postcssOptions: {</span>
<span class="hljs-addition">+           compile: {</span>
<span class="hljs-addition">+               extension: "scss",</span>
<span class="hljs-addition">+               enabled: true,</span>
<span class="hljs-addition">+               parser: require("postcss-scss"),</span>
<span class="hljs-addition">+               plugins: [</span>
<span class="hljs-addition">+                   {</span>
<span class="hljs-addition">+                       module: require("autoprefixer"),</span>
<span class="hljs-addition">+                       options: {},</span>
<span class="hljs-addition">+                   },</span>
<span class="hljs-addition">+                   {</span>
<span class="hljs-addition">+                       module: require("tailwindcss"),</span>
<span class="hljs-addition">+                       options: {</span>
<span class="hljs-addition">+                           config: "./tailwind.config.js",</span>
<span class="hljs-addition">+                       },</span>
<span class="hljs-addition">+                   },</span>
<span class="hljs-addition">+               ],</span>
<span class="hljs-addition">+           },</span>
<span class="hljs-addition">+       },</span>
    });

    return app.toTree();
};
</code></pre>
<p><em>Note that you will need to restart the server (run</em> <code>npm start</code> <em>again) to see changes after making edits to</em> <code>ember-cli-build.js</code> <em>.</em></p>
<p>Rename <code>app/styles/app.css</code> to <code>app/styles/app.scss</code>.</p>
<h2 id="heading-conclusion">Conclusion</h2>
<p>And that's it! If you have any questions or comments, feel free to let me know.</p>
<p>If you would like to see the full code for this tutorial, check out <a target="_blank" href="https://github.com/klickers/embertwscss">klickers/embertwscss</a>.</p>
]]></content:encoded></item><item><title><![CDATA[Building a Weekly Planner App with ReactJS + FullCalendar: Project Setup (Part 1)]]></title><description><![CDATA[GOAL: Create a weekly calendar app where one can plan and schedule tasks. Integrations with Google Calendar and task apps.
Note: I will be using Astro.build, but the basic concepts of this tutorial should work with any other setup (Vite, CRA, etc.).
...]]></description><link>https://dev.cathzchen.com/building-a-weekly-planner-app-with-reactjs-fullcalendar-project-setup-part-1</link><guid isPermaLink="true">https://dev.cathzchen.com/building-a-weekly-planner-app-with-reactjs-fullcalendar-project-setup-part-1</guid><category><![CDATA[React]]></category><category><![CDATA[FullCalendar]]></category><dc:creator><![CDATA[Catherine Chen]]></dc:creator><pubDate>Mon, 10 Apr 2023 21:06:39 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1680817607640/883c3515-e0c9-4d3b-b225-a0a4552c7f5a.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>GOAL</strong>: Create a weekly calendar app where one can plan and schedule tasks. Integrations with Google Calendar and task apps.</p>
<p><em>Note: I will be using</em> <a target="_blank" href="http://Astro.build"><em>Astro.build</em></a><em>, but the basic concepts of this tutorial should work with any other setup (Vite, CRA, etc.).</em></p>
<p>Part 1 covers project setup and creating a basic calendar component.</p>
<hr />
<h2 id="heading-setting-up-astro-react-fullcalendar">Setting up Astro + React + FullCalendar</h2>
<p>First, let's set up Astro with the following command:</p>
<pre><code class="lang-bash">npm create astro@latest
</code></pre>
<p>Follow the steps in the command prompt. Choose "Empty" when asked, "How would you like to start your new project?", "Yes" for installing dependencies, and "No" for TypeScript.</p>
<p>Next, we need to add ReactJS. Move into the folder that was created when you initiated the project, then run the <code>astro add react</code> command.</p>
<pre><code class="lang-bash"><span class="hljs-built_in">cd</span> your-project-folder
npx astro add react
</code></pre>
<p>Choose "yes" if prompted with a y/n question.</p>
<p>Finally, we need to install the FullCalendar packages we need. Run the following command:</p>
<pre><code class="lang-bash">npm install \
  @fullcalendar/core \
  @fullcalendar/react \
  @fullcalendar/timegrid \
  @fullcalendar/interaction
</code></pre>
<p><code>@fullcalendar/core</code> and <code>@fullcalendar/react</code> are quite self-explanatory as to what they contain. <code>@fullcalendar/timegrid</code> is a specific plugin we'll be using to create our calendar app.</p>
<hr />
<h2 id="heading-initial-calendar-component">Initial Calendar Component</h2>
<p>Currently, your <code>src</code> folder should only contain one other folder - <code>pages</code>. Create a <code>src/components</code> folder with an empty <code>Calendar.jsx</code> file. Inside this <code>Calendar.jsx</code> file, we will create a Calendar component.</p>
<p>First, we want to import <code>React</code> and <code>FullCalendar</code>, along with the initial plugin we'll be using.</p>
<pre><code class="lang-javascript"><span class="hljs-comment">// src/components/Calendar.jsx</span>

<span class="hljs-keyword">import</span> React <span class="hljs-keyword">from</span> <span class="hljs-string">"react"</span>;
<span class="hljs-keyword">import</span> FullCalendar <span class="hljs-keyword">from</span> <span class="hljs-string">"@fullcalendar/react"</span>;
<span class="hljs-keyword">import</span> timeGridPlugin <span class="hljs-keyword">from</span> <span class="hljs-string">"@fullcalendar/timegrid"</span>;
</code></pre>
<p>Next, let's create the basic component:</p>
<pre><code class="lang-javascript"><span class="hljs-comment">// src/components/Calendar.jsx</span>

<span class="hljs-comment">// ...</span>

<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Calendar</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">React</span>.<span class="hljs-title">Component</span> </span>{
    render() {
        <span class="hljs-keyword">return</span> (
            <span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">FullCalendar</span>
                <span class="hljs-attr">plugins</span>=<span class="hljs-string">{[timeGridPlugin]}</span>
                <span class="hljs-attr">initialView</span>=<span class="hljs-string">"timeGridWeek"</span>
            /&gt;</span></span>
        );
    }
}

<span class="hljs-keyword">export</span> <span class="hljs-keyword">default</span> Calendar;
</code></pre>
<p>Let's use this component. Make the following changes to your <code>index.astro</code> page:</p>
<pre><code class="lang-diff">  ---
<span class="hljs-addition">+ import Calendar from "../components/Calendar";</span>
  ---

  &lt;html lang="en"&gt;
      &lt;head&gt;
          &lt;meta charset="utf-8" /&gt;
          &lt;link rel="icon" type="image/svg+xml" href="/favicon.svg" /&gt;
          &lt;meta name="viewport" content="width=device-width" /&gt;
          &lt;meta name="generator" content={Astro.generator} /&gt;
          &lt;title&gt;Astro&lt;/title&gt;
      &lt;/head&gt;
      &lt;body&gt;
<span class="hljs-deletion">-         &lt;h1&gt;Astro&lt;/h1&gt;</span>
<span class="hljs-addition">+         &lt;Calendar client:load /&gt;</span>
      &lt;/body&gt;
  &lt;/html&gt;
</code></pre>
<p>Now if you start your app using the <code>npm run dev</code> command, you should see something like this:</p>
<p><a target="_blank" href="https://res.cloudinary.com/practicaldev/image/fetch/s--k7JXLlR1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1nuq3095tc43uth9pv04.png"><img src="https://res.cloudinary.com/practicaldev/image/fetch/s--k7JXLlR1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1nuq3095tc43uth9pv04.png" alt="Blank FullCalendar instance" /></a></p>
<hr />
<p>You can find all the code at <a target="_blank" href="https://github.com/klickers/ct-calendar">klickers/ct-calendar</a>.</p>
]]></content:encoded></item><item><title><![CDATA[April Code Challenge:  JS on Exercism]]></title><description><![CDATA[Though a week of April has already passed, I thought it wouldn't be too late to try to do a 3-week code challenge!
As a web developer - and honestly, in pretty much any career or area of life - I feel it's important to constantly improve and sharpen ...]]></description><link>https://dev.cathzchen.com/april-code-challenge-js-on-exercism</link><guid isPermaLink="true">https://dev.cathzchen.com/april-code-challenge-js-on-exercism</guid><category><![CDATA[challenge]]></category><category><![CDATA[Web Development]]></category><category><![CDATA[exercism]]></category><category><![CDATA[JavaScript]]></category><category><![CDATA[goals]]></category><dc:creator><![CDATA[Catherine Chen]]></dc:creator><pubDate>Fri, 07 Apr 2023 17:22:39 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1680714623040/dfd3b717-4397-4443-96b9-33171720128f.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Though a week of April has already passed, I thought it wouldn't be too late to try to do a 3-week code challenge!</p>
<p>As a web developer - and honestly, in pretty much any career or area of life - I feel it's important to constantly improve and sharpen one's skills. I enjoy learning new things and practicing what I've learned before, so this will be a great opportunity for me to do just that.</p>
<h3 id="heading-the-challenge">The Challenge</h3>
<p>This challenge will be short and simple: complete 2 Exercism JavaScript programming exercises every weekday until the end of the month (30 exercises in total).</p>
<h3 id="heading-whats-exercism">What's Exercism?</h3>
<p><a target="_blank" href="https://exercism.io">Exercism</a> is a wonderful platform that provides coding exercises for various programming languages! Founded in 2013, it offers a free and open-source solution to help people hone their programming skills. The platform is designed to help people learn various coding languages through practical exercises and mentor feedback.</p>
<p>The platform currently supports over 50 languages, including my favorite ones, such as PHP, C++, and (of course) JavaScript. Exercism is continuously expanding its offerings and plans to add more languages in the future, so be sure to keep an eye out. :)</p>
<h3 id="heading-goal">Goal</h3>
<p>At the end of this challenge, I hope to become more proficient in JavaScript and be better equipped to tackle more complex coding problems.</p>
<hr />
<p>See you at the end of April,</p>
<p>Catherine Chen</p>
]]></content:encoded></item><item><title><![CDATA[February Code Challenge COMPLETE!]]></title><description><![CDATA[It's already April, but better late than never in updating y'all on the results of my February code challenge!
On February 28th, I had 25 of the 28 websites completed, then finished the last three over the next few days.
This challenge has been one o...]]></description><link>https://dev.cathzchen.com/february-code-challenge-complete</link><guid isPermaLink="true">https://dev.cathzchen.com/february-code-challenge-complete</guid><category><![CDATA[challenge]]></category><category><![CDATA[code]]></category><category><![CDATA[Web Development]]></category><category><![CDATA[webdev]]></category><category><![CDATA[JavaScript]]></category><dc:creator><![CDATA[Catherine Chen]]></dc:creator><pubDate>Mon, 03 Apr 2023 19:03:28 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1680547592338/7a81914b-dae4-412c-84ba-93eedd5a2766.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>It's already April, but better late than never in updating y'all on the results of my February code challenge!</p>
<p>On February 28th, I had 25 of the 28 websites completed, then finished the last three over the next few days.</p>
<p>This challenge has been one of the best and worst ideas I've ever had. It forced me to quickly generate new websites (some I want to evolve into larger projects, others I can't stand to look at). Near the end, it became very energy-draining, to the point where I had a hard time focusing on other tasks I needed to finish during the day.</p>
<p>After the challenge concluded, I ended up with mild coding PTSD and took a break from programming for a few weeks.</p>
<p><em>Note to self for future code challenges:</em></p>
<ul>
<li><p><em>don't include weekends</em></p>
</li>
<li><p><em>don't set challenges that take 2-4 hours every day</em></p>
</li>
</ul>
<h3 id="heading-the-28-websites">The 28 Websites</h3>
<ol>
<li><p><a target="_blank" href="https://pdbooks.createfulpurpose.com">Tom Sawyer (PD Books)</a></p>
</li>
<li><p><a target="_blank" href="https://embassyuniversity.vercel.app">UI Revamp: Embassy University</a></p>
</li>
<li><p><a target="_blank" href="https://spyschool.vercel.app">Spy School Website</a> (one of my favorites!)</p>
</li>
<li><p><a target="_blank" href="http://quotes.cathzchen.com">Personal: Favorite Quotes</a></p>
</li>
<li><p><a target="_blank" href="https://magiccandyshop.vercel.app">Magic Candy Shop</a></p>
</li>
<li><p><a target="_blank" href="https://ojsimpsoncnn.vercel.app">UI Revamp: OJ Simpson Trial Hub</a></p>
</li>
<li><p><a target="_blank" href="https://world.cathzchen.com">Personal: Catherine's World</a> (THE favorite!)</p>
</li>
<li><p><a target="_blank" href="https://fakerprofile.vercel.app">Fake Profile Generator</a></p>
</li>
<li><p><a target="_blank" href="https://tacorevamp.vercel.app">UI Revamp: TACO</a></p>
</li>
<li><p><a target="_blank" href="https://happyfridge.vercel.app">Happy Fridge</a></p>
</li>
<li><p><a target="_blank" href="https://bucketlist.cathzchen.com">Personal: Bucket List</a></p>
</li>
<li><p><a target="_blank" href="https://house.cathzchen.com">House</a> (no idea what this was supposed to be)</p>
</li>
<li><p><a target="_blank" href="https://painful.vercel.app/">Painful Website</a></p>
</li>
<li><p><a target="_blank" href="https://severenews.vercel.app">Template: Severe News</a></p>
</li>
<li><p><a target="_blank" href="https://template-samira.vercel.app/">Template: Samira (LoL)</a></p>
</li>
<li><p>Catherine's Logs</p>
</li>
<li><p><a target="_blank" href="https://spacejobs.vercel.app">Space Job Board</a></p>
</li>
<li><p><a target="_blank" href="https://browser-start-page.vercel.app">Browser Start Page</a></p>
</li>
<li><p><a target="_blank" href="https://template-lux.vercel.app">Template: Lux (LoL)</a></p>
</li>
<li><p><a target="_blank" href="https://animal-template.vercel.app">Template: Animal-Themed Website</a></p>
</li>
<li><p><a target="_blank" href="https://portfolio.cathzchen.com">Personal: Portfolio</a></p>
</li>
<li><p><a target="_blank" href="https://sleepy.vercel.app">Sleep</a> (I was sleepy)</p>
</li>
<li><p><a target="_blank" href="https://template-blog-ipsum.vercel.app">Template: Ipsum Blog</a></p>
</li>
<li><p><a target="_blank" href="https://template-morgana.vercel.app">Template: Morgana (LoL)</a></p>
</li>
<li><p><a target="_blank" href="https://songs.cathzchen.com">Personal: Favorite Songs</a></p>
</li>
<li><p><a target="_blank" href="https://cat-advent-calendar.vercel.app">Cat Advent Calendar</a></p>
</li>
<li><p><a target="_blank" href="https://template-lulu.vercel.app/">Template: Lulu (LoL)</a></p>
</li>
<li><p><a target="_blank" href="https://card-examples.vercel.app">Card Examples</a></p>
</li>
</ol>
]]></content:encoded></item><item><title><![CDATA[February Code Challenge:  28 Websites in 28 Days]]></title><description><![CDATA[(Scroll to the bottom to see my updates on this challenge!)
About the Challenge
Hey everyone!
Recently I've decided to give myself a Code Challenge every month (for the remainder of 2023) to stretch my skills and have a bit of fun. This February, I'l...]]></description><link>https://dev.cathzchen.com/february-code-challenge-28-websites-in-28-days</link><guid isPermaLink="true">https://dev.cathzchen.com/february-code-challenge-28-websites-in-28-days</guid><category><![CDATA[challenge]]></category><category><![CDATA[challenges]]></category><category><![CDATA[Web Development]]></category><category><![CDATA[webdev]]></category><category><![CDATA[website]]></category><dc:creator><![CDATA[Catherine Chen]]></dc:creator><pubDate>Fri, 27 Jan 2023 19:00:39 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1674772619736/c533848f-e5cf-42d0-a0d9-eb9b71ff074c.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>(Scroll to the bottom to see my updates on this challenge!)</p>
<h2 id="heading-about-the-challenge">About the Challenge</h2>
<p>Hey everyone!</p>
<p>Recently I've decided to give myself a Code Challenge every month (for the remainder of 2023) to stretch my skills and have a bit of fun. This February, I'll be making 28 websites for my first challenge! 🤯</p>
<p>I'm a little apprehensive (okay, actually more than a little) since I don't usually code seven days a week, which means I may have to double up on some days to fully complete this challenge.</p>
<p>Here are a few ideas I have of simple websites I could make for this challenge:</p>
<ul>
<li><p>websites for people</p>
</li>
<li><p>revamping UI for "ugly" websites</p>
</li>
<li><p>landing pages selling nonexistent products</p>
</li>
<li><p>fanpages?</p>
</li>
<li><p>...</p>
</li>
</ul>
<p>(Due to time constraints, these websites will be relatively simple, with perhaps only 1-3 pages.)</p>
<p>I'll be updating my progress on this post periodically as I work through the challenge. Wish me luck!</p>
<p>Cheers,</p>
<p>Catherine</p>
<h2 id="heading-updates">Updates</h2>
<p><strong>Day 4:</strong> <a target="_blank" href="https://quotes.cathzchen.com"><strong>Favorite Quotes</strong></a> <strong>Website</strong></p>
<p><em>Tools: Astro, TailwindCSS, Pocketbase</em></p>
<p>For Day 4 of this challenge, I built a quick website of my favorite quotes (with a theme inspired by <a target="_blank" href="https://tumblr.com">Tumblr</a>). I self-hosted <a target="_blank" href="https://pocketbase.io">Pocketbase</a> for my backend and deployed my frontend with <a target="_blank" href="https://vercel.app">Vercel</a>.</p>
<hr />
<p><strong>Day 3:</strong> <a target="_blank" href="https://spyschool.vercel.app"><strong>Spy School</strong></a> <strong>Website</strong></p>
<p><em>Tools: Astro, TailwindCSS</em></p>
<p>I've always wanted to become a secret agent, so I created a simple landing page for an imaginary spy school. =)</p>
<p>This is one project I'd love to continue in the future though, especially since I see so much potential for teaching important lessons through this kind of theme.</p>
<hr />
<p><strong>Day 2:</strong> <a target="_blank" href="https://embassyuniversity.vercel.app/"><strong>Embassy University</strong></a> <strong>(UI Revamps)</strong></p>
<p><em>Tools: Astro, TailwindCSS</em></p>
<p>Today I finally got to revamp an old website I’ve been eyeing for sometime: Embassy University! I know I could’ve done a better job with the UI, but at least it looks better than <a target="_blank" href="https://embassy.university/">the original</a>. 😅</p>
<p>(Disclaimer: I am not in any way affiliated with this site, nor does me making a different version of their homepage indicate my endorsement of their beliefs and values. 🙃)</p>
<hr />
<p><strong>Day 1:</strong> <a target="_blank" href="https://pdbooks.createfulpurpose.com/tom-sawyer"><strong>The Adventures of Tom Sawyer</strong></a> <strong>(PD Books)</strong></p>
<p><em>Tools: Astro, ReactJS, Pocketbase, TailwindCSS</em></p>
<p>This first site is a website with custom annotations to bring public domain books to life! I was only able to get the preface of <em>The Adventures of Tom Sawyer</em> complete, but you can bet I’ll return to this project later to add more chapters.</p>
<p>Deciding how I wanted to display annotations was the most difficult part, but after I completed that, I finished the project quickly.</p>
]]></content:encoded></item><item><title><![CDATA[Setting up TailwindCSS with SASS in RedwoodJS]]></title><description><![CDATA[Here's a quick and easy guide on how to setup TailwindCSS, using the SASS preprocessor, in a new RedwoodJS project.
Requirements
Make sure you have the correct npm / yarn versions installed, the details of which can be found at https://redwoodjs.com/...]]></description><link>https://dev.cathzchen.com/setting-up-tailwindcss-with-sass-in-redwoodjs</link><guid isPermaLink="true">https://dev.cathzchen.com/setting-up-tailwindcss-with-sass-in-redwoodjs</guid><category><![CDATA[RedwoodJS]]></category><category><![CDATA[Tailwind CSS]]></category><category><![CDATA[Sass]]></category><category><![CDATA[scss]]></category><dc:creator><![CDATA[Catherine Chen]]></dc:creator><pubDate>Sat, 26 Mar 2022 00:49:57 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1683146968763/42554e61-9803-411e-859b-3bba15de0f19.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Here's a quick and easy guide on how to setup TailwindCSS, using the SASS preprocessor, in a new RedwoodJS project.</p>
<h2 id="heading-requirements">Requirements</h2>
<p>Make sure you have the correct npm / yarn versions installed, the details of which can be found at https://redwoodjs.com/docs/quick-start.</p>
<h2 id="heading-setting-up-tailwind-and-scss">Setting up tailwind and scss</h2>
<pre><code class="lang-diff">yarn create redwood-app my-app-name
cd my-app-name
yarn rw setup ui tailwind
yarn rw setup webpack
yarn workspace web add -D sass sass-loader
</code></pre>
<p><em>The code above will create a new RedwoodJS project, then set up Tailwind, webpack, and Sass in your project.</em></p>
<p>Make sure to change <code>index.css</code> to <code>index.scss</code> and update the import in your <code>web/src/App.js</code> file.</p>
<h2 id="heading-conclusion">Conclusion</h2>
<p>That should be it! You're now all set to go :)</p>
]]></content:encoded></item><item><title><![CDATA[Setting up TailwindCSS with SASS in Laravel]]></title><description><![CDATA[Start
Before beginning, make sure you have Composer and npm installed.
First, create a Laravel project.
Install dependencies
Next, install Laravel's npm dependencies by running the following commands:
npm install
npm install tailwindcss

Sass comes w...]]></description><link>https://dev.cathzchen.com/setting-up-tailwindcss-with-sass-in-laravel</link><guid isPermaLink="true">https://dev.cathzchen.com/setting-up-tailwindcss-with-sass-in-laravel</guid><category><![CDATA[Laravel]]></category><category><![CDATA[Sass]]></category><category><![CDATA[Tailwind CSS]]></category><dc:creator><![CDATA[Catherine Chen]]></dc:creator><pubDate>Sun, 27 Sep 2020 21:27:00 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1683146818184/12f89fea-a8d8-4a44-8061-82302037e641.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-start">Start</h2>
<p><em>Before beginning, make sure you have</em> <a target="_blank" href="https://getcomposer.org/"><em>Composer</em></a> <em>and</em> <a target="_blank" href="https://www.npmjs.com/get-npm"><em>npm</em></a> <em>installed.</em></p>
<p>First, <a target="_blank" href="https://laravel.com/docs/8.x/installation#installing-laravel">create a Laravel project</a>.</p>
<h2 id="heading-install-dependencies">Install dependencies</h2>
<p>Next, <strong>install Laravel's npm dependencies</strong> by running the following commands:</p>
<pre><code class="lang-diff">npm install
npm install tailwindcss
</code></pre>
<p>Sass comes with Laravel, so you don't need to install it manually.</p>
<h3 id="heading-tailwindconfigjs">tailwind.config.js</h3>
<p>You may want to create a <code>tailwind.config.js</code> file by running:</p>
<pre><code class="lang-diff">npx tailwindcss init
</code></pre>
<p>in your root folder.</p>
<h2 id="heading-webpackmixjs">webpack.mix.js</h2>
<p>Inside <code>webpack.mix.js</code>, require <code>tailwindcss</code>:</p>
<pre><code class="lang-diff">const tailwindcss = require('tailwindcss');
</code></pre>
<p>Update your code to read as such:</p>
<pre><code class="lang-diff">mix.sass('resources/sass/app.scss', 'public/css')
    .options({
        processCssUrls: false,
        postCss: [ tailwindcss('./tailwind.config.js') ],
    })
</code></pre>
<p>where <code>app.scss</code> is the name of your main SCSS file.</p>
<p>For each extra SCSS file you have, add another snippet of code. Example:</p>
<pre><code class="lang-diff">mix.sass('resources/sass/app.scss', 'public/css')
    .options({
        processCssUrls: false,
        postCss: [ tailwindcss('./tailwind.config.js') ],
    })
    .sass('resources/sass/app2.scss', 'public/css')
    .options({
        processCssUrls: false,
        postCss: [ tailwindcss('./tailwind.config.js') ],
    })
</code></pre>
<h2 id="heading-previewing-changes">Previewing Changes</h2>
<p>To preview changes to your SCSS files as soon as you make them, run <code>npm run watch</code> as you edit. Every time a SCSS file listed in <code>webpack.config.js</code> is updated, your files will be built again. Make sure to disable caching in your browser first, or the newly built files will not be loaded, and the browser will continue to use your old files.</p>
<hr />
<p>That's it! Now you're all set. :D</p>
]]></content:encoded></item><item><title><![CDATA[Setting up TailwindCSS in a Laravel project]]></title><description><![CDATA[Make sure Composer and npm are installed before you begin! (Note: If you prefer using SASS or LESS, the below tutorial may not be applicable.)
If you haven't set up Laravel yet, follow the steps below. Otherwise, skip these two steps.

Run composer g...]]></description><link>https://dev.cathzchen.com/setting-up-tailwindcss-in-a-laravel-project</link><guid isPermaLink="true">https://dev.cathzchen.com/setting-up-tailwindcss-in-a-laravel-project</guid><category><![CDATA[Laravel]]></category><category><![CDATA[Tailwind CSS]]></category><dc:creator><![CDATA[Catherine Chen]]></dc:creator><pubDate>Wed, 04 Mar 2020 22:10:21 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1683146740636/690b8602-189d-4e05-95ac-5dac6c9f7447.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Make sure <a target="_blank" href="https://getcomposer.org/">Composer</a> and <a target="_blank" href="https://www.npmjs.com/get-npm">npm</a> are installed before you begin! (Note: If you prefer using SASS or LESS, the below tutorial may not be applicable.)</p>
<p>If you haven't set up Laravel yet, follow the steps below. Otherwise, skip these two steps.</p>
<ol>
<li><p>Run <code>composer global require laravel/installer</code></p>
</li>
<li><p>From command line, <code>cd</code> into the directory you want to install Laravel in and run <code>laravel new myProjectName</code>. A folder titled <code>myProjectName</code> will be created with Laravel installed in it.</p>
</li>
</ol>
<h3 id="heading-install-laravel-dependencies">Install Laravel dependencies</h3>
<p>Navigate to your project's root folder (<code>cd myProjectName</code>) and run:</p>
<pre><code class="lang-diff">npm install 
npm install tailwindcss
</code></pre>
<p>Then run:</p>
<pre><code class="lang-diff">cd resources
mkdir css
</code></pre>
<p>The above commands will create a folder named <code>css</code> in <code>resources</code>.</p>
<p>In <code>resources/css</code>, create a file named <code>tw.css</code> (or whatever name you prefer - just be sure to substitute your file's name for <code>tw.css</code> in this tutorial). This file will contain your uncompiled Tailwind CSS. Here, you can add <code>@tailwind base;</code>, <code>@tailwind components;</code>, <code>@tailwind utilities;</code>, etc.</p>
<p>Next, navigate to <code>webpack.config.js</code> in your project's root folder. Add the following code snippet:</p>
<pre><code class="lang-diff">mix.postCss('resources/css/tw.css', 'public/css', [
        require('tailwindcss'),
    ])
    .js('resources/js/app.js', 'public/js')
</code></pre>
<p>Run <code>npm run dev</code>. After Laravel Mix has finished building successfully, you should have a file in <code>public/css</code> containing built Tailwind CSS. To link to this asset in your project, add the following code:</p>
<pre><code class="lang-diff">&lt;link href = {{ asset('css/tw.css') }} rel = "stylesheet" /&gt;
</code></pre>
<p>Now you should be all set to go. Happy coding!</p>
]]></content:encoded></item></channel></rss>