<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Customization on vanityURLs</title><link>https://vanityurls.link/en/tags/customization/</link><description>Recent content in Customization on vanityURLs</description><generator>Hugo</generator><language>en-CA</language><lastBuildDate>Thu, 18 Jun 2026 09:56:01 -0400</lastBuildDate><atom:link href="https://vanityurls.link/en/tags/customization/index.xml" rel="self" type="application/rss+xml"/><item><title>Making f-l.ca feel like mine</title><link>https://vanityurls.link/en/blog/custom-theme/</link><pubDate>Tue, 16 Jun 2026 00:00:00 +0000</pubDate><guid>https://vanityurls.link/en/blog/custom-theme/</guid><description>&lt;p&gt;I have been &lt;a href="https://vanityurls.link/en/showcase/f-l-ca/"&gt;using vanityURLs since 2024&lt;/a&gt;. That is the useful boundary. The engine stays boring and the public surface gets personality.&lt;/p&gt;
&lt;p&gt;For &lt;a href="https://f-l.ca/"&gt;f-l.ca&lt;/a&gt;, I wanted something else, the engine stays boring and the public surface feel unmistakably mine.&lt;/p&gt;
&lt;div class="not-prose media-carousel" aria-label="Felix custom page screenshots"&gt;
 &lt;div class="media-carousel-track" tabindex="0"&gt;
 &lt;figure class="media-carousel-slide"&gt;
 &lt;img src="https://vanityurls.link/blog/felix-en-home.png" alt="English home page using the custom redirect shell" loading="eager" /&gt;
 &lt;figcaption&gt;English home page&lt;/figcaption&gt;
 &lt;/figure&gt;
 &lt;figure class="media-carousel-slide"&gt;
 &lt;img src="https://vanityurls.link/blog/felix-en-lookup.png" alt="English lookup page using the same custom shell" loading="lazy" /&gt;
 &lt;figcaption&gt;English lookup page&lt;/figcaption&gt;
 &lt;/figure&gt;
 &lt;figure class="media-carousel-slide"&gt;
 &lt;img src="https://vanityurls.link/blog/felix-en-not-found.png" alt="English 404 page using the home-style fallback shell" loading="lazy" /&gt;
 &lt;figcaption&gt;English 404 fallback&lt;/figcaption&gt;
 &lt;/figure&gt;
 &lt;figure class="media-carousel-slide"&gt;
 &lt;img src="https://vanityurls.link/blog/felix-en-expired.png" alt="English expired-link status page using the custom shell" loading="lazy" /&gt;
 &lt;figcaption&gt;English expired status&lt;/figcaption&gt;
 &lt;/figure&gt;
 &lt;figure class="media-carousel-slide"&gt;
 &lt;img src="https://vanityurls.link/blog/felix-en-disabled.png" alt="English disabled-link status page using the custom shell" loading="lazy" /&gt;
 &lt;figcaption&gt;English disabled status&lt;/figcaption&gt;
 &lt;/figure&gt;
 &lt;figure class="media-carousel-slide"&gt;
 &lt;img src="https://vanityurls.link/blog/felix-en-maintenance.png" alt="English maintenance status page using the custom shell" loading="lazy" /&gt;
 &lt;figcaption&gt;English maintenance status&lt;/figcaption&gt;
 &lt;/figure&gt;
 &lt;figure class="media-carousel-slide"&gt;
 &lt;img src="https://vanityurls.link/blog/felix-fr-home.png" alt="French home page using the custom redirect shell" loading="lazy" /&gt;
 &lt;figcaption&gt;French home page&lt;/figcaption&gt;
 &lt;/figure&gt;
 &lt;figure class="media-carousel-slide"&gt;
 &lt;img src="https://vanityurls.link/blog/felix-fr-lookup.png" alt="French lookup page using the same custom shell" loading="lazy" /&gt;
 &lt;figcaption&gt;French lookup page&lt;/figcaption&gt;
 &lt;/figure&gt;
 &lt;figure class="media-carousel-slide"&gt;
 &lt;img src="https://vanityurls.link/blog/felix-fr-not-found.png" alt="French 404 page using the home-style fallback shell" loading="lazy" /&gt;
 &lt;figcaption&gt;French 404 fallback&lt;/figcaption&gt;
 &lt;/figure&gt;
 &lt;figure class="media-carousel-slide"&gt;
 &lt;img src="https://vanityurls.link/blog/felix-fr-expired.png" alt="French expired-link status page using the custom shell" loading="lazy" /&gt;
 &lt;figcaption&gt;French expired status&lt;/figcaption&gt;
 &lt;/figure&gt;
 &lt;figure class="media-carousel-slide"&gt;
 &lt;img src="https://vanityurls.link/blog/felix-fr-disabled.png" alt="French disabled-link status page using the custom shell" loading="lazy" /&gt;
 &lt;figcaption&gt;French disabled status&lt;/figcaption&gt;
 &lt;/figure&gt;
 &lt;figure class="media-carousel-slide"&gt;
 &lt;img src="https://vanityurls.link/blog/felix-fr-maintenance.png" alt="French maintenance status page using the custom shell" loading="lazy" /&gt;
 &lt;figcaption&gt;French maintenance status&lt;/figcaption&gt;
 &lt;/figure&gt;
 &lt;/div&gt;
 &lt;/div&gt;
&lt;p&gt;For the mechanical path, see &lt;a href="https://vanityurls.link/en/docs/reference/brand/"&gt;Brand&lt;/a&gt; and &lt;a href="https://vanityurls.link/en/docs/reference/custom-overrides/"&gt;Custom overrides&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Edit custom, leave defaults boring</title><link>https://vanityurls.link/en/blog/keeping-vanityurls-upgradable-with-custom-overrides/</link><pubDate>Fri, 22 May 2026 00:00:00 +0000</pubDate><guid>https://vanityurls.link/en/blog/keeping-vanityurls-upgradable-with-custom-overrides/</guid><description>&lt;p&gt;The fastest way to ruin a small self-hosted tool is to edit upstream files in place.&lt;/p&gt;
&lt;p&gt;It works once. Then the next upgrade asks a dull question with expensive consequences: which files are product defaults, which files are local decisions, and which files are generated output?&lt;/p&gt;
&lt;p&gt;vanityURLs avoids that by keeping three layers:&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Layer&lt;/th&gt;
 &lt;th&gt;Owner&lt;/th&gt;
 &lt;th&gt;Rule&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;defaults/&lt;/code&gt; and &lt;code&gt;scripts/&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;product&lt;/td&gt;
 &lt;td&gt;refresh from upstream&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;custom/&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;instance&lt;/td&gt;
 &lt;td&gt;review and preserve&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;build/&lt;/code&gt; and generated &lt;code&gt;src/&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;build&lt;/td&gt;
 &lt;td&gt;replace freely&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;That boundary is not bureaucracy. It is what keeps upgrades from becoming archaeology.&lt;/p&gt;</description></item><item><title>Make the short domain look owned</title><link>https://vanityurls.link/en/blog/branding-your-short-link-domain/</link><pubDate>Fri, 22 May 2026 00:00:00 +0000</pubDate><guid>https://vanityurls.link/en/blog/branding-your-short-link-domain/</guid><description>&lt;p&gt;A short-link domain is tiny, but people still read it as a signal.&lt;/p&gt;
&lt;p&gt;It appears in emails, slides, social profiles, QR codes, documentation, incident updates, and chat messages. If the domain looks intentional, the link feels safer before anyone clicks it.&lt;/p&gt;
&lt;p&gt;This is the useful part of branding vanityURLs: make the redirector obviously yours without turning the first deployment into a design project.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://vanityurls.link/blog/v8s-link-homepage.png" alt="v8s.link homepage with split-color wordmark, search field, and redirected by vanityURLs.link badge"&gt;&lt;/p&gt;</description></item><item><title>Where to start customizing vanityURLs</title><link>https://vanityurls.link/en/blog/where-to-start-customizing-vanityurls/</link><pubDate>Fri, 22 May 2026 00:00:00 +0000</pubDate><guid>https://vanityurls.link/en/blog/where-to-start-customizing-vanityurls/</guid><description>&lt;p&gt;Once the Quickstart works, the redirector is already useful. Customization is the part where it becomes yours: your links, your public pages, your brand, your policies, your access rules, and your operating habits.&lt;/p&gt;
&lt;p&gt;You do not need to customize everything at once. Start with the area that hurts most.&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Goal&lt;/th&gt;
 &lt;th&gt;Start here&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Change the public look and static pages&lt;/td&gt;
 &lt;td&gt;&lt;a href="https://vanityurls.link/en/docs/reference/custom-overrides/"&gt;Custom overrides&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Configure the split-color wordmark and brand assets&lt;/td&gt;
 &lt;td&gt;&lt;a href="https://vanityurls.link/en/docs/reference/brand/"&gt;Brand&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Add, inspect, or update short links&lt;/td&gt;
 &lt;td&gt;&lt;a href="https://vanityurls.link/en/docs/command-line-interface/lnk/"&gt;LNK&lt;/a&gt; and &lt;a href="https://vanityurls.link/en/docs/reference/link-format/"&gt;Link format&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Add time-based destinations&lt;/td&gt;
 &lt;td&gt;&lt;a href="https://vanityurls.link/en/docs/reference/schedules/"&gt;Scheduled links&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Decide which languages to publish&lt;/td&gt;
 &lt;td&gt;&lt;a href="https://vanityurls.link/en/docs/reference/i18n/"&gt;Internationalization&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Configure jurisdiction and public trust contacts&lt;/td&gt;
 &lt;td&gt;&lt;a href="https://vanityurls.link/en/docs/customize/jurisdiction/"&gt;Jurisdiction&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Protect private operational paths&lt;/td&gt;
 &lt;td&gt;&lt;a href="https://vanityurls.link/en/docs/customize/access-control/"&gt;Access control&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Protect the domain before traffic reaches the Worker&lt;/td&gt;
 &lt;td&gt;&lt;a href="https://vanityurls.link/en/docs/customize/network-protection/"&gt;Network protection&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Configure redirect analytics&lt;/td&gt;
 &lt;td&gt;&lt;a href="https://vanityurls.link/en/docs/customize/analytics/"&gt;Analytics&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Tune allow/block policy&lt;/td&gt;
 &lt;td&gt;&lt;a href="https://vanityurls.link/en/docs/customize/blocklist/"&gt;Policy and blocklist&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The nicest path is usually not linear. A personal instance might start with links and branding. A team instance might start with Access control and owner labels. A public marketing domain might start with legal pages, analytics, and network protection.&lt;/p&gt;</description></item></channel></rss>