<?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: Adrien Zaganelli</title>
    <description>The latest articles on DEV Community by Adrien Zaganelli (@adri_zag).</description>
    <link>https://dev.to/adri_zag</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%2F1191571%2F4ede4725-ab0f-4c1d-8705-4520744c238d.jpg</url>
      <title>DEV Community: Adrien Zaganelli</title>
      <link>https://dev.to/adri_zag</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/adri_zag"/>
    <language>en</language>
    <item>
      <title>Tech gems 👁️ #5: How Far Are We From Automating Front-End?</title>
      <dc:creator>Adrien Zaganelli</dc:creator>
      <pubDate>Mon, 25 Mar 2024 10:01:00 +0000</pubDate>
      <link>https://dev.to/adri_zag/tech-gems-5-how-far-are-we-from-automating-front-end-2e04</link>
      <guid>https://dev.to/adri_zag/tech-gems-5-how-far-are-we-from-automating-front-end-2e04</guid>
      <description>&lt;h3&gt;
  
  
  What will front-end developement look like when AI takes over ?
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://frontendatscale.com/issues/18/"&gt;https://frontendatscale.com/issues/18/&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://twitter.com/charca"&gt;Maxi Ferreira&lt;/a&gt; shares insights from the &lt;em&gt;Design2Code: How Far Are We From Automating Front-End Engineering?&lt;/em&gt; &lt;a href="https://salt-nlp.github.io/Design2Code/"&gt;paper&lt;/a&gt;.&lt;/p&gt;




&lt;h3&gt;
  
  
  React + Server components + LLM = AI SDK 3.0
&lt;/h3&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
      &lt;div class="c-embed__cover"&gt;
        &lt;a href="https://vercel.com/blog/ai-sdk-3-generative-ui" class="c-link s:max-w-50 align-middle" rel="noopener noreferrer"&gt;
          &lt;img alt="" src="https://res.cloudinary.com/practicaldev/image/fetch/s--mzLeIYXk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://assets.vercel.com/image/upload/contentful/image/e5382hct74si/5euy2eo6NgwqHJH8JHrX43/8eb8dfeed23cba7b524ee25402cd7a83/OG_AI_Server_Components.png" height="419" class="m-0" width="800"&gt;
        &lt;/a&gt;
      &lt;/div&gt;
    &lt;div class="c-embed__body"&gt;
      &lt;h2 class="fs-xl lh-tight"&gt;
        &lt;a href="https://vercel.com/blog/ai-sdk-3-generative-ui" rel="noopener noreferrer" class="c-link"&gt;
          Introducing AI SDK 3.0 with Generative UI support – Vercel
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;p class="truncate-at-3"&gt;
          Stream React Components from LLMs to deliver richer user experiences
        &lt;/p&gt;
      &lt;div class="color-secondary fs-s flex items-center"&gt;
          &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://res.cloudinary.com/practicaldev/image/fetch/s--ikXQUL_7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://assets.vercel.com/image/upload/front/favicon/vercel/favicon.ico" width="48" height="48"&gt;
        vercel.com
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Vercel is open-sourcing their AI SDK to offer &lt;a href="https://chat.vercel.ai/"&gt;a glimpse into the future&lt;/a&gt;, as they can connect LLMs to third-party APIs.&lt;/p&gt;




&lt;h3&gt;
  
  
  Rumors
&lt;/h3&gt;

&lt;p&gt;Will &lt;a href="https://huggingface.co/"&gt;Hugging Face&lt;/a&gt; acquire &lt;a href="https://stability.ai/"&gt;Stability AI&lt;/a&gt; ? (owner of Stable diffusion)&lt;/p&gt;

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

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



&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>nextjs</category>
      <category>ai</category>
    </item>
    <item>
      <title>Tech gems 👁️ #4, Astro DB, Rolldown and free authentication guide</title>
      <dc:creator>Adrien Zaganelli</dc:creator>
      <pubDate>Fri, 15 Mar 2024 11:30:00 +0000</pubDate>
      <link>https://dev.to/adri_zag/tech-gems-4-astro-db-rolldown-and-free-authentification-guide-1kh4</link>
      <guid>https://dev.to/adri_zag/tech-gems-4-astro-db-rolldown-and-free-authentification-guide-1kh4</guid>
      <description>&lt;ul&gt;
&lt;li&gt;All you need to know about authentication&lt;/li&gt;
&lt;li&gt;Astro DB is out&lt;/li&gt;
&lt;li&gt;Rolldown is coming&lt;/li&gt;
&lt;li&gt;View transitions tutorial&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  All you need to know about authentication
&lt;/h3&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__body"&gt;
      &lt;h2 class="fs-xl lh-tight"&gt;
        &lt;a href="https://thecopenhagenbook.com/" rel="noopener noreferrer" class="c-link"&gt;
          The Copenhagen Book
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;p class="truncate-at-3"&gt;
          A basic guideline on implementing auth for the web.
        &lt;/p&gt;
      &lt;div class="color-secondary fs-s flex items-center"&gt;
        thecopenhagenbook.com
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;&lt;a href="https://pilcrowonpaper.com/" rel="noopener noreferrer"&gt;Pilcrow&lt;/a&gt;, the creator of the popular &lt;a href="https://github.com/lucia-auth/lucia" rel="noopener noreferrer"&gt;Lucia&lt;/a&gt; package released a free, open-source guide on implementing auth in web applications&lt;/p&gt;




&lt;h3&gt;
  
  
  Astro DB is out
&lt;/h3&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
      &lt;div class="c-embed__cover"&gt;
        &lt;a href="https://astro.build/db/" class="c-link s:max-w-50 align-middle" rel="noopener noreferrer"&gt;
          &lt;img alt="" src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fastro.build%2Fog%2Fastro-db.jpg" height="auto" class="m-0"&gt;
        &lt;/a&gt;
      &lt;/div&gt;
    &lt;div class="c-embed__body"&gt;
      &lt;h2 class="fs-xl lh-tight"&gt;
        &lt;a href="https://astro.build/db/" rel="noopener noreferrer" class="c-link"&gt;
          Astro DB
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;p class="truncate-at-3"&gt;
          The SQL database platform for content-driven websites.
        &lt;/p&gt;
      &lt;div class="color-secondary fs-s flex items-center"&gt;
          &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fastro.build%2Ffavicon.svg"&gt;
        astro.build
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Astro studio is coming to life with the release of Astro DB. under the hood, it uses a &lt;a href="https://turso.tech/libsql" rel="noopener noreferrer"&gt;libSQL&lt;/a&gt; (fork of sqlite by Turso) as a database with the &lt;a href="https://orm.drizzle.team/" rel="noopener noreferrer"&gt;Drizzle ORM&lt;/a&gt; to provide type-safety with Typescript.&lt;/p&gt;




&lt;h3&gt;
  
  
  Rolldown is coming
&lt;/h3&gt;

&lt;p&gt;The &lt;a href="https://vitejs.dev/" rel="noopener noreferrer"&gt;Vite&lt;/a&gt; bundler is about to become even faster with rust !&lt;/p&gt;

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

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



&lt;/p&gt;




&lt;h3&gt;
  
  
  View transitions tutorial
&lt;/h3&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
      &lt;div class="c-embed__cover"&gt;
        &lt;a href="https://jakearchibald.com/2024/view-transitions-handling-aspect-ratio-changes/" class="c-link s:max-w-50 align-middle" rel="noopener noreferrer"&gt;
          &lt;img alt="" src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fjakearchibald.com%2Fc%2Fimg-0de61156.png" height="auto" class="m-0"&gt;
        &lt;/a&gt;
      &lt;/div&gt;
    &lt;div class="c-embed__body"&gt;
      &lt;h2 class="fs-xl lh-tight"&gt;
        &lt;a href="https://jakearchibald.com/2024/view-transitions-handling-aspect-ratio-changes/" rel="noopener noreferrer" class="c-link"&gt;
          View transitions: Handling aspect ratio changes - JakeArchibald.com
        &lt;/a&gt;
      &lt;/h2&gt;
      &lt;div class="color-secondary fs-s flex items-center"&gt;
          &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fjakearchibald.com%2Fc%2Ffavicon-3d730960.png"&gt;
        jakearchibald.com
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;I love view transitions; they're the future, check this out ☝️&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Tech gems 👁️ #3: Node.js redesign, Memory-safe languages and Tailwind V4</title>
      <dc:creator>Adrien Zaganelli</dc:creator>
      <pubDate>Fri, 08 Mar 2024 12:00:00 +0000</pubDate>
      <link>https://dev.to/adri_zag/tech-gems-3-nodejs-redesign-memory-safe-languages-and-tailwind-v4-152k</link>
      <guid>https://dev.to/adri_zag/tech-gems-3-nodejs-redesign-memory-safe-languages-and-tailwind-v4-152k</guid>
      <description>&lt;ul&gt;
&lt;li&gt;The Node.js documentation gets a refreshed look.&lt;/li&gt;
&lt;li&gt;A White House report recommends adoption of memory-safe languages.&lt;/li&gt;
&lt;li&gt;The growth of JavaScript payloads.&lt;/li&gt;
&lt;li&gt;TailwindCSS v4 announced !&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Node.js Strikes Back
&lt;/h3&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;a href="https://beta-node-js-org.vercel.app/en" rel="noopener noreferrer"&gt;
      beta-node-js-org.vercel.app
    &lt;/a&gt;
&lt;/div&gt;


&lt;p&gt;With the appearance of new challengers such as &lt;a href="https://bun.sh/"&gt;Bun&lt;/a&gt;, &lt;a href="https://deno.com/"&gt;Deno&lt;/a&gt;, and Amazon's &lt;a href="https://github.com/awslabs/llrt"&gt;LLRT&lt;/a&gt;. The Node.js organization countered with a new documentation website.&lt;/p&gt;

&lt;p&gt;It has a fresh &lt;a href="https://www.figma.com/file/pu1vZPqNIM7BePd6W8APA5/Node.js?type=design&amp;amp;node-id=422-7925&amp;amp;mode=design"&gt;new design&lt;/a&gt; and &lt;a href="https://www.figma.com/file/pu1vZPqNIM7BePd6W8APA5/Node.js?type=design&amp;amp;node-id=337-7756&amp;amp;mode=design"&gt;design system&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The website will run on &lt;a href="https://nextjs.org/"&gt;Next.js&lt;/a&gt;, the styling is migrating to &lt;a href="https://tailwindcss.com/"&gt;Tailwind.css&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;You can find a summary of the redesign process on &lt;a href="https://github.com/nodejs/nodejs.org/discussions/5131"&gt;Github&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  White House and memory-safe programming languages
&lt;/h3&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
      &lt;div class="c-embed__cover"&gt;
        &lt;a href="https://www.whitehouse.gov/oncd/briefing-room/2024/02/26/press-release-technical-report/" class="c-link s:max-w-50 align-middle" rel="noopener noreferrer"&gt;
          &lt;img alt="" src="https://res.cloudinary.com/practicaldev/image/fetch/s--tNXVcMEC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.whitehouse.gov/wp-content/uploads/2021/01/wh_social-share.png" height="420" class="m-0" width="800"&gt;
        &lt;/a&gt;
      &lt;/div&gt;
    &lt;div class="c-embed__body"&gt;
      &lt;h2 class="fs-xl lh-tight"&gt;
        &lt;a href="https://www.whitehouse.gov/oncd/briefing-room/2024/02/26/press-release-technical-report/" rel="noopener noreferrer" class="c-link"&gt;
          Press Release: Future Software Should Be Memory Safe | ONCD | The White House
        &lt;/a&gt;
      &lt;/h2&gt;
      &lt;div class="color-secondary fs-s flex items-center"&gt;
          &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://res.cloudinary.com/practicaldev/image/fetch/s--Umcxd3pK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.whitehouse.gov/favicon.ico" width="256" height="256"&gt;
        whitehouse.gov
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;The White House Office of the National Cyber Director released a report urging the adoption of memory-safe programming languages, &lt;a href="https://stackoverflow.blog/2024/03/04/in-rust-we-trust-white-house-office-urges-memory-safety/"&gt;such as Rust&lt;/a&gt;, to prevent classes of vulnerabilities and improve cybersecurity.&lt;/p&gt;

&lt;h3&gt;
  
  
  Javascript Bloat
&lt;/h3&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
      &lt;div class="c-embed__cover"&gt;
        &lt;a href="https://tonsky.me/blog/js-bloat/" class="c-link s:max-w-50 align-middle" rel="noopener noreferrer"&gt;
          &lt;img alt="" src="https://res.cloudinary.com/practicaldev/image/fetch/s--ha-LHPXV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dynogee.com/gen%3Fid%3Ddhqv5e0x3kfz7dy%26title%3DJavaScript%2BBloat%2Bin%2B2024" height="420" class="m-0" width="800"&gt;
        &lt;/a&gt;
      &lt;/div&gt;
    &lt;div class="c-embed__body"&gt;
      &lt;h2 class="fs-xl lh-tight"&gt;
        &lt;a href="https://tonsky.me/blog/js-bloat/" rel="noopener noreferrer" class="c-link"&gt;
          JavaScript Bloat in 2024 @ tonsky.me
        &lt;/a&gt;
      &lt;/h2&gt;
      &lt;div class="color-secondary fs-s flex items-center"&gt;
          &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://res.cloudinary.com/practicaldev/image/fetch/s--E0CL1dIS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://tonsky.me/i/favicon.png" width="32" height="32"&gt;
        tonsky.me
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Long read about the evolution of web page sizes from 2015 to 2024, focusing on JavaScript's role in modern front-end development. Learn about the impact of web bloat on performance and user experience.&lt;/p&gt;

&lt;h3&gt;
  
  
  Other
&lt;/h3&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
      &lt;div class="c-embed__cover"&gt;
        &lt;a href="https://tailwindcss.com/blog/tailwindcss-v4-alpha" class="c-link s:max-w-50 align-middle" rel="noopener noreferrer"&gt;
          &lt;img alt="" src="https://res.cloudinary.com/practicaldev/image/fetch/s---XR_wBxP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://tailwindcss.com/_next/static/media/card.e8b5bf19.jpg" height="419" class="m-0" width="800"&gt;
        &lt;/a&gt;
      &lt;/div&gt;
    &lt;div class="c-embed__body"&gt;
      &lt;h2 class="fs-xl lh-tight"&gt;
        &lt;a href="https://tailwindcss.com/blog/tailwindcss-v4-alpha" rel="noopener noreferrer" class="c-link"&gt;
          Open-sourcing our progress on Tailwind CSS v4.0 - Tailwind CSS
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;p class="truncate-at-3"&gt;
          We just tagged the first public v4.0.0-alpha so you can start experimenting with it and help us get to a stable release later this year.
        &lt;/p&gt;
      &lt;div class="color-secondary fs-s flex items-center"&gt;
          &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://res.cloudinary.com/practicaldev/image/fetch/s--KJjp50V9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://tailwindcss.com/favicons/favicon-32x32.png%3Fv%3D3" width="32" height="32"&gt;
        tailwindcss.com
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>node</category>
      <category>programming</category>
    </item>
    <item>
      <title>Introducing Tech gems series 👁️</title>
      <dc:creator>Adrien Zaganelli</dc:creator>
      <pubDate>Fri, 23 Feb 2024 10:24:00 +0000</pubDate>
      <link>https://dev.to/adri_zag/introducing-tech-gems-series-4egj</link>
      <guid>https://dev.to/adri_zag/introducing-tech-gems-series-4egj</guid>
      <description>&lt;p&gt;I'm glad to start a new blog series about web development and technology in general!&lt;/p&gt;

&lt;p&gt;In "&lt;strong&gt;Tech gems&lt;/strong&gt;" we will try to uncover insider information in the JavaScript ecosystem and also share the main informations and various discoveries.&lt;/p&gt;

&lt;p&gt;I'll try to post weekly or at the very least, monthly.&lt;/p&gt;




&lt;p&gt;Before we dive into the recent discoveries, I'd like to add a personal note.&lt;/p&gt;

&lt;p&gt;Keeping up with the ecosystem can be hard as things move absurdly fast. I want to warn those entering in the industry that you don't need to know everything nor try every framework out there.&lt;/p&gt;

&lt;p&gt;What you need is to build your own path: show up every day, find your speciality, and then broaden your skills and build on top of top them.&lt;br&gt;
You must learn constantly as a developer; these posts will try to help discoveri new opportunities, and avoid tutorial hell.&lt;/p&gt;

&lt;p&gt;This job can be stressful when you have clients and/or deadlines. It can also be full of corporate/scrum stuff that will make you bang your head against the wall. Dealing with legacy code is also a special snowflake and will probably give you the hardest challenges.&lt;/p&gt;

&lt;p&gt;At the end of the day, code is code. Make sure to enjoy your life, the one outside of your IDE 🤭&lt;/p&gt;

&lt;p&gt;Always remember that "&lt;a href="https://blog.codinghorror.com/the-best-code-is-no-code-at-all/" rel="noopener noreferrer"&gt;The Best Code is No Code At All&lt;/a&gt;"&lt;/p&gt;

&lt;p&gt;To be fully honest, I still do not apply all of the advice I gave you above... I also began this series to avoid FOMO in my everyday discoveries. Writing them down every now and then will force me to filter the amount of information I read, and make sure to keep here the ones that are worthy.&lt;/p&gt;

&lt;p&gt;Let's conclude with the biggest taboo in our industry: Burnout. Since I started back in 2019, I saw a lot of my friends and colleagues falling into it, or approaching close the edge.&lt;br&gt;
It's not worth it, I'll leave you with some good stuff from Austin Gil:&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
      &lt;div class="c-embed__cover"&gt;
        &lt;a href="https://austingil.com/work-life-balance/" class="c-link s:max-w-50 align-middle" rel="noopener noreferrer"&gt;
          &lt;img alt="" src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Faustingil.com%2Fwp-content%2Fuploads%2FOpinion-Blog-Cover.png" height="auto" class="m-0"&gt;
        &lt;/a&gt;
      &lt;/div&gt;
    &lt;div class="c-embed__body"&gt;
      &lt;h2 class="fs-xl lh-tight"&gt;
        &lt;a href="https://austingil.com/work-life-balance/" rel="noopener noreferrer" class="c-link"&gt;
          On Work-Life Balance, Depression, &amp;amp; Purpose
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;p class="truncate-at-3"&gt;
          Just some thoughts on life
        &lt;/p&gt;
      &lt;div class="color-secondary fs-s flex items-center"&gt;
          &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Faustingil.com%2Fwp-content%2Fuploads%2Ffavicon.svg"&gt;
        austingil.com
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Now that you're warned, let's go to the good stuff !&lt;/p&gt;

&lt;h2&gt;
  
  
  Tech gems 👁️ #1
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Rumors
&lt;/h3&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
      &lt;div class="c-embed__cover"&gt;
        &lt;a href="https://github.com/nuxt-hub" class="c-link s:max-w-50 align-middle" rel="noopener noreferrer"&gt;
          &lt;img alt="" src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Favatars.githubusercontent.com%2Fu%2F48047340%3Fs%3D280%26v%3D4" height="auto" class="m-0"&gt;
        &lt;/a&gt;
      &lt;/div&gt;
    &lt;div class="c-embed__body"&gt;
      &lt;h2 class="fs-xl lh-tight"&gt;
        &lt;a href="https://github.com/nuxt-hub" rel="noopener noreferrer" class="c-link"&gt;
          NuxtHub · GitHub
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;p class="truncate-at-3"&gt;
          Build full-stack applications with Nuxt on Cloudflare, with zero configuration and transparent pricing. - NuxtHub
        &lt;/p&gt;
      &lt;div class="color-secondary fs-s flex items-center"&gt;
          &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.githubassets.com%2Ffavicons%2Ffavicon.svg"&gt;
        github.com
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Sebastien Chopin, aka &lt;a href="https://twitter.com/Atinux" rel="noopener noreferrer"&gt;@atinux&lt;/a&gt;, creator of Nuxt.js, posted an enigmatic &lt;a href="https://twitter.com/Atinux/status/1757796143864394155" rel="noopener noreferrer"&gt;tweet&lt;/a&gt; a few days ago:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Not tweeting a lot lately, cooking something 🍰&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;We can now guess it's about the new &lt;code&gt;NuxtHub&lt;/code&gt; organization on Github. NuxtHub should help developers to "build full-stack application with Nuxt on CloudFlare, with zero configuration and transparent pricing."&lt;/p&gt;

&lt;h3&gt;
  
  
  Tutorials:
&lt;/h3&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
      &lt;div class="c-embed__cover"&gt;
        &lt;a href="https://tympanus.net/codrops/2024/01/19/making-css-view-transitions-easy-with-velvette/" class="c-link s:max-w-50 align-middle" rel="noopener noreferrer"&gt;
          &lt;img alt="" src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcodrops-1f606.kxcdn.com%2Fcodrops%2Fwp-content%2Fuploads%2F2024%2F01%2Fvelvette.png%3Fx79204" height="auto" class="m-0"&gt;
        &lt;/a&gt;
      &lt;/div&gt;
    &lt;div class="c-embed__body"&gt;
      &lt;h2 class="fs-xl lh-tight"&gt;
        &lt;a href="https://tympanus.net/codrops/2024/01/19/making-css-view-transitions-easy-with-velvette/" rel="noopener noreferrer" class="c-link"&gt;
          Making CSS View Transitions Easy with Velvette | Codrops
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;p class="truncate-at-3"&gt;
          Learn how to effortlessly implement smooth CSS view-transitions with Velvette, a useful library designed to tackle common challenges and enhance user experiences in web applications.
        &lt;/p&gt;
      &lt;div class="color-secondary fs-s flex items-center"&gt;
          &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcodrops-1f606.kxcdn.com%2Fcodrops%2Fwp-content%2Fthemes%2Fcodropstheme03%2Ffavicons%2Ffavicon-32x32.png%3Fx79204%26v%3D2"&gt;
        tympanus.net
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;&lt;a href="https://www.linkedin.com/in/noamrosenthal" rel="noopener noreferrer"&gt;Noam Rosenthal&lt;/a&gt;, co-editor of the CSS view-transitions spec, gives us a splendid tutorial on Codrops.&lt;/p&gt;

&lt;p&gt;He explains how to achieve advanced smooth page transitions with the &lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/View_Transitions_API" rel="noopener noreferrer"&gt;View Transitions API&lt;/a&gt; and the &lt;a href="https://github.com/noamr/velvette" rel="noopener noreferrer"&gt;velvette library&lt;/a&gt; to handle the missing pieces.&lt;/p&gt;

&lt;p&gt;You have to understand it's a game changer to make those with so little JavaScript, it will close the gap between server rendered websites and fully interactive SPAs.&lt;/p&gt;

&lt;h3&gt;
  
  
  Backend
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.uber.com/en-FR/blog/how-uber-serves-over-40-million-reads-per-second-using-an-integrated-cache" rel="noopener noreferrer"&gt;https://www.uber.com/en-FR/blog/how-uber-serves-over-40-million-reads-per-second-using-an-integrated-cache&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A long read where Uber explain how their "Docstore Architecture" allows them to perform numerous database reads thanks to caching.&lt;/p&gt;





&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;a href="https://adonisjs.com/blog/future-plans-for-adonisjs-6" rel="noopener noreferrer"&gt;
      adonisjs.com
    &lt;/a&gt;
&lt;/div&gt;


&lt;p&gt;After &lt;a href="https://adonisjs.com/blog/adonisjs-v6-announcement" rel="noopener noreferrer"&gt;announcing their new major version&lt;/a&gt; (V6), the AdonisJS team brings some details about the roadmap without promising any release dates or timelines.&lt;br&gt;
Overall, they aim to improve type safety and have realeased a few packages outside of the core:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Bento Cache&lt;/li&gt;
&lt;li&gt;Edge (templating)&lt;/li&gt;
&lt;li&gt;Japa (testing)&lt;/li&gt;
&lt;li&gt;VineJS (validation and schema)&lt;/li&gt;
&lt;li&gt;Verrou (locks in Node.js)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;del&gt;But the real takeway for me is that &lt;strong&gt;Adonis decided to take over the inertia package and maintain it officially.&lt;/strong&gt;&lt;/del&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Erratum (24/02/2024):&lt;/strong&gt; This is incorrect. Instead, the community package &lt;code&gt;eidellev/inertiajs-adonisjs&lt;/code&gt; will become an official first-party integration, known as &lt;code&gt;@adonisjs/inertia&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://inertiajs.com/" rel="noopener noreferrer"&gt;Inertia&lt;/a&gt; is often used as "glue" between your front-end and your back-end and has been popularized by the &lt;a href="https://laravel.com/" rel="noopener noreferrer"&gt;Laravel&lt;/a&gt; community from PHP.&lt;/p&gt;

&lt;p&gt;In the post, Adonis mentions SSR supports for Inertia, which could be a game changer for "server components" in nodejs.&lt;/p&gt;
&lt;h3&gt;
  
  
  Business
&lt;/h3&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
      &lt;div class="c-embed__cover"&gt;
        &lt;a href="https://cep.dev/posts/every-infrastructure-decision-i-endorse-or-regret-after-4-years-running-infrastructure-at-a-startup/" class="c-link s:max-w-50 align-middle" rel="noopener noreferrer"&gt;
          &lt;img alt="" src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcep.dev%2Fposts%2Fevery-infrastructure-decision-i-endorse-or-regret-after-4-years-running-infrastructure-at-a-startup%2Fimages%2Fnetwork-image.jpg" height="auto" class="m-0"&gt;
        &lt;/a&gt;
      &lt;/div&gt;
    &lt;div class="c-embed__body"&gt;
      &lt;h2 class="fs-xl lh-tight"&gt;
        &lt;a href="https://cep.dev/posts/every-infrastructure-decision-i-endorse-or-regret-after-4-years-running-infrastructure-at-a-startup/" rel="noopener noreferrer" class="c-link"&gt;
          (Almost) Every infrastructure decision I endorse or regret after 4 years running infrastructure at a startup · Jack's home on the web

        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;p class="truncate-at-3"&gt;
          Assortment of technology startup infrastructure recommendations
        &lt;/p&gt;
      &lt;div class="color-secondary fs-s flex items-center"&gt;
          &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcep.dev%2Fimages%2Ffavicon.svg"&gt;
        cep.dev
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;&lt;a href="https://cep.dev/" rel="noopener noreferrer"&gt;Jack Lindamood&lt;/a&gt; has gone through a lot while building his startup. He kindly details many strategic infrastructure decisions such as picking AWS over Google Cloud or regretting choosing Datatog.&lt;/p&gt;

&lt;p&gt;Must read if you plan to build a digital business one day !&lt;/p&gt;

&lt;h3&gt;
  
  
  Misc
&lt;/h3&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;a href="https://qr.blinry.org" rel="noopener noreferrer"&gt;
      qr.blinry.org
    &lt;/a&gt;
&lt;/div&gt;


&lt;p&gt;A fun website to learn how to read a QR code, it's as hard as it sounds.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Free Google Analytics Alternative: Quickstart with Umami Analytics</title>
      <dc:creator>Adrien Zaganelli</dc:creator>
      <pubDate>Mon, 23 Oct 2023 06:00:00 +0000</pubDate>
      <link>https://dev.to/adri_zag/free-google-analytics-alternative-quickstart-with-umami-analytics-1op5</link>
      <guid>https://dev.to/adri_zag/free-google-analytics-alternative-quickstart-with-umami-analytics-1op5</guid>
      <description>&lt;p&gt;I used to love splitbee.io to handle my analytics for a while. But since Vercel bought it, the service no longer works. To avoid this unpleasant situation again, I wanted to find an open-source alternative that I can self-host while being developer friendly and RGPD compliant. Let me tell you a few words about Umami analytics.&lt;/p&gt;

&lt;h2&gt;
  
  
  Context
&lt;/h2&gt;

&lt;p&gt;As a European, I have witnessed &lt;a href="https://plausible.io/blog/google-analytics-illegal"&gt;Google Analytics become illegal&lt;/a&gt;. That's why in early 2021 I was looking for an alternative, at that time I got fond of &lt;a href="https://splitbee.io/"&gt;splitbee.bio&lt;/a&gt;.&lt;/p&gt;

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

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



&lt;/p&gt;

&lt;p&gt;...But once it became &lt;a href="https://vercel.com/blog/vercel-acquires-splitbee"&gt;Vercel Analytics&lt;/a&gt; I had to find something else to avoid vendor lock-in.&lt;/p&gt;

&lt;p&gt;If you want to avoid what happened to me, here is what you need to look for your analytics tool:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🤑 Self hosted and free (avoid cloud solution)&lt;/li&gt;
&lt;li&gt;🍪 RGPD compliant for europeans laws (also avoid the need for cookies banner)&lt;/li&gt;
&lt;li&gt;🥷 Bypass ad-blockers&lt;/li&gt;
&lt;li&gt;🪽 Performant without too much javascript&lt;/li&gt;
&lt;li&gt;🔓 Open-source is a big plus&lt;/li&gt;
&lt;li&gt;🧑🏻‍💻 Developer friendly&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;I chose to go with &lt;a href="https://umami.is/"&gt;Umami analytics&lt;/a&gt;&lt;/strong&gt;. It matches all of the above !&lt;/p&gt;

&lt;p&gt;Umami tracks page views, custom events, visitor location but you can host it yourself and own your data in your own database.&lt;br&gt;
It also allows you to work in teams, the UI is translated in many languages, you can share your dashboards and many other &lt;a href="https://umami.is/features"&gt;features&lt;/a&gt;... including dark mode 😎.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;That's cool but I do get this in my own website ?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Excellent question Timmy ! you have two choices:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;use their cloud solution (with a free tier): &lt;a href="https://cloud.umami.is"&gt;https://cloud.umami.is&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Follow this tutorial to discover the simplest, cost-free path in under 10 minutes (ideal if you're a developer who wants to manage your data and avoid bills)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You will need node v16.13+ and PostgreSQL.&lt;/p&gt;
&lt;h2&gt;
  
  
  Setup your database
&lt;/h2&gt;

&lt;p&gt;To get started quickly I used &lt;a href="https://planetscale.com/pricing"&gt;PlanetScale&lt;/a&gt;. Umami also provides guides for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://umami.is/docs/running-on-digitalocean"&gt;Digital Ocean&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://umami.is/docs/running-on-supabase"&gt;Supabase&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But any PostgreSQL database will do the job.&lt;/p&gt;

&lt;p&gt;Create an account and create your database in PlanetScale. Choose your region and take the free options (you still need to enter your credit card).&lt;/p&gt;

&lt;p&gt;&lt;a href="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%2Farticles%2Fq3iyombid02kh7b657uc.jpg" class="article-body-image-wrapper"&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%2Farticles%2Fq3iyombid02kh7b657uc.jpg" alt="PlanetScale's database creation interface" width="800" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I took the "Others" provider&lt;br&gt;
&lt;a href="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%2Farticles%2Fk5egh9q21q94q2m0oq1x.jpg" class="article-body-image-wrapper"&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%2Farticles%2Fk5egh9q21q94q2m0oq1x.jpg" alt="PlanetScale's providers interface" width="800" height="460"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Set your database password&lt;br&gt;
&lt;a href="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%2Farticles%2Fftaovf1ps6jkkqndhdit.jpg" class="article-body-image-wrapper"&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%2Farticles%2Fftaovf1ps6jkkqndhdit.jpg" alt="PlanetScale's password interface" width="800" height="203"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;you should have this file at the end&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# your values will be different
DATABASE_HOST="aws.connect.psdb.cloud"
DATABASE_NAME="umami"
DATABASE_USERNAME="zz6qgpsqiq4u932t2axo"
DATABASE_PASSWORD="pscale_pw_zfsPwRz0tW9H2wLDaykeXqZV5SA34l52gqAgA7XoWc0"
# added by me for next step
# mysql://[username]:[password]@[host]/[dbname]?sslaccept=strict
DATABASE_URL="mysql://zz6qgpsqiq4u932t2axo:pscale_pw_zfsPwRz0tW9H2wLDaykeXqZV5SA34l52gqAgA7XoWc0@aws.connect.psdb.cloud/umami?sslaccept=strict"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Self-host your Umami instance
&lt;/h2&gt;

&lt;p&gt;Fork Umami analytics on Github: &lt;a href="https://github.com/umami-software/umami/fork"&gt;🔗 fork here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Your instance can be hosted on many providers such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://umami.is/docs/running-on-vercel"&gt;Vercel&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://umami.is/docs/running-on-netlify"&gt;Netlify&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://umami.is/docs/running-on-railway"&gt;Railway&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://umami.is/docs/running-on-fly-io"&gt;fly.io&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You may notice that our fork is a &lt;a href="https://nextjs.org/"&gt;Next.js&lt;/a&gt; project, so we will host it on &lt;a href="https://nextjs.org/"&gt;Vercel&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;When creating you project you have 3 things to do:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Override build command: &lt;code&gt;yarn build&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Override install command: &lt;code&gt;yarn install&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Set &lt;code&gt;DATABASE_URL&lt;/code&gt; in environment variables (take a look at the &lt;code&gt;.env&lt;/code&gt; file above to see what you should get).&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="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%2Farticles%2Fdanba1g1o5mz9z8ml1hh.jpg" class="article-body-image-wrapper"&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%2Farticles%2Fdanba1g1o5mz9z8ml1hh.jpg" alt="Vercel's project creation interface" width="800" height="466"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After deployment, you should be able to see your instance's login !&lt;/p&gt;

&lt;p&gt;&lt;a href="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%2Farticles%2Fpg4r3tyc35n2gg8rt01n.jpg" class="article-body-image-wrapper"&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%2Farticles%2Fpg4r3tyc35n2gg8rt01n.jpg" alt="Umami empty login screen" width="800" height="364"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Before continuing, login as username: &lt;code&gt;admin&lt;/code&gt;, password &lt;code&gt;umami&lt;/code&gt;. Make sure to change your password: &lt;a href="https://umami.is/docs/login"&gt;see docs&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Setup your application
&lt;/h2&gt;

&lt;p&gt;Once you're logged in, go to settings and create your website's project in Umami:&lt;/p&gt;

&lt;p&gt;&lt;a href="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%2Farticles%2Fzty2ttu7sa2f3h5s4vge.jpg" class="article-body-image-wrapper"&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%2Farticles%2Fzty2ttu7sa2f3h5s4vge.jpg" alt="Umami modal to add project to your instance" width="800" height="469"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once created, go to Settings &amp;gt; (your project's row) &amp;gt; Edit &amp;gt; Tracking code. Paste the tracking code in your HTML.&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;script &lt;/span&gt;&lt;span class="na"&gt;async&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"https://umami-self-host-example.vercel.app/script.js"&lt;/span&gt; &lt;span class="na"&gt;data-website-id=&lt;/span&gt;&lt;span class="s"&gt;"a477d142-f3d5-4514-8251-f9f538a2b28f"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="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%2Farticles%2Fpvmexlcbvd3tj1whng77.jpg" class="article-body-image-wrapper"&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%2Farticles%2Fpvmexlcbvd3tj1whng77.jpg" alt="The script you need to add in your HTML" width="800" height="461"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  track custom events
&lt;/h2&gt;

&lt;p&gt;You can track custom events using &lt;code&gt;window.umami.track&lt;/code&gt; or using HTML attributes: &lt;code&gt;data-umami-event&lt;/code&gt;, &lt;code&gt;data-umami-event-****&lt;/code&gt; for custom properties.&lt;br&gt;
&lt;a href="https://umami.is/docs/track-events"&gt;See docs&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here is a real-world example app with an increment tracker:&lt;br&gt;
&lt;iframe src="https://stackblitz.com/edit/vitejs-vite-fqrzhn?ctl=1&amp;amp;embed=1&amp;amp;file=src%2FApp.tsx" width="100%" height="500"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

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

&lt;p&gt;And that's how to easily set up Umami Analytics in 10 minutes ! You can publicly access all the trackings of the stackblitz on my Umami instance: &lt;a href="https://umami-self-host-example.vercel.app/share/le9BgW02hInXZhxR/umami-self-host-example"&gt;https://umami-self-host-example.vercel.app&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="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%2Farticles%2Fi12t6gbo3gii5zq3ezak.jpg" class="article-body-image-wrapper"&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%2Farticles%2Fi12t6gbo3gii5zq3ezak.jpg" alt="Analytics dashboard" width="800" height="457"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>analytics</category>
      <category>webdev</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
