
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss"
	xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#"
>
  <channel>
    <atom:link href="https://lilyoliveira.com//rss.xml" rel="self" type="application/rss+xml" />
    <title>Lily Oliveira</title>
    <link>https://lilyoliveira.com/</link>
    <description>Lily's personal nerd corner.</description>
    <image>
      <url>https://lilyoliveira.com//favicons/favicon-32x32.png</url>
      <title>Lily Oliveira</title>
      <link>https://lilyoliveira.com/</link>
      <width>32</width>
      <height>32</height>
    </image>
    
        <item>
          <guid>https://lilyoliveira.com//40s-keyboard-software-engineer</guid>
          <title>How I use a 40% Keyboard as a Software Engineer</title>
          <description>How I use a 40% Keyboard as a Software Engineer</description>
          <link>https://lilyoliveira.com//40s-keyboard-software-engineer</link>
          <pubDate>Thu, 27 Mar 2025 14:00:00 +0000</pubDate>
          <category>Keyboards</category>
          <content:encoded><![CDATA[
            <div style="margin: 50px 0; font-style: italic;">
              If anything looks wrong, 
              <strong>
                <a href="https://lilyoliveira.com//40s-keyboard-software-engineer">
                  read on the site!
                </a>
              </strong>
            </div>

            <p>At first glance, a tiny keyboard with no number row, function keys, or arrow keys might seem impractical for someone who works as a software engineer. But with the right layout and muscle memory, I’d argue it becomes an even more efficient way of using your keyboard, since you won’t need to move your hand too much to reach keys that are usually far away from the home row. Let’s dig into the keyboard I use and learn more about it.</p>
<h2 id="what-keyboard-is-that"><a class="heading-link" title="Permalink" aria-hidden="true" href="#what-keyboard-is-that"><span>#</span></a>What keyboard is that?!</h2>
<p>The keyboard I use is a PlanckEZ from ZSA, sadly it has been discontinued by ZSA in favor of <a href="https://www.zsa.io/voyager" rel="nofollow">The Voyager</a>, but you can still buy a Planck keyboard from other sources such as <a href="https://drop.com/buy/planck-mechanical-keyboard?defaultSelectionIds=990100" rel="nofollow">Drop</a>.</p>
<img srcset="/images/posts/40s-keyboard-software-engineer/_DSC2017_crop_tiny.avif, /images/posts/40s-keyboard-software-engineer/_DSC2017_crop_tiny.webp, /images/posts/40s-keyboard-software-engineer/_DSC2017_crop_tiny.png" src="/images/posts/40s-keyboard-software-engineer/_DSC2017_crop_tiny.jpg" alt="PlanckEz" title="PlanckEz" loading="lazy" decoding="async" class="svelte-1rwav6g">
<p class="image-caption">PlanckEz</p>
<p>Not only is this a “40% keyboard” (as in, <em>roughly</em> 40% of the size of a regular, full-size keyboard), it is also an <strong>Ortholinear</strong> keyboard. What does that mean? It means that the keys are arranged in a grid, as opposed to staggered rows.</p>
<p>If that seems odd, look at the numpad of your regular keyboard. You already know and have been using this kind of key arrangement without even thinking about it, even if only to type numbers:</p>
<img srcset="/images/posts/40s-keyboard-software-engineer/02.avif, /images/posts/40s-keyboard-software-engineer/02.webp, /images/posts/40s-keyboard-software-engineer/02.png" src="/images/posts/40s-keyboard-software-engineer/02.png" alt="Keychron Q6 Max" title="Keychron Q6 Max" loading="lazy" decoding="async" class="svelte-1rwav6g">
<p class="image-caption">Keychron Q6 Max</p>
<p>Hopefully your fingers are not <em>staggered</em>, so why should your keyboard be?</p>
<p>(if you wanna know <em>why</em> regular keyboards have a staggered layout, <a href="https://chscommunicator.com/59441/opinion/2018/02/why-are-we-still-typing-on-staggered-key-keyboards/" rel="nofollow">typewriters are the ones to blame</a>)</p>
<h2 id="first-things-first-colemak"><a class="heading-link" title="Permalink" aria-hidden="true" href="#first-things-first-colemak"><span>#</span></a>First things first: Colemak</h2>
<p>Because downsizing to a 40% keyboard wouldn’t be enough of a challenge, I also decided to switch to a new keyboard layout when I got the Planck, and I decided to try Colemak, since there’s an <a href="https://www.colemak.academy/" rel="nofollow">easy to use website to learn it</a>. Also, I’m using a variation of the layout called Colemak Mod-DH, sometimes referred to as “Colemak-DHm”, you can read more about it <a href="https://colemakmods.github.io/mod-dh/" rel="nofollow">here</a>.</p>
<p>I chose to learn a new keyboard layout because I was suffering from strong wrist pain after a full day of work typing with my regular QWERTY keyboard (an Anne Pro 2 at the time), and after switching to Colemak I no longer experience pain after hours typing at a computer.</p>
<p>So, how does this Colemak-DHm layout look like? This is how my base layer looks like:</p>
<img srcset="/images/posts/40s-keyboard-software-engineer/03.avif, /images/posts/40s-keyboard-software-engineer/03.webp, /images/posts/40s-keyboard-software-engineer/03.png" src="/images/posts/40s-keyboard-software-engineer/03.png" alt="Base layer" title="Base layer" loading="lazy" decoding="async" class="svelte-1rwav6g">

<p>Notice that for this layout I have swapped the <code>/</code> character on the bottom right corner for <code>?</code> (and moved the regular <code>/</code> character to the <code>lower</code> layer that we’ll see soon) - I did that because I use the question mark more often than the forward slash. I did the same with the <code>:</code> and <code>;</code> characters.</p>
<img srcset="/images/posts/40s-keyboard-software-engineer/04.avif, /images/posts/40s-keyboard-software-engineer/04.webp, /images/posts/40s-keyboard-software-engineer/04.png" src="/images/posts/40s-keyboard-software-engineer/04.png" alt="Small modifications to the base layer" title="Small modifications to the base layer" loading="lazy" decoding="async" class="svelte-1rwav6g">

<h2 id="but-there-are-so-many-keys-missing"><a class="heading-link" title="Permalink" aria-hidden="true" href="#but-there-are-so-many-keys-missing"><span>#</span></a>But there are so many keys missing!</h2>
<p>Not really! They’re just in a different layer. Think about how you type capital letters on your keyboard: you hold down the <code>shift</code> key and then all the keys you see will output the capitalized versions of that letter, just as the number keys above the letters will output symbols such as <code>! @ # # $ %</code>.</p>
<p>And by the way, if you hold down <code>alt</code> and type on your keyboard, you’ll notice that it outputs more symbols that you might not have known before, and if you hold <code>alt+shift</code> you might have access to <strong>even more symbols!</strong> You already use layers on your keyboard!</p>
<p>And since this is a fully programmable keyboard, that means I can decide exactly which keys activate which layer when pressed. Let’s take a closer look at what my layers looks like.</p>
<h2 id="layers-layers-layers"><a class="heading-link" title="Permalink" aria-hidden="true" href="#layers-layers-layers"><span>#</span></a>Layers, layers, layers…</h2>
<p>We already saw the base layer above, so what’s next?</p>
<p>The most common layers on Planck keyboards are the <code>lower</code> and <code>raise</code> layers. To activate these layers, I hold down the <code>lower</code> or <code>raise</code> key with either of my thumbs. These keys are located to the left and to the right of the spacebar.</p>
<h3 id="the-lower-layer"><a class="heading-link" title="Permalink" aria-hidden="true" href="#the-lower-layer"><span>#</span></a>The Lower layer</h3>
<img srcset="/images/posts/40s-keyboard-software-engineer/05.avif, /images/posts/40s-keyboard-software-engineer/05.webp, /images/posts/40s-keyboard-software-engineer/05.png" src="/images/posts/40s-keyboard-software-engineer/05.png" alt="The lower layer" title="The lower layer" loading="lazy" decoding="async" class="svelte-1rwav6g">

<p>On the Lower layer, I have all the F keys grouped on the left side of the keyboard for easy access with a single hand, and on the right hand side I have symbols laid out in a way that resembles how a numpad would be laid out - the numpad itself is available on the same position on the <code>WASD</code> layer, which we’ll see later down this article!</p>
<p>The <code>Esc</code> key is also on this layer, on the top left corner, though I mostly use it on the same position but from the <code>WASD</code> layer.</p>
<img srcset="/images/posts/40s-keyboard-software-engineer/06.avif, /images/posts/40s-keyboard-software-engineer/06.webp, /images/posts/40s-keyboard-software-engineer/06.png" src="/images/posts/40s-keyboard-software-engineer/06.png" alt="`;` and `/` characters" title="`;` and `/` characters" loading="lazy" decoding="async" class="svelte-1rwav6g">

<p>Notice that this layer also holds the <code>;</code> and <code>/</code> characters that I moved away from the base layer.</p>
<h3 id="the-raise-layer"><a class="heading-link" title="Permalink" aria-hidden="true" href="#the-raise-layer"><span>#</span></a>The Raise layer</h3>
<p>By holding down the <code>raise</code> key with my right thumb, I get access to my <strong>Raise</strong> layer:</p>
<img srcset="/images/posts/40s-keyboard-software-engineer/07.avif, /images/posts/40s-keyboard-software-engineer/07.webp, /images/posts/40s-keyboard-software-engineer/07.png" src="/images/posts/40s-keyboard-software-engineer/07.png" alt="the raise layer" title="the raise layer" loading="lazy" decoding="async" class="svelte-1rwav6g">

<p>All the programming-related symbols are easily available and only 1 key away from the resting hand position in the home row.</p>
<p>This layer also has the media controls on the bottom right corner to play/pause and decrease or increase volume, as well as some macros on other corners, here’s what they do:</p>
<ul><li><code>~/</code>: inserts the string <code>~/</code>.</li>
<li><code>SinglQuote</code>: inserts the string <code>&#39;&#39;</code></li>
<li><code>DoublQuote</code>: inserts the string <code>&quot;&quot;</code>
These macros are handy for me since I set the operating system to use the <code>US-International</code> keyboard layout, and having these macros help me to avoid additional key presses for inserting each of these symbols, due to how the <code>US-International</code> layout works.</li></ul>
<p>Additionally, I have added key combos on the home row to easily navigate through text, with key combos for moving forward/backwards by words, go to the end or start of the line, and other <em>per-word</em> or <em>per-line</em> operations. Watch out, it might seem a bit <em>intimidating</em> at first:</p>
<img srcset="/images/posts/40s-keyboard-software-engineer/08.avif, /images/posts/40s-keyboard-software-engineer/08.webp, /images/posts/40s-keyboard-software-engineer/08.png" src="/images/posts/40s-keyboard-software-engineer/08.png" alt="Movement shortcuts on the raise layer" title="Movement shortcuts on the raise layer" loading="lazy" decoding="async" class="svelte-1rwav6g">

<p>These <em>per-word</em> and <em>per-line</em> combos are mapped for working with MacOS, but I also have a <code>WinRaise</code> layer that does exactly the same thing but with these combinations adjusted to work on Windows.</p>
<p>You can inspect them closely by running my <a href="https://configure.zsa.io/planck-ez/layouts/RXnVa/latest/0" rel="nofollow">Layout Tour from ZSA’s configurator website</a> - Just click on the “Play layout tour” button when the page loads.</p>
<h3 id="intellij-idea-layer"><a class="heading-link" title="Permalink" aria-hidden="true" href="#intellij-idea-layer"><span>#</span></a>IntelliJ IDEA layer</h3>
<p>When holding down the <code>backtick</code> key (top left on the base layer), I get access to a layer entirely dedicated to triggering actions mapped in IntelliJ IDEA, this makes my workflow <em>so</em> nice and smooth.</p>
<img srcset="/images/posts/40s-keyboard-software-engineer/09.avif, /images/posts/40s-keyboard-software-engineer/09.webp, /images/posts/40s-keyboard-software-engineer/09.png" src="/images/posts/40s-keyboard-software-engineer/09.png" alt="IntelliJ IDEA layer" title="IntelliJ IDEA layer" loading="lazy" decoding="async" class="svelte-1rwav6g">

<p>If you use IntelliJ IDEA on a daily basis, you should definitely get acquainted with the existing keyboard shortcuts, they help a lot when running common tasks. In addition to that, I have also configured some other key bindings in IntelliJ that work together with this layer on my Planck keyboard for a great experience when working in the IDE.</p>
<p>This layer is way easier to understand and follow by <a href="https://configure.zsa.io/planck-ez/layouts/RXnVa/latest/8/0/tour" rel="nofollow">playing the layout tour</a>.</p>
<p>Nevertheless, here’s what each macro does in this layer, from top left to bottom right:</p>
<ul><li><code>OpenFile-</code>: Move to the open file to the left of the current file.</li>
<li><code>OpenFile+</code>: Move to the open file to the right of the current file.</li>
<li><code>Signature</code>: Refactor: change signature.</li>
<li><code>Rename</code>: Refactor: rename.</li>
<li><code>Annotate</code>: Open Annotate/Git blame panel.</li>
<li><code>Structure</code>: Show/Hide file structure.</li>
<li><code>CamelMovL</code>: Move cursor to the previous camelCase hump.</li>
<li><code>CamelSeL</code>: Select from cursor to the previous camelCase hump.</li>
<li><code>CamelSelR</code>: Select from cursor to the next camelCase hump.</li>
<li><code>CamelMovR</code>: Move cursor to the next camelCase hump.</li>
<li><code>{Surround}</code>: Opens the “Surround with…” dialog.</li>
<li><code>Find Usage</code>: Find usages.</li>
<li><code>🔎 Members</code>: Show class members.</li>
<li><code>Move Back</code>: Navigate to the previous cursor position.</li>
<li><code>Move Forw</code>: Navigate to the next cursor position.</li>
<li><code>Sidepanel</code>: Open/close the sidepanel with the project tree.</li>
<li><code>Select ⬆️</code>: Select from cursor to the top of the file.</li>
<li><code>Close 👈🏼</code>: Close open files to the left of the current file.</li>
<li><code>Close 👉🏼</code>: Close open files to the right of the current file.</li>
<li><code>Column Sel</code>: Toggle column selection on/off.</li>
<li><code>DebugExp</code>: Opens “Evaluate expression” dialg when debugging.</li>
<li><code>Split V</code>: Split current file vertically.</li>
<li><code>Split H</code>: Split current file horizontally.</li>
<li><code>prev split</code>: Move focus to the previous split pane.</li>
<li><code>next split</code>: Move focus to the next split pane.</li>
<li><code>Select ⬇️</code>: Select from cursor to the end of the file.</li>
<li><code>Move ⬆️</code>: Move cursor to the top of the file.</li>
<li><code>x-Variable</code>: Extract variable.</li>
<li><code>x-Method</code>: Extract method.</li>
<li><code>Move ⬇️</code>: Move cursor to the end of the file.</li>
<li><code>Opt+Shift+⬇️</code>: move selection down one line.</li>
<li><code>Opt+Shift+⬆️</code>: move selection up one line.</li></ul>
<p>In order for all of these shortcuts to work, you’ll need to setup these keyboard shortcuts that don’t exist by default in IntelliJ IDEA:</p>
<div class="mid-bleed markdown-table"><table><thead><tr><th>Command</th>
<th>Key binding</th></tr></thead>
<tbody><tr><td>Move caret to file start</td>
<td><code>⌥</code> + <code>shift</code> + <code>m</code>, <code>↑</code></td></tr>
<tr><td>Move caret to file start with selection</td>
<td><code>ctrl</code> + <code>shift</code> + <code>m</code>, <code>↑</code></td></tr>
<tr><td>Move caret to file end</td>
<td><code>⌥</code> + <code>shift</code> + <code>m</code>, <code>↓</code></td></tr>
<tr><td>Move caret to file end with selection</td>
<td><code>ctrl </code> + <code>shift</code> + <code>m</code>, <code>↓</code></td></tr>
<tr><td>Move Caret to next word in different “CamelHumps” mode</td>
<td><code>⌥</code> + <code>.</code></td></tr>
<tr><td>Move Caret to next word with selection in different “CamelHumps” mode</td>
<td><code>ctrl</code> + <code>⌥</code> + <code>.</code></td></tr>
<tr><td>Move Caret to previous word in different “CamelHumps” Mode</td>
<td><code>⌥</code> + <code>,</code></td></tr>
<tr><td>Move Caret to previous word with selection in different “CamelHumps” mode</td>
<td><code>ctrl</code> + <code>⌥</code> + <code>,</code></td></tr>
<tr><td>Close files to the left</td>
<td><code>⌘</code> + <code>shift</code> + <code>x</code>, <code>←</code></td></tr>
<tr><td>Close files to the right</td>
<td><code>⌘</code> + <code>shift</code> + <code>x</code>, <code>→</code></td></tr>
<tr><td>Split vertically</td>
<td><code>⌥</code> + <code>shift</code> + <code>s</code>, <code>v</code></td></tr>
<tr><td>Split horizontally</td>
<td><code>⌥</code> + <code>shift</code> + <code>s</code>, <code>h</code></td></tr>
<tr><td>Git annotate</td>
<td><code>⌥</code> + <code>shift</code> + <code>b</code></td></tr>
<tr><td>File Structure</td>
<td><code>⌥</code> + <code>shift</code> + <code>v</code>, <code>m</code></td></tr>
<tr><td>Evaluate Expression</td>
<td><code>⌥</code> + <code>shift</code> + <code>e</code></td></tr>
<tr><td>Find Usages</td>
<td><code>⌥</code> + <code>shift</code> + <code>v</code>, <code>u</code></td></tr></tbody></table></div>
<p>And this is how moving the cursor / selecting in camelHumps mode looks like:</p>
<img srcset="/images/posts/40s-keyboard-software-engineer/CamelHumps.gif" src="/images/posts/40s-keyboard-software-engineer/CamelHumps.gif" alt="Camel Humps Mode" title="Camel Humps Mode" loading="lazy" decoding="async" class="svelte-1rwav6g">

<h3 id="no-more-pinky-stretching"><a class="heading-link" title="Permalink" aria-hidden="true" href="#no-more-pinky-stretching"><span>#</span></a>No more pinky stretching!</h3>
<p>Usually, on regular-sized keyboards, we use the pinky on the right hand to hit both <code>backspace</code> and <code>enter</code> keys. To make it more comfortable, I have set up the <code>lower</code> and <code>raise</code> keys to act as the <code>backspace</code> and <code>enter</code> keys when <em>tapped</em>. This way I can comfortably hit <code>backspace</code> and <code>enter</code> with my thumbs, without needing to move my hands away from the home row. And don’t worry, these keys will still activate the <code>lower</code> / <code>raise</code> layers when <em>held</em> down.</p>
<p>backspace and enter when tapping the lower and raise keys</p>
<img srcset="/images/posts/40s-keyboard-software-engineer/10.avif, /images/posts/40s-keyboard-software-engineer/10.webp, /images/posts/40s-keyboard-software-engineer/10.png" src="/images/posts/40s-keyboard-software-engineer/10.png" alt="backspace and enter when tapping the lower and raise keys" title="backspace and enter when tapping the lower and raise keys" loading="lazy" decoding="async" class="svelte-1rwav6g">

<p>The configurator tool allows for setting different actions for each key on 4 different states: when <em>tapped</em>, when <em>held</em>, when <em>double-tapped</em> or when <em>tapped and held</em>.</p>
<h3 id="numbers-and-arrow-keys"><a class="heading-link" title="Permalink" aria-hidden="true" href="#numbers-and-arrow-keys"><span>#</span></a>Numbers and arrow keys</h3>
<p>Most people are already used to typing numbers in a numpad from a full-size keyboard. Therefore having a layer that lays out a numpad <strong>right under your right hand</strong> feels very natural.</p>
<p>On the same layer, I have the arrow keys where the <code>WASD</code> keys would normally be in a QWERTY layout. (now that I think of it, it’s a bit ironic that I call the layout “WASD” but do not actually have the WASD letter keys mapped in this layout… 😅)</p>
<p>I activate this layer by holding down the <code>tab</code> key with my left pinky, this allows me to use the arrow keys with my left hand, while also having the numpad under my right hand. This how it looks like:</p>
<img srcset="/images/posts/40s-keyboard-software-engineer/11.avif, /images/posts/40s-keyboard-software-engineer/11.webp, /images/posts/40s-keyboard-software-engineer/11.png" src="/images/posts/40s-keyboard-software-engineer/11.png" alt="WASD Layer" title="WASD Layer" loading="lazy" decoding="async" class="svelte-1rwav6g">

<p>Notice that around the arrow keys I also have some other navigation keys mapped, such as <em>page up</em>, <em>page down</em>, <em>home</em> and <em>end</em>.</p>
<p>The arrow keys can also be easily accessed on the base layer by tapping the 4 keys on the bottom right corner:</p>
<img srcset="/images/posts/40s-keyboard-software-engineer/12.avif, /images/posts/40s-keyboard-software-engineer/12.webp, /images/posts/40s-keyboard-software-engineer/12.png" src="/images/posts/40s-keyboard-software-engineer/12.png" alt="arrow keys on the bottom right corner" title="arrow keys on the bottom right corner" loading="lazy" decoding="async" class="svelte-1rwav6g">

<p><strong>Isn’t it hard to remember where all the keys are!?</strong></p>
<p>Personally, I think that if you map the symbols into an arrangement that makes sense <em>for you</em>, it should never be an issue as you’ll grow used to it and after some time you build the muscle memory for it.</p>
<h3 id="mouse-movement"><a class="heading-link" title="Permalink" aria-hidden="true" href="#mouse-movement"><span>#</span></a>Mouse movement!</h3>
<p><em>Wait, what?</em> <strong>YES.</strong></p>
<p>While holding down the <code>space</code> key, the Mouse layer becomes active and I can move the mouse cursor and click using the keyboard:</p>
<img srcset="/images/posts/40s-keyboard-software-engineer/13.avif, /images/posts/40s-keyboard-software-engineer/13.webp, /images/posts/40s-keyboard-software-engineer/13.png" src="/images/posts/40s-keyboard-software-engineer/13.png" alt="Mouse layer" title="Mouse layer" loading="lazy" decoding="async" class="svelte-1rwav6g">

<p>It might be a very niche feature, but I find it to be very useful when using the keyboard during a train ride.</p>
<h3 id="browser-tab-navigation"><a class="heading-link" title="Permalink" aria-hidden="true" href="#browser-tab-navigation"><span>#</span></a>Browser tab navigation</h3>
<p>To activate this layer, I <em>tap and hold</em> the shift key:</p>
<img srcset="/images/posts/40s-keyboard-software-engineer/14.avif, /images/posts/40s-keyboard-software-engineer/14.webp, /images/posts/40s-keyboard-software-engineer/14.png" src="/images/posts/40s-keyboard-software-engineer/14.png" alt="Browser navigation layer" title="Browser navigation layer" loading="lazy" decoding="async" class="svelte-1rwav6g">

<p>This layer is used to quickly navigate to the open tabs in the browser by using the keyboard shortcuts to move to an open tab at a specific position with <code>⌘+1</code>, <code>⌘+2</code>…<code>⌘+8</code> with the keyboard.</p>
<p>This layer also has shortcuts for zooming in and out in webpages, and to move to the previous or next open tab.</p>
<p>I also have a second browser tab layer with the same shortcuts but using the shortcuts with the <code>ctrl</code> key instead of the <code>⌘</code> key, because I use these shortcuts on both Windows and MacOS.</p>
<h3 id="gaming-"><a class="heading-link" title="Permalink" aria-hidden="true" href="#gaming-"><span>#</span></a>Gaming 🎮</h3>
<p>I have a dedicated layout for gaming, with the WASD keys placed where a standard QWERTY keyboard would have, as well as some keys that are commonly used for gaming around it.</p>
<img srcset="/images/posts/40s-keyboard-software-engineer/15.avif, /images/posts/40s-keyboard-software-engineer/15.webp, /images/posts/40s-keyboard-software-engineer/15.png" src="/images/posts/40s-keyboard-software-engineer/15.png" alt="Gaming layer" title="Gaming layer" loading="lazy" decoding="async" class="svelte-1rwav6g">

<p>Also, when holding down the <code>lower</code> key in this layer, I get access to a numpad right under the left hand, which makes it super handy for quickly triggering in-game actions with the numbers without having to move my hand away:</p>
<img srcset="/images/posts/40s-keyboard-software-engineer/16.avif, /images/posts/40s-keyboard-software-engineer/16.webp, /images/posts/40s-keyboard-software-engineer/16.png" src="/images/posts/40s-keyboard-software-engineer/16.png" alt="Numbers layer on the left side for gaming" title="Numbers layer on the left side for gaming" loading="lazy" decoding="async" class="svelte-1rwav6g">

<p>I also have a dedicated layout for playing The Sims 4 🙃</p>
<img srcset="/images/posts/40s-keyboard-software-engineer/17.avif, /images/posts/40s-keyboard-software-engineer/17.webp, /images/posts/40s-keyboard-software-engineer/17.png" src="/images/posts/40s-keyboard-software-engineer/17.png" alt="The Sims 4 layer" title="The Sims 4 layer" loading="lazy" decoding="async" class="svelte-1rwav6g">

<h3 id="the-end-for-now-️"><a class="heading-link" title="Permalink" aria-hidden="true" href="#the-end-for-now-️"><span>#</span></a>The End (for now…) ⌨️</h3>
<p>Those are all the layers that make me absolutely <strong>love</strong> having the Planck as my daily keyboard. If you browse my layout, you will notice that I also have a layer dedicated to <a href="https://www.vim.org/" rel="nofollow">VIM</a> - well, <em>technically</em> for Neovim. I haven’t had the time to really dive into the VIM rabbit hole yet, so I’m keeping it off this list for now. If you’re a Vim user, let me know how you’ve set up your workflow!</p>
<h3 id="keycap-close-ups"><a class="heading-link" title="Permalink" aria-hidden="true" href="#keycap-close-ups"><span>#</span></a>Keycap close-ups!</h3>
<p>Here are some close-up shots of my custom keycaps 😊</p>
<img srcset="/images/posts/40s-keyboard-software-engineer/_DSC2023.avif, /images/posts/40s-keyboard-software-engineer/_DSC2023.webp, /images/posts/40s-keyboard-software-engineer/_DSC2023.png" src="/images/posts/40s-keyboard-software-engineer/_DSC2023.jpg" alt="uwu metal keycap by TerraKeycaps" title="uwu metal keycap by TerraKeycaps" loading="lazy" decoding="async" class="svelte-1rwav6g">

<img srcset="/images/posts/40s-keyboard-software-engineer/_DSC2026.avif, /images/posts/40s-keyboard-software-engineer/_DSC2026.webp, /images/posts/40s-keyboard-software-engineer/_DSC2026.png" src="/images/posts/40s-keyboard-software-engineer/_DSC2026.jpg" alt="artisan astronaut Keycap" title="artisan astronaut Keycap" loading="lazy" decoding="async" class="svelte-1rwav6g">

<img srcset="/images/posts/40s-keyboard-software-engineer/_DSC2025.avif, /images/posts/40s-keyboard-software-engineer/_DSC2025.webp, /images/posts/40s-keyboard-software-engineer/_DSC2025.png" src="/images/posts/40s-keyboard-software-engineer/_DSC2025.jpg" alt="artisan astronaut Keycap" title="artisan astronaut Keycap" loading="lazy" decoding="async" class="svelte-1rwav6g">

<h3 id="whats-your-keyboard-of-choice"><a class="heading-link" title="Permalink" aria-hidden="true" href="#whats-your-keyboard-of-choice"><span>#</span></a>What’s your keyboard of choice?</h3>
<p>Do you also use a non-conventional keyboard? Share a picture in the comments and tell me what makes it special — I’d love to see your setup! 🤓 ⌨️</p>
          ]]></content:encoded>
          <media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://lilyoliveira.com///images/posts/40s-keyboard-software-engineer/header_3.png"/>
          <media:content xmlns:media="http://search.yahoo.com/mrss/" medium="image" url="https://lilyoliveira.com///images/posts/40s-keyboard-software-engineer/header_3.png"/>          
        </item>
      
        <item>
          <guid>https://lilyoliveira.com//qr-codes-for-large-type</guid>
          <title>QR Codes for Large Type</title>
          <description>Let's see how to make those cool looking QR codes for using together with Large Type Svelte!</description>
          <link>https://lilyoliveira.com//qr-codes-for-large-type</link>
          <pubDate>Wed, 16 Oct 2024 14:00:00 +0000</pubDate>
          <category>Progressive Web App</category><category>Svelte</category><category>Photoshop</category><category>QR Codes</category>
          <content:encoded><![CDATA[
            <div style="margin: 50px 0; font-style: italic;">
              If anything looks wrong, 
              <strong>
                <a href="https://lilyoliveira.com//qr-codes-for-large-type">
                  read on the site!
                </a>
              </strong>
            </div>

            <p>A couple of weeks ago, I posted <a href="https://lilyoliveira.com/large-type-svelte/">an article</a> explaining how to have your own Large Type app for quick access from your phone’s home screen, even offline. Today, I’ll show you how to create QR code images to make it easier to connect with people on LinkedIn, Instagram, Telegram, or WhatsApp in just a few taps.</p>
<p>If you missed my first post on this, you can <a href="https://lilyoliveira.com/large-type-svelte/">check it out here</a>.</p>
<h4 id="creating-your-own-qr-codes-for-large-type-svelte"><a class="heading-link" title="Permalink" aria-hidden="true" href="#creating-your-own-qr-codes-for-large-type-svelte"><span>#</span></a>Creating your own QR codes for Large Type Svelte</h4>
<p>For this guide, I’ll be using Adobe Photoshop, but feel free to use any alternative that can work with <code>.psd</code> files.</p>
<p>Here’s what we’ll do on this guide:</p>
<ul><li>generate QR codes for your social networks.</li>
<li>use the generated QR codes together with the Photoshop template file I’m providing.</li>
<li>export the image with your QR code so that you can use it with the Large Type app from <a href="https://lilyoliveira.com/large-type-svelte/">my previous article</a> .</li></ul>
<h3 id="generating-the-qr-codes"><a class="heading-link" title="Permalink" aria-hidden="true" href="#generating-the-qr-codes"><span>#</span></a>Generating the QR codes</h3>
<p>For generating the QR codes, we’ll use the website QR Code Monkey, so go ahead and open <a href="https://www.qrcode-monkey.com/" rel="nofollow">https://www.qrcode-monkey.com/</a> on a new tab in your browser.</p>
<p>On the <code>Your URL</code> field, you’ll need to enter the URL for the social network you want to link to. Each social network has it’s own URL pattern, here are the URL patterns for each of them:</p>
<ul><li>LinkedIn: <code>https://www.linkedin.com/in/your_username?fromQR=1</code> (replace <code>your_username</code> with the username from your own LinkedIn profile)</li>
<li>Instagram: <code>https://instagram.com/your_username</code> (replace <code>your_username</code> with the username from your own Instagram profile)</li>
<li>Telegram: <code>https://t.me/your_username</code> (replace <code>your_username</code> with the username from your own Telegram profile)</li>
<li>WhatsApp: <code>https://wa.me/your_phone_number</code> (replace <code>your_phone_number</code> with your own WhatsApp phone number). <strong>Important:</strong> make sure to enter the phone number with country code including the plus sign at the start, e.g.: <code>+4915301006622</code>.</li></ul>
<p>For each social profile, you should create a different QR code using QR Code Monkey. On this example let’s make a QR code that links to my LinkedIn profile (do the same for your own profile).</p>
<p>Add the URL, click on <strong>“ADD LOGO IMAGE”</strong> and then select a logo image, I’ll pick the LinkedIn one in this case. Then, click on <strong>“Create QR Code”</strong> to generate the code, and then on <strong>“Download PNG”</strong> to download the generated QR code. Repeat the process for all social networks you want to have QR codes for.</p>
<img srcset="/images/posts/qr-codes-for-large-type/01.avif, /images/posts/qr-codes-for-large-type/01.webp, /images/posts/qr-codes-for-large-type/01.png" src="/images/posts/qr-codes-for-large-type/01.png" alt="QR Code Monkey interface" title="QR Code Monkey interface" loading="lazy" decoding="async" class="svelte-1rwav6g">

<p><strong>NOTE:</strong> the <code>Badge_Template.psd</code> file <a href="https://github.com/lily-gh/large-type-svelte/blob/d919168ef4f63bff5bc9aed22eeab849eb94c644/Badge_Template.psd" rel="nofollow">I am providing here</a> already have the logo images for LinkedIn, Instagram, Telegram and WhatsApp, but it is still a good idea to pick any logo when creating the QR code to make sure that we have that placeholder space in the middle, as that allow us to choose a different logo image to use on it later.</p>
<h3 id="removing-the-background"><a class="heading-link" title="Permalink" aria-hidden="true" href="#removing-the-background"><span>#</span></a>Removing the background</h3>
<p>Great, we have our QR codes! But to use them properly, first we should remove the white background. For that, head over to <a href="https://www.remove.bg/" rel="nofollow">https://www.remove.bg/</a>, upload the QR code file generated on the previous step, then click on <strong>“Download”</strong> to download the QR code without the white background:</p>
<img srcset="/images/posts/qr-codes-for-large-type/02.avif, /images/posts/qr-codes-for-large-type/02.webp, /images/posts/qr-codes-for-large-type/02.png" src="/images/posts/qr-codes-for-large-type/02.png" alt="Remove.bg interface" title="Remove.bg interface" loading="lazy" decoding="async" class="svelte-1rwav6g">

<p>Great! Now we’re ready to use the file we just downloaded with Photoshop to create your own “social profile badge” image!</p>
<h3 id="creating-your-own-badge-images"><a class="heading-link" title="Permalink" aria-hidden="true" href="#creating-your-own-badge-images"><span>#</span></a>Creating your own Badge images</h3>
<p>The next steps will be shown with Adobe Photoshop, but feel free to use any alternative such as GIMP or Krita.</p>
<p>Open the <code>Badge_Template.psd</code> file with Adobe Photoshop. This is what you should see:</p>
<img srcset="/images/posts/qr-codes-for-large-type/03.avif, /images/posts/qr-codes-for-large-type/03.webp, /images/posts/qr-codes-for-large-type/03.png" src="/images/posts/qr-codes-for-large-type/03.png" alt="Photoshop template" title="Photoshop template" loading="lazy" decoding="async" class="svelte-1rwav6g">

<p>Now, expand the <code>QR-LinkedIn</code> folder, select the <code>qr-linkedin</code> image, and drag the QR code that you generated on the previous step into Photophop’s window:</p>
<img srcset="/images/posts/qr-codes-for-large-type/04.avif, /images/posts/qr-codes-for-large-type/04.webp, /images/posts/qr-codes-for-large-type/04.png" src="/images/posts/qr-codes-for-large-type/04.png" alt="Dragging QR code into Photoshop" title="Dragging QR code into Photoshop" loading="lazy" decoding="async" class="svelte-1rwav6g">

<p>Now, resize it by dragging the edge of the QR code image while holding <code>alt/option</code> key (to keep it centered) so that it matches the size of the QR code that’s below it, the one from the template.</p>
<img srcset="/images/posts/qr-codes-for-large-type/05.avif, /images/posts/qr-codes-for-large-type/05.webp, /images/posts/qr-codes-for-large-type/05.png" src="/images/posts/qr-codes-for-large-type/05.png" alt="Resizing QR code" title="Resizing QR code" loading="lazy" decoding="async" class="svelte-1rwav6g">

<p>Now that you’ve resized your QR code image to match the size and position of the old one, select the layer of the old QR code and press <code>delete</code>/<code>backspace</code> to delete the layer:</p>
<img srcset="/images/posts/qr-codes-for-large-type/06.avif, /images/posts/qr-codes-for-large-type/06.webp, /images/posts/qr-codes-for-large-type/06.png" src="/images/posts/qr-codes-for-large-type/06.png" alt="Deleting old QR code layer" title="Deleting old QR code layer" loading="lazy" decoding="async" class="svelte-1rwav6g">

<p>Done! Now you should have your own badge image with a QR code that points to your own profile. You can check it by pointing your phone’s camera to it to confirm that it will open up your LinkedIn profile.</p>
<p>Now, do the same for the other social networks. You can close the LinkedIn folder and toggle the visibility off and toggle the visibility on for the next social network you want to work on:</p>
<img srcset="/images/posts/qr-codes-for-large-type/07.avif, /images/posts/qr-codes-for-large-type/07.webp, /images/posts/qr-codes-for-large-type/07.png" src="/images/posts/qr-codes-for-large-type/07.png" alt="Toggling social network visibility" title="Toggling social network visibility" loading="lazy" decoding="async" class="svelte-1rwav6g">

<p>Repeat these steps for each of your social profiles.</p>
<p>Before we export the image to be used with  <a href="https://lilyoliveira.com/large-type-svelte/">Large Type Svelte</a>, let’s also change the avatar image.</p>
<p>For that, expand the Avatar folder in Photoshop, select the current avatar image, drag your desired image into Photoshop’s window and resize it so that it roughly matches the size of the existing avatar (similar to how we did with the QR code).</p>
<p>To make the new image fit the circle shape, right click the layer of your new image and then select <strong>“Create Clipping Mask”</strong> from the pop-up menu.</p>
<img srcset="/images/posts/qr-codes-for-large-type/08.avif, /images/posts/qr-codes-for-large-type/08.webp, /images/posts/qr-codes-for-large-type/08.png" src="/images/posts/qr-codes-for-large-type/08.png" alt="Creating clipping mask" title="Creating clipping mask" loading="lazy" decoding="async" class="svelte-1rwav6g">

<p>After this step it should look something like this:</p>
<img srcset="/images/posts/qr-codes-for-large-type/09.avif, /images/posts/qr-codes-for-large-type/09.webp, /images/posts/qr-codes-for-large-type/09.png" src="/images/posts/qr-codes-for-large-type/09.png" alt="Final avatar result" title="Final avatar result" loading="lazy" decoding="async" class="svelte-1rwav6g">

<p>Great! Now we’re ready to export the images. We’ll repeat this step for each of the social networks we want to have a “badge” for. Let’s export the image for LinkedInd first. Toggle visibility on for the QR-LinkedIn group, and keep it off for the other platforms (QR-Instagram, QR-Telegram and QR-WhatsApp).</p>
<p>When you’re ready to export, go to <strong>File &gt; Export &gt; Save For Web (Legacy)</strong>, change the width to about <strong>600px</strong> (we’re doing this so that the exported file isn’t too big), then click “Save”, give the new file a name and confirm:</p>
<img srcset="/images/posts/qr-codes-for-large-type/10.avif, /images/posts/qr-codes-for-large-type/10.webp, /images/posts/qr-codes-for-large-type/10.png" src="/images/posts/qr-codes-for-large-type/10.png" alt="Exporting image" title="Exporting image" loading="lazy" decoding="async" class="svelte-1rwav6g">

<p>For the other social networks, just repeat the process and export the images when done for each of them. Each folder on the PSD file has the appropriate logos for the networks (LinkedIn, Instagram, Telegram and WhatsApp), but feel free to change them around as well.</p>
<p>With all this done, you can have your QR codes easily accessible from your phone with Large Type Svelte. All you have to do now is put the images you just exported in the <code>public</code> folder of your own fork of the Large Type Svelte app as explained in my <a href="https://lilyoliveira.com/large-type-svelte/#creating-your-own-qr-codes-that-point-to-your-social-profiles">previous article</a> (see section <em>“Creating your own QR codes that point to your social profiles”</em>)</p>
<h3 id="thank-you-"><a class="heading-link" title="Permalink" aria-hidden="true" href="#thank-you-"><span>#</span></a>Thank you 💖</h3>
<p>Phew! That was a lot. Now that I think of it, maybe I can find a way to somehow automate this process to make it easier… 🤔</p>
<p>If you think this was helpful, consider <a href="https://ko-fi.com/lily_neinhorn" rel="nofollow">supporting me on Ko-fi 💖</a></p>
          ]]></content:encoded>
          <media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://lilyoliveira.com///images/posts/qr-codes-for-large-type/header.png"/>
          <media:content xmlns:media="http://search.yahoo.com/mrss/" medium="image" url="https://lilyoliveira.com///images/posts/qr-codes-for-large-type/header.png"/>          
        </item>
      
        <item>
          <guid>https://lilyoliveira.com//large-type-svelte</guid>
          <title>Large Type App with Svelte</title>
          <description>Large Type App with Svelte</description>
          <link>https://lilyoliveira.com//large-type-svelte</link>
          <pubDate>Tue, 01 Oct 2024 14:00:00 +0000</pubDate>
          <category>Progressive Web App</category><category>Svelte</category><category>PWA</category>
          <content:encoded><![CDATA[
            <div style="margin: 50px 0; font-style: italic;">
              If anything looks wrong, 
              <strong>
                <a href="https://lilyoliveira.com//large-type-svelte">
                  read on the site!
                </a>
              </strong>
            </div>

            <p>Ever struggled to spell out your name or address at a hotel or to a taxi driver? Let me make it easier for you - <em>you’ll <div class="sparkle-wrapper svelte-exdx8u">
	<span class="slot-wrapper svelte-exdx8u"><strong class="secondary svelte-8f8x6d">LOVE</strong></span>
</div> this!</em> Large Type is a simple tool that displays text in a HUGE, easy-to-read font on your screen. I’ve turned it into a Progressive Web App that you can add directly to your phone’s home screen — and it even works offline!</p>
<p>In this article, I’ll show you how to quickly add Large Type to your phone and customize it with your most-used phrases for even more convenience. Ready to make life easier? Let’s dive in!</p>
<h3 id="what-is-large-type"><a class="heading-link" title="Permalink" aria-hidden="true" href="#what-is-large-type"><span>#</span></a>What is Large Type</h3>
<p>Large Type is a web utility that you can use to display text in your screen with a <strong>LARGE FONT</strong> so that people can see it easily. I forked the project (originally made by Dan Bader - thanks Dan!) and made few changes to turn it into a Progressive Web App so that you can easily run it directly from your phone’s home screen - even when offline!</p>
<p>Check out how it looks like: <a href="https://large-type-svelte.vercel.app" rel="nofollow">https://large-type-svelte.vercel.app</a></p>
<img srcset="/images/posts/large-type-svelte/demo_original.gif" src="/images/posts/large-type-svelte/demo_original.gif" alt="Large Type Svelte running on the Phone" title="Large Type Svelte running on the Phone" loading="lazy" decoding="async" class="svelte-1rwav6g">

<h3 id="features"><a class="heading-link" title="Permalink" aria-hidden="true" href="#features"><span>#</span></a>Features</h3>
<p>There are a few links that you can click to easily pre-fill your name and other personal data on your computer or phone’s screen. <em>(we’ll see how to do that in a moment)</em></p>
<p>The links included in this project are:</p>
<ul><li>name</li>
<li>address</li>
<li>phone</li>
<li>email placeholder (<code>@gmail.com</code> for example)</li>
<li>blank (clicking on this link clears the input)</li>
<li>barcode: generates a barcode from the input text</li>
<li>show a QR code linking to a LinkedIn profile</li>
<li>show a QR code linking to a Instagram profile</li>
<li>show a QR code linking to a Telegram profile</li>
<li>show a QR code linking to a WhatsApp profile</li></ul>
<h4 id="why-qr-codes-for-socials"><a class="heading-link" title="Permalink" aria-hidden="true" href="#why-qr-codes-for-socials"><span>#</span></a>Why QR codes for socials?</h4>
<p>Sometimes you meet someone at an event or conference and want to connect with them, and having one person scan your QR code is fast and efficient, and if you have the QR code already set up in your phone with Large Type app, you don’t need to fuss around each app to find where the button to show the QR code is, simply show the person the different QR codes from the Large Type app in your phone, and when they point their camera to it, their phone will open the right app to connect with you.</p>
<h4 id="ok-but-why-a-barcode-generator-"><a class="heading-link" title="Permalink" aria-hidden="true" href="#ok-but-why-a-barcode-generator-"><span>#</span></a>Ok, but why a Barcode generator? 🤔</h4>
<p>Ok, I admit this one comes from a very niche use-case that I had a few times and decided to have an easy way to solve it. If you purchase things online that get delivered through DHL and they try to deliver it when you’re not home, they might put it into a <strong>Packstation</strong>, and send you a paper with the code to retrieve it. The problem is: they’ll put your package in the Packstation, and send you the code <strong>later</strong> via regular mail, which can take some days to arrive at your address. However, you can go to DHL’s chatbot and talk with it until it gives you the pickup code right away. Sure, you can type the code manually into the Packstation, but that can be difficult and annoying when the low-quality touch screen on those machines gets damaged (which is the case of the Packstation closest to my address), so that’s the main reason why I included a Barcode generator on the app, to be able to show the barcode from my phone and have the machine scan it instead of struggling to type all the digits on a damaged, low quality touch screen.</p>
<h3 id="how-to-add-it-to-your-phones-home-screen"><a class="heading-link" title="Permalink" aria-hidden="true" href="#how-to-add-it-to-your-phones-home-screen"><span>#</span></a>How to add it to your phone’s home screen</h3>
<p>To add the app to your phone’s home screen, follow these steps:</p>
<ul><li><p>open your phone’s <strong>default browser</strong> app (that’ll be Safari for iPhone users or Chrome for most android users)</p></li>
<li><p>go to <a href="https://large-type-svelte.vercel.app" rel="nofollow">https://large-type-svelte.vercel.app</a> <em>(or the URL of your own instance of the app).</em></p></li>
<li><p>click on the share icon on Safari if you’re on iOS, and then choose “Add to Home Screen” (these steps will look slightly different on Android devices)</p></li>
<li><p>confirm by clicking on “Add” and it should now be available as an app in your home screen!</p></li></ul>
<img srcset="/images/posts/large-type-svelte/screenshots.avif, /images/posts/large-type-svelte/screenshots.webp, /images/posts/large-type-svelte/screenshots.png" src="/images/posts/large-type-svelte/screenshots.png" alt="Adding Large Type as an app on your phone's home screen" title="Adding Large Type as an app on your phone's home screen" loading="lazy" decoding="async" class="svelte-1rwav6g">

<p>That’s it! Now you have the <strong>Large Type</strong> utility easily available in your phone, and the best part is: it works even when your phone is offline! <em>(you must open the app at least once while online so that it can cache the required files to work offline)</em></p>
<h2 id="how-does-it-work"><a class="heading-link" title="Permalink" aria-hidden="true" href="#how-does-it-work"><span>#</span></a>How does it work?</h2>
<p>All text formatting and rendering happen locally on your browser/phone through CSS and JavaScript. Your text is not transmitted to any servers, <strong>ever</strong>.</p>
<p>Additionally, this project is open-source, which means you can <a href="https://github.com/lily-gh/large-type-svelte" rel="nofollow">audit the source code</a> yourself to see that your data isn’t sent or stored anywhere else.</p>
<h2 id="make-it-your-own"><a class="heading-link" title="Permalink" aria-hidden="true" href="#make-it-your-own"><span>#</span></a>Make it your own</h2>
<p>To have the links show your own name and other data instead of having to type it into the app every time, you’ll need to fork the project and add your own data instead of the default values. On this section we’ll go over how to fork the project from github, make changes to have your own data, and deploy it to a free Vercel instance.</p>
<h3 id="fork-the-repository-on-github-and-clone-it-locally"><a class="heading-link" title="Permalink" aria-hidden="true" href="#fork-the-repository-on-github-and-clone-it-locally"><span>#</span></a>Fork the repository on GitHub and clone it locally</h3>
<p>Head over to the project’s GitHub page and fork it: <a href="https://github.com/lily-gh/large-type-svelte" rel="nofollow">https://github.com/lily-gh/large-type-svelte</a></p>
<p><em>Don’t forget to give it a star! 🌟</em></p>
<img srcset="/images/posts/large-type-svelte/01.avif, /images/posts/large-type-svelte/01.webp, /images/posts/large-type-svelte/01.png" src="/images/posts/large-type-svelte/01.png" alt="Give the project a star on GitHub!" title="Give the project a star on GitHub!" loading="lazy" decoding="async" class="svelte-1rwav6g">

<p>Click on “Fork” to create a fork of the project</p>
<img srcset="/images/posts/large-type-svelte/02.avif, /images/posts/large-type-svelte/02.webp, /images/posts/large-type-svelte/02.png" src="/images/posts/large-type-svelte/02.png" alt="Click on the Fork button to fork the project" title="Click on the Fork button to fork the project" loading="lazy" decoding="async" class="svelte-1rwav6g">

<p>Give it a new name, and click “Create fork” to fork the project.</p>
<img srcset="/images/posts/large-type-svelte/03.avif, /images/posts/large-type-svelte/03.webp, /images/posts/large-type-svelte/03.png" src="/images/posts/large-type-svelte/03.png" alt="Finish forking the project" title="Finish forking the project" loading="lazy" decoding="async" class="svelte-1rwav6g">

<p><strong>NOTE:</strong> after forking the repository, I suggest that you <a href="https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/managing-repository-settings/setting-repository-visibility#changing-a-repositorys-visibility" rel="nofollow">make it private</a>, since you’ll be adding your personal data into it.</p>
<p>After the forking is complete, clone your new repository locally to make your changes:</p>
<img srcset="/images/posts/large-type-svelte/04.avif, /images/posts/large-type-svelte/04.webp, /images/posts/large-type-svelte/04.png" src="/images/posts/large-type-svelte/04.png" alt="Clone your fork repo locally" title="Clone your fork repo locally" loading="lazy" decoding="async" class="svelte-1rwav6g">

<h3 id="add-your-own-data"><a class="heading-link" title="Permalink" aria-hidden="true" href="#add-your-own-data"><span>#</span></a>Add your own data</h3>
<p>Open the project folder in your favorite code editor (I’m using VS Code) and then open the <code>App.svelte</code> file and make the following changes:</p>
<p>On lines <code>91</code> and <code>94</code>, change the phone and name parameters passed to the <code>updateText</code> function to use your data instead:</p>
<div class="code-block svelte-104dhe1">
	<div class="lang svelte-104dhe1">html</div>
	<pre class="language-html"><!-- HTML_TAG_START --><code class="language-html"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>span</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>button-row<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>
    &lt;a
      href=""
      on:click|preventDefault=&#123;() => updateText("+49 152 4444 32")&#125;
      >Phone<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>a</span>
    <span class="token punctuation">></span></span>
    &lt;a href="" on:click|preventDefault=&#123;() => updateText("Lily Oliveira")&#125;
      >Name<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>a</span>
    <span class="token punctuation">></span></span>
    &lt;a
      href=""
      on:click|preventDefault=&#123;() => updateText("@gmail.com", true)&#125;
      >@gmail.com<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>a</span>
    <span class="token punctuation">></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>span</span><span class="token punctuation">></span></span></code><!-- HTML_TAG_END --></pre>
</div>
<img srcset="/images/posts/large-type-svelte/05.avif, /images/posts/large-type-svelte/05.webp, /images/posts/large-type-svelte/05.png" src="/images/posts/large-type-svelte/05.png" alt="CleanShot 2024-09-22 at 16.04.42" title="CleanShot 2024-09-22 at 16.04.42" loading="lazy" decoding="async" class="svelte-1rwav6g">

<p>Feel free to remove the links you don’t need or add new ones that you want to have handy (e.g. an address).</p>
<p>You might also want to change the <code>WELCOME_MSG</code> on line <code>5</code> to your most needed text, since this is the one that’ll be shown as you open the app. I’ll change it to my name:</p>
<div class="code-block svelte-104dhe1">
	<div class="lang svelte-104dhe1">javascript</div>
	<pre class="language-js"><!-- HTML_TAG_START --><code class="language-js"><span class="token keyword">const</span> <span class="token constant">WELCOME_MSG</span> <span class="token operator">=</span> <span class="token string">"Lily Oliveira"</span><span class="token punctuation">;</span></code><!-- HTML_TAG_END --></pre>
</div>
<p>Feel free to remove the barcode link if it doesn’t make sense for your use case.</p>
<p><strong>NOTE:</strong> I suggest that you don’t add your full address and full phone for safety reasons, since the app will be publicly accessible over the internet. For example, if you add the phone, leave out the last 4 digits so that you still need to type them out yourself, or put an incomplete address so that people can’t find your exact location if they find your public Large Type URL. (or remove it altogether if it makes you feel safer)</p>
<h3 id="trying-it-out-locally"><a class="heading-link" title="Permalink" aria-hidden="true" href="#trying-it-out-locally"><span>#</span></a>Trying it out locally</h3>
<p>To run the app locally, run the following commands in your terminal from the project’s root folder:</p>
<div class="code-block svelte-104dhe1">
	<div class="lang svelte-104dhe1">bash</div>
	<pre class="language-bash"><!-- HTML_TAG_START --><code class="language-bash"><span class="token function">npm</span> <span class="token function">install</span>
<span class="token function">npm</span> run dev</code><!-- HTML_TAG_END --></pre>
</div>
<p>This should make the app available in your local machine on the url <code>http://localhost:5173/</code></p>
<div class="callout-block info svelte-1um7doa"><div class="icon-wrapper svelte-1um7doa"><svg width="100%" height="100%" stroke-width="1.5" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M12 11.5V16.5" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"></path><path d="M12 7.51L12.01 7.49889" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"></path><path d="M12 22C17.5228 22 22 17.5228 22 12C22 6.47715 17.5228 2 12 2C6.47715 2 2 6.47715 2 12C2 17.5228 6.47715 22 12 22Z" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"></path></svg></div>
	<strong>NOTE:</strong> Since caching is configured in this project, you might experience not seeing changes you make after running the app to show up in your browser. To fix that, simply disable cache in the Network tab of your browser:

</div>
<img srcset="/images/posts/large-type-svelte/06.avif, /images/posts/large-type-svelte/06.webp, /images/posts/large-type-svelte/06.png" src="/images/posts/large-type-svelte/06.png" alt="CleanShot 2024-09-22 at 16.24.48" title="CleanShot 2024-09-22 at 16.24.48" loading="lazy" decoding="async" class="svelte-1rwav6g">

<p>If you are happy with your changes, commit them and push them to your  repository:</p>
<div class="code-block svelte-104dhe1">
	<div class="lang svelte-104dhe1">bash</div>
	<pre class="language-bash"><!-- HTML_TAG_START --><code class="language-bash"><span class="token function">git</span> <span class="token function">add</span> <span class="token builtin class-name">.</span>
<span class="token function">git</span> commit <span class="token parameter variable">-m</span> <span class="token string">"Adding my own data"</span>
<span class="token function">git</span> push origin main</code><!-- HTML_TAG_END --></pre>
</div>
<h3 id="creating-your-own-qr-codes-that-point-to-your-social-profiles"><a class="heading-link" title="Permalink" aria-hidden="true" href="#creating-your-own-qr-codes-that-point-to-your-social-profiles"><span>#</span></a>Creating your own QR codes that point to your social profiles</h3>
<p>This step is a bit more complex, so I decided to write a separate article for this, I hope to publish it in a couple of weeks, so stay tuned! </p>
<p><strong>EDIT:</strong> the other article is out! Make sure to <a href="https://lilyoliveira.com/qr-codes-for-large-type">check it out here</a>. :)</p>
<p>If you are already familiar with image editing tools like Photoshop and already know how to generate the QR codes for your social profiles, feel free to use the included <a href="https://github.com/lily-gh/large-type-svelte/blob/d919168ef4f63bff5bc9aed22eeab849eb94c644/Badge_Template.psd" rel="nofollow">Badge_Template.psd</a> Photoshop file to create your own QR codes. All you need to do next is replace the existing QR code images under the <code>public</code> folder in the repository you forked. Make sure you also edit the file name referenced in the <code>App.svelte</code> file if you changed it to another name.</p>
<h2 id="deploying-to-vercel"><a class="heading-link" title="Permalink" aria-hidden="true" href="#deploying-to-vercel"><span>#</span></a>Deploying to Vercel</h2>
<p>If you don’t already have a Vercel account, go to <a href="https://vercel.com/" rel="nofollow">https://vercel.com/</a> and then follow their sign-up process of signing up with GitHub:</p>
<img srcset="/images/posts/large-type-svelte/07.avif, /images/posts/large-type-svelte/07.webp, /images/posts/large-type-svelte/07.png" src="/images/posts/large-type-svelte/07.png" alt="Click on the sign-up button at the top right" title="Click on the sign-up button at the top right" loading="lazy" decoding="async" class="svelte-1rwav6g">

<img srcset="/images/posts/large-type-svelte/08.avif, /images/posts/large-type-svelte/08.webp, /images/posts/large-type-svelte/08.png" src="/images/posts/large-type-svelte/08.png" alt="Choose the personal projects option" title="Choose the personal projects option" loading="lazy" decoding="async" class="svelte-1rwav6g">

<img srcset="/images/posts/large-type-svelte/09.avif, /images/posts/large-type-svelte/09.webp, /images/posts/large-type-svelte/09.png" src="/images/posts/large-type-svelte/09.png" alt="Choose GitHub login" title="Choose GitHub login" loading="lazy" decoding="async" class="svelte-1rwav6g">

<img srcset="/images/posts/large-type-svelte/10.avif, /images/posts/large-type-svelte/10.webp, /images/posts/large-type-svelte/10.png" src="/images/posts/large-type-svelte/10.png" alt="Authorize Vercel" title="Authorize Vercel" loading="lazy" decoding="async" class="svelte-1rwav6g">

<img srcset="/images/posts/large-type-svelte/11.avif, /images/posts/large-type-svelte/11.webp, /images/posts/large-type-svelte/11.png" src="/images/posts/large-type-svelte/11.png" alt="Insert your verification code" title="Insert your verification code" loading="lazy" decoding="async" class="svelte-1rwav6g">

<p>Complete the phone verification step to finish account creation.</p>
<h4 id="connect-vercel-to-your-github-account"><a class="heading-link" title="Permalink" aria-hidden="true" href="#connect-vercel-to-your-github-account"><span>#</span></a>Connect Vercel to your GitHub account</h4>
<img srcset="/images/posts/large-type-svelte/12.avif, /images/posts/large-type-svelte/12.webp, /images/posts/large-type-svelte/12.png" src="/images/posts/large-type-svelte/12.png" alt="Install Vercel on your GitHub account" title="Install Vercel on your GitHub account" loading="lazy" decoding="async" class="svelte-1rwav6g">

<img srcset="/images/posts/large-type-svelte/13.avif, /images/posts/large-type-svelte/13.webp, /images/posts/large-type-svelte/13.png" src="/images/posts/large-type-svelte/13.png" alt="Confirm by clicking on Install button" title="Confirm by clicking on Install button" loading="lazy" decoding="async" class="svelte-1rwav6g">

<h4 id="import-your-repository-into-vercel"><a class="heading-link" title="Permalink" aria-hidden="true" href="#import-your-repository-into-vercel"><span>#</span></a>Import your repository into Vercel</h4>
<p>Import the <em>large-type-svelte</em> repository you recently cloned and made changes to:</p>
<img srcset="/images/posts/large-type-svelte/14.avif, /images/posts/large-type-svelte/14.webp, /images/posts/large-type-svelte/14.png" src="/images/posts/large-type-svelte/14.png" alt="Import your repository" title="Import your repository" loading="lazy" decoding="async" class="svelte-1rwav6g">

<h4 id="configure-the-deployment"><a class="heading-link" title="Permalink" aria-hidden="true" href="#configure-the-deployment"><span>#</span></a>Configure the deployment</h4>
<p>Give your project a name, and click the <strong>Deploy</strong> button to deploy it.</p>
<img srcset="/images/posts/large-type-svelte/15.avif, /images/posts/large-type-svelte/15.webp, /images/posts/large-type-svelte/15.png" src="/images/posts/large-type-svelte/15.png" alt="Configure the deployment" title="Configure the deployment" loading="lazy" decoding="async" class="svelte-1rwav6g">

<h3 id="done-"><a class="heading-link" title="Permalink" aria-hidden="true" href="#done-"><span>#</span></a>Done! 🎉</h3>
<p>That’s it! Now you have your own instance of Large Type Svelte running with your own changes!</p>
<img srcset="/images/posts/large-type-svelte/16.avif, /images/posts/large-type-svelte/16.webp, /images/posts/large-type-svelte/16.png" src="/images/posts/large-type-svelte/16.png" alt="All done!" title="All done!" loading="lazy" decoding="async" class="svelte-1rwav6g">

<p>You can click on “Add Domain” to view the existing domains for your app or add more. This will show you what the current URL for your Large Type instance is, which you can use to add it to your phone’s home screen as explained in the <em>“How to add it to your phone’s home screen”</em> section above!</p>
<img srcset="/images/posts/large-type-svelte/17.avif, /images/posts/large-type-svelte/17.webp, /images/posts/large-type-svelte/17.png" src="/images/posts/large-type-svelte/17.png" alt="The domains for my instance of Large Type Svelte" title="The domains for my instance of Large Type Svelte" loading="lazy" decoding="async" class="svelte-1rwav6g">

<p>In my case the URL is <code>large-type-svelte-lily.vercel.app</code>, so that’s what I would use to open the app in my phone and add it to my phone’s home screen.</p>
<p>If you make more changes to the code to add/remove links, it should be automatically redeployed after you push the changes to the <code>main</code> branch.</p>
<h4 id="thank-you"><a class="heading-link" title="Permalink" aria-hidden="true" href="#thank-you"><span>#</span></a>Thank you</h4>
<p>Thanks for reading, and stay tuned for the next article with instructions on generating your own QR codes!</p>
<p>If you think this was helpful, consider <a href="https://ko-fi.com/lily_neinhorn" rel="nofollow">supporting me on Ko-fi 💖</a></p>
<a href="https://ko-fi.com/lily_neinhorn" target="_blank" rel="noopener noreferrer" class="image-link svelte-1rwav6g"><img srcset="/images/posts/large-type-svelte/kofi_button_red_nobg.avif, /images/posts/large-type-svelte/kofi_button_red_nobg.webp, /images/posts/large-type-svelte/kofi_button_red_nobg.png" src="/images/posts/large-type-svelte/kofi_button_red_nobg.png" alt="Support me on Ko-fi!" title="Support me on Ko-fi!" loading="lazy" decoding="async" class="svelte-1rwav6g"></a>

          ]]></content:encoded>
          <media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://lilyoliveira.com///images/posts/large-type-svelte/header.png"/>
          <media:content xmlns:media="http://search.yahoo.com/mrss/" medium="image" url="https://lilyoliveira.com///images/posts/large-type-svelte/header.png"/>          
        </item>
      
  </channel>
</rss>