<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Vercel on Artur Rios Lab</title><link>https://lab.artur-rios.tech/tags/vercel/</link><description>Recent content in Vercel on Artur Rios Lab</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Wed, 21 Oct 2026 17:55:00 +0000</lastBuildDate><atom:link href="https://lab.artur-rios.tech/tags/vercel/index.xml" rel="self" type="application/rss+xml"/><item><title>Landing Pages</title><link>https://lab.artur-rios.tech/infrastructure/infrastructure-landing-pages/</link><pubDate>Wed, 21 Oct 2026 17:55:00 +0000</pubDate><guid>https://lab.artur-rios.tech/infrastructure/infrastructure-landing-pages/</guid><description>&lt;p&gt;A landing page sells something: a hero section, a grid of features, pricing,&#10;a contact or waiting-list form. It has to look polished, load fast everywhere,&#10;and occasionally do something dynamic, such as accept a form. That last part is&#10;why landing pages are not plain &lt;a href="https://lab.artur-rios.tech/infrastructure/infrastructure-static-sites/"&gt;static sites&lt;/a&gt;.&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Concern&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Choice&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Framework&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Next.js, with the App Router&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;UI&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;shadcn/ui and Tailwind CSS&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Hosting&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Vercel, on the free tier&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;DNS&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Cloudflare&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Deploys&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Vercel&amp;rsquo;s Git integration&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;h2 id="building-one"&gt;Building one&lt;a class="heading-anchor" href="#building-one" aria-label="Link to this section"&gt;&lt;/a&gt;&lt;/h2&gt;&#10;&lt;div class="code"&gt;&#10; &lt;div class="code__bar"&gt;&#10; &lt;span&gt;bash&lt;/span&gt;&#10; &lt;button class="code__copy" type="button" data-nuno-copy aria-label="Copy code to clipboard"&gt;Copy&lt;/button&gt;&#10; &lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;npx create-next-app@latest my-landing --ts --tailwind --app --eslint&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; my-landing&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;npx shadcn@latest init&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;npx shadcn@latest add button card input navigation-menu&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;p&gt;shadcn/ui is not a component library installed as a dependency: it copies each&#10;component&amp;rsquo;s source into the project, built on Radix and Tailwind, so every&#10;component can be changed like my own code.&lt;/p&gt;</description></item></channel></rss>