<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Gift Egwuenu</title>
    <description>The latest articles on DEV Community by Gift Egwuenu (@lauragift21).</description>
    <link>https://dev.to/lauragift21</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F19000%2Fc8919037-c4bc-41d7-9c9c-4230dfd51f74.gif</url>
      <title>DEV Community: Gift Egwuenu</title>
      <link>https://dev.to/lauragift21</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/lauragift21"/>
    <language>en</language>
    <item>
      <title>Build a Bookmark Manager with the HONC Stack</title>
      <dc:creator>Gift Egwuenu</dc:creator>
      <pubDate>Wed, 05 Mar 2025 14:12:05 +0000</pubDate>
      <link>https://dev.to/lauragift21/build-a-bookmark-manager-with-the-honc-stack-39b4</link>
      <guid>https://dev.to/lauragift21/build-a-bookmark-manager-with-the-honc-stack-39b4</guid>
      <description>&lt;h2&gt;
  
  
  What Even is the Best Stack? 🤔
&lt;/h2&gt;

&lt;p&gt;As developers, we are constantly in pursuit of the best way to build applications that are frictionless, scalable, and a joy to work with. The ecosystem is filled with countless frameworks, libraries, and tools, each promising to make development easier. But what if there was a stack that combined performance, simplicity, and flexibility?&lt;/p&gt;

&lt;p&gt;Enter the &lt;strong&gt;HONC Stack&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is the HONC Stack?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://honc.dev/" rel="noopener noreferrer"&gt;HONC&lt;/a&gt; is a modern full-stack development approach optimized for speed, developer experience, and global scalability. It stands for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;H&lt;/strong&gt; – &lt;a href="https://hono.dev/" rel="noopener noreferrer"&gt;Hono&lt;/a&gt;: A lightweight, fast, and Edge-first web framework for building APIs and applications.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;O&lt;/strong&gt; – &lt;a href="https://orm.drizzle.team/" rel="noopener noreferrer"&gt;Drizzle ORM&lt;/a&gt;: A type-safe ORM designed for SQL databases with a great developer experience.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;N&lt;/strong&gt; – &lt;strong&gt;Name your Database&lt;/strong&gt;: Whether it's&lt;a href="https://developers.cloudflare.com/d1/" rel="noopener noreferrer"&gt; &lt;strong&gt;Cloudflare D1&lt;/strong&gt; &lt;/a&gt;(SQLite on the Edge), &lt;strong&gt;Neon&lt;/strong&gt; (serverless Postgres), or any other preferred database, HONC allows for flexibility.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;C&lt;/strong&gt; – &lt;a href="https://cloudflare.com/" rel="noopener noreferrer"&gt;Cloudflare&lt;/a&gt;: A powerful developer platform offering Workers, KV, R2, D1, and more, making it an ideal environment for deploying modern apps at the Edge.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Why the HONC Stack?
&lt;/h3&gt;

&lt;p&gt;The HONC stack is designed to take advantage of modern cloud and Edge computing principles, enabling developers to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;⚡ Build fast, globally distributed applications&lt;/strong&gt; with Cloudflare Workers and Hono.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;🛡️ Ensure type safety and maintainability&lt;/strong&gt; with Drizzle ORM.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;🗃️ Use a flexible database&lt;/strong&gt; solution depending on the use case.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;🚀 Deploy effortlessly&lt;/strong&gt; with Cloudflare’s robust global infrastructure.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Getting Started with HONC
&lt;/h2&gt;

&lt;p&gt;Want to try the HONC stack for yourself? Setting up a new project is as easy as running:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm create honc-app@latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This command sets up a new application with Hono, Drizzle ORM, and Cloudflare Worker bindings pre-configured. During setup, you’ll be prompted to choose a template. Select the &lt;strong&gt;D1 base template&lt;/strong&gt; to ensure your application is optimized for Cloudflare D1 as the database solution.&lt;/p&gt;

&lt;h2&gt;
  
  
  Build a Bookmark Manager with the HONC Stack
&lt;/h2&gt;

&lt;p&gt;To showcase the HONC Stack in action, let's build a simple &lt;strong&gt;Bookmark Manager&lt;/strong&gt; that allows users to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add bookmarks (title, URL, description, tags)&lt;/li&gt;
&lt;li&gt;View saved bookmarks&lt;/li&gt;
&lt;li&gt;Delete bookmarks&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Set Up Your HONC App&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;This part was already done in the step above, go ahead and run the application using:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm run db:setup
npm run dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;strong&gt;Configure Cloudflare D1&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Let's create a new D1 database:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx wrangler d1 create bookmarks_db
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Add it to &lt;code&gt;wrangler.toml&lt;/code&gt; and update the database name in &lt;code&gt;package.json&lt;/code&gt; scripts accordingly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight toml"&gt;&lt;code&gt;&lt;span class="nn"&gt;[[d1_databases]]&lt;/span&gt;
&lt;span class="py"&gt;binding&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"DB"&lt;/span&gt;
&lt;span class="py"&gt;database_name&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"bookmarks_db"&lt;/span&gt;
&lt;span class="py"&gt;database_id&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"&amp;lt;your-database-id&amp;gt;"&lt;/span&gt;
&lt;span class="py"&gt;migrations_dir&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"drizzle/migrations"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;strong&gt;Define the Database Schema (Drizzle ORM)&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Update the &lt;code&gt;schema.ts&lt;/code&gt; to define the bookmarks table:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;sql&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;drizzle-orm&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;integer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;sqliteTable&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;text&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;drizzle-orm/sqlite-core&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;NewBookmark&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;typeof&lt;/span&gt; &lt;span class="nx"&gt;bookmarks&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;$inferInsert&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;bookmarks&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;sqliteTable&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;bookmarks&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;integer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;id&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;mode&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;number&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;}).&lt;/span&gt;&lt;span class="nf"&gt;primaryKey&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
  &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;text&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;title&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;notNull&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
  &lt;span class="na"&gt;url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;text&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;url&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;notNull&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
  &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;text&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;description&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="na"&gt;tags&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;text&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;tags&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="na"&gt;createdAt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;text&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;created_at&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;notNull&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;default&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;sql&lt;/span&gt;&lt;span class="s2"&gt;`(CURRENT_TIMESTAMP)`&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;strong&gt;Create API Routes with OpenAPI (Hono)&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Next, update the &lt;code&gt;index.ts&lt;/code&gt; to define API endpoints with OpenAPI support:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;drizzle&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;DrizzleD1Database&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;drizzle-orm/d1&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;eq&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;drizzle-orm&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;createFiberplane&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@fiberplane/hono&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;OpenAPIHono&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;createRoute&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@hono/zod-openapi&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;schema&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;./db/schema&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Bindings&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;DB&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;D1Database&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Variables&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;db&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;DrizzleD1Database&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;OpenAPIHono&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;Bindings&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Bindings&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nl"&gt;Variables&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Variables&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;use&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;next&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;db&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;drizzle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;DB&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;db&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;next&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;BookmarkSchema&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;object&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;number&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;openapi&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;example&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;}),&lt;/span&gt;
  &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;string&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;openapi&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;example&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;My Bookmark&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;}),&lt;/span&gt;
  &lt;span class="na"&gt;url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;string&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;url&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;openapi&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;example&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://example.com&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;}),&lt;/span&gt;
  &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;string&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;optional&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;openapi&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;example&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;A useful link&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;}),&lt;/span&gt;
  &lt;span class="na"&gt;tags&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;string&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;optional&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;openapi&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;example&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;tech, coding&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;}),&lt;/span&gt;
&lt;span class="p"&gt;}).&lt;/span&gt;&lt;span class="nf"&gt;openapi&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Bookmark&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;getBookmarks&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;createRoute&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;get&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/api/bookmarks&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;responses&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;application/json&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;schema&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;array&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;BookmarkSchema&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Bookmarks fetched successfully&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;createBookmark&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;createRoute&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;post&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/api/bookmark&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;request&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;required&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;application/json&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="na"&gt;schema&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;BookmarkSchema&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;responses&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="mi"&gt;201&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;application/json&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="na"&gt;schema&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;BookmarkSchema&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Bookmark created successfully&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;deleteBookmark&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;createRoute&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;delete&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/api/bookmark/{id}&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;responses&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;application/json&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;schema&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;object&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;message&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;string&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Bookmark deleted successfully&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;openapi&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;getBookmarks&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;db&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;db&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;bookmarks&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;select&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="k"&gt;from&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;schema&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;bookmarks&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;bookmarks&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;openapi&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;createBookmark&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;db&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;db&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;description&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;tags&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;valid&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;json&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;newBookmark&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;db&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;insert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;schema&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;bookmarks&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;values&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;description&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;tags&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;returning&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;newBookmark&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;201&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;strong&gt;Seed the Database&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;To populate the database with actual sample bookmarks, update the existing &lt;code&gt;scripts/seed.ts&lt;/code&gt; file to include:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;bookmarks&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./src/db/schema&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;sampleBookmarks&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Hono Framework&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://hono.dev&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;A lightweight web framework for building APIs and applications.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;tags&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;hono, framework, edge&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Drizzle ORM&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://orm.drizzle.team&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;A type-safe ORM designed for SQL databases.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;tags&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;orm, database, typescript&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Cloudflare D1&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://developers.cloudflare.com/d1/&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Cloudflare’s globally distributed, serverless database.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;tags&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;cloudflare, database, d1&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;HTMX&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://htmx.org&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;A library that allows access to modern browser features directly from HTML.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;tags&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;htmx, frontend, html&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;MDN Web Docs&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://developer.mozilla.org&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Comprehensive documentation for web technologies.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;tags&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;documentation, web, mdn&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="nf"&gt;seedDatabase&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;seedDatabase&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="p"&gt;...&lt;/span&gt;
  &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;insert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;bookmarks&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;values&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;sampleBookmarks&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;✅ Database seeded successfully!&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;isProd&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;❌ Error seeding database:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;exit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;finally&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;exit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;strong&gt;Build a Frontend with Hono JSX Renderer&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Use Hono's JSX renderer to serve the frontend dynamically:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;jsxRenderer&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;hono/jsx-renderer&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;use&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;*&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;jsxRenderer&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;

&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;db&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;db&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="na"&gt;bookmarks&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Bookmark&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;select&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="k"&gt;from&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;schema&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;bookmarks&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;render&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;html&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;head&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;title&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Bookmark Manager&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;title&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;script&lt;/span&gt; &lt;span class="na"&gt;src&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"https://cdn.tailwindcss.com"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;script&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;script&lt;/span&gt; &lt;span class="na"&gt;src&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"https://unpkg.com/htmx.org@1.9.5"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;script&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;head&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;body&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"bg-gray-100 min-h-screen"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;h1&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"text-4xl text-center font-bold mb-4 my-6"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;📌 Bookmark Manager&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;h1&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"max-w-xl w-full mx-auto bg-white p-6 my-6 rounded shadow-md"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;form&lt;/span&gt;
            &lt;span class="na"&gt;hx-post&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"/api/bookmark"&lt;/span&gt;
            &lt;span class="na"&gt;hx-target&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"#bookmarkList"&lt;/span&gt;
            &lt;span class="na"&gt;hx-swap&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"beforeend"&lt;/span&gt;
            &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"flex flex-col gap-2 mb-4"&lt;/span&gt;
          &lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;input&lt;/span&gt;
              &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"text"&lt;/span&gt;
              &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"title"&lt;/span&gt;
              &lt;span class="na"&gt;placeholder&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"Title"&lt;/span&gt;
              &lt;span class="na"&gt;required&lt;/span&gt;
              &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"border p-2 rounded"&lt;/span&gt;
            &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;input&lt;/span&gt;
              &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"url"&lt;/span&gt;
              &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"url"&lt;/span&gt;
              &lt;span class="na"&gt;placeholder&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"URL"&lt;/span&gt;
              &lt;span class="na"&gt;required&lt;/span&gt;
              &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"border p-2 rounded"&lt;/span&gt;
            &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="cm"&gt;/* Description and Tags (optional) */&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
            &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;input&lt;/span&gt;
              &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"text"&lt;/span&gt;
              &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"description"&lt;/span&gt;
              &lt;span class="na"&gt;placeholder&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"Description"&lt;/span&gt;
              &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"border p-2 rounded"&lt;/span&gt;
            &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;input&lt;/span&gt;
              &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"text"&lt;/span&gt;
              &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"tags"&lt;/span&gt;
              &lt;span class="na"&gt;placeholder&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"Tags (comma-separated)"&lt;/span&gt;
              &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"border p-2 rounded"&lt;/span&gt;
            &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;
              &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"submit"&lt;/span&gt;
              &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"bg-blue-600 text-white py-2 px-4 rounded hover:bg-blue-700"&lt;/span&gt;
            &lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
              Add Bookmark
            &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;form&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;

        &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;ul&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"bookmarkList"&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"space-y-2 max-w-xl w-full mx-auto"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;bookmarks&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
              &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;li&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"p-2 border rounded flex justify-between items-center bg-white"&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;`bookmark-&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"flex flex-col"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
                  &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;span&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"font-semibold"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;span&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
                  &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;small&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;description&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;small&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
                  &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;small&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"text-gray-500"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;tags&lt;/span&gt; &lt;span class="o"&gt;??&lt;/span&gt; &lt;span class="dl"&gt;''&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;small&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"space-x-2"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
                  &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;a&lt;/span&gt;
                    &lt;span class="na"&gt;href&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
                    &lt;span class="na"&gt;target&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"_blank"&lt;/span&gt;
                    &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"text-blue-600 hover:underline"&lt;/span&gt;
                  &lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
                    Visit
                  &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;a&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
                  &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;
                    &lt;span class="na"&gt;hx-delete&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;`/api/bookmark/&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
                    &lt;span class="na"&gt;hx-target&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;`#bookmark-&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
                    &lt;span class="na"&gt;hx-swap&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"outerHTML"&lt;/span&gt;
                    &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"bg-red-500 text-white px-2 py-1 rounded hover:bg-red-600"&lt;/span&gt;
                  &lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
                    Delete
                  &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
              &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;li&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
          &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;ul&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;body&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;html&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To serve the frontend with JSX, rename your entry files to .tsx (for example, index.tsx) instead of .ts, ensuring that Hono can properly compile and serve JSX. For the full code checkout the &lt;a href="https://github.com/lauragift21/bookmark-manager" rel="noopener noreferrer"&gt;GitHub Repo&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Deploy Everything to Cloudflare&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Afterwards, run the migration script for production and optionally seed the database:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm run db:migrate:prod
npm run db:seed:prod

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Finally, deploy to production:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm run deploy
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The Bookmark Manager is now live with a minimal frontend!&lt;/p&gt;

&lt;h2&gt;
  
  
  Wrapping Up
&lt;/h2&gt;

&lt;p&gt;The HONC stack makes it easy to build modern, efficient applications. Try it out and start building today!&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>honc</category>
    </item>
    <item>
      <title>Nevertheless, Gift Continues to Thrive in 2022</title>
      <dc:creator>Gift Egwuenu</dc:creator>
      <pubDate>Wed, 09 Mar 2022 06:04:55 +0000</pubDate>
      <link>https://dev.to/lauragift21/nevertheless-gift-continues-to-thrive-in-2022-1h34</link>
      <guid>https://dev.to/lauragift21/nevertheless-gift-continues-to-thrive-in-2022-1h34</guid>
      <description>&lt;p&gt;I have written a SheCoded post every year since 2018. I always like to come back to them on this day to see how much progress I've made with my tech career.&lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="/lauragift21" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F19000%2Fc8919037-c4bc-41d7-9c9c-4230dfd51f74.gif" alt="lauragift21"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/lauragift21/nevertheless-egwuenu-gift-coded--54ka" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Nevertheless, Gift Coded&lt;/h2&gt;
      &lt;h3&gt;Gift Egwuenu ・ Mar 6 '18&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#wecoded&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;



&lt;div class="ltag__link"&gt;
  &lt;a href="/lauragift21" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F19000%2Fc8919037-c4bc-41d7-9c9c-4230dfd51f74.gif" alt="lauragift21"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/lauragift21/nevertheless-egwuenu-gift-coded-27a4" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Nevertheless, Egwuenu Gift Coded&lt;/h2&gt;
      &lt;h3&gt;Gift Egwuenu ・ Mar 7 '19&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#wecoded&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#vuevixens&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;



&lt;div class="ltag__link"&gt;
  &lt;a href="/lauragift21" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F19000%2Fc8919037-c4bc-41d7-9c9c-4230dfd51f74.gif" alt="lauragift21"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/lauragift21/nevertheless-gift-egwuenu-coded-1h52" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Nevertheless, Gift Egwuenu Coded ✨&lt;/h2&gt;
      &lt;h3&gt;Gift Egwuenu ・ Mar 5 '20&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#wecoded&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;



&lt;div class="ltag__link"&gt;
  &lt;a href="/lauragift21" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F19000%2Fc8919037-c4bc-41d7-9c9c-4230dfd51f74.gif" alt="lauragift21"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/lauragift21/nevertheless-gift-egwuenu-coded-1h52" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Nevertheless, Gift Egwuenu Coded ✨&lt;/h2&gt;
      &lt;h3&gt;Gift Egwuenu ・ Mar 5 '20&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#wecoded&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;





&lt;p&gt;Throughout my career in tech, I have had to proof myself in some way, and all withstanding the imposter syndrome I struggle with when taking on new challenges but I'm still here thriving.&lt;/p&gt;

&lt;p&gt;My biggest achievement this year is switching gears and starting a new career in &lt;strong&gt;Developer Relations&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I now work as a Developer Advocate at a great company and this is just a start to the great things I will do this year.&lt;/p&gt;

&lt;p&gt;My goal is to continue to be my best self, share the work I do and advocate for other women like myself in the industry.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;There is no limit to what we, as women, can accomplish. -- Michelle Obama.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Let's keep breaking the bias!&lt;/p&gt;

</description>
      <category>wecoded</category>
    </item>
    <item>
      <title>My Experience using Polywork!</title>
      <dc:creator>Gift Egwuenu</dc:creator>
      <pubDate>Tue, 15 Jun 2021 21:46:54 +0000</pubDate>
      <link>https://dev.to/lauragift21/my-experience-using-polywork-14l</link>
      <guid>https://dev.to/lauragift21/my-experience-using-polywork-14l</guid>
      <description>&lt;p&gt;I joined &lt;a href="https://www.polywork.com/" rel="noopener noreferrer"&gt;Polywork&lt;/a&gt; a few weeks ago, it's been an amazing experience and I thought it'll be great to pen down my thoughts as an early adopter of the platform. In case you are not familiar with Polywork, that's not a problem I can give a &lt;strong&gt;tl;dr&lt;/strong&gt; explanation of what the platform is but I'll &lt;a href="https://www.polywork.com/" rel="noopener noreferrer"&gt;recommend you check it out yourself&lt;/a&gt; the landing page does a great job of explaining the platform in the most creative way. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Polywork is a platform for Multiplayers - creatives, developers, designers, anyone who is looking to build a platform with their personal and professional work and achievements that allow you to represent who you are and the value you create. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You know how you have always wanted a tool to exist for the things you needed so bad that you carve into the side-projects hell and decide to make that tool yourself or just find another solution? I was exactly at this point earlier in the year, I wanted a unified way of sharing all the things I was doing in one place - (from my writing, videos, speaking, etc) I do these outside my 9-5 job and it's been a big part of my career so I wanted to have one place where I can track all of these activities for myself and for others to find as well. &lt;/p&gt;

&lt;h2&gt;
  
  
  One place for all my work!
&lt;/h2&gt;

&lt;p&gt;So I got thinking, I already had a Blog, Channel, Twitter profile and so many more but where do I collate all of the things that I was doing, that's exactly the problem I had. I found a tool - &lt;a href="https://linktr.ee/" rel="noopener noreferrer"&gt;Linktree&lt;/a&gt; that I decided to give a try but it wasn't exactly what I needed. This only helped direct people to all the other platforms where my content lived but not exactly showing them the content in one place. &lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgiftegwuenu.com%2Fimages%2Fuploads%2Fscreenshot-2021-06-14-at-22.08.05.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgiftegwuenu.com%2Fimages%2Fuploads%2Fscreenshot-2021-06-14-at-22.08.05.png" alt="Linktree profile"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;I went with it regardless at the time I thought it might be nice to build something for myself similar to Linktree and have that live on my domain but I never got to it. Thanks to &lt;a href="https://twitter.com/radiomorillo" rel="noopener noreferrer"&gt;Stephanie Morillo&lt;/a&gt; for the idea though. &lt;/p&gt;

&lt;p&gt;Down the line, I came up with a different idea to start a &lt;a href="https://giftegwuenu.ck.page/a2acb01f99" rel="noopener noreferrer"&gt;weekly newsletter&lt;/a&gt; with all the content and work I created for the week and share that. That was not a bad idea I thought so I went with that. This worked but for a few weeks, I would almost miss sending the update for the week, and the week after that when I don't create any content I feel there's no need to send an issue, and the big picture I wanted all content in one place to access at any time was not exactly working with this solution. &lt;/p&gt;

&lt;p&gt;Imagine I want to check what I did for the month I have to go back and read four issues of my newsletter which is not a terrible idea, but you know if there's a better solution definitely will pick that over this. So I decided to move the newsletter to a monthly recurring update where I share all the things I did for the month. &lt;/p&gt;

&lt;h2&gt;
  
  
  The Future of Professional Networking!
&lt;/h2&gt;

&lt;p&gt;Well, I finally found the tool I needed - &lt;strong&gt;Polywork&lt;/strong&gt;, and I'll tell you why in a bit but thanks to my Twitter timeline I've been seeing this pop up for a few days unsure what it is I just skimmed through the tweets until I decided to do a google search! I was hooked from reading up what the platform is about so I immediately signed up and joined the waitlist. &lt;/p&gt;

&lt;p&gt;Remember how I wanted to have all the work I've done in one place? Polywork solves exactly that for me and even offers more and that's why I'm very excited about it. The platform gives you space where you can share your work, be yourself and you can blend both your professional and personal interests without feeling like it's not the right place for you to share them. Other platforms I've tried - "LinkedIn" for example I mostly feel awkward sharing my vlog content when I make them because I see it as a "professional", "strictly-work" platform even though I've seen other people share this kind of content there I still feel very weird about it. &lt;/p&gt;

&lt;p&gt;Polywork is a social and professional network for people like me that want to express themselves, share the work we're doing, and generally connect with other like-minded individuals. Before I go on with what I like about the platform and some of its features, I just thought it'll be nice to self plug my profile 😉 &lt;a href="https://timeline.giftegwuenu.com/" rel="noopener noreferrer"&gt;check out my Polywork Profile still updating previous years' work need all of it documented.&lt;/a&gt; So, the first thing that struck my attention has the be the superb illustrations and the minimal design used on the platform it gives off a very modern vibe and general good UX for users of the platform. The other thing I also like is how they allow me to track all my achievements in a timeline where I can share all the work I've done from the start of my career that's just great and what I wanted in the first place, problem solved! &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgiftegwuenu.com%2Fimages%2Fuploads%2Fscreenshot-2021-06-14-at-23.09.41.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgiftegwuenu.com%2Fimages%2Fuploads%2Fscreenshot-2021-06-14-at-23.09.41.png" alt="Polywork Profile Page"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;In addition, you can create activity tags for your post this is where I enjoy just randomly checking what activities tag already exist and I also just discovered I can create my own ain't that cool! &lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgiftegwuenu.com%2Fimages%2Fuploads%2Fscreenshot-2021-06-14-at-23.15.56.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgiftegwuenu.com%2Fimages%2Fuploads%2Fscreenshot-2021-06-14-at-23.15.56.png" alt="Activity Tags Selection"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;A part of this that just makes absolute sense to me is the fact that you don't get likes and comments on your posts like other social media platforms &lt;a href="https://www.calnewport.com/books/digital-minimalism/" rel="noopener noreferrer"&gt;I once read a book that justified why having these metrics could be damaging&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;Do you know what else is possible? You can set up a custom domain for your profile and a couple of days ago &lt;a href="https://www.giftegwuenu.com/setup-sub-domain-on-polywork-with-netlify-namecheap/" rel="noopener noreferrer"&gt;I published a guide on how to set up a custom domain&lt;/a&gt; with Netlify and Namecheap check it out!  &lt;/p&gt;

&lt;h2&gt;
  
  
  Connections and Collaboration
&lt;/h2&gt;

&lt;p&gt;Unlocked Polywork isn't just a platform where you can share your work, it's also a connected network of professionals. I like to think of it as where the future of work is going where there's less barrier in finding and connecting to other professionals based on their work and interests. &lt;strong&gt;Multiverse&lt;/strong&gt; is one place where you can find all of these. You can explore trending badges, featured people, collaboration possibilities and so much more this is what I've been missing from other platforms and to think this is just the start of all of this. &lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgiftegwuenu.com%2Fimages%2Fuploads%2Fscreenshot-2021-06-15-at-00.17.51.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgiftegwuenu.com%2Fimages%2Fuploads%2Fscreenshot-2021-06-15-at-00.17.51.png" alt="Multiverse on Polywork"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;I'm excited to see where the platform goes in terms of adoption from the community and overall growth, it's still in early beta and looking this good already, I'm looking forward to trying all the cool updates the team is building to make this a unified platform for multiplayer.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Optional Chaining In JavaScript</title>
      <dc:creator>Gift Egwuenu</dc:creator>
      <pubDate>Wed, 07 Apr 2021 08:44:56 +0000</pubDate>
      <link>https://dev.to/lauragift21/optional-chaining-in-javascript-12a3</link>
      <guid>https://dev.to/lauragift21/optional-chaining-in-javascript-12a3</guid>
      <description>&lt;p&gt;Are you always frustrated when you try to access a value from an object/array and it returns this error &lt;code&gt;Uncaught TypeError: Cannot read property 'value' of undefined&lt;/code&gt; because the value is not available yet or does not exist? Let's see an example, say we have &lt;code&gt;countries&lt;/code&gt; object with values like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;countries&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Nigeria&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;region&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Africa&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;population&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;186988000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;currency&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;code&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;NGN&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Nigerian Naira&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;symbol&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;₦&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and we try to return a value that is not yet available or doesn't exist yet:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;countries&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;languages&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;we will get back an error from the browser that the value is undefined. How do we tackle this problem? we can validate that each reference in the nested property is available with an expression like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;countries&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;languages&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;countries&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;languages&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now, this won't throw an error and will return &lt;code&gt;undefined&lt;/code&gt; if a value doesn't exist. To avoid doing that extra step of validating we can use a different method - &lt;strong&gt;Optional Chaining&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Introducing the Optional Chaining Operator
&lt;/h3&gt;

&lt;p&gt;The JavaScript Optional Chaining Operator is a native feature introduced in ES2020 that allows you to safely access deeply nested properties of an object without having to check for the existence of each of them. &lt;/p&gt;

&lt;p&gt;Optional Chaining uses the &lt;code&gt;?.&lt;/code&gt; operator to access the properties of objects. The usage of the &lt;code&gt;?.&lt;/code&gt; operator is similar to the typical &lt;code&gt;.&lt;/code&gt; operator, but when a reference is &lt;code&gt;undefined&lt;/code&gt; or &lt;code&gt;null&lt;/code&gt;, rather than throwing an error, it would return &lt;code&gt;undefined&lt;/code&gt;. &lt;/p&gt;

&lt;p&gt;The syntax for optional chaining can be used in any of the following positions:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;prop&lt;/span&gt;       &lt;span class="c1"&gt;// optional static property access&lt;/span&gt;
&lt;span class="nx"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;?.[&lt;/span&gt;&lt;span class="nx"&gt;expr&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;     &lt;span class="c1"&gt;// optional dynamic property access&lt;/span&gt;
&lt;span class="nx"&gt;func&lt;/span&gt;&lt;span class="p"&gt;?.(...&lt;/span&gt;&lt;span class="nx"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;// optional function or method call&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In our previous example, we can then change the expression to this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;countries&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;languages&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will check if the parent value exists and if it doesn't it returns &lt;code&gt;undefined&lt;/code&gt;. Optional chaining can be used often when we are fetching responses from an API we may not be 100% sure if a certain object exists in our API response.&lt;/p&gt;

&lt;h3&gt;
  
  
  Browser Support
&lt;/h3&gt;

&lt;p&gt;The Optional Chaining Operator is currently supported in all browsers except Internet Explorer as seen from &lt;a href="https://caniuse.com/?search=optional%20chaining" rel="noopener noreferrer"&gt;CanIUse&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--4Zw1bmDC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://giftegwuenu.com/images/uploads/mdn-javascript__operators__optional_chaining-1617785356676.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--4Zw1bmDC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://giftegwuenu.com/images/uploads/mdn-javascript__operators__optional_chaining-1617785356676.png" alt="Can I use - Optional Chaining" width="800" height="401"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;MDN Resource: &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Optional_chaining" rel="noopener noreferrer"&gt;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Optional_chaining&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;TC39 Proposal Optional Chaining: &lt;a href="https://github.com/tc39/proposal-optional-chaining" rel="noopener noreferrer"&gt;https://github.com/tc39/proposal-optional-chaining&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Video Format
&lt;/h2&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/u29ZiZnR-q0"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Git: Delete Multiple Branches</title>
      <dc:creator>Gift Egwuenu</dc:creator>
      <pubDate>Tue, 23 Mar 2021 13:13:04 +0000</pubDate>
      <link>https://dev.to/lauragift21/git-delete-multiple-branches-5537</link>
      <guid>https://dev.to/lauragift21/git-delete-multiple-branches-5537</guid>
      <description>&lt;p&gt;Have you been piling up so many branches you don't even use anymore and want to clean them up? In this article, I'll share snippets you can use to do that quickly from your terminal.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Note: Only use this if you're sure the branches are not needed anymore.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Deleting Local Branch
&lt;/h3&gt;

&lt;p&gt;You can delete a local branch that has been merged into the remote and also delete an un-merged local branch. You want to make sure you know which branch is merged in or not and to do that you can use the following commands:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;git branch&lt;/code&gt; - to list out all local branches&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;git branch -r&lt;/code&gt; - to list all remote branches&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;git branch -a&lt;/code&gt; - to list both local and remote branches&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;git branch --merged&lt;/code&gt; - to list all the branches that have been merged&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;git branch --no-merged&lt;/code&gt; - to list all branches not merged&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now to delete the local branches, you want to do either of these:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

&lt;span class="c"&gt;# delete fully merged branch&lt;/span&gt;
git branch &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'name-of-branch'&lt;/span&gt; 

&lt;span class="c"&gt;# I use the git alias a lot so this also applies&lt;/span&gt;
gbd &lt;span class="s1"&gt;'name-of-branch'&lt;/span&gt;

&lt;span class="c"&gt;# delete branch (even if not merged)&lt;/span&gt;
git branch &lt;span class="nt"&gt;-D&lt;/span&gt; &lt;span class="s1"&gt;'name-of-branch'&lt;/span&gt;

&lt;span class="c"&gt;# alias &lt;/span&gt;
gbD &lt;span class="s1"&gt;'name-of-branch'&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h3&gt;
  
  
  Deleting Multiple Local Branches
&lt;/h3&gt;

&lt;p&gt;Feeling confident enough and you want to delete multiple local branches you can do so using the command:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Note: You need to be careful when doing this so you don't delete a branch that is not merged in yet and adding the &lt;code&gt;--merged&lt;/code&gt; flag helps ascertain that you don't do that.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

git branch &lt;span class="nt"&gt;--merged&lt;/span&gt; | egrep &lt;span class="nt"&gt;-v&lt;/span&gt; &lt;span class="s2"&gt;"(^&lt;/span&gt;&lt;span class="se"&gt;\*&lt;/span&gt;&lt;span class="s2"&gt;|master|main|develop)"&lt;/span&gt; | xargs git branch &lt;span class="nt"&gt;-d&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;To further explain the command above, &lt;code&gt;git branch --merged&lt;/code&gt; will list out all the merged branches, &lt;code&gt;egrep -v "(^\*|master|main)"&lt;/code&gt; will ensure the master and main branch is not deleted,  you can add other branches you want to exclude here. &lt;code&gt;xargs git branch -d&lt;/code&gt; will go ahead and delete the remaining branches.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

&lt;span class="c"&gt;# ⚠️ adding --no-merged and -D flag will go ahead and delete unmerged branches&lt;/span&gt;
git branch &lt;span class="nt"&gt;--no-merged&lt;/span&gt; | egrep &lt;span class="nt"&gt;-v&lt;/span&gt; &lt;span class="s2"&gt;"(^&lt;/span&gt;&lt;span class="se"&gt;\*&lt;/span&gt;&lt;span class="s2"&gt;|master|main|develop)"&lt;/span&gt; | xargs git branch &lt;span class="nt"&gt;-D&lt;/span&gt;

&lt;span class="c"&gt;# ⚠️ use this for when you want to delete all the branches both merged and unmerged&lt;/span&gt;
git branch | egrep &lt;span class="nt"&gt;-v&lt;/span&gt; &lt;span class="s2"&gt;"(^&lt;/span&gt;&lt;span class="se"&gt;\*&lt;/span&gt;&lt;span class="s2"&gt;|master|main|develop)"&lt;/span&gt; | xargs &lt;span class="nb"&gt;echo &lt;/span&gt;git branch &lt;span class="nt"&gt;-D&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h3&gt;
  
  
  Deleting Remote Branches
&lt;/h3&gt;

&lt;p&gt;In a case where you need to delete a remote branch because you are done working on it and it had been merged into the remote master branch. You can delete a remote branch using the &lt;code&gt;--delete&lt;/code&gt; flag and a git push to the remote branch:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

git push origin &lt;span class="nt"&gt;--delete&lt;/span&gt; &lt;span class="s1"&gt;'name-of-branch'&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h3&gt;
  
  
  Deleting Multiple Remote Branches
&lt;/h3&gt;

&lt;p&gt;When you need to delete multiple remote branches and don't want to do them individually with the command previously stated, you can do so using:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

git branch &lt;span class="nt"&gt;-r&lt;/span&gt; &lt;span class="nt"&gt;--merged&lt;/span&gt; | egrep &lt;span class="nt"&gt;-v&lt;/span&gt; &lt;span class="s2"&gt;"(^&lt;/span&gt;&lt;span class="se"&gt;\*&lt;/span&gt;&lt;span class="s2"&gt;|master|main|develop)"&lt;/span&gt; | &lt;span class="nb"&gt;sed&lt;/span&gt; &lt;span class="s1"&gt;'s/origin\///'&lt;/span&gt; | xargs &lt;span class="nt"&gt;-n&lt;/span&gt; 1 git push origin &lt;span class="nt"&gt;--delete&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;This will delete all remote merged branches excluding &lt;code&gt;master&lt;/code&gt; and &lt;code&gt;main&lt;/code&gt;. To further explain the command:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;git branch -r --merged&lt;/code&gt; - will list out all the remote branches that are merged&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;egrep -v "(^\*|master|main)"&lt;/code&gt; - exclude branch master and main&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;sed 's/origin\///'&lt;/code&gt; - because the remote branches are prefixed with &lt;code&gt;origin/&lt;/code&gt; this command will filter that part out so it returns only the branch name.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;xargs -n 1 git push origin --delete&lt;/code&gt; - deletes the remaining branches.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now if you're feeling very confident and want to delete all un-merged branches or all the remote branches use this:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

// ⚠️ deletes all un-merged branches from remote 
git branch &lt;span class="nt"&gt;-r&lt;/span&gt; &lt;span class="nt"&gt;--no-merged&lt;/span&gt; | egrep &lt;span class="nt"&gt;-v&lt;/span&gt; &lt;span class="s2"&gt;"(^&lt;/span&gt;&lt;span class="se"&gt;\*&lt;/span&gt;&lt;span class="s2"&gt;|master|main|develop)"&lt;/span&gt; | &lt;span class="nb"&gt;sed&lt;/span&gt; &lt;span class="s1"&gt;'s/origin\///'&lt;/span&gt; | xargs &lt;span class="nt"&gt;-n&lt;/span&gt; 1 &lt;span class="nb"&gt;echo &lt;/span&gt;git push origin &lt;span class="nt"&gt;--delete&lt;/span&gt;

// delete all branches including merged and unmerged 🙊 
git branch &lt;span class="nt"&gt;-r&lt;/span&gt; | egrep &lt;span class="nt"&gt;-v&lt;/span&gt; &lt;span class="s2"&gt;"(^&lt;/span&gt;&lt;span class="se"&gt;\*&lt;/span&gt;&lt;span class="s2"&gt;|master|main|develop)"&lt;/span&gt; | &lt;span class="nb"&gt;sed&lt;/span&gt; &lt;span class="s1"&gt;'s/origin\///'&lt;/span&gt; | xargs &lt;span class="nt"&gt;-n&lt;/span&gt; 1 &lt;span class="nb"&gt;echo &lt;/span&gt;git push origin &lt;span class="nt"&gt;--delete&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;I added the &lt;code&gt;echo&lt;/code&gt; command to print what I'll be doing to the screen so I'm sure I know what I'm about to delete.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgiftegwuenu.com%2Fimages%2Fuploads%2Fscreenshot-2021-03-23-at-14.09.22.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgiftegwuenu.com%2Fimages%2Fuploads%2Fscreenshot-2021-03-23-at-14.09.22.png" alt="List of remote branches"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now you can take the &lt;code&gt;echo&lt;/code&gt; command out:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

&lt;span class="c"&gt;# ⚠️ deletes all un-merged branches from remote &lt;/span&gt;
git branch &lt;span class="nt"&gt;-r&lt;/span&gt; &lt;span class="nt"&gt;--no-merged&lt;/span&gt; | egrep &lt;span class="nt"&gt;-v&lt;/span&gt; &lt;span class="s2"&gt;"(^&lt;/span&gt;&lt;span class="se"&gt;\*&lt;/span&gt;&lt;span class="s2"&gt;|master|main|develop)"&lt;/span&gt; | &lt;span class="nb"&gt;sed&lt;/span&gt; &lt;span class="s1"&gt;'s/origin\///'&lt;/span&gt; | xargs &lt;span class="nt"&gt;-n&lt;/span&gt; 1 git push origin &lt;span class="nt"&gt;--delete&lt;/span&gt;

&lt;span class="c"&gt;# delete all branches including merged and unmerged 🙊 &lt;/span&gt;
git branch &lt;span class="nt"&gt;-r&lt;/span&gt; | egrep &lt;span class="nt"&gt;-v&lt;/span&gt; &lt;span class="s2"&gt;"(^&lt;/span&gt;&lt;span class="se"&gt;\*&lt;/span&gt;&lt;span class="s2"&gt;|master|main|develop)"&lt;/span&gt; | &lt;span class="nb"&gt;sed&lt;/span&gt; &lt;span class="s1"&gt;'s/origin\///'&lt;/span&gt; | xargs &lt;span class="nt"&gt;-n&lt;/span&gt; 1 git push origin &lt;span class="nt"&gt;--delete&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;That's it! I hope this was helpful for you. I know I will be referencing this again when I need it.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Deployment with Cloudflare Pages</title>
      <dc:creator>Gift Egwuenu</dc:creator>
      <pubDate>Thu, 18 Mar 2021 08:12:25 +0000</pubDate>
      <link>https://dev.to/lauragift21/deployment-with-cloudflare-pages-1j0l</link>
      <guid>https://dev.to/lauragift21/deployment-with-cloudflare-pages-1j0l</guid>
      <description>&lt;p&gt;&lt;a href="https://pages.cloudflare.com/" rel="noopener noreferrer"&gt;Cloudflare Pages&lt;/a&gt; was recently just released in public beta and I'm very happy to give it my first try. In this tutorial, we'll walk through a step-by-step process of deploying a Nuxt.js application using Cloudflare Pages. &lt;/p&gt;

&lt;h1&gt;
  
  
  What is Cloudflare Pages?
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://pages.cloudflare.com/" rel="noopener noreferrer"&gt;Pages&lt;/a&gt; is a platform for deploying your frontend application. It is super-fast, always up-to-date, and deployed directly from your GitHub account. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.giftegwuenu.com%2Fimages%2Fuploads%2Fscreenshot-2021-03-18-at-09.31.42.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.giftegwuenu.com%2Fimages%2Fuploads%2Fscreenshot-2021-03-18-at-09.31.42.png" alt="Cloudflare Pages landing page"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;h2&gt;
  
  
  Getting Started
&lt;/h2&gt;

&lt;p&gt;Let's start with creating a &lt;a href="https://nuxtjs.org/" rel="noopener noreferrer"&gt;Nuxt.js&lt;/a&gt; website. I wanted the core of the tutorial to be Cloudflare Pages so I went with a minimal demo. To set up a new Nuxt.js app you need to use the command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npx create-nuxt-app cloudflare-demo 
or 
yarn create nuxt-app cloudflare-demo 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You'll get prompted to answer some questions like what UI framework, Linter, Testing Framework you want to use. we'll skip all that but pick &lt;a href="https://tailwindcss.com/" rel="noopener noreferrer"&gt;Tailwind CSS&lt;/a&gt; as the UI library of choice instead of writing our CSS from scratch. &lt;br&gt;
After following this, all the dependencies will be installed and our project is now ready to work with. &lt;br&gt;
To start your local environment and get into coding, run the following:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cd cloudflare-demo 
yarn dev 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The application should now be available on localhost:3000! &lt;/p&gt;

&lt;h2&gt;
  
  
  Designing the Demo
&lt;/h2&gt;

&lt;p&gt;With our application now running, you get a landing page template from Nuxt as a default but instead of just deploying this. Let's twerk it a bit before deploying. &lt;br&gt;
If you want to learn more about Nuxt.js, &lt;a href="https://www.giftegwuenu.com/getting-started-with-nuxt-js/" rel="noopener noreferrer"&gt;I wrote a getting started guide on it.&lt;/a&gt; &lt;br&gt;
For this demo, we'll make a few edits to the already existing &lt;code&gt;pages/index.vue&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;template&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;div&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;div&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"https://giftegwuenu.com/deployment-with-cloudflare-pages/~assets/cloudflare.svg"&lt;/span&gt; &lt;span class="na"&gt;alt=&lt;/span&gt;&lt;span class="s"&gt;"Cloudflare Pages"&lt;/span&gt; &lt;span class="na"&gt;width=&lt;/span&gt;&lt;span class="s"&gt;"350"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;h1&amp;gt;&lt;/span&gt;
        Deploy your Jamstack Website with &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"https://pages.cloudflare.com/"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt; Cloudflare Pages.&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;div&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"https://pages.cloudflare.com/"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        Learn More
      &lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/template&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And a few changes made to the styling:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;style&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nc"&gt;.container&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;margin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="nb"&gt;auto&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;min-height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100vh&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;flex&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;flex-direction&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;column&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;justify-content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;center&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;align-items&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;center&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;text-align&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;center&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.title&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;font-family&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
   &lt;span class="n"&gt;-apple-system&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;system-ui&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;"Segoe UI"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Roboto&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Oxygen&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Ubuntu&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Cantarell&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;"Fira Sans"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;"Droid Sans"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;"Helvetica Neue"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;sans-serif&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;font-weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;400&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;hsl&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;30%&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;10%&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nl"&gt;letter-spacing&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;style&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://github.com/lauragift21/cloudflare-demo" rel="noopener noreferrer"&gt;All code snippets can be found on the GitHub Repo.&lt;/a&gt; &lt;/p&gt;

&lt;h2&gt;
  
  
  Deploy to Cloudflare Pages
&lt;/h2&gt;

&lt;p&gt;Now, let's get to the fun part. To deploy the app we just created we need to follow a couple of steps which I'll outline: First, you need a Pages account if you don't have one yet, &lt;a href="https://dash.cloudflare.com/?to=/:account/pages" rel="noopener noreferrer"&gt;you can create yours now.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Next, we can create a new project. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.giftegwuenu.com%2Fimages%2Fuploads%2Fscreenshot-2021-03-18-at-09.56.35.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.giftegwuenu.com%2Fimages%2Fuploads%2Fscreenshot-2021-03-18-at-09.56.35.png" alt="Getting Started with Cloudflare"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Click the create a project button, and that leads to a page where you can connect your GitHub account. After connecting to GitHub you can select the project you want to deploy from the list of repos displayed. &lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.giftegwuenu.com%2Fimages%2Fuploads%2Fscreenshot-2021-03-18-at-09.57.06.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.giftegwuenu.com%2Fimages%2Fuploads%2Fscreenshot-2021-03-18-at-09.57.06.png" alt="Select Project from GitHub"&gt;&lt;/a&gt; &lt;br&gt;
After you select a project from GitHub, we need to set up the build commands so that when a commit is triggered Cloudflare knows to use the command set to build your website. &lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.giftegwuenu.com%2Fimages%2Fuploads%2Fscreenshot-2021-03-18-at-09.57.40.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.giftegwuenu.com%2Fimages%2Fuploads%2Fscreenshot-2021-03-18-at-09.57.40.png" alt="Build Configurations"&gt;&lt;/a&gt; &lt;br&gt;
You can set a custom name you want to use as a hostname on pages.dev and also select the production branch in our case this is the master branch. &lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.giftegwuenu.com%2Fimages%2Fuploads%2Fscreenshot-2021-03-18-at-09.57.52.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.giftegwuenu.com%2Fimages%2Fuploads%2Fscreenshot-2021-03-18-at-09.57.52.png" alt="Configure build commands"&gt;&lt;/a&gt; &lt;br&gt;
You also need to set up build settings, there are different framework presets to choose from which makes it easier for you if you don't find the framework you are using or feel you don't need to use any of this then you can directly input your commands in the fields provided. We'll use the Nuxt.js preset for this and if there's a need to set up a default root directory or add environment variables you can also do that here. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.giftegwuenu.com%2Fimages%2Fuploads%2Fscreenshot-2021-03-18-at-09.58.07.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.giftegwuenu.com%2Fimages%2Fuploads%2Fscreenshot-2021-03-18-at-09.58.07.png" alt="Deploy project"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;We don't need any of that, so let's click the save and deploy button to kick off the first build process. You'll be redirected to a page with a deploy log and details where you can see the current progress of the ongoing deployment. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.giftegwuenu.com%2Fimages%2Fuploads%2Fscreenshot-2021-03-18-at-09.59.08.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.giftegwuenu.com%2Fimages%2Fuploads%2Fscreenshot-2021-03-18-at-09.59.08.png" alt="Build in progress"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;After the build completes and is successful you get a deploy URL where you can see the version of the app that was deployed. This was fast and this screenshot isn't the first build I made but the first build took around 7 secs to deploy and I'm very impressed with that. &lt;/p&gt;
&lt;h3&gt;
  
  
  What else can you do?
&lt;/h3&gt;

&lt;p&gt;You can set up a custom domain for your website and also access the deployment settings incase you need to change anything. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.giftegwuenu.com%2Fimages%2Fuploads%2Fscreenshot-2021-03-18-at-09.58.37.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.giftegwuenu.com%2Fimages%2Fuploads%2Fscreenshot-2021-03-18-at-09.58.37.png" alt="Custom Domain"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  Resources
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://developers.cloudflare.com/pages/" rel="noopener noreferrer"&gt;Cloudflare Pages Docs&lt;/a&gt; &lt;br&gt;
&lt;a href="https://css-tricks.com/video-screencasts/203-a-first-look-at-cloudflare-pages/" rel="noopener noreferrer"&gt;A first look at Cloudflare Pages&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;If you prefer a video version of this tutorial. I made one on my channel check it out and please subscribe 😁&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/Fkm3e0j2sbU"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>jamstack</category>
      <category>cloudflare</category>
    </item>
    <item>
      <title>Nevertheless, Gift Coded</title>
      <dc:creator>Gift Egwuenu</dc:creator>
      <pubDate>Mon, 08 Mar 2021 10:25:07 +0000</pubDate>
      <link>https://dev.to/lauragift21/nevertheless-gift-coded-kh3</link>
      <guid>https://dev.to/lauragift21/nevertheless-gift-coded-kh3</guid>
      <description>&lt;p&gt;I love the &lt;a href="https://dev.to/t/shecoded"&gt;#SheCoded&lt;/a&gt; initiative from DEV and I've been involved for 4 years now. I just looked up what I shared in &lt;a href="https://dev.to/lauragift21/nevertheless-egwuenu-gift-coded--54ka"&gt;2018&lt;/a&gt;, &lt;a href="https://dev.to/lauragift21/nevertheless-egwuenu-gift-coded-27a4"&gt;2019&lt;/a&gt;, &lt;a href="https://dev.to/lauragift21/nevertheless-gift-egwuenu-coded-1h52"&gt;2020&lt;/a&gt;, and I'm very happy to see my growth in this industry.&lt;/p&gt;

&lt;p&gt;Well, this year is no different. I'm quite happy with what I've done so far even with the obstacles and challenges that I face every day. &lt;/p&gt;

&lt;p&gt;My most recent achievement was when I got the award for MVP in developer technologies from Microsoft MVP Program.&lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1357603634972868608-640" src="https://platform.twitter.com/embed/Tweet.html?id=1357603634972868608"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1357603634972868608-640');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1357603634972868608&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;p&gt;This was a huge deal for me because it makes me feel like the work I put into creating value for developers is being recognized and celebrated.&lt;/p&gt;

&lt;p&gt;Advocating for myself means always showing up, putting my work out there as I've learned if you don't advocate for yourself no one else will.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Put yourself and your work out there every day and you'll start meeting some amazing people." — Bobby Solomon&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;My biggest goal is to be the best version of my version in everything I do. In my work as a developer, in contributing back to the community and navigating my passion for content creation.&lt;/p&gt;

&lt;p&gt;My advice for allies to support underrepresented folks who code is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Know when it's right to step in and help pivot our voices.&lt;/li&gt;
&lt;li&gt;Support and Donate to Women-led non-profit organizations: &lt;a href="https://github.com/sponsors/FrontEndFoxes" rel="noopener noreferrer"&gt;Frontend Foxes&lt;/a&gt;, &lt;a href="https://www.shecodeafrica.org/donate" rel="noopener noreferrer"&gt;She Code Africa&lt;/a&gt;, &lt;a href="https://www.blackgirlscode.com/donations.html" rel="noopener noreferrer"&gt;Black Girls Code&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I love being in Tech and I'm excited to do even more as long as I'm here!&lt;/p&gt;

</description>
      <category>wecoded</category>
      <category>womenintech</category>
    </item>
    <item>
      <title>Show Your Work!</title>
      <dc:creator>Gift Egwuenu</dc:creator>
      <pubDate>Mon, 08 Mar 2021 08:25:52 +0000</pubDate>
      <link>https://dev.to/lauragift21/show-your-work-4455</link>
      <guid>https://dev.to/lauragift21/show-your-work-4455</guid>
      <description>&lt;p&gt;What do you mean by &lt;strong&gt;"Show your work!"?&lt;/strong&gt; This is what my brain tells me the first time I stumbled upon this book. I already do that no? I think I already do but I was so sure I will take out more from reading this book and I was not wrong. After reading lots of reviews on GoodReads I decided to get a copy and see what I'm doing wrong or need to start doing. In this article, I'll share the insights I learned from reading Austin Kleon's: &lt;strong&gt;Show Your Work!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--mqSmFBcb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://res.cloudinary.com/lauragift/image/upload/v1615016326/00-show-cover-500x333_sqyagk.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--mqSmFBcb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://res.cloudinary.com/lauragift/image/upload/v1615016326/00-show-cover-500x333_sqyagk.jpg" title="Hardcover of Show Your Work By Austin Kleon" alt="Hardcover of Show Your Work By Austin Kleon" width="500" height="333"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  You don’t have to be a genius
&lt;/h3&gt;

&lt;p&gt;The first chapter starts with this very statement we always shy away from when thinking of putting our work out in the world. I personally have this problem when I think I'm not a genius so I shouldn't be talking or sharing about a specific topic and I'm certain a lot of us feel that way too. In this chapter, Austin proves that is not a good yardstick for measuring what work we should put out.&lt;/p&gt;

&lt;p&gt;We should all be &lt;strong&gt;Amateurs&lt;/strong&gt; because amateurs are willing to try different things, learn in public and share all the knowledge, rinse and repeat without the burden of thinking we have to be an expert.&lt;/p&gt;

&lt;h3&gt;
  
  
  Think process, not product
&lt;/h3&gt;

&lt;p&gt;I like this statement so much! He's calling on us to start thinking of our work as a process and not a product. I can decide to create a book, course, tool, or even a library in private and come back with the finished product this is how a lot of artists and creators think.&lt;/p&gt;

&lt;p&gt;This idea is different it's calling on us to share all the process behind the scenes of creating our work. You might think this is not a great idea may be because your process is messy and not streamlined for anyone to understand. Share it anyway!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--jTywAsvf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://res.cloudinary.com/lauragift/image/upload/v1615016326/01-think-process-500x333_yxtttb.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--jTywAsvf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://res.cloudinary.com/lauragift/image/upload/v1615016326/01-think-process-500x333_yxtttb.jpg" title="Think Process, Not Product" alt="Think Process, Not Product" width="500" height="333"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;People want to see how we create the things we create, from ideation to result and it's important to make them part of the journey to the product. You can think of it as a way of documenting your work out in the open.&lt;/p&gt;

&lt;h3&gt;
  
  
  Share something small every day
&lt;/h3&gt;

&lt;p&gt;Once a day, share some part of your work it might be unfinished yes, remember think process nor product. Doing this will create compounded results as you see small changes leads to remarkable results.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Put yourself and your work out there every day and you'll start meeting some amazing people." — Bobby Solomon&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--gsqz5yDj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://res.cloudinary.com/lauragift/image/upload/v1615025452/AD3AFAEA-FC37-43A0-9144-7C30583D72F2_oytmmw.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--gsqz5yDj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://res.cloudinary.com/lauragift/image/upload/v1615025452/AD3AFAEA-FC37-43A0-9144-7C30583D72F2_oytmmw.jpg" alt="Share something small every day" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The format for sharing doesn't matter, we have many different platforms like Twitter, Instagram, YouTube for showing our work. It's also important to have a domain on the internet where we own our own content and it's great for your brand.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Carving a space for yourself online, somewhere where you can express yourself and share your work, is still one of the best possible investments you can make with your time" — Andy Baio&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Open up your cabinet of curiosities
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Don't be a hoarder.&lt;/strong&gt; Be open to sharing your process as well as where you get your inspiration and ideas from. The people you follow are interested in learning how you come up with all that you do and seeing as creatives it is evident we collect inspiration from different sources we should be open to sharing that too. Also remember, attribution is very important and we should attribute when necessary. How do you know when to do that I love this sketch flow that shows exactly how.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--fLImzQqX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://res.cloudinary.com/lauragift/image/upload/c_fit%2Cq_auto:low%2Cw_489/v1615016349/IMG_5102_sq3q52.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fLImzQqX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://res.cloudinary.com/lauragift/image/upload/c_fit%2Cq_auto:low%2Cw_489/v1615016349/IMG_5102_sq3q52.png" alt="Open up your cabinet of curiosities" width="489" height="652"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Tell good stories
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;We should all be good storytellers.&lt;/strong&gt; When it comes to showing your work we should be able to tell &lt;strong&gt;great stories&lt;/strong&gt; about the work we do and not selling your self short because you're either trying to be humble or modest.&lt;/p&gt;

&lt;h3&gt;
  
  
  Teach what you know
&lt;/h3&gt;

&lt;p&gt;Learn to share your knowledge by teaching others too, this is by far the best way to keep improving yourself. Teaching people doesn't subtract value from you it actually adds to it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--6hK9LuhT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://res.cloudinary.com/lauragift/image/upload/v1615016326/07-learn-teach_njc8c1.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6hK9LuhT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://res.cloudinary.com/lauragift/image/upload/v1615016326/07-learn-teach_njc8c1.jpg" alt="Learn Teach" width="800" height="534"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;By teaching people what you've learned you get to solidify that knowledge more giving you even more leverage than you get if you just keep it to yourself.&lt;/p&gt;

&lt;h3&gt;
  
  
  Don’t turn into human spam
&lt;/h3&gt;

&lt;p&gt;Sharing what you do online is great until you start overdoing it and only open to promoting your work without promoting or reading other people's work. It's always good to know when you're turning into spam. The people you're trying to reach care about your work the moment you make it all about yourself they sense it and can stop supporting or patronizing you.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--djQzyeaw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://res.cloudinary.com/lauragift/image/upload/c_scale%2Cq_auto:good%2Cw_350/v1615016356/IMG_5110_ulewa3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--djQzyeaw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://res.cloudinary.com/lauragift/image/upload/c_scale%2Cq_auto:good%2Cw_350/v1615016356/IMG_5110_ulewa3.png" alt="Don’t turn into human spam" width="350" height="467"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Be open and genuine,&lt;/strong&gt; don't focus on the follower count or how many subscribers you have let that be organic, and remember people connect with you because they enjoy your work don't make them think you're just after the numbers or popularity.&lt;/p&gt;

&lt;h3&gt;
  
  
  Learn to take a punch
&lt;/h3&gt;

&lt;p&gt;Be ready to take a punch. When you share your work publicly be ready for the good, bad, and ugly. People can be mean on the internet especially with relaying feedback or criticism. Don't feed the trolls if you get bad comments from your audience try to ignore or block them out. Only focus on the good things and the audience that finds value in what you're doing.&lt;/p&gt;

&lt;h3&gt;
  
  
  Sell out
&lt;/h3&gt;

&lt;p&gt;It's okay to &lt;strong&gt;charge for the value you create&lt;/strong&gt;. Many people are made to believe as content creators we all should be doing free work. It's okay to start putting out work for free but the moment you feel it's time to start charging them don't feel guilty about it. We put in all the work and effort and we also have bills piling upright so that's certainly a valid reason to charge for your work. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--5TTEx0ME--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://res.cloudinary.com/lauragift/image/upload/c_fit%2Cq_auto:good%2Cw_385/v1615016354/IMG_5112_bwunfb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--5TTEx0ME--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://res.cloudinary.com/lauragift/image/upload/c_fit%2Cq_auto:good%2Cw_385/v1615016354/IMG_5112_bwunfb.png" alt="Sell out" width="385" height="513"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Remember to &lt;strong&gt;pay it forward&lt;/strong&gt; too when you are successful be open to pivoting other voices so they also can make it to where you are. &lt;/p&gt;

&lt;h3&gt;
  
  
  Stick around
&lt;/h3&gt;

&lt;p&gt;It's not always going to be rosy. we can either feel success from all the work we've done or feel like absolute failures but it helps to think of this as a journey. The road to success isn't going to be smooth at all times and keeping at what we do regardless of the outcome should be something we always hold on to. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--iOkR_PqP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://res.cloudinary.com/lauragift/image/upload/c_scale%2Cq_auto:good%2Cw_350/v1615016359/IMG_5113_hyaebe.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--iOkR_PqP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://res.cloudinary.com/lauragift/image/upload/c_scale%2Cq_auto:good%2Cw_350/v1615016359/IMG_5113_hyaebe.png" alt="Stick Around" width="350" height="467"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Of course, it's easier said than done when you feel you need to quit, take a break instead and continue when you feel alright to start again not start all over from scratch. it's hard to start over because our work still exists and all the knowledge gained from previous work still remains with us.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;I really enjoyed reading this book. It was a very insightful read and I took away a lot from reading it. It's the type of book I can always pick up to go over again and again and still learn something from it. I really liked the artwork incorporated into it as well.&lt;/p&gt;

&lt;p&gt;I'll rate this book &lt;strong&gt;5 stars&lt;/strong&gt; because it changed how I view myself as a creative person. If you are trying to build a brand or put more work out in the open as a content creator this should be the next book you read.&lt;/p&gt;

&lt;p&gt;Get the book &lt;a href="https://amzn.to/3sTvgm3" rel="noopener noreferrer"&gt;here&lt;/a&gt; :)&lt;/p&gt;

</description>
      <category>bookreviews</category>
    </item>
    <item>
      <title>5 Ways to Make Passive Income in Tech</title>
      <dc:creator>Gift Egwuenu</dc:creator>
      <pubDate>Tue, 05 Jan 2021 12:58:29 +0000</pubDate>
      <link>https://dev.to/lauragift21/5-ways-to-make-passive-income-in-tech-3275</link>
      <guid>https://dev.to/lauragift21/5-ways-to-make-passive-income-in-tech-3275</guid>
      <description>&lt;p&gt;Many developers work a 9-5 and that's great! I do too :) But are you aware you can consistently make passive income by investing some time outside of your full-time job? In this video, I'll share proven ways of making a side income as a developer and tips on how to go about it.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/tQBh53KmxRU"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h3&gt;
  
  
  ⏰⌛️ Video Timestamps
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=tQBh53KmxRU&amp;amp;t=0s" rel="noopener noreferrer"&gt;0:00&lt;/a&gt; Intro &lt;a href="https://www.youtube.com/watch?v=tQBh53KmxRU&amp;amp;t=13s" rel="noopener noreferrer"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=tQBh53KmxRU&amp;amp;t=13s" rel="noopener noreferrer"&gt;0:13&lt;/a&gt; What this video is about? &lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=tQBh53KmxRU&amp;amp;t=101s" rel="noopener noreferrer"&gt;1:41&lt;/a&gt; Content Creation &lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=tQBh53KmxRU&amp;amp;t=394s" rel="noopener noreferrer"&gt;6:34&lt;/a&gt; Build an App / Website &lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=tQBh53KmxRU&amp;amp;t=462s" rel="noopener noreferrer"&gt;7:42&lt;/a&gt; Create an E-book or Online Course &lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=tQBh53KmxRU&amp;amp;t=546s" rel="noopener noreferrer"&gt;9:06&lt;/a&gt; Affiliate Marketing &lt;a href="https://www.youtube.com/watch?v=tQBh53KmxRU&amp;amp;t=688s" rel="noopener noreferrer"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=tQBh53KmxRU&amp;amp;t=688s" rel="noopener noreferrer"&gt;11:28&lt;/a&gt; Freelance Projects &lt;a href="https://www.youtube.com/watch?v=tQBh53KmxRU&amp;amp;t=740s" rel="noopener noreferrer"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=tQBh53KmxRU&amp;amp;t=740s" rel="noopener noreferrer"&gt;12:20&lt;/a&gt; Outro &amp;amp; Subscribe &lt;/p&gt;

&lt;h3&gt;
  
  
  🔗 Links Mentioned
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://coil.com" rel="noopener noreferrer"&gt;Web Monetization with Coil&lt;/a&gt; &lt;a href="https://www.youtube.com/redirect?q=https%3A%2F%2Fcoil.com&amp;amp;v=tQBh53KmxRU&amp;amp;redir_token=QUFFLUhqbnhfd3BPZC01a25wWTdRU1BvVWVrYVVLellrZ3xBQ3Jtc0tua2RhRGV3T3FZU2lPZEJ2MG1kY0ttMDlWUG1wV0k3dVEyYkZZLWltcnhuYUd2N3lTZ2hNLWw5Qi1kM2lGR0JmYXpLLWppRVZFZ0ZiS1o4b0hhZXVieXBwRk5SRVRpXzBjdnlkQ2dCU2h3V0dxYXJITQ%3D%3D&amp;amp;event=video_description" rel="noopener noreferrer"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.carbonads.net/" rel="noopener noreferrer"&gt;Carbon Ads&lt;/a&gt; &lt;a href="https://www.youtube.com/redirect?q=https%3A%2F%2Fwww.carbonads.net%2F&amp;amp;v=tQBh53KmxRU&amp;amp;redir_token=QUFFLUhqbEEwcG1WZTdSaDV2NHUxc01DWGtxV3dlcUswUXxBQ3Jtc0tueHNBQ0FZdUhmelMxbE9zMWd6RG1KUjd6LW5waHlfQWZ0REF2d2YxNVFjdk5OS0JhNGZtdm1kRWFVTUNUQ3dGNE1fNi1obVA0NnQ0QlVJTTNTWXlTanFaRVo3aWhwUE9ud2dycUg1R1hncUNnZEhLWQ%3D%3D&amp;amp;event=video_description" rel="noopener noreferrer"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://talk.hyvor.com/blog/write-for-get-paid-for-developers/" rel="noopener noreferrer"&gt;List of Publications that pay up to $600&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Hope you enjoy the video :)&lt;/p&gt;

</description>
    </item>
    <item>
      <title>How to Craft a Developer Resume</title>
      <dc:creator>Gift Egwuenu</dc:creator>
      <pubDate>Mon, 09 Nov 2020 09:38:50 +0000</pubDate>
      <link>https://dev.to/lauragift21/how-to-craft-a-developer-resume-g64</link>
      <guid>https://dev.to/lauragift21/how-to-craft-a-developer-resume-g64</guid>
      <description>&lt;p&gt;Do you want to stand out in your job applications, show the recruiter at one glance your abilities and strength? This video will give you tips and ideas for creating a great tech resume that you can be sure will make you stand out in the pool of job applications.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/akNtVGUUBAw"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;🌱 Timestamps&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=akNtVGUUBAw&amp;amp;t=0s" rel="noopener noreferrer"&gt;0:00&lt;/a&gt; Intro &lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=akNtVGUUBAw&amp;amp;t=88s" rel="noopener noreferrer"&gt;1:28&lt;/a&gt; Why you need a great resume?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=akNtVGUUBAw&amp;amp;t=131s" rel="noopener noreferrer"&gt;2:11&lt;/a&gt; Tools for creating a Resume&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=akNtVGUUBAw&amp;amp;t=290s" rel="noopener noreferrer"&gt;4:50&lt;/a&gt; Key sections to include in your resume &lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=akNtVGUUBAw&amp;amp;t=857s" rel="noopener noreferrer"&gt;14:17&lt;/a&gt; Tips for creating a resume that stands out &lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=akNtVGUUBAw&amp;amp;t=1218s" rel="noopener noreferrer"&gt;20:18&lt;/a&gt; Outro &amp;amp; Subscribe ❤️ &lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.canva.com/design/DAEMua0hkjY/RIdjaLf20fj3FiPKApSVHg/view?utm_content=DAEMua0hkjY&amp;amp;utm_campaign=designshare&amp;amp;utm_medium=link&amp;amp;utm_source=publishsharelink" rel="noopener noreferrer"&gt;Canva Resume Demo&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Hope you enjoy the video :)&lt;/p&gt;

</description>
      <category>career</category>
    </item>
    <item>
      <title>Vuejs Global 2020: A Recap</title>
      <dc:creator>Gift Egwuenu</dc:creator>
      <pubDate>Wed, 30 Sep 2020 10:50:39 +0000</pubDate>
      <link>https://dev.to/lauragift21/vuejs-global-2020-a-recap-2che</link>
      <guid>https://dev.to/lauragift21/vuejs-global-2020-a-recap-2che</guid>
      <description>&lt;p&gt;A couple of weeks ago, I had a fantastic time speaking and attending &lt;a href="https://www.vuejs.amsterdam/" rel="noopener noreferrer"&gt;Vue.js Global&lt;/a&gt;, a global online conference held on September 17th and 18th. This article will share my thoughts and experience from attending the conference and some of my takeaways.&lt;/p&gt;

&lt;p&gt;Overall, I'll say I had such a good time at the conference, even though it was online and we all miss attending in-person conferences. This one didn't feel so much like that because the community made it come alive. There were so many memorable moments during the conference.&lt;/p&gt;

&lt;p&gt;I had the chance to be a part of the Speaker's Dinner a day before the conference, and it was so much fun. You can tell my face is missing from the zoom call, but I was present 😉. We had so much fun playing a Pub Quiz hosted by &lt;a href="https://twitter.com/isro_me" rel="noopener noreferrer"&gt;Israel Roldan&lt;/a&gt; (PS: My manager, I'm so proud to be working with him!)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--5pLfUAsV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://res.cloudinary.com/lauragift/image/upload/v1601465163/Screen_Shot_2020-09-16_at_5.12.12_PM_jlm4rf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--5pLfUAsV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://res.cloudinary.com/lauragift/image/upload/v1601465163/Screen_Shot_2020-09-16_at_5.12.12_PM_jlm4rf.png" title="Speaker Dinner Celebration via Zoom" alt="Speaker Dinner Celebration via Zoom" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;TL: DR;&lt;/strong&gt;  The conference was so much fun and I took away so many things and looking forward to exploring and using them. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The conference was a &lt;a href="https://www.vuejs.amsterdam/program" rel="noopener noreferrer"&gt;two-day conference&lt;/a&gt; packed with so much goodness and some exciting news everyone was looking forward to... I'm sure you already know what that is but more on that later.&lt;/p&gt;

&lt;h1&gt;
  
  
  Conference Day 1 (September 17th)
&lt;/h1&gt;

&lt;p&gt;We kicked off the conference with &lt;a href="https://twitter.com/josgerards88" rel="noopener noreferrer"&gt;Jos Gerards'&lt;/a&gt; opening remarks and welcomed both attendees and speakers. I liked many cool things about the conference. I'll share some hints as we go on, and you can also &lt;a href="https://twitter.com/lauragift_" rel="noopener noreferrer"&gt;let me know if you feel the same way&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Our hosts for the conference were &lt;a href="https://twitter.com/MariaLamardo" rel="noopener noreferrer"&gt;Maria Lamardo&lt;/a&gt; and &lt;a href="https://twitter.com/bencodezen" rel="noopener noreferrer"&gt;Ben Hong&lt;/a&gt; and they took over with &lt;strong&gt;speaker&lt;/strong&gt; &lt;strong&gt;introductions&lt;/strong&gt; and &lt;strong&gt;QnA Moderation&lt;/strong&gt;. I must say they both did a fantastic job pulling together and keeping everyone hyped for two days. That's no easy task, not that I've hosted a conference before, but I can tell it must have taken a lot of work to pull it off.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Here's a rundown of some talks I attended from the first day of the conference. Watch out for yours truly!&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Test Driving Vue 3 by Anthony Gore
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://twitter.com/anthonygore" rel="noopener noreferrer"&gt;Anthony Gore&lt;/a&gt; is the creator of &lt;a href="https://vuejsdevelopers.com" rel="noopener noreferrer"&gt;VuejsDevelopers&lt;/a&gt; and a Vue Community Partner. In his talk, he takes Vue 3 on a Test Drive and explains why some changes were made from the way it works in Vue 2 and the ideas behind Vue 3. He shows how to use Vue 3 to build a reusable modal detailing some of the new features like Fragments, Teleports, and Composition API.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Future of VueX by Kai King
&lt;/h3&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/ajGglyQQD0k"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;&lt;a href="https://twitter.com/KiaKing85" rel="noopener noreferrer"&gt;Kia King&lt;/a&gt; is a member of the Vue Core Team, and he focused his talk on the current state of VueX and what's coming in the future of VueX. VueX 3 support will work for Vue 2; likewise, VueX 4 will work with Vue3. The focus of Vuex 4 is for compatibility. He also shares the new installation process and some of the new features coming in Vuex 4, such as new bundles aligned with Vue 3 and slightly better TypeScript support. He also shares the direction for the future &lt;strong&gt;"Vuex5"&lt;/strong&gt; which is still in the RFC stage, and he shared features that this new version will ship with.&lt;/p&gt;

&lt;h3&gt;
  
  
  Migrating a big old codebase to Vue 3: what I'm excited about! by Natalia Tepluhina
&lt;/h3&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/K1JoWmXh4qA"&gt;
&lt;/iframe&gt;
&lt;br&gt;
&lt;a href="https://www.youtube.com/watch?v=K1JoWmXh4qA&amp;amp;t=58s" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=K1JoWmXh4qA&amp;amp;t=58s&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://twitter.com/N_Tepluhina" rel="noopener noreferrer"&gt;Natalia Tepluhina&lt;/a&gt; is a member of the Vue Core team and Staff Frontend Engineer at GitLab. In her talk, she shared how she plans to migrate a big old codebase(Gitlab Codebase) to Vue 3 and some of the things she's excited about. In general, she pointed out things to watch out for like mixins, and she recommends as a go-to use Stateful components as Functional components can grow performance gains by 2.x.&lt;/p&gt;
&lt;h3&gt;
  
  
  Experience of the new Vue by Rahul Kadyan
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--4MyHh_g5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://res.cloudinary.com/lauragift/image/upload/v1601465192/Screen_Shot_2020-09-17_at_2.26.07_PM_fmbrgt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--4MyHh_g5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://res.cloudinary.com/lauragift/image/upload/v1601465192/Screen_Shot_2020-09-17_at_2.26.07_PM_fmbrgt.png" alt="New Vue Experience" width="800" height="451"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://twitter.com/znck0" rel="noopener noreferrer"&gt;Rahul Kaydan&lt;/a&gt; is also a Vue.js core team member and works as a software engineer at Grammarly. His talk is about his experience with Vue 3 and its ecosystem. He shares his experience working with Composition API, Compiler, and Vite.&lt;/p&gt;
&lt;h3&gt;
  
  
  Vue 3 Reactivity Under The Hood by Marc Backes
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--mF45wdBT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://res.cloudinary.com/lauragift/image/upload/v1601465297/Screen_Shot_2020-09-17_at_2.47.16_PM_qr8yxv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--mF45wdBT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://res.cloudinary.com/lauragift/image/upload/v1601465297/Screen_Shot_2020-09-17_at_2.47.16_PM_qr8yxv.png" alt="Vue Reactivity" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://twitter.com/themarcba" rel="noopener noreferrer"&gt;Marc Backes&lt;/a&gt; is a freelance developer and host of Whiskey Wednesdays. In his talk, he shared in a demo how Vue 3 Reactivity works under the hood by building a simplified version from scratch. He took us through how Reactivity worked in Vue 2 and showed how Vue 3 reactivity works differently.&lt;/p&gt;
&lt;h3&gt;
  
  
  Introduction to Vite &amp;amp; Vitepress by Tim Benniks
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://twitter.com/timbenniks" rel="noopener noreferrer"&gt;Tim's&lt;/a&gt; talk was one of the best in terms of delivery...he went all out on this one and made us all look like amateurs! His talk covered Vite and Vitepress, and it was an excellent introduction to Vite for me personally. I've never used it in a project. I only remember when it was released, and it was nice to see how Vite and Vitepress work from scratch.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/gojCkw5Ih7E"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h3&gt;
  
  
  The Exciting New Features for Routing in Vue3; Vue Router 4 by Eduardo San Martin Morote
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--weoLXX7u--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://res.cloudinary.com/lauragift/image/upload/v1601465206/Screen_Shot_2020-09-17_at_3.45.40_PM_xjjtm1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--weoLXX7u--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://res.cloudinary.com/lauragift/image/upload/v1601465206/Screen_Shot_2020-09-17_at_3.45.40_PM_xjjtm1.png" alt="Vue Router 4 Talk" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://twitter.com/posva" rel="noopener noreferrer"&gt;Eduardo&lt;/a&gt; is the creator of Vue Router. He shared some exciting new features coming in Vue Router 4. His talk showed features no longer supported and some useful features that's coming in the latest version.&lt;/p&gt;

&lt;h3&gt;
  
  
  JAMstack FTW- Static Site Generation With Gridsome by Gift Egwuenu
&lt;/h3&gt;

&lt;p&gt;I gave a talk, and it covered an introduction to Gridsome and the possibilities of what you can achieve with the Jamstack. I showed how you could also extend the functionalities of a Gridsome Application by leveraging the API's it ships with. At this point, technical difficulties set in, and I wasn't able to complete my talk(it was prerecorded, and the video was skipping). No worries though, I have a link to &lt;a href="https://speakerdeck.com/lauragift21/jamstack-ftw-static-site-generation-with-gridsome" rel="noopener noreferrer"&gt;my slides&lt;/a&gt; and the recording if you missed it or want to see the full version of the &lt;a href="https://youtu.be/E3kyCodVVOM" rel="noopener noreferrer"&gt;talk on my channel&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/E3kyCodVVOM"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h3&gt;
  
  
  Creating a JAM Stack product from scratch by Alex Jover
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s---D_VSe1l--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://res.cloudinary.com/lauragift/image/upload/v1601465058/Screen_Shot_2020-09-30_at_3.46.57_AM_juuxsy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---D_VSe1l--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://res.cloudinary.com/lauragift/image/upload/v1601465058/Screen_Shot_2020-09-30_at_3.46.57_AM_juuxsy.png" alt="Alex Jover Talk" width="800" height="384"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://twitter.com/alexjoverm" rel="noopener noreferrer"&gt;Alex Jover&lt;/a&gt; is the creator of &lt;a href="https://vuedose.tips/" rel="noopener noreferrer"&gt;Vue Dose&lt;/a&gt; and Organizer of Vue.js Spain. In his talk, he shared the process of rebuilding Vue Dose from the ground up with Nuxt and Storyblok. He also showed the problems with the first version and what needed to be improved, and the &lt;strong&gt;seven steps&lt;/strong&gt; he went through to recreate a new version of Vue Dose.&lt;/p&gt;

&lt;h3&gt;
  
  
  Dynamic from static with the right (JAM)stack by Maya Shavin
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--9W1aECVM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://res.cloudinary.com/lauragift/image/upload/v1601465107/Screen_Shot_2020-09-30_at_3.52.57_AM_r4b56o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--9W1aECVM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://res.cloudinary.com/lauragift/image/upload/v1601465107/Screen_Shot_2020-09-30_at_3.52.57_AM_r4b56o.png" alt="Maya Shavin Talk" width="800" height="419"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://twitter.com/MayaShavin" rel="noopener noreferrer"&gt;Maya Shavin&lt;/a&gt; is a Senior Frontend Developer at Cloudinary. In her talk, she shares what the Jamstack is and explores some tools in the Jamstack ecosystem. She mentioned something I think I needed to pay attention to because we have so many options to choose from, doesn't mean you have to use every tool in your application but instead think from the performance perspective. So asking the question does adding all of these services make my app more performant?&lt;/p&gt;

&lt;h1&gt;
  
  
  Conference Day 2 (September 18th)
&lt;/h1&gt;

&lt;p&gt;The second day of the conference kicked off with the organizer Jos Gerards welcoming attendees back for another day of great content. The talks for the day were all packed with news and great content in the Vue community. Ranging from a lineup of Nuxt.js seasoned featured speakers and the most anticipated presentation - Evan You's announcement(Wait for it...)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Here's a rundown of some of the talks from the second day of the conference.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Optimizing for Super Sonic Speed in Vue.js &amp;amp; Gridsome by Shopido Ayomide
&lt;/h3&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/U3oYroX1LCQ"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;&lt;a href="https://twitter.com/developerayo" rel="noopener noreferrer"&gt;Shopido Ayomide&lt;/a&gt;  was the first speaker for the day. He's a developer Advocate at Fleek and also Community Organizer. His talk focused on optimizing speed in Vue &amp;amp; Gridsome.&lt;/p&gt;

&lt;h3&gt;
  
  
  Chakra UI Vue by Jonathan Bakebwa
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://twitter.com/codebender828" rel="noopener noreferrer"&gt;Jonathan&lt;/a&gt; is the creator of Chakra UI Vue and UI Engineer at Akkadu. He shows us some Chakra UI Vue capabilities with demos of some popular websites he recreated with Chakra UI Vue in his talk. The component library is built from the ground up with accessibility in mind. I'm a big fan of Chakra UI and love that it's a fast-growing component library and one of my goto libraries to use in a project.&lt;/p&gt;

&lt;h3&gt;
  
  
  The state of Nuxt by Sebastien Chopin
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://twitter.com/Atinux" rel="noopener noreferrer"&gt;Sebastien Chopin&lt;/a&gt; is the co-author of Nuxt.js. His talk focused on the state of Nuxt and recent features that were introduced in the current release Nuxt v2.14 including Full Static Mode, Smart Generate that skips webpack build when there are no code changes. He also shared some stats from this year, a project from the Nuxt team called &lt;a href="https://vuetelemetry.com/" rel="noopener noreferrer"&gt;Vue Telemetry&lt;/a&gt;, and finally talked about some changes coming in Nuxt.js v3.0&lt;/p&gt;

&lt;h3&gt;
  
  
  Nuxt.js Architecture by Pooya Parsa
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://twitter.com/_pi0_" rel="noopener noreferrer"&gt;Pooya Parsa&lt;/a&gt; is the head of framework at Nuxt.js. In his talk, he goes through a deep dive of Nuxt architecture updates and an in-depth look at some of the features coming in Nuxt v3.0 - Typescript Support, updates to Builder 3, multi-app support. He also shared there's ongoing work in creating a guide for migrating from Nuxt 2 to Nuxt 3.&lt;/p&gt;

&lt;h3&gt;
  
  
  Nuxt.js as a headless CMS by Debbie O'Brien
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://twitter.com/debs_obrien" rel="noopener noreferrer"&gt;Debbie O'Brien&lt;/a&gt; is the head of learning at Nuxt. She shared one of the new features in Nuxt that I'm excited about &lt;a href="https://content.nuxtjs.org" rel="noopener noreferrer"&gt;Nuxt Content Module&lt;/a&gt;. She explained what a headless CMS is and how Nuxt content works and demonstrates how to get the Content module up and running.&lt;/p&gt;

&lt;h3&gt;
  
  
  SEO in a Vue.js world by Alexander Lichter
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://twitter.com/TheAlexLichter" rel="noopener noreferrer"&gt;Alexander&lt;/a&gt; is a Nuxt.js core maintainer and web developer consultant. In his talk, he walks through what SEO is and the importance of optimizing SEO and detailing the three pillars of SEO - on-page, off-page, and technical and shared some tips for improving SEO on Vue.js applications.&lt;/p&gt;

&lt;h3&gt;
  
  
  What you'll love in Vue 3 by Alex Kyriakidis
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://twitter.com/hootlex" rel="noopener noreferrer"&gt;Alex Kyriakidis&lt;/a&gt; is the founder of Vue School. In his talk, he shares some exciting features we'll love in Vue 3. I enjoyed learning about some features of Vue 3 from Alex as he talked through them with examples. No more Reactivity Caveats in Vue 3, introduced teleports with some use cases, and how composition API will help with logic reuse and code organization flexibility.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/vykQhui3tfE"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h3&gt;
  
  
  The State of Vue 3 featuring Evan You's Announcement
&lt;/h3&gt;

&lt;p&gt;This was one of the sessions we've been waiting for and anticipating to hear what news &lt;a href="https://twitter.com/youyuxi" rel="noopener noreferrer"&gt;Evan You&lt;/a&gt; had for us in his Keynote, which streamed live. I guessed right on this one, and I was right.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://v3.vuejs.org/guide/introduction.html" rel="noopener noreferrer"&gt;Vue 3&lt;/a&gt; &lt;strong&gt;"One Piece"&lt;/strong&gt; was released on September 18th at 4:45 pm(WAT). I even got the time right; that's to show you how excited I was! You can watch the recording directly. I want to say I appreciate the work that went into the release of Vue 3 when Evan shared the journey to Vue 3. It took two years of active development to get this out the door so thank you to every member of the Core Team and Community doing the excellent work of contributing to make Vue the fantastic framework that it is.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/Vp5ANvd88x0"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Following the announcement, there was a live QnA session where some members of the community and Panel got to ask Evan some questions. It was so good and nicely put together.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--fFNbz-dK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://res.cloudinary.com/lauragift/image/upload/v1601465296/Screen_Shot_2020-09-18_at_5.31.57_PM_mqgrto.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fFNbz-dK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://res.cloudinary.com/lauragift/image/upload/v1601465296/Screen_Shot_2020-09-18_at_5.31.57_PM_mqgrto.png" alt="QnA Session with Evan You" width="800" height="329"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  After Party and Community Connections
&lt;/h3&gt;

&lt;p&gt;Well, after the talks ended for the conference, you'd think it was the end of the conference since it's online and there's no physical after party. That was not the case for us. We had a great time during the conference, yes but still had many people hanging around waiting for the after-party! 🎉&lt;/p&gt;

&lt;p&gt;Jos Gerards played some lovely music. We even had a conference Spotify Playlist where people can add cool songs from where their locations. I liked that the &lt;a href="https://hopin.to/" rel="noopener noreferrer"&gt;Hopin&lt;/a&gt; platform had almost the same experience you'll get from attending an in-person conference. I checked out the Sponsors Booth and did a couple of networking with some attendees for me. This was one of the things I appreciated about the conference. The chat was so lively, and everyone was excited, and you could feel it from wherever you're connected from around the world.&lt;/p&gt;

&lt;h1&gt;
  
  
  Takeaways and What I'm looking forward to next time!
&lt;/h1&gt;

&lt;p&gt;The conference was very well put together, and I had a lot of fun participating in it. Kudos and great job to the team for putting on such a great event.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://vuejs.amsterdam" rel="noopener noreferrer"&gt;Vue.js Amsterdam 2021&lt;/a&gt; is freeeeee! Meaning you get the same experience from this year with even more vibes, but for free, isn't that just great! &lt;a href="https://www.vuejs.amsterdam/account/register?event=vue-js-amsterdam-2021" rel="noopener noreferrer"&gt;You can sign up for a ticket now&lt;/a&gt;. I've already got my ticket! 😅&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--tJHfLCjZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://res.cloudinary.com/lauragift/image/upload/v1601465000/Screen_Shot_2020-09-29_at_1.29.05_PM_qayo2k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--tJHfLCjZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://res.cloudinary.com/lauragift/image/upload/v1601465000/Screen_Shot_2020-09-29_at_1.29.05_PM_qayo2k.png" alt="Vuejs amsterdam 2021 ticket" width="800" height="263"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I'm looking forward to the awesomeness we create next year. Vue Global conference is brought to the community by  &lt;a href="https://passionatepeople.io/" rel="noopener noreferrer"&gt;Passionate People&lt;/a&gt; - a developer consultancy in Amsterdam, where I work(shameless plug 😜).&lt;/p&gt;

&lt;p&gt;The videos from the conference will be available on &lt;a href="https://www.youtube.com/vuejsamsterdam?sub_confirmation=1" rel="noopener noreferrer"&gt;Youtube&lt;/a&gt; with some already uploaded and on the Conference Video Portal, so keep an eye on there to catch the talks you missed.&lt;/p&gt;

</description>
      <category>events</category>
      <category>recap</category>
    </item>
    <item>
      <title>Build a Blog using Nuxt.js Content Module</title>
      <dc:creator>Gift Egwuenu</dc:creator>
      <pubDate>Mon, 10 Aug 2020 16:23:33 +0000</pubDate>
      <link>https://dev.to/lauragift21/build-a-blog-using-nuxt-js-content-module-37dc</link>
      <guid>https://dev.to/lauragift21/build-a-blog-using-nuxt-js-content-module-37dc</guid>
      <description>&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/zDCacgvw0A0"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;&lt;a href="https://nuxtjs.org" rel="noopener noreferrer"&gt;Nuxt.js&lt;/a&gt; is one of the technologies I'm really interested in and I made this video showing you how to use the Nuxt Content. &lt;a href="https://content.nuxtjs.org" rel="noopener noreferrer"&gt;Nuxt.js Content&lt;/a&gt; is one of the newest additions to Nuxtjs. In this tutorial, we'll create a blog using Nuxt.js content as a Headless CMS. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://content.nuxtjs.org/" rel="noopener noreferrer"&gt;https://content.nuxtjs.org/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;GitHub Repo: &lt;a href="https://github.com/lauragift21/nuxt-content-video" rel="noopener noreferrer"&gt;https://github.com/lauragift21/nuxt-content-video&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Timestamps ✨ &lt;br&gt;
&lt;a href="https://www.youtube.com/watch?v=zDCacgvw0A0&amp;amp;t=0s" rel="noopener noreferrer"&gt;0:00&lt;/a&gt; -  Intro &lt;br&gt;
&lt;a href="https://www.youtube.com/watch?v=zDCacgvw0A0&amp;amp;t=55s" rel="noopener noreferrer"&gt;0:55&lt;/a&gt; -  What is Nuxt.js?&lt;br&gt;
&lt;a href="https://www.youtube.com/watch?v=zDCacgvw0A0&amp;amp;t=107s" rel="noopener noreferrer"&gt;1:47&lt;/a&gt; -  Setup a Nuxt app&lt;br&gt;
&lt;a href="https://www.youtube.com/watch?v=zDCacgvw0A0&amp;amp;t=133s" rel="noopener noreferrer"&gt;2:13&lt;/a&gt; -  What is Nuxt Content?&lt;br&gt;
&lt;a href="https://www.youtube.com/watch?v=zDCacgvw0A0&amp;amp;t=285s" rel="noopener noreferrer"&gt;4:45&lt;/a&gt; -  Install Nuxt Content&lt;br&gt;
&lt;a href="https://www.youtube.com/watch?v=zDCacgvw0A0&amp;amp;t=318s" rel="noopener noreferrer"&gt;5:18&lt;/a&gt; -  Creating Content&lt;br&gt;
&lt;a href="https://www.youtube.com/watch?v=zDCacgvw0A0&amp;amp;t=451s" rel="noopener noreferrer"&gt;7:31&lt;/a&gt; -  Fetching and Displaying Content&lt;br&gt;
&lt;a href="https://www.youtube.com/watch?v=zDCacgvw0A0&amp;amp;t=942s" rel="noopener noreferrer"&gt;15:42&lt;/a&gt; - Live Editing in Dev Mode&lt;br&gt;
&lt;a href="https://www.youtube.com/watch?v=zDCacgvw0A0&amp;amp;t=976s" rel="noopener noreferrer"&gt;16:16&lt;/a&gt; - API Endpoints Preview&lt;br&gt;
&lt;a href="https://www.youtube.com/watch?v=zDCacgvw0A0&amp;amp;t=1014s" rel="noopener noreferrer"&gt;16:54&lt;/a&gt; - Static Deployment&lt;br&gt;
&lt;a href="https://www.youtube.com/watch?v=zDCacgvw0A0&amp;amp;t=1084s" rel="noopener noreferrer"&gt;18:04&lt;/a&gt; -  Outro and Subscribe :)&lt;/p&gt;

&lt;p&gt;Hope you enjoy the video :)&lt;/p&gt;

</description>
      <category>nuxt</category>
      <category>vue</category>
    </item>
  </channel>
</rss>
