<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<?xml-stylesheet type="text/xsl" href="/xml/feed.xsl" media="all"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>Apps on runtimeterror</title>
    <link href="https://runtimeterror.dev/tags/apps/" rel="alternate" hreflang="en"/>
    <link href="https://runtimeterror.dev/tags/apps/feed.xml" rel="self"/>
    <id>https://runtimeterror.dev/tags/apps/</id>
    <updated>2026-05-25T17:18:00+00:00</updated>
    <generator>Hugo -- gohugo.io</generator>
    <rights>Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International</rights>
    <author>
      <name>John Wq</name>
      <email>jwq@omg.lol</email>
    </author>
    <icon>https://runtimeterror.dev/images/broken-computer.png</icon>
    <logo>https://runtimeterror.dev/images/broken-computer.png</logo>
    <entry>
        <title>Gokapi for self-hosted secure file sharing</title>
        <link href="https://runtimeterror.dev/gokapi-for-self-hosted-secure-file-sharing/" rel="alternate"/>
        <id>https://runtimeterror.dev/gokapi-for-self-hosted-secure-file-sharing/</id>
        <published>2026-05-25T17:18:00+00:00</published>
        <updated>2026-05-25T17:18:00+00:00</updated>
        <author>
          <name>John Wq</name>
          <email>jwq@omg.lol</email>
        </author>
        <category term="Tech"/><category term="Apps"/><category term="Selfhosting"/><category term="Docker"/>
        <summary type="text">Sending files that won't fit in a typical email inbox is still harder than it should be. I spent a few minutes deploying a self-hosted file transfer utility so I'll never have to worry about it again.</summary>
        <content type="html">&lt;p&gt;I recently wanted to share a 30MB file with someone, which is &lt;em&gt;still&lt;/em&gt; a harder problem than it should be&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;https://runtimeterror.dev/gokapi-for-self-hosted-secure-file-sharing/#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;. Too big for most email providers, and I didn&#39;t want to have to run through the list of cloud file store options to see which we had in common. In the past, I&#39;ve handled this by using &lt;a href=&#34;/tailscale-ssh-serve-funnel/#tailscale-funnel&#34;&gt;Tailscale Funnel&lt;/a&gt; to temporarily expose a &lt;a href=&#34;https://caddyserver.com/docs/caddyfile/directives/file_server&#34; rel=&#34;external&#34;&gt;Caddy &lt;code&gt;file_server&lt;/code&gt;↗&lt;/a&gt; for long enough for the other party to retrieve the file(s). Hardly  an elegant solution.&lt;/p&gt;
&lt;p&gt;This time, though, I stumbled upon &lt;a href=&#34;https://github.com/Forceu/gokapi&#34; rel=&#34;external&#34;&gt;Gokapi↗&lt;/a&gt; which checks a lot of my boxes&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;https://runtimeterror.dev/gokapi-for-self-hosted-secure-file-sharing/#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Open source&lt;/li&gt;
&lt;li&gt;&lt;input checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Self-hosted with a single container image&lt;/li&gt;
&lt;li&gt;&lt;input checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; End-to-end encryption&lt;/li&gt;
&lt;li&gt;&lt;input checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; Auto-expiring and download-limited links&lt;/li&gt;
&lt;li&gt;&lt;input checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; OIDC authentication for being able to upload files&lt;/li&gt;
&lt;li&gt;&lt;input checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; S3-like object storage support&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I particularly like that I can connect Gokapi to external storage (to avoid using up all the storage on my VPS), that links (and corresponding files) will be automatically removed after a defined time period or number of downloads, and that it &lt;em&gt;doesn&#39;t&lt;/em&gt; allow internet randos to upload files (my compute resources are finite, after all).&lt;/p&gt;
&lt;p&gt;It only took me a few minutes to deploy the Gokapi container on an existing Hetzner VPS, link it to &lt;a href=&#34;/pocket-id-easy-passkey-authentication/&#34;&gt;Pocket ID for auth&lt;/a&gt;, connect the storage backend to &lt;a href=&#34;https://docs.bunny.net/storage/s3&#34; rel=&#34;external&#34;&gt;Bunny&#39;s (beta) S3 storage offering↗&lt;/a&gt;, and get on with sharing files.&lt;/p&gt;
&lt;h3 id=&#34;deployment&#34;&gt;
	Deployment
	&lt;a class=&#34;hlink&#34; href=&#34;#deployment&#34;&gt;&lt;i class=&#34;fa-solid fa-link&#34;&gt;&lt;/i&gt;&lt;/a&gt;
&lt;/h3&gt;&lt;p&gt;The Gokapi repo has an &lt;a href=&#34;https://github.com/Forceu/Gokapi/blob/master/docker-compose.yaml&#34; rel=&#34;external&#34;&gt;example docker compose file↗&lt;/a&gt; to make it easy to get started. I just created an &lt;code&gt;/opt/docker/gokapi/&lt;/code&gt; folder on my server to hold the app&#39;s configuration and data (the integrated sqlite database) and then brought up the single-container stack:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;services&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;gokapi&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;image&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;f0rc3/gokapi:latest&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;container_name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;gokapi&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;ports&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;s2&#34;&gt;&amp;#34;127.0.0.1:53842:53842&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;volumes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;/opt/docker/gokapi/data:/app/data&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;/opt/docker/gokapi/config:/app/config&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;restart&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;always&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;environment&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;TZ&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;UTC&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The repo also provides an &lt;a href=&#34;https://github.com/Forceu/Gokapi/blob/master/.env.dist&#34; rel=&#34;external&#34;&gt;example .env file↗&lt;/a&gt; in case you want to use environment variables to configure the deployment. This time I skipped right past that and instead used the web interface to perform the configuration. More on that in a moment.&lt;/p&gt;
&lt;p&gt;But first, I used &lt;a href=&#34;https://caddyserver.com/&#34; rel=&#34;external&#34;&gt;Caddy↗&lt;/a&gt; to proxy the container with automatic TLS magic:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-caddyfile&#34; data-lang=&#34;caddyfile&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gh&#34;&gt;gokapi.example.com&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;reverse_proxy&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;http://localhost&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;53842&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;log&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;output&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;file&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;/var/log/caddy/gokapi.log&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;After doing a quick &lt;code&gt;docker compose up -d&lt;/code&gt; to start Gokapi and &lt;code&gt;sudo caddy reload -c /etc/caddy/Caddyfile&lt;/code&gt; to ask Caddy to please start serving the new thing I can point my browser to &lt;code&gt;https://gokapi.example.com/setup&lt;/code&gt; and get on with the configuratin&#39;.&lt;/p&gt;
&lt;div&gt;&lt;/div&gt;&lt;div class=&#34;notice note&#34;&gt;
&lt;p class=&#34;first notice-title&#34;&gt;&lt;span class=&#34;icon-notice baseline&#34;&gt;&lt;/span&gt;Hurry up!&lt;/p&gt;&lt;p&gt;Until the initial configuration is complete, &lt;em&gt;anyone&lt;/em&gt; can access that URL to configure the instance. So you&#39;ll probably want to speed through the first-run config or &lt;a href=&#34;https://caddy.community/t/only-allow-certain-ips-to-access-the-server-in-reverse-proxy/11213/2&#34; rel=&#34;external&#34;&gt;configure Caddy to only allow access from your home IP for now↗&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;After&lt;/em&gt; the first config, the &lt;code&gt;/setup&lt;/code&gt; endpoint will only be available if you explicitly ask for it at container startup, and it will then also be protected by a randomly-generated username and password.&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;&lt;div class=&#34;image-container&#34;&gt;
	&lt;picture&gt;
		&lt;a href=&#34;setup-start.png&#34;
			target=&#34;_blank&#34;
			rel=&#34;noopener noreferrer&#34;&gt;

	
		
			
			
				
					
						
							
							
							
						
					
						
							
							
							
						
					
						
							
							
							
						
					
						
					
						
					
						
					
				

				
				
				
				&lt;noscript&gt;
					&lt;img 
						class=&#34;post-image&#34;
						srcset=&#34;/gokapi-for-self-hosted-secure-file-sharing/setup-start_hu_85ba5e66550f757a.webp 320w, /gokapi-for-self-hosted-secure-file-sharing/setup-start_hu_53ac9d8e246107cd.webp 640w, /gokapi-for-self-hosted-secure-file-sharing/setup-start_hu_3ea1cfb762df24a9.webp 960w, /gokapi-for-self-hosted-secure-file-sharing/setup-start_hu_3562a1445d942ffe.webp 1072w&#34;
						src=&#34;/gokapi-for-self-hosted-secure-file-sharing/setup-start_hu_3562a1445d942ffe.webp&#34;alt=&#34;First page of the Gokapi setup wizard&#34; title=&#34;First page of the Gokapi setup wizard&#34; 
						loading=&#34;lazy&#34;
					/&gt;
				&lt;/noscript&gt;

				&lt;img
					class=&#34;post-image lazyload show-if-js&#34;
					data-srcset=&#34;/gokapi-for-self-hosted-secure-file-sharing/setup-start_hu_85ba5e66550f757a.webp 320w, /gokapi-for-self-hosted-secure-file-sharing/setup-start_hu_53ac9d8e246107cd.webp 640w, /gokapi-for-self-hosted-secure-file-sharing/setup-start_hu_3ea1cfb762df24a9.webp 960w, /gokapi-for-self-hosted-secure-file-sharing/setup-start_hu_3562a1445d942ffe.webp 1072w&#34;
					data-src=&#34;/gokapi-for-self-hosted-secure-file-sharing/setup-start.png&#34;
					src=&#34;data:image/webp;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAAB7CAIAAAAzCR9GAAAL6ElEQVR4nOxdS4/jNvJnFUsPP9ozmUlmkAT/f4CcFthDvsR&amp;#43;45z2S&amp;#43;w12NNiL4NkgdnuTqfdlkSyFlK1aZqW1bbHPcq4&amp;#43;TsYtky96kfWg1Wi6Oeff3737t3V1ZXWWiV8Lhhjbm5uPnz4QN90mM/nAKCUAgBEZGZpJxsFspE7KKUQEQDke9gs/J7QC2a21hLRarWi&amp;#43;Xw&amp;#43;m82Koqjr2lqb53mWZa6D7iACZWbZaK2t65qZy7IkIk8GInr&amp;#43;hJuxb/NPjaZp6rqeTqckwlqtVh8/fqyqSsRqOhRFkec5M3sOlFLOudvbW2PMbDbL81wOp7UWAvI8n8/nk8kkcTAAZpbOjYgkMq2q6vr6&amp;#43;v7&amp;#43;HhGttVVVOeeKotBaG2MQMeswnU611tfX13d3d9RBLIeMKURcLBbff/99lmXJogwAOsh3kt9a6zzPRQtZa6XXW2ubxtR1BQCTyUQYy/O8LEtpycyI6Jyr67qqKqWgKArrnDchCfvgRUSOlQKczObvv/3udVWxc7bT9YpZgXK2HRzW2aIoptPZdDIhotnV4uvVyjmHiJp0S0BVr6qVtW5xdTW/ukJNtt17iwbozHPSShHo98pmtZtmmZq&amp;#43;ykpWikN&amp;#43;mLkwxlqrtW6Ns6YGAbNpMXXSQBwhci5vm7ksyypdmJqhMWotbZF7rqEkyLAdey/cPHh/siXgH78tp/V9Pmv9l7idb82ggAEaAOOPEbXsmikAA&amp;#43;iU2urpACrX&amp;#43;H5KP74uvp5oQkg6StD23b//6/fmN3JFpUA/io3VGcUDoBBgkeNP76Yl4atCE6YRsAmz6JePq7u7ZZ0pRN15kqrryvLpFZFycac/CAiKEHINrwo9z/Vt1RpupeKh9tLgY95WBT0Yt0RnwE1yLNqwS1nHjpVjdp0dZaUaxyvrzLHeDSgCWBS61G1QYBxb2f9F9/4YxJ3dRVCdfkBCsCJ9Vs4pp9ovD8aZilsCjjk0sAJUE8LXZav39bbc/ZSGD/TCz4vHJg7onBLlWFWG7xuXIayNarvRdlKyrjOwx/bdrnXj&amp;#43;MG4XIPz7HXKzTnXdHDOSSDSOrXriDpSlBJXXyQ3VGowBFXbP1tJ1eu79GZAvuQaNB6tuxHAMd/XDnPU7SDYSNAY88cff9zd3dV13V5Hh6IosizzU08ySohoMpmUZXmR0TX95U3RTEubTxR2nT/QAT4Y8HwcDWgNrga4KvSPi2yRo5agoCWW67q&amp;#43;vb1drVaPHnEn6CzLRO7WSkToiqJ4&amp;#43;/ZtlmUXOb9Ef/v/2eSrRT6ZA7bu4XOcA5QqCL&amp;#43;d59/NSQIx7ubvuuh6Kv1a4moi8qpGay2TrzLjdHmiF9BP35Rvv5nM5lPEnQF&amp;#43;vpkDjVBmNC&amp;#43;17tSYKP3ZbKa1ttb6vII3AH7&amp;#43;VSYOZVrwIjmgRYFfFXpeIOBjNLvB&amp;#43;o7bPonSMY8VAYsNAQTSKN1fgIii8cUL8r5QLy5S&amp;#43;QgIu3AJFHOncntdw1Y5AOHxbggr6BxaRgW4M55kHJz1dr48kP/mpes9dM9EuOUogBqa1ehNfA40jpoNXNLuAXfPFSZTh&amp;#43;9ut03vQfZtGQb5Ph5mg6OjeE/8wINGV9/rwrs15OC9&amp;#43;/rL8D0gulVhBQD82I1OF9oS3zg6uBzfWhsluj3rIQHRljA9Hm7x&amp;#43;mPf7W8ICEU8LMfDBN6/427nDdI4SpyfiA9xQyXDLO6QP6AfDb592MBHbWK3fTZbUntEj0lAkZTWWs4uiW6JBOVf2UvCQ7k8n4OSU0jySk4kbYwxzjkvenEfhvODPSros8Fau1qtmqaRS2yaRvKaUhUgPyUPIbk5Zudl95ifWH/vbt5aa7zOlByf51X4ZuY8z72IAUCiP392kZpdQwgmItENpjuHp0Qy5/JTWJSDSA8TL8MnzPeJd0PAURr5E&amp;#43;E7CBHJTcqFhsqwu20tNweoAbVITSTT7pkVbTznGLvJPk2WXRZqmyzLQvWFiMYYCbm9ohAipQsLAWFnj2o&amp;#43;PCXyk4iEj7AoxJcuSPpWiBkQBXnpy9gJbV3vnl4JHshTr33zYpKffqTLbchfqEnnxEgK2&amp;#43;Chs07tdkmZgm4pkWNh5&amp;#43;NqYEKQOM&amp;#43;rl/Ck0qnlRGFXCDW43y7S2JVDqOL9MAq3hFKSbjQcwWwRILRHNsRfRHiVw8PqEA5EyVQdpLeGBRYtJZow15YReItth8zArKBxynWckMISgQizDEnjdjKux2j3/nsaItcgutND5ne3VJDoynB/v7O3PMf6o7u37Q8uatoPZ9/9H60xaswy23bzx/gNwHtEfr6WJcwmDRoB1/a390qeQ7VGxzzhFBsvyNv63UBs1006XAX19gI5XVmWYkgj/2/NMShEVpsZKsnmhy0eEzygdHt57ecXFzBvuaHP4Ynuo0okHtrD8N92Y89e0ZYgMlJC8wkXODK23NDn6z69Rx5QkYddyRco7x289Pz46IjdUI99fXDXPByCVAi0D7EbKj/3WU6vr4/yQSUsfIaLvwRsbEAbyBsTxsOeBh98hWmTA21GFHMlRNgQICFiKKyQg5CAo8z1F&amp;#43;cXfmb0uKH7JoXCKOyo2elLrSg5C&amp;#43;Lp6F5dMZB/eBIvqtzqBFD0e1hSSY5nR8909JNINJwRGzc0nJHunxvYzrF9ylRogseGAEn39GZfvRzF9oaPrz6JFAcMY8sGhBXLUbt92xM&amp;#43;EVte0JM1Gsfqn4GqiATBEdPRIY4NxBIB&amp;#43;zBmVUTC1nR00u&amp;#43;joMcN7bUEu2n6A5F4HcaGAKlFiGrw/L9iIU6rEU8cDCB2Q/2DQdEUtHPOF4gdm4o5dpcXhY0X5Kt0oxnpsMzoBBWUvKBhxG7oUTXfhyAFAcOI3dBnElbiYB/SFM3I6KmK6C0j/MTTJEdoH7YI2I0D/GNcJ3OQZkOHsbEB8gxJ9FCYSF&amp;#43;eKjkNqSpiGFtG2HtBvkr30/VPMr/D2OuGnlCDtQ/JEx3AViD2CXWye5ECsWGk6eiRcUpVRGLrjNhyQ5/kIHxqMFVFnAU91dHR2gTRvLT4poev3pPigGHsdfBDAqIn05Nff0b0J&amp;#43;UjZzSqzD3KN01VEcM4dK2ICKkq4lxIbujISFURI2OrKmLgwfuBWt3hEyReh0G&amp;#43;BsIvBeL/C1PzESviWR5YJJE4GMBmBITLGEWLPwlkqs4vEXLgsimpKmIYtFtxFdZIR8/phaI8MB5OXtAw9hbnPrl&amp;#43;01FxwDku9TJxYhxwLBIH&amp;#43;5Dc0JHR44ZGywSd5TSJ3X2IqyLCtTjO8lLCNBs6jE0cIKFA6PuHa5mfjFQVMYy4ONeHAudaLzuZ32FQpHCi6YdzcZBo2Ie9a0WcS2QpEBvGcWtFJJwdyTkZGYmAkZEIGBmJgJGRCBgZiYCRkQgYGYmAkZEIGBmJgJGRCBgZiYCRkQgYGYmAkZEIGBmJgJGRCBgZiYCRkQgYGYmAkZEIGBmJgJGRCBgZiYCRkQgYGYmAkZEIGBmJgJFx&amp;#43;nqUCU9i70MpvKlCP3HJsqNw2RXXvXJjpZxTxsXPBoFSCKAR/EaK3k91XhqefC3TF431a0fk7uQT5JuxfFfZ66VZ1tYx&amp;#43;7GACNNcv5ll00yJVJ53BJzw8s8vCN3b76wxltmJ8ORGWcF9zf/&amp;#43;b/XLr8v/3NXGrQXLijS8X&amp;#43;R//W7&amp;#43;w5tc9knrBZ0I6fvW2rquq6qWdU4AFACipvta/Xq7&amp;#43;uev9x9uqq7jK8fKOUaE24fi63n&amp;#43;/opE3FtG&amp;#43;Pk4uFR2neO6bu7v75umlhVNiCgvJ43Rq8Yta1sZVxASomW2jivjlrWrjHOOtaigk1&amp;#43;PlCBYL2MiS/i4tdZVCEojkIZMQ04oCgcsEwKCGAuV3NBPAXRr&amp;#43;2NR5ADzyWTSWd92C&amp;#43;rMGvV6ln/7qtDdw74aQXHrFAGo94vi1YQyjdxxQJfqonwGtJLVuiggyzJxOESbtDRY/uEtIuLtQ&amp;#43;uLwtpJQoDXU/q/N&amp;#43;U0x2VrHRS5NT6DDXjus3xmyJICbZffmU9Aze8X&amp;#43;VWpG8udE/TopCKoTLeeKIGTxSFouVw&amp;#43;PDwQkbyr4Zng30J8rgfw/yRg3h/wsipBFRT/296&amp;#43;MZU1yw50c3NTFIVz7lkJkAWPdW9veZEwxtzc3FxfX/8vAAD///r4Br63Jh/XAAAAAElFTkSuQmCC&#34;
					data-sizes=&#34;auto&#34;
					width=&#34;1072&#34;
					height=&#34;1028&#34;alt=&#34;First page of the Gokapi setup wizard&#34; title=&#34;First page of the Gokapi setup wizard&#34; 
					loading=&#34;lazy&#34;
				/&gt;&lt;/a&gt;
	&lt;/picture&gt;
	
&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;I just stick with the default sqlite database and initial webserver options, but I update two values on the &lt;strong&gt;Webserver 2/2&lt;/strong&gt; screen:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Public facing URL&lt;/strong&gt; is set to &lt;code&gt;https://gokapi.example.com/&lt;/code&gt; to reflect the base URL where this thing will be served publicly.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Redirection URL&lt;/strong&gt; points to my little &lt;a href=&#34;https://jwq.lol&#34; rel=&#34;external&#34;&gt;jwq.lol↗&lt;/a&gt; landing page. Basically there&#39;s no reason for an outside user to poke around the main page of my Gokapi instance so anyone that hits the index page will get sent elsewhere instead.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;div class=&#34;image-container&#34;&gt;
	&lt;picture&gt;
		&lt;a href=&#34;setup-webserver.png&#34;
			target=&#34;_blank&#34;
			rel=&#34;noopener noreferrer&#34;&gt;

	
		
			
			
				
					
						
							
							
							
						
					
						
							
							
							
						
					
						
							
							
							
						
					
						
					
						
					
						
					
				

				
				
				
				&lt;noscript&gt;
					&lt;img 
						class=&#34;post-image&#34;
						srcset=&#34;/gokapi-for-self-hosted-secure-file-sharing/setup-webserver_hu_c8b117a2240426dc.webp 320w, /gokapi-for-self-hosted-secure-file-sharing/setup-webserver_hu_d5ec1ee11ed0679a.webp 640w, /gokapi-for-self-hosted-secure-file-sharing/setup-webserver_hu_9660e07240d329c7.webp 960w, /gokapi-for-self-hosted-secure-file-sharing/setup-webserver_hu_bb090e3b1a365c5b.webp 1072w&#34;
						src=&#34;/gokapi-for-self-hosted-secure-file-sharing/setup-webserver_hu_bb090e3b1a365c5b.webp&#34;alt=&#34;Setting the public URL and redirection URL&#34; title=&#34;Setting the public URL and redirection URL&#34; 
						loading=&#34;lazy&#34;
					/&gt;
				&lt;/noscript&gt;

				&lt;img
					class=&#34;post-image lazyload show-if-js&#34;
					data-srcset=&#34;/gokapi-for-self-hosted-secure-file-sharing/setup-webserver_hu_c8b117a2240426dc.webp 320w, /gokapi-for-self-hosted-secure-file-sharing/setup-webserver_hu_d5ec1ee11ed0679a.webp 640w, /gokapi-for-self-hosted-secure-file-sharing/setup-webserver_hu_9660e07240d329c7.webp 960w, /gokapi-for-self-hosted-secure-file-sharing/setup-webserver_hu_bb090e3b1a365c5b.webp 1072w&#34;
					data-src=&#34;/gokapi-for-self-hosted-secure-file-sharing/setup-webserver.png&#34;
					src=&#34;data:image/webp;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAAB7CAIAAAAzCR9GAAAPN0lEQVR4nOxdW5PbOHbGOQBvklr2eueya1culapUJZWH5EfkH89r/kTeMq/74E1NZtLdY7ckkgDOFnAoCCIpWZLVTTXNb8a2mqLU5PmAcwehfvrppx9&amp;#43;&amp;#43;OHu7k5KKSa8FLTWDw8PHz9&amp;#43;VN97LBYLABBCAAAiEhGfxwcZfJA8hBCICAD8Oj4tfj2hF0RkjFFKbTYbtVgs5vN5lmVVVRlj0jRNksR6SA8WKBHxQWNMVVVElOe5UiqQgYiBP&amp;#43;Zm6Nu8adR1XVXVbDZTLKzNZvPbb7&amp;#43;VZcli1R5ZlqVpSkSBAyGEtfbx8VFrPZ/P0zTlr5NSMgFpmi4Wi6IoJg6OgIh4cCOiYpmWZXl/f//09ISIxpiyLK21WZZJKbXWiJh4zGYzKeX9/f2nT5&amp;#43;UB1sOnlOIuFwuP3z4kCTJZFGOADz4teKfpZRpmrIWMsbwqDfGaK3LsgSAoiiYsTRN8zznM4kIEa21VVXxaVmWWWuDCZlwCEFEijX4YrF4//59WZY8llmIzAHLOsuy2WxWFIVSarlcbjYbPkEpxROoLEtjzN3d3XK5VEoNfYOvBs0MyD2stTE57PDwnJBSsmJhz4fP5M/yj1prY0ySJKy44u9pYbINwZ90BLBvw4Y0Vtx8TizHWHO1VDwRJUkSzrHW9kqZ350UVAARKR7gWmsvl0hqsQBJABwc0a1vPPQWIgbavvFJEI/pZgZoYzUJS81R8PIPUuLXcL7gOGYjIdB9HtCbjW9c&amp;#43;mH88d&amp;#43;KhLBE2tJG27Xza4QEge5/aIQuRCIhk6AQxJnag4QwlgwJiQJxZ1qCCYmvKZ494RJHz5byel4Yoo0Rj6XRlqXvCAhM5BIwQ3mBNEgYEto6FcbSJSKt9WazYTvBTCjl4kGttbU2BNJSSg41RsnBfhwghPRSnidYezXkBz4guNng9BQCiouksKUQtzaFiKqq&amp;#43;vz5c13X1tq6rjnI4MRIXdcsd45LZrPZWBMbuziAb00hzCVmEow/TrHed/YTEhSXCUECoHQ08Kc5WcTppq7FDhG1m5Q&amp;#43;0Is9tnGgpWybiMmNU/Ravvcz/s8F8mcWKZpxAMAZpDzPOXTgaA4RsywzxoQ8K08FzpSMaQa0BtMuZIWLRHwKYN&amp;#43;n5RnAkR3bADa2LO5geMOLMA9Gg3gSNASQ80G7d7kbeBfTQ3v/7K6AlUzIO/ERRGQDEM&amp;#43;Yi37tjaKrURW/1kRGE1vgnQ1g/93pcZFKkHiBE&amp;#43;RiC0PkHKr9t&amp;#43;IMUiAgJFzZDIwP8dhvUhEsJm3ps7Yrba0Px8hTwG4oCJFJfJNhcb4bSt4H1dYx0JufY/USwgIpZW8xbjToxjqRDfB/Gz9gm4kCjflFcMHUBWoYDhtwKWWe58EdaoaDUkmSjDhf1L0vxdJJEBYpZsq5odTMgJ3cFIpMwiVKAYRTXBwJh2MerGda8zEOfUfJQfc2Ff8rARIJuYDeuwanwS9RCSBCVmPvwyz6Q984SuXD6N6a2r7hQ6RWEvQqvzL6&amp;#43;9DVjFjivegJxEiw5tkBesW2Pecsr7Q1qbh6w&amp;#43;XMuJ3i7Pt4tYhvVrF0rKWarLYiCNf7P/yfoF0mp3GQEhSneKW0jTAQhWy&amp;#43;geq6Xq1WWmsuAXHvxSgTPqdAsURrEqvafqqtsV7jR9lQEECCJEKCzkIYIgSYK8hP8UrJRxiWlADlGWCns/IIfmcceY0e3VxQE5tpgrWm0jTv&amp;#43;VQo&amp;#43;Gyo&amp;#43;zFFmCWI4Px6AGEITvFRtjPAh9nbag87oNxOEUqY3QrBKBGXYhjK&amp;#43;mAVAXIFbzNZGfKOaBMG4zaClQjOEwWfPvUzw7ZKmH3Yel2edtFk5TjVHIoBAMCVgOe&amp;#43;&amp;#43;VtAcMF3uaDfS5uUpkoMoNcG6AOw5uzGADQVG&amp;#43;0EzjFaZdzkOAU8CSTSjACQUqDQ5cghmNY6JIJgi2eTwDDgQLNxNbdORxN7/vf/bQq9TgsJiLQb0Y2zE38LtN44WUogRKbwz4v0n/&amp;#43;I36FjmB2hqqq4LMMxQbLFyBJBXqWQ9aqbb40Lf/yu&amp;#43;q&amp;#43;/PNW/piY1onPbe5m5VpvEyVGqN&amp;#43;mwTOV//DibZ8mbrGna4gZIroJxIzD3frFBHt8kiDt9Yqj/&amp;#43;f/y89OmShDQ3fpWaTTdDNGnd6kJznHaE0gAX2tLJb7J5Jtc/V5ZQ8TBN9dbeLzziAiJ6NER0FSkWAW17k5tDK00aaAidYrCW1cnXLtfIbDEqty9NlZUxlbG2uMUeIu9zLBQKBG0d2GFAPS1Fw7EiqII5pc5CJbg&amp;#43;eTxwohLAN4CY6xjFQ91BJErN06ds&amp;#43;8/ZajpKGEFzVll5YOv0rjXlYHjGVIgASgKhW9zqXBntBFlkjQRQCvjNia594LHVnDBt0V5P&amp;#43;pLTU&amp;#43;1SaVjB/wR7UyHVzXgXpitsAyRFdRopCMUeGHWltbaphK2XV9uCkjniclz852joWevJJlL0ApKNz6dpCpDuPU&amp;#43;bZSa5j/W1wgMkTMZStCXPCEEsERPlcXUaSG2MYJ6Us3dGkA4EmqW3ShmBFD/8i6rZ7lJC4HcE7F3g9Qu6Yac0GmOkI/jJMBdJv9pmSxTN728A1qy6ueZyLWBViwW1425f3tMHuquHvCffz8v/rBMiwXgpa0/X/xl2zjg/UIpELVvzOKFZtyYxeui2B/lgc&amp;#43;KEgB4LZWUcrlcLhYLDqGf4yJfGDsV9O/f53/8vpgvnANOXee/hUt7IyRCnqhFJiUKs9UnvBKNxz4v/&amp;#43;MfOVRmrzRooVC5fO2VsnYybpnhHzK5yCXra075e8eVmszDXgTM/iwiwGnRMAcUBAhKYiKdD5okyXw&amp;#43;z/OcJc4dQRyIhYZRjgzihR6csm419r7G2dBuzEKuGnJ&amp;#43;IOoGbN1bvDbYhUtS4glFYuc/uYiC0HeawrY1kRdfhiQE/y4&amp;#43;2F2KzF91fOlHwKugZM8Lai3FPtSLeVmPJvS5qcwBt2TFvYh8WbGSOSTu3go&amp;#43;f&amp;#43;2NZzL6uiI8gtE7LmWIcOKvPHS&amp;#43;tXbjwSExZyZCtTK&amp;#43;KtY88dTk1xw5B6XEXadsz2&amp;#43;WgHDxe41Z8a2e/kVnnXloIAc7HPpweYnyLlvrkxOxlFkRcR0t&amp;#43;LKBxV79eTs4OANe/qK5LsYrYdmusEDjXBBLOcyAcJ0s92ClAzfM1i03VB/rjDvSqHNdhHxIeC5FUFO8PL&amp;#43;lsrpXdcgGBENyy711/e3pcY9mryW4eNFWryDinrgYV3nAwW2O/QC&amp;#43;vOBM7wjgBfKxwxOPL7YQl7Uv9Mr6OcR046IP6GnMCm/EAWeY0cxYsIdn3Wf4qvgIe5/Hm&amp;#43;PCxXS9g&amp;#43;4Xthy5G8deQSYcCpXxlsWLvewLVFDLC&amp;#43;L8z3q9DrX4ILvwmucZF42JKE3T8GCiQEx4XBSHzWyB2ai8ioTd3irJlsf9xc&amp;#43;c&amp;#43;5tao1VrvfYI6/SCcmPJZlmGiHVdbzYbIQS3zoW1NJw14o&amp;#43;EZ1TworPFYvFaCmrtJUrHHfavRzzYuS&amp;#43;IZRccyjBsWYIsX859xs5lWLUaXhx6utotc3DQBrwAWKCz2Yw5aDmUsa6LM0Xxu7HSj503XvsX8kU364a2sPOC4ifQtE76&amp;#43;tEUiyMU37uJv/hHDmtD0HDKN7&amp;#43;WVZW9qyQpNGi2Rhn75hdzEPI23eN1XWutY7UTHKQQlwWTcMsq5Sy0xsdOBYVEWJwwYul/zROweqsoLNyyLFerFTu4XBLghxdwnxYXapIkCQvHLr6G28ReMi44QmHgH9FIZ&amp;#43;HQx9nMxqFv7OkGnziM/XEQcDAX1HVDrxjddP1C1mz8jA62meG353neXbp9y/m109FbU9kLxHrv8CozoJtcY17jCKubgwqfvfH82unoWSUZ3nvJ8RUnOU48/5mv6IVwcJXkueXGr5HIN7s4shd7bugXOQiZg9MNwyE3dAJjj4Dgg8eOYysvzb4p57xO4WAczTxXR48NaCEmIHAQovxJoNdCf1G&amp;#43;5Yy2ouezfNNzuyi&amp;#43;NewRcPrHrtIVMWHIrogJjN2on9T6INjriuhNDjN6W0VPUe4Tr8ehQoKCuyK6raItKxrOP71JYuLgCHYzIPT4hSPxMA&amp;#43;50lCo6nLTi25XxIQYqttxFXePhuNx0xmfdmI8PHlBx3GwOfeLTy88Kw64xqWOExfGAedi4uAQJjd0YPS4oc&amp;#43;RMZ7YPYR2V0Qws9falHBKRx&amp;#43;HitfFhUf2s&amp;#43;XktT5XIWCaAYfQbs6N&amp;#43;zWvon8m83scqqVwWumHa3Ew0XAIbTf0i&amp;#43;7/uZgCseNoV8QmSb0wJudkYEwEDIyJgIExETAwJgIGxkTAwJgIGBgTAQNjImBgTAQMjImAgTERMDAmAgbGRMDAmAgYGBMBA2MiYGBMBAyMiYCBMREwMCYCBsZEwMCYCBgYEwEDYyJgYEwEDIyJgIExETAwwgoZ3sJ2/9F64pl2dvtWcHBRSrSZo&amp;#43;LFK9pSZe1280hHCCIoBL/z19dex4g7rg&amp;#43;t/CHyu6Ha9tog3qlfNlvWimYG1IYeVvp&amp;#43;Y1eVNZaMdQzlCX43V&amp;#43;/mquA9bC9C72Yco4Ff1GW7C7DIb7n8qTQPK72qraXdtr&amp;#43;IMEvlu3kyS5rNOJUlUdb216fq51/KXz/XvG&amp;#43;wJfG2kP/6pyJTRSa3u6BedIljnQEs/dpBG2P39jsFWGvxl/vq51/Wv3xyIt1&amp;#43;RigJPy7Tf3u/&amp;#43;Id3qQ1PztWWft/oj4/lXx/rZoUYiUqrD29TbZsVRsPd6e3CP/5ar1br1WrFWxoIAVKiStInI//6UP78v08fHyo/8P0&amp;#43;5dYp9sd19t0i/fGOd3b3BEiEeSq/myveoxzR6f1lrt4WKpXX2Q9hlBTy2t71enN/f7/ZbPwyL5mm6eJuWWGxqe1TaTba5goVoiEylkrt9Hypnb2VrIIQRJ7g&amp;#43;zzNEvm59BsLgjMUWYLv5mqe4eUW4NsAP&amp;#43;66tT8egJAo2ItJJKQKWeGAIeXHd/A33QxIJCxn6s0sMf553bD93gRBXcMLGivCZhQAUFWVEOSfia3SLN9Y&amp;#43;XYu/vw2k06FOB0jvFMEIH5cZm8KlUgkL1jFEk8kZJ09vGCcmuNq8HvRJYhQFJm1u9WlAJBb&amp;#43;EdMlFKPa&amp;#43;33gW9sNAK8nam/e5fPUlyVwntB2ycUUOfx5H17v1&amp;#43;IePeycbC6Xc4OSaK6UlIk/qTkslC1IUu77ZgR3FifpVKB5YdDqNVqtV6vef&amp;#43;E57vcsFvkmPbC&amp;#43;EKIQyIHkan2Ce72tS6NXnmoh4cH3sr6WQngBx4zAc/6W14LtNYPDw/39/d/CwAA///lazWrvjr//AAAAABJRU5ErkJggg==&#34;
					data-sizes=&#34;auto&#34;
					width=&#34;1072&#34;
					height=&#34;1028&#34;alt=&#34;Setting the public URL and redirection URL&#34; title=&#34;Setting the public URL and redirection URL&#34; 
					loading=&#34;lazy&#34;
				/&gt;&lt;/a&gt;
	&lt;/picture&gt;
	
&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;I want to use my &lt;a href=&#34;/pocket-id-easy-passkey-authentication/&#34;&gt;Pocket ID setup&lt;/a&gt; for logging in to Gokapi&#39;s admin page, so I enable OIDC auth:&lt;/p&gt;
&lt;p&gt;&lt;div class=&#34;image-container&#34;&gt;
	&lt;picture&gt;
		&lt;a href=&#34;setup-auth.png&#34;
			target=&#34;_blank&#34;
			rel=&#34;noopener noreferrer&#34;&gt;

	
		
			
			
				
					
						
							
							
							
						
					
						
							
							
							
						
					
						
							
							
							
						
					
						
					
						
					
						
					
				

				
				
				
				&lt;noscript&gt;
					&lt;img 
						class=&#34;post-image&#34;
						srcset=&#34;/gokapi-for-self-hosted-secure-file-sharing/setup-auth_hu_ff4c7a02dfc40557.webp 320w, /gokapi-for-self-hosted-secure-file-sharing/setup-auth_hu_bbe57361ef1fdaa3.webp 640w, /gokapi-for-self-hosted-secure-file-sharing/setup-auth_hu_bc0e6abaaf82cd61.webp 960w, /gokapi-for-self-hosted-secure-file-sharing/setup-auth_hu_ea7b86e3ae1002fe.webp 1068w&#34;
						src=&#34;/gokapi-for-self-hosted-secure-file-sharing/setup-auth_hu_ea7b86e3ae1002fe.webp&#34;alt=&#34;Selecting the OIDC auth option&#34; title=&#34;Selecting the OIDC auth option&#34; 
						loading=&#34;lazy&#34;
					/&gt;
				&lt;/noscript&gt;

				&lt;img
					class=&#34;post-image lazyload show-if-js&#34;
					data-srcset=&#34;/gokapi-for-self-hosted-secure-file-sharing/setup-auth_hu_ff4c7a02dfc40557.webp 320w, /gokapi-for-self-hosted-secure-file-sharing/setup-auth_hu_bbe57361ef1fdaa3.webp 640w, /gokapi-for-self-hosted-secure-file-sharing/setup-auth_hu_bc0e6abaaf82cd61.webp 960w, /gokapi-for-self-hosted-secure-file-sharing/setup-auth_hu_ea7b86e3ae1002fe.webp 1068w&#34;
					data-src=&#34;/gokapi-for-self-hosted-secure-file-sharing/setup-auth.png&#34;
					src=&#34;data:image/webp;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAAB6CAIAAAD4VczjAAAO0ElEQVR4nOx9fW/bynL3zOwsSSmSY5&amp;#43;b5Hl6entb9LZF0T8LFOhX6KfuxygKFAXOvUCD2x4EafwiidzdKXaHXNKypciyHcXO/s6BLZPMajmzM/ObfeVffvnl4uJiPp8TESQgoojkzzAgX9QP01vTzwWHQETatr25uWGVu/e&amp;#43;6zoRMcaoAkIIRIQJWeh63XuPiMYYIhKR/IyCEk76di8DiEhEDAAhhOvr66urqxBCVVVE1HWdc46ZrbXTBo6Izrnr62sAaJpGBU1ExhhVjzFmPp9XVaVXCvYDEaMCnHNXV1cfP35s27auawBYr9dt21ZVZa1VsXKC/vnp06fNZlPXtUqZmY0x3vsQwmKx&amp;#43;PDhw/n5uVrPqV/we0evABHx3rdte3V1tVqtAGCz2XRdxxwdlHPOGNM0zWw2WywWKuubm5vVaqVa0Svr9TqE0HXd2dlZCOHUr/ZiwNqEF4vFu3fv5vO5XtXmjIghhM1mE0KYzWbL5XKxWKiL1yfVMlRh1lrn3Hw&amp;#43;r&amp;#43;u6xIDDwerEF4tFVVXOuS22E0Jo29Z7b62dzWZVVSHicrn03ucwIiJd17Vt23XdfD5fLpeqlYJDwCru7N&amp;#43;3bqsOlBEp7QGAuq63nlQnJiIxrHPv1u6WplGhxIYsHBFhn6AivvuotvF8a5dzV1aaS1f72IKWM00yfnD0TV95vfMew7ZgckNFhMc0Wpm0/Rfa/J&amp;#43;22tNMltUcnA&amp;#43;tSOvjHYrijjdV7ojAiNagOaoOXiCIaEZnbtfgqy&amp;#43;2PyGfZogPEpAmj7v&amp;#43;/AaY5lWsLbQLcNWFL21wIgaRkhrS//HhGeMCTG2QHljPIOCDdEGYgAf70qzbe58zuGwcGnKyRLRxZDeof&amp;#43;aYlK9MbWvLv6nznF6clpmDXC4hi2aqZg1&amp;#43;z6QkHr4GVLgiEOIPEMD0UzAKESU5kiO&amp;#43;YMutKWW6vLzcbDY5KuR0etojYoxR96i3mKOxOue6rgshaI4SdQYgIaiM9Pmp7PSxHPH0p3MOEa21iKhNIUtZH54WUte15vaPk/NOsPp6S7CoyBL69L3JYUP2Qkxoj2oB0X1RNCMa2pY2QB9TNudDek8RQOQoYutct2lbEbFsq8oCYpRFEGOI2QYJrov/9QpIhoGEEg3CGDbOOU0ho0CTeiK3szZ6VMJsLqpjy4xIbdeqjtkwxX9DPniXHshW0jTN87mp3gIIsSGqzTZDiV&amp;#43;aYigdFYcRVPpJl32BaNjO5m/IWKVfSQGgLJd9zbUDgSRPk4QrIb48GIqV4ypU3gtEvovJbYwdgkTsPRAjbbTtY9QOsbXatiXZQGxtdVRqFC6Cqaro0JDIDLboveGY7lA0C2zqJhb1bEGCJ5Iamv1dKT4CWe75ApIxVVOZKrn73kvFBxBBpBLRaiT5wnAftACOrjD&amp;#43;NwljY8FRrFVTzX18HTLKvKIl0K32Y2B0qDZZhVIOVGKuQSX9QyasrNEe4kdJYTd6BUgKmNn53JXgYyCTUBASL/JConbXWxzmL5sItP8hKpjeJ47GdKuOqjADaAznMnFazJ43GsPbqPEY/aKhARI8J0fqFRCCeJCQXjZXXF9Vw4B6kodCNKrHDBlo/BOS8EVi&amp;#43;uFBBDXRS00xNXuRadIgwfuQPTKqacCY0BGhITaETyQpidIIwYdI4YIcyT4OxEhDb3zY&amp;#43;Ph1OQpk920J55aOoKEg4ERcEAY0lK&amp;#43;lhhYj6mazXocUA2HI1Hp2GIL0f2IIMfaSMWlwQgY1YfJgAZGstdUMK6P1e6SwYkBx4iIVEgyAQbaJ3NOCM/V0AVZO2hDlpU5WWyBCzAOYoIoifNjraZMXGWj11NbVzCMjiqE4cZb4Q5IiYgP0DgZXHm1IC4uCCdEtJQUMnVQ0NNPHN1XsPdDgkJ87Q2MYct0ZAyF1QXzPDMfvrkyioQ&amp;#43;vTGQvMZwl0U7devwVQ3FjuPdCKv8UNKNLTD1Umh9g4jlR0JHJgOmJE2pWFvkLc0DTeUipy6MhEgSBTGwLI39&amp;#43;LvR5AFOiXJxa62BzmF6o7404Lg8AMITU2xMAjNm1ACFbY6zJjW3yi1hMH3ez3hNRksF2VI/KmBA9YHgyBcS6aQyMYqHnNYKcB0Dv4OV&amp;#43;GnR0JVR/MBiApmbQ&amp;#43;9a9pT4k&amp;#43;D2ut3C7LP2l5muOy4AOxp2RE7z34wjZfesQqLUR5sj2/XaO9gzweeWfaWhkJRImzuDuF&amp;#43;Ng9PAQVioy0J5JOQa/1vy/D3yDKvY01AVZB1m5lPcnb6Tdc6TGLUAUA3XqXo48pWaq6Os6kPS8l2jIZquT41lf6&amp;#43;UgWUBMTeWmg/9tfetlSL4i9TR9wISKsOEotNZLav5iDzGBWHLUbvxYJgrdh6SA6BOwNjBjYtS&amp;#43;aCUwoJ0giDEXs4Sao6txHNiE87jCM7/IS8VIQxcV1pzIiWhHyJCIDfRRO7cCR&amp;#43;3YAztIEAwgEtDzdqi8YIw01CCqV5n66qnQhiCMh48SD0QCn6qb5vVhpKEHyfTYUYEi/l0YuqNTHJbtHmnMPQd6IScBh8s0T/J6hsq/Bgw0VKRzkeHkXiAcIuc0LUjdRGIIq8MGKdMwQ0wvKA30F9xFT0NdkKtOvrShC0J91EVOibhaACMQYeejNCuDZxVFav&amp;#43;10iWWHAufzooomIKVdBLoBAP1RX3uKgQhOxxCnRkhozeRF5HNfufg1kuXuGdFuKzIT&amp;#43;bHqRdSGZv02VJkQSbpqvWAX&amp;#43;19TKElDOkYp27Ggin4j5fdXFpbmzRIeM/oz3SMdgzCiIeOf6QymXBZywc0S6LjZti9VvC//vGaZojW6UjIriadhXbcCGlj8C/Pm3/62TTWUEmLJ4gKaC147uBgniKwR1O3oOPnhDBn&amp;#43;sf/L7972/x2WdWPqvBrA//hsltx60xasZcz4T7eDvR/6P8Jg0&amp;#43;XYX7OPqSw0RismRoT/nTtrrs01v680wxeGGIQblFCmoE7t&amp;#43;PYrY7Up0HAmByY1PnsvGyCbJysfXD3RowpECxBXZuL2qjYw4GG8yNh7AuqTVRAlQbG04BJP4FHFWANEmDrw9rLJfguoPeyfymejt8axMpQmqFe2v09YJO64QSh83LThS55IbWDPHEQAdoQL7kgnRcfhJJk948IaDq9duHzxlnC0hlxL/j9jDeWPacgMMpUlPsP6HmLJW3RZln145f7obMimGDOMcmon2Tq1OsC//PPM2jmwM1k0GS/hB7WlHWuY8P4tz8172fMR0xwfNXgf/mr5WyxtHWD&amp;#43;IwzYJjwYmZ/XrAtScBt8N//VC3P6qZpUKcq49jzvNUFffRaNV13Zg3P6pIGb4MbQ7PI09OM2DyLMw/&amp;#43;Dp&amp;#43;HhVr4MEMRJVGiix1Maf13wHkgTERCWhuly&amp;#43;SmC&amp;#43;f6qZlpnUJiTA&amp;#43;YsdanbYglB7gX0yFJ1HVueVVbXtybNwU6YqEv3rOWpWBEXiXZw5hb68SmC9uPXqr5ctdnfwOMCri7pHYLR0v/EdV7/dienPtM8ipq2IVRAbva/pPIrmzQsQt5WopMF&amp;#43;3n2&amp;#43;q&amp;#43;H7MBUyZRT1HbV4hRASEE59x0n4a8J9ZjomhWbdHBvbgVAzLnkQFP5btLDNiFkQXlfUD1irqjx28CenQC8YPgVh4wvbGVix39BUXu&amp;#43;3ErE57eeFrBFTXswuhest9/DtZYaOgujCzorpju3YMK7mwutR9HbCn2Q&amp;#43;EWDc2L06ebTk65UOamh&amp;#43;/iVfKA/biVCat8tTt66pHuWsNDBXrvNqIF2zR02v&amp;#43;8FQ&amp;#43;mCnhQt&amp;#43;hL37DyubHdHb3H9U9xuECL6PfjFg19vkMxig52ocTGE&amp;#43;MWC9LPD2qtBxKhY6v3&amp;#43;rHdHb1rk&amp;#43;B7t5Q9JBoX/rMf2wrY2mRW7/bTUVJ&amp;#43;kJ8hIt3x/qv7P&amp;#43;szRQ33YmRBcGeP7CmDHHYsHMnSgalAmRWxH7cG5bNMtyZG5A&amp;#43;6q3P&amp;#43;80CKWZjoHhw6K&amp;#43;JucnB4HvBEVX2deNisiKOlWdSwC/tmRTyh1EoE3oVbLGir9216lOHRKL2h&amp;#43;5H3jg5bBxfobNzHbxx&amp;#43;V7UFU4wnqN5NrIrj/gbYpqE5b3qqqQxlVsR&amp;#43;7KOhTyKyIvf9KJNzT4xCTk6MooAToyjgxCgKODGKAk6MooAToyjgxCgKODGKAk6MooAToyjgxCgKODGKAk6MooAToyjgxCgKODGKAk6MooAToyjgxCgKODGKAk6MooAToyjgxCgKODGKAk6MooAToyjgxCgKODEmS5R2PFFm1T4G90p1KlIezjzVJdgwPaJET&amp;#43;ExhIagTO/fhV0rf4KADxJun3rXixQxH8PJItB6ub5xX9Zh7SQE8VEX8Z4hmFlzPjdvG1MxlsNHtpD2Dbhn/RWmE&amp;#43;/WTj7fuOvW&amp;#43;zAeRoUIlaGzGZ81/XprDiKr1n&amp;#43;8Dv/x6&amp;#43;bTjfPpoKrOx6IrpvdL&amp;#43;3cfmt&amp;#43;/a87JHH0k82s1HhFxznWdizKWAPm0fSQP&amp;#43;D9X7t/&amp;#43;dPNfn9vWjQdOGcSzGf/&amp;#43;w/xvPszO6mgFLACdl083/g&amp;#43;fNv991UkynNaFzos1uOr8uzf8Fxfp6ODXKsijoM3fOb9arVerVdd1AJhWNhJbK2R/vXT//vH6P39duyCI6fDHdJDIT2&amp;#43;sNfhnb6uFNSDAetTX3NL5zPjoeqKYVQeIcD4zc0tM&amp;#43;AQLVl8hYtzcbDafP3&amp;#43;&amp;#43;uroWCcy2qqrFYsHNm3XrL9fucu0MUcWogdYHuVxHv9T53mkxIswr&amp;#43;u2FsUzXG58Ozwa1A4B46/&amp;#43;d1fPK0OPOuHqluhu38PHe6SJfPQZG425yRzGU2nQ0PEXfHrZ2&amp;#43;GFErJnms&amp;#43;p8btVZjadXCRDFu/UhB/j/cIgiMYaaprm4uJjNZrpDPDPXdY1cvWncb95UX9aRW1qDgFAHCEJvZ/x2xhX3TCi6IEKoGWt7/xn9SY1F/NtQsTDzfN5UlRU5y9tLRiMAfA/2H/4cfrOsXQjZVhBhWZvf/TRbNmwQAgiPGzDtkfFTrHJ/levlTfQt1lreoqEi&amp;#43;J6lqcxfv08C1uvpXmXwTW3eVAbFiQhvNpu2bZn56EOSDq6rmW439Iqhp11bgvMZnTUEdzaEJgQU17btarXiy8vLuq51K&amp;#43;Lnq5Ma5jdQ83cF2dEX4ZM7WK1WX758&amp;#43;b8AAAD//0cQJQvOR&amp;#43;LyAAAAAElFTkSuQmCC&#34;
					data-sizes=&#34;auto&#34;
					width=&#34;1068&#34;
					height=&#34;1022&#34;alt=&#34;Selecting the OIDC auth option&#34; title=&#34;Selecting the OIDC auth option&#34; 
					loading=&#34;lazy&#34;
				/&gt;&lt;/a&gt;
	&lt;/picture&gt;
	
&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;I then created a new OIDC client in my Pocket ID deployment:&lt;/p&gt;
&lt;p&gt;&lt;div class=&#34;image-container&#34;&gt;
	&lt;picture&gt;
		&lt;a href=&#34;pocket-id.png&#34;
			target=&#34;_blank&#34;
			rel=&#34;noopener noreferrer&#34;&gt;

	
		
			
			
				
					
						
							
							
							
						
					
						
							
							
							
						
					
						
							
							
							
						
					
						
							
							
							
						
					
						
							
							
							
						
					
						
							
							
							
						
					
				

				
				
				
				&lt;noscript&gt;
					&lt;img 
						class=&#34;post-image&#34;
						srcset=&#34;/gokapi-for-self-hosted-secure-file-sharing/pocket-id_hu_1ef5de9177b98466.webp 320w, /gokapi-for-self-hosted-secure-file-sharing/pocket-id_hu_7d68325e6446b432.webp 640w, /gokapi-for-self-hosted-secure-file-sharing/pocket-id_hu_3a44b356c4c580c1.webp 960w, /gokapi-for-self-hosted-secure-file-sharing/pocket-id_hu_8316af228fc4120.webp 1280w, /gokapi-for-self-hosted-secure-file-sharing/pocket-id_hu_2e216a6af709855a.webp 1600w, /gokapi-for-self-hosted-secure-file-sharing/pocket-id_hu_d9e06b42b54abf3d.webp 1920w, /gokapi-for-self-hosted-secure-file-sharing/pocket-id_hu_664c818cd335544a.webp 2126w&#34;
						src=&#34;/gokapi-for-self-hosted-secure-file-sharing/pocket-id_hu_664c818cd335544a.webp&#34;alt=&#34;Configuring a new OIDC client in Pocket ID&#34; title=&#34;Configuring a new OIDC client in Pocket ID&#34; 
						loading=&#34;lazy&#34;
					/&gt;
				&lt;/noscript&gt;

				&lt;img
					class=&#34;post-image lazyload show-if-js&#34;
					data-srcset=&#34;/gokapi-for-self-hosted-secure-file-sharing/pocket-id_hu_1ef5de9177b98466.webp 320w, /gokapi-for-self-hosted-secure-file-sharing/pocket-id_hu_7d68325e6446b432.webp 640w, /gokapi-for-self-hosted-secure-file-sharing/pocket-id_hu_3a44b356c4c580c1.webp 960w, /gokapi-for-self-hosted-secure-file-sharing/pocket-id_hu_8316af228fc4120.webp 1280w, /gokapi-for-self-hosted-secure-file-sharing/pocket-id_hu_2e216a6af709855a.webp 1600w, /gokapi-for-self-hosted-secure-file-sharing/pocket-id_hu_d9e06b42b54abf3d.webp 1920w, /gokapi-for-self-hosted-secure-file-sharing/pocket-id_hu_664c818cd335544a.webp 2126w&#34;
					data-src=&#34;/gokapi-for-self-hosted-secure-file-sharing/pocket-id.png&#34;
					src=&#34;data:image/webp;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAABPCAIAAACs4lr9AAALr0lEQVR4nOxda3PbuNUmQOjiyybZ5J13Ou2kM/3/P6r90E4nl0nWjmSJBAh0xEd&amp;#43;fAKQNCXBlpTV8yErUwIJnHNw7uCaDx8&amp;#43;vH37djabrVarxWLhnAshFC2UUiGEpmm898UFB0C1AGHLUpvSFEVwbkNZc3t7&amp;#43;/Hjx3fv3n39&amp;#43;vXTp0/WWvwaI621Dw8PdV1feLA3lFJlC&amp;#43;99COFqPnvz220Rwt2PxWq1NsaY2Ww2mUyMMdPpdNICDAghrNdra21d18dexXlDa22M8S3m8/m7t29D8OvarqvKrNfrz58/f//&amp;#43;/f7&amp;#43;frlctnuklDvgQv3D4b13zkGLWOse1usQQqvtC/X777/PZrOiKOq6ds5hy3BkCAEbh4bhgj1AG6CUajXNBAS31qnb21sqnD4qj6E&amp;#43;2XZhVSekWGulwiOhzNNVrflTMmOk7Eu7DVzYEEESpBGfzXw&amp;#43;L8sSVkI9wnsP77NuAS3Ud2ullNYaN4HKaprmwoCRMDc3N9Pp1BhzdXUFHmitmxbW2vv7&amp;#43;7u7u2E7jCGmRQjBWuu9p1p7xbWcJUx4hNRTSqnJZAKPiKqpDxhOwYepeXbUnxzU8Ga5XFZVpbVeLpdlWeJrKKKmadbrNVyjAdAA4KZa64tBfhaQ1KZpTF3XTdNorSM94wWGDQDkHaEcBB8OL4e/yorODPTvDZW4/Br6ZLwt1VpPp9Obm5v5fA5T7Jyrqmq1WllrL/sgBbXFTzZAfj2eatwEs9ns5uYGxsM5t1gsENxdGDAAw&amp;#43;3AS2M0jwS45ZxbLpdN08Bue&amp;#43;9Xq9XFH30Whl48ZJmk35VwsNh1XTPsHqPEovBtJ/warDUy&amp;#43;58GtOOBLAciCVD/WeWjWzBRziC87/78TMf3F&amp;#43;CBgfByhZ0mYRgYWJbltAW2kbUWsfQAQbH5YLR5cTwDoC3PnQdPXhAXz4zCeBvAjKuso0WVoHRU&amp;#43;pSdGCCDx/NlgwHFUQNgHLuf8y7zd3BMy7JEnLETL8d/Rbk5361gKLxRUnq8ZOGXj5nuqRzlnOtTRFRBYwwPxEL&amp;#43;yUmWZXnWVeundDTpyE0woMQjcuBfay2vUDD77kAVtJ/Zl2bgfKn/pIKYi8ZVKPEoPiCi5A9/X1UVecDrA8pBmoqdJi1vmDrNfXt3wMAcET&amp;#43;pIKmFBiSrT6IxZPw6Jf/2XkA0ljotuk4en9qOMRR2YwyzQBTbZ4uUqfAeUcpgVFDekNuCxsY511ZiTyg9ZWjN4JIjLDjfKjzUKdoM5BLg5iE6Oan01NYIR0qfu3j8RKOSzlGAVXS2kWFip0b9Di&amp;#43;I5RQWucZoTFnEf&amp;#43;EJPz&amp;#43;Tpmn65GCPOP&amp;#43;FQJO5jYS3CblSh1AoVahChSI468aQNdo3r7iKM8ZTQWZDsg0DVNDa6y0D2p8ohMjD0gTSp&amp;#43;WE11nGSAyIxRGn&amp;#43;tQXtJlfacLUeK2LsKE8vi9UUaqNY1R0TZJmg82nMp9xOkzoy/JygkfxSp&amp;#43;K8u0cW6lX&amp;#43;E/LAKUKxKgKCql7vMwoTKfT2WxmytKH4KxtnGu8348HGXmHYvVkMmHOVYZpkCG4RrmeOGb&amp;#43;zBRsfLbN3xuaNbq26rEy7FvlEppGNb7oDwWgxcCDyWRyfX09nU699/V6bevaNQ2DYLnszkgtjQEPZwMLpdfX14gM0qx7Xdfo/GC6aUwFKQ28oy01HO4x37ONA1QIG3lvvG43gw8&amp;#43;uI2/trnFc&amp;#43;aXn3&amp;#43;q4yul2xYJn/imZD7JESkH3GTXunTfOjmxaNncAcghppk&amp;#43;2SKVRp2dDOBXcHZHbuWnOGBDax/gABX4EyRQqui3saQmSpJbFzAELxy&amp;#43;VLiiD9EPILm5FBHSU4jzOecoed6ZW0wX20mBFM/2pckkm4n8GYoJAwJOV1Za0hngSlmWTGnUdV08VgLk7ztdpoipbBE7BJKd7FmSYSapQDHCdmEvf&amp;#43;cNx4Bphc6bSK4bzoCleVkXi1QEqN9XYIHFQ1USlYD9jFveYALrQnVIimdatkPUid7W8Qrw2XR9&amp;#43;pVMwpvoXnLrRdmFZ8MxtjKyLHzcQlVUqADdo6QvhYw&amp;#43;xcAOyAVJli0D6NFHs4/qugP5/cczNwEtjtIAHD36hzRIu5pqxSib8qITlmQ0u9Ko72fsUI&amp;#43;8TDjaWXiwR&amp;#43;ob5iQ1AJGIQPlEUf3LHTmRtzKHP4BtKfMWMB5UX3Vdr1aruq6jHbbfg2SusLNgJ9U3u4bn8zkaJhH7yKw7/YW0eUC2LcmzclIn761jYxV0IOgvYdLSyEAAU4uSDpeTiwwPM7XGGHoKqbJmO5682zbNWJaYAzuRME&amp;#43;5S7h3sUvKsmQIjWeRQ4wwMIFDNkcGBlCDWWtT9wtLhQDKi5FG7uwMkxJHbxIZJ/JYkluO4j1RIaD3LJPt8vd91W&amp;#43;6TGRY3vJynh0gLbs85YGp0//rdPml4wt6uRZpWZQNd7LlgreibPJxzApgFGU/ur8cLmeFn/HEAxMkkaAcyIlsDIhag6KymqyJy11MUpJwcKXwb0qgSE77fPAoFuXWwUZcrVZVVY1pF5Ong/YIiccgJwPg8OBz6mz0tZDwCmWNEjrgk6RI3cpoOIxBGuiMvOcLIScDKLmpJYAekHYs9cf37g5OpyH/pC7CaxcQqZxOK2NOBoDu8Ch4vBLrB/WB11&amp;#43;5bBw&amp;#43;tZ7qzDuAtjFKZ4afkfGhIyeGDyfYSp2NAWwJYTQQmdljbfy0kfKkehQzMGCbVm3boZgHjdyVXEWuXYE8qDEG3i3PP59O81meHaC1ns/n79&amp;#43;/V0otl0tEZAyXsOaqqtJKQF96p9PnGa5MpZUWuMVv3ry5vb19aMH&amp;#43;uKqqBqzRcMGr8/rA5AdqITlTEWVZzmYzrTWoj/wXgiatNaUvCp3GM0C6lZ2Ne1FrNx6EboGrqyvnnLV2MpmwZCTL9GmFLrrnmBn2QXrhafCRhwHe&amp;#43;/V6/e3bNzCAi6T&amp;#43;RTYiqsrKgo8kAekrnRapxDhK5gbkZHjdOXd/f4&amp;#43;GXO89Ej7IGyJDJasx9BHkbQfEWeaO5LfREDmZVA9nywVhU7MRQYpYGvXIKaZV7&amp;#43;ikAsILqbWjBvS&amp;#43;8zMYuFgsHh4eYKWgDNNngWfcN1Hq8ECjHcWh0bc5vSACya90awOpBh9Q5Qiwo2T98PaP6iowuVRZjE5kjiQqCeyhZwZGvbgNwPOQdocXFPn76bYlb9KDUJ1Vuc680E6QhkFKQFqciUbt&amp;#43;qBdR2X2gvDaG3pBnJBUHfI6HJI&amp;#43;bhHpoZcB8zjg25yC3xkhmxcEM8vjZqwCRql2yQNmqpFqj8Qz3Q2pqYgMwPDBwtNEfi8IphjaVm5tuhySAUjT86WmzImmHTEyFx/Ft7woPZks63oFZPOCaHhlNTX1L/tslOwM41edHYPpfWSR67zEP78XxFrSfnZyfN5/DxtwmsjGAMSck8nEez8c6A9j5KjzovIAsjGAvQVQ69FX8s9fhnZZkLMozxeUsaAYpaaPWxU4TeRhAAxgVVVMf26PAD6WwmVvweG9NL8Schph1sKQiWOpnbk5JOVlg80FOW0A8ot8jzTEH6FW52HKC/JHwujPlal2eRSi87TinxyZd8D19TX6c6XJtS1koSrXQ38BvMgrttO&amp;#43;z4v/E6PzhMwhgPeJdxVHPSnyBaLnmC3IAK2D1oVuT1zjDKTb1oVyuqGoW3WW8STFX4gB0UP72u44pewT6IXWfj4Lb27C1azQuvBerSp1vyweHgqXtTFrzAvgXmjl&amp;#43;hEyW9f5dPanvpIyVEUwpX/3W/OPv&amp;#43;n//6AmJljXfPmm//lvVVdFrXIy4FiOJs9TyCPXUuRlEX/gRY4vNLuN/rmZh7/8n/r7X8v5rKnqYHT48q34UmZuTTwW2Mog3xTUqZH2fjP2gfPbaPx15Zcr5Rpf12FdtzYgZDbCe1SxcwFxxsCrmuTxkFdlQAhF0&amp;#43;j7RfjXf4o/fjSmDK7Rdz/0Hz&amp;#43;K9nVMhzJAruq4se74V5C&amp;#43;9iRtKO4WurLhv18KpVXwyrpiVQXrAt6YdSAY6F7&amp;#43;xz298D7Utn3rj9oKwGOX3P8CAAD//37WwwrraUMBAAAAAElFTkSuQmCC&#34;
					data-sizes=&#34;auto&#34;
					width=&#34;2126&#34;
					height=&#34;1312&#34;alt=&#34;Configuring a new OIDC client in Pocket ID&#34; title=&#34;Configuring a new OIDC client in Pocket ID&#34; 
					loading=&#34;lazy&#34;
				/&gt;&lt;/a&gt;
	&lt;/picture&gt;
	
&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;Notable configuration details from that:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Client Launch URL&lt;/strong&gt;: &lt;code&gt;https://gokapi.example.com&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Callback URLs&lt;/strong&gt;: &lt;code&gt;https://gokapi.example.com/oauth-callback&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;PKCE&lt;/strong&gt;: &lt;em&gt;disabled&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Then I could use the Client ID and Client Secret for configuring the auth back in Gokapi:&lt;/p&gt;
&lt;p&gt;&lt;div class=&#34;image-container&#34;&gt;
	&lt;picture&gt;
		&lt;a href=&#34;setup-oidc-creds.png&#34;
			target=&#34;_blank&#34;
			rel=&#34;noopener noreferrer&#34;&gt;

	
		
			
			
				
					
						
							
							
							
						
					
						
							
							
							
						
					
						
							
							
							
						
					
						
					
						
					
						
					
				

				
				
				
				&lt;noscript&gt;
					&lt;img 
						class=&#34;post-image&#34;
						srcset=&#34;/gokapi-for-self-hosted-secure-file-sharing/setup-oidc-creds_hu_150a48d4537c1f14.webp 320w, /gokapi-for-self-hosted-secure-file-sharing/setup-oidc-creds_hu_86bac6df4c67506.webp 640w, /gokapi-for-self-hosted-secure-file-sharing/setup-oidc-creds_hu_b49607ee78f1d12b.webp 960w, /gokapi-for-self-hosted-secure-file-sharing/setup-oidc-creds_hu_5f7734e3a168932e.webp 1068w&#34;
						src=&#34;/gokapi-for-self-hosted-secure-file-sharing/setup-oidc-creds_hu_5f7734e3a168932e.webp&#34;alt=&#34;Entering credentials and other settings for OIDC authentication&#34; title=&#34;Entering credentials and other settings for OIDC authentication&#34; 
						loading=&#34;lazy&#34;
					/&gt;
				&lt;/noscript&gt;

				&lt;img
					class=&#34;post-image lazyload show-if-js&#34;
					data-srcset=&#34;/gokapi-for-self-hosted-secure-file-sharing/setup-oidc-creds_hu_150a48d4537c1f14.webp 320w, /gokapi-for-self-hosted-secure-file-sharing/setup-oidc-creds_hu_86bac6df4c67506.webp 640w, /gokapi-for-self-hosted-secure-file-sharing/setup-oidc-creds_hu_b49607ee78f1d12b.webp 960w, /gokapi-for-self-hosted-secure-file-sharing/setup-oidc-creds_hu_5f7734e3a168932e.webp 1068w&#34;
					data-src=&#34;/gokapi-for-self-hosted-secure-file-sharing/setup-oidc-creds.png&#34;
					src=&#34;data:image/webp;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAAB6CAIAAAD4VczjAAAZaUlEQVR4nOw92Y4kuXGMIJlHdVXPzGp3ZMmCYUiGHwwBfvJn&amp;#43;Hv9Cf4EQ4BhQwbshezFaDXddeRBhkFGZhSbdXRW9ZG9sxNYtWqyMlnMCDLuCJo//vGPHz58WCwWiKgiAAARyWc1glzkD&amp;#43;lX6eevMAWIqG3bzWZjGO/Oua7riEhrzQTw3iMiRBCk83XnHABorRGRiOQeBoww69v9NAAAENEopbz36/X6/v7ee18UBSJ2Xdf3vTHGWpsucADo&amp;#43;369XiulqqpiRCOi1prJo7VeLBZFUfCVr3AeACAQoO/7&amp;#43;/v777//vm3bsiyVUrvdrm3boiistYxWE4H/&amp;#43;enTp6ZpyrJkLBtjtNbOOe/9crn8&amp;#43;PHj&amp;#43;/fveffM/YJvHQYCEJFzrm3b&amp;#43;/v77XarlGqapus6YwKD6vtea11VVV3Xy&amp;#43;WScb3ZbLbbLVOFr&amp;#43;x2O&amp;#43;9913W3t7fe&amp;#43;7lf7ScDhpfwcrn89ttvF4sFX&amp;#43;XlDADe&amp;#43;6ZpvPd1Xa9Wq&amp;#43;VyySye7&amp;#43;SdwQSz1vZ9v1gsyrL8KgOmg2Emvlwui6Lo&amp;#43;z7Tdrz3bds656y1dV0XRQEAq9XKOSdihIi6rmvbtuu6xWKxWq2YKl9hChhGt/D37GumAWtErPYopcqyzO5kJkZEQaybga0djsZS4atsEOQQkXERGMWHt/Ial69OMXfWSmV03h8Z8DipkfEzh2Hps17fOwc&amp;#43;R4wsVAD1lEVLydr/mSz/86&amp;#43;ZWrKGt0PvfEvUuvANBnSHLxnvAMoAWA36KtQ5Up6ILTr9cAYXTTTlaY&amp;#43;yskNbnQ3GMzc8ES4aMLWrDK/Qzqv7zn9ufU&amp;#43;kATCSIf4Xbq4NLJUuNeCFE/aknKfOk0Flxv3FVrdzTiw42RwscrK3EltddDN&amp;#43;ULhZurFkEMY4PyvEE3YqXDd9MGWPh0sk&amp;#43;0pcAJSAjpDx7fNgxp9RjFwi5cMfRQriX4KARKDISC5DP083&amp;#43;2dUme7u7pqmEanAqDEm8MO&amp;#43;7wV3LP/FHGmapu97RGQLkc1y5xxrwzyOH0EIzMq0uE/YfmwjCIXEnhcBJpjlGcqw6VesiANA4OF9DwBlWRZFYYyRGU4iAChlUS0LtAguIizucCVcyCDYqwzbwL4wbCMc1yhPnU02XqeZGiYEYHSEdaq1jbTp&amp;#43;r7vuqCMjcufDUbUuiwK1Joi/XhY/mCtZUWZLxoTWK61tm1btm9Es8gmwHcyFQXF8k/ZB4xl3tAyYWttuiYeJ0CgP0CFWOpcQwkjRBmKV8lhUIz9SMthQDDG1HXNi5rxIgsQAIqikB0d70dtNOowT1tW3nlE0MbosD8IjbV9XNrxiiJvAm9xKuLOOceGesqCeD&amp;#43;xt4p/nRVoMSrFvyK0YaqI4ytlazyaMaaLK4OXP&amp;#43;9d3kmPMiKTYGpc9odYfAII3tOLPHux4/gGZsqZb8NajaYgtJ5AIekiTJFA9eEvKSwwWjJRMgACad1D35LrBd3CQJhls83IeLTWeu&amp;#43;FQql1KZ5glhZMCTGGhN3xP3klKaXYo9yPUFUVm66PE4CiwBTm83z4HwZPRUHf97vdbrPZMA2SxR7evCzLuq55GbZt64k8Woemj3PRActxqkFWKQpEAB&amp;#43;Io7QO2pom8L3r2sZHpi/siLkHY03Wu9ie7ADuuk78K7wdGY&amp;#43;8mWTFsKTlZc6OsqZpWKIEfhh/hXc5jz&amp;#43;JAN6TU&amp;#43;QVgeyCkW&amp;#43;wGGBOcgXqidVQVLIVeWEWRSELX3QbZg78/mFy1iKgLgoH2sUtmtoRNComvHQ0qqi/AenKahCpy0ubtxfzaPktcZlora21XdfJV4xHvi5REDH1JRYi26KqqnSj80piKp5H0V4N3TjfuGCMyWIV9m0RFhavUEMVqZ6o92TC4h2usRiQ1SdKJPOEIgK/&amp;#43;YK1DtRRJUsCcPF/Iq7COCCGi1be&amp;#43;LrKbIj9jJIfzZTXTJfnxSFPiWrLaE2VYPkqfXVRSScQIKqevVfbnlof8BWUUBiWG6hgBxhURUDhZRTgHUD0AAXs4GuaRjQiYQusoqSOjRTnUyHM87g3cKIB&amp;#43;FzPTlZDo61bG4WAnScXUZa6Hwod1dDLxQGA0qCCeMQHc&amp;#43;HFzp9Tfx&amp;#43;rEE/22Z188Cmm7ws5UQY7wCBoDZWJq3VkQhBtscEbcZ0dEJYj4LCfFL&amp;#43;Gtfbm5ibz66X8lNlruuK&amp;#43;YA&amp;#43;S2AFqYPB0XA16ymoc2PMIqQqR&amp;#43;gME4yzuRDizXfOlBnkOeCUc/bgHOv3VRBAlmrU3uc6SQBxE0eztOFhU1/WXug9GNZQUedqbAsdc0GwVMwGma6U0eJGOh3o4jsZLXnwvrAUxAVgdYtnwk9gEl66SQQ3tPe08bXvyRMyN2D2HbA6QQgyCOrqXg61QGizwcRpQvN9RkAT6IQnYcGdri90v4mJknsMqaeoUuu4NXxlEH504z7gDKKBp06m/tK51NCrUQfWMGm/AY4FQmTBi6yguf7JTtkAYOVA3fEwUS7Z3eKUXRZEJZHG2yM0ZDd44GVIn66MQCRCURSi1qg0aYF80KzBKjwaOjQ5Rdirw5piIAIkrHJ2ouPXTDLvUd5bef2grpcvtjZBEeOkFO4DV0GUBpQFPgyYqdj&amp;#43;Pg5FIQVqYQB2LatL4wTAFwMDBjt7PjhoWA5LumLrvxSWZhj7Ei8BqEvOrN5IKdmlO1F4N1QDMVVJenb7QKIRhepR44GYgZsCR6XZdt9vtmqYR3wt7wdjZy9pqRgBmXOLY4XRKpta8NBD34vRH9mroJJxeGxU4hRZev4xo8e5K8kQWMhSMp3nBWXhyXriU/yTu6CiHKfdIDx8lGilGwBmc5nOSHzg1g&amp;#43;iyF89tqm5mBloqKlLCpLHleclwRax/VEOJuj5oOOIFglFypmZBdBORRiimBSljmCGYFxgD/elEOTgsRgCLXL4oUd&amp;#43;JukRKjOlv/nJwMQFU1BTvO/rc&amp;#43;s4TDlIXDAT9nXeAAYUInQvYLDTcFhhU&amp;#43;8dGpzByGDzNimBwzjVNs9ls2raVfAI2gLXWq9VKCPBG0DoFrpjqoIbGiB4NvIj1dwgWF41sKCzhkRM811xTDVJ05zRVYvi9N8DcL4KLd0CaFdHT/pXF3wABL6BhZEHBaIAp3OEwK0KmyDEjCXoIAcQBl8ZDroZZds9h1dAZeJgVgScXG48Xvw27AqcJ4cOsiHRAztI5usA5Gv5E9M2YCzzdKHmYFTHRuLoEjmZFqPGimF288Pl6SpKnXJTknFejwdGc8PNgkoeTy6cnfMWr0AnBIVompx2krgjhSylas3Duw/Sh/GImYy6f9TWQxpYnQuKOVuT8XuWHh4EBju4OIcbJeVpHsyKyGbPyk8Wvz6RmTryYpfdMxcfT4Ap9wYjTeNfTOrqjeTew2ByMo9GrbBEKHSRwpUEfdbDlMzqSFZFOVzIsz1dVZhicSABZkhfg42lwPQtyXjWONl2wAyRJS48qEMS8FU9UaKgMeIsm4P9xkXE0K0Imym44yVmTSFnmkeZSwFP1I1MuvrIie9GeM33MQ7GKDEJt0Ebcx4zIIV867gMVk3hgLBSAwK9ooNMZoFG0sEmc4oFDkuv1WtKhJBmNA8UsnwGgruubm5tXZibXAfuvLnrE/LB1W&amp;#43;MK70iBj/l&amp;#43;yXh7F9CQgwaBWk0Pd62aGpKMz2qERQHvkRZ6LzwkL0jmjYich8wESN/n7WP/OqeI&amp;#43;dfvN&amp;#43;YvWhdBCaFzknUfjb8YDaAKDb9elb//Dn9t0EbWJoaY6KCSa59qROwXukK7mDSvl6ToVDvgX/7zvi/J6yZYV5yYcrRU7Np3Zy/ewuI/flx8qIvvbgqrh&amp;#43;XMsV&amp;#43;pEkj1yPQd&amp;#43;OLRwr&amp;#43;nwMttqctiwn/4c7M1ptcqsOGRAJBQQj77qFBeRAiOZRqEhcF3lf3cOuf3tTYie8UhmoUkMzsge8Mzd2bOgMNnReo8bxztmnjAtqdtzIsuo&amp;#43;&amp;#43;T47dMCcYV60LOq53zrQsyYCoRYsZjWeKNRRNrbxzlG0lWd8p2pGrjjCF29GJaZXbeXuME4WfP97reENORTXMKdDnOyvug/ptAFWic/9yoLqpMU/Efk1lqgx8q44n00eIPbtkypoRmO&amp;#43;CJrojzO0Cw/7w74NJHjBi6joiDAaAIachViWxHYVR&amp;#43;xrQtOMyyOg4wZhz1XrL4D2ecJuo&amp;#43;&amp;#43;m7nkXVodh01xFIXxfMK9msMsYVBtNDH3H/vqSHVgRO&amp;#43;P5YNDwKgQND2Aj0IATzRfesqg9Ev/eBJ5jz8ObXFVFIKqpJUxqNRhFNG8pkrAlfE0M/DFSns5vfflq6ovK3Ghx48KwJ5IO&amp;#43;54O4RkOqa2uDv3hXvS61HInDPru12K8VsWUlXmh3EZrPgneUnl3JczcRfTge9LCDzz79dFTcrXVTwYpmXoJTV8Mub4jdLaznGOVaqrtdrzs9lrZTDkFyZJSlAnCfKkUsWFWwcLBaLiVUorwZXRCDMP/1VvVwtyqpSgKTycmyYnAJ0CiSZt7J6VWmTUJkDMpJgwj4feQfmORl&amp;#43;UxGa5Uy8KbiABb0r8bbSttQdqcYNEUepwDKoSo0xD&amp;#43;4aKpCIcYTC6EKDxGekjE3EQFookKXipsqlXGfd6Q0SIMtoOg&amp;#43;GO0P4mJz7ufWOCRCVIqXUwuD7CixeWajtFTiinshSHpVM86sy2XUYVJEXy7b5oxL4NSErBbwkJBlzoRGCDsq2ko&amp;#43;dU7xSFhk7T3qzU8&amp;#43;KeiO5oWLISE1oymokL/Gw&amp;#43;H1iX4AXhVRbmw4PsiIKPfSK8BRsLk9UaQx22bXvdiorQoBrNDabDddiiGEsTUwlqCtU4UJiSVM0xlRVJaWj183zueD63FBEqOBBrwh2TeuYtHtFiTbDmawI9bBkV9wyssz572FHmcwUeCNJ0VfD8V4RpJRECJ/4coK8w68E13VdZ95QKX1O7VVJHhWmlBa8vwVpfH1Iko65ChhnfvRV7K9fKJCDDDkISUqBWFaOmlIiLVRPvTdpZXq6A94CDS4OSfL/eSIXo&amp;#43;dcK6BGJ8TglE6907H010zTi5iuFFuWZWaec2673a7X6xSVjERGNLfLlMXOdQCcyC4iuiiKm5ub17HFJv7EpbaYFOmpjfObLqw4btvETs/RGTdEhn1ERBWTcyszQTbHlmU9kUGlT6xOcUWk&amp;#43;5eXP8cmhQa8XeQD00kqLCe&amp;#43;8BVw1On0XJDUB/igevKqdsEo886rfkguH4rFOG7SG6wMlBNGpyQxIgNm/WyIpWxHuMphlEa6KaV9M7KKvueFS0ser4CBACY67nlJawyrvvbgYiqKH0U0RNcmxfT0YppmeqpXhPhzrLVpN57sbbNMiIxOR&amp;#43;95LqAEXnwHBLYOsDBQakhjkJRkFcKoHXG6ip6m&amp;#43;x32ikhBGviw903WsoiEsiynl2k8L0i2APO6l/uhfdfEsE6nz&amp;#43;&amp;#43;SO&amp;#43;F02q9Yj9IZTFxDHDLMDjB4NRDF96UFzF4NhTHvJH3XfS7K4RQvMhFOv4JUbKeRgLQ1&amp;#43;yzKZdq58UW3oAhhYoV8tMjGecS/MP6l5PrEPmZDrwg4Hhfk1yvLUtLTM7Ng3vJHJsCLOjn2Lcsa7ztPaduasb4uIJp9EhzjlR5ttcHyrDA40ysiSyI7w2fn8jSkVuHL/crQsswRNU7teopVeHwleqQD7obGrUW0D1g9VaAqDQYeU4dO9IpIX/LM07M7eV5hAmZUFqFA5bUKqie7JXg3YLR7Y8csjUCeTCwWg5jGcphxfvAGakw0yt8kLYzJmOwZj/&amp;#43;XB9IrQi0Qy9gEddwBxCJZWteAAmZK7AvSAGZCxwgNgJoyNZR9y9vtrml24oQQ76a0jBTh/NJYmBH2RXomSc4ltRfAD98eHnx6zB3E&amp;#43;udRM4DT0&amp;#43;/v79OeqBIZlvaJP3Vv86Owd0cf&amp;#43;Dif7bXh&amp;#43;GDc5aQA6NLmNFIZkOavn5iS6Gh5eds5veBUxdrk9z0cPE2ivXS5HOkVMY4FT0&amp;#43;J2CPpQJVEhKKwADfSbz7tFcHqqWCfxj6m49MgppJkb8s9UXs5iQcu1xlSnEhlGRdpYjI83O1yEsjh4JJFdkzYPQJJr4guhiHHmqShIcS1B2eoccqe1dADd3SkgS5L7T1xYKDr2rRcWypk&amp;#43;APF1IoBH3FtxIs&amp;#43;jRiz6aS10RqOrsWIIxpbMjq/j4EcepkgUZT3a5xTqgeWkZBqXA0Xn7IwqKGdp3VP2z6eYhJWH5QalhaXgKiv58HSK4IOekWMrwTSyymuTZ/2cY3dzQmAnAu4ZieFBMKiDuUOsxkjCY&amp;#43;vRBi4ISTtoBNpB6nVDYhCj4HLxewxZpLwcEx5o4tRNWhBGJtg9UgxHD9Ocxj4SeJgkNUHIyR2r1RqDF4gIUB0l3JP/7C&amp;#43;UxRHLEOCiAFHfP0hd0phb2bHlQVJEirIQk75zzjPMD4PPiZppui&amp;#43;3lof7ACLSmusNHQxJX1/cM91&amp;#43;UBKZh/9pmPRawocyx1NTZ3mpqee5&amp;#43;ggIknA4j8juzgiTsdxiFF2clYaxzEzAS6/wvCAMKwn8wY6EP50ndGyz4oIaijGMEtYAOOqfZoQBjWeBHSQlRU5j06la5aDJfTQOjZuufiXz33LY1845vnxAU5oe&amp;#43;fhmBr6rHo3JLNLYSxcJSAmxoMbMk/RuN4PBocs1nZuGabKYjK1mWGeQx89Udt26&amp;#43;2u63qtdV0VpbWIkKA7r2k5wWUPv6LxNIHjKr8I/2z8uWAmAnh/t97&amp;#43;959&amp;#43;uFtvF1X57YfV7U1ttGYaMHdOT3SRQxKEPCKKJWAi9cbp9cOocra3XqJU7yKYgQAUT0zZ7pofPv3lz5/vl4sKgVzXWg1SMsaOCslO5OwHCZaxdcb1BHIUU6o7cfUrf8XuDcl3T48N4lQXPiX29fHAMAMBRCrEA8GQKC7eqISK/cVpW3KKqzEmJQC7j9iZyofsSCYLx3I5kCLHe6WHVnEeBmccSYL7RYWlzwvzsCBEWFTld9&amp;#43;8r8rSGv3h3fL2ptbB8Nm3LVgsFqKMpqxGeIvslayvZZrjJaUfaSUBk02Ospk3s3oeAmjEm0X161/&amp;#43;out6RKzjAYAIIEr4eYxkiM6&amp;#43;StuvHA1ppafHzd4DZB4CROZrjdYx1U4xGs7cf6ZwPsPd0crhDFKyze7rnu/s8egTI&amp;#43;9VzPfyp3EhZ5mkJXmnbp6C0NmRnsI8BBgjYlvu2Z3lOct6Z1kqR2nUdV2W5VsohnlGmG0HcGXSZrOR7NqsGintpM79jCUZ9EsKk81GAPY2l2XJXcsy1pwViMlXqTL6NuEww/U8zEkANn/kKNJDd9DhedhyMudR4/YQDusvsxuefSel7dem3D&amp;#43;fEE7gaPrbYZMmlsbcs0DueeiwOzKI/ERKy9Qh8YyZhzysFBZOocFsBJC8aI5HChdKi5DSJoqpOSaGa3rMb/ZVarVJd1LZbZIAwLbYMwqV1G01BWbeAXKEiTSx5&amp;#43;UjfEZcbGLNpme&amp;#43;i0chK9wQAqd5vllBMl&amp;#43;vqmreE8pmJoCsQcamdHCVFZqeACypsmniZnr8ZCr9JNtXXBFydDn/9GHXslk0q9ksYX5/VjS5TkYQeriWj1oJKW2ywbO&amp;#43;Z&amp;#43;LQzsrYxbh7XjFwEUObUwtibvPsRQCHCs&amp;#43;ZkM5LrP2LAgyzESBt1jHXHF4IrqkTngWyTIgvAK7YSW/FDph7CrPBT&amp;#43;CA2C8bvhJgZvhKgJnhKwFmhq8EmBm&amp;#43;EmBm&amp;#43;EqAmSE5R&amp;#43;wFRv/5qvcjPFqNZsY6FvbeqofZ8WMucdL3H8Y0&amp;#43;gd59XDkQe4yhHiiWuVLgVNmvI8tmHxScCpZ6DEHc7hmiFTraL3pP&amp;#43;/8rifvyQVahKcQhj4/w9kZ7K2M/SFIhdG5TgFxPG6eyPmhkMFqqC2&amp;#43;r82q0oX5MjlddMceaagCEDC26&amp;#43;nHTb/mQ0PGep1Y4I63tbmtBre48UTb1n2/9v/&amp;#43;Q/Np0ztPnQv/eR8PbjbIh6h2zveOEJTVaGLdXrwtjG0RrEaEsI06Ry4&amp;#43;WBf4cWX//mP9t9&amp;#43;UBjU&amp;#43;pdTvrcKYMtNzCZtUyAKgU/B/9/2//WnzPz&amp;#43;2bb&amp;#43;vBdQAt7X53cfF332sb8uwCwxFVH7auP/61PzvfTf0Lut95wgiugsTlnfnwkVPymgoNGpUzqu2930886GIZyORUvygUmpRYNfTL1dF9&amp;#43;hhYz9N4OXf92673W23267rIjNArdFYS2h/uOv/8P36P37Y9Z64kITLgb65sVbDr94VS6sVKcMVqYvALrTzQ4Ia08CNm8AgeKK2pzBW7EVvNSoI26Lrw8gmbgKNEBvPhQfjRsPagjnVNPdLAOI0&amp;#43;h9//PH&amp;#43;fk3kjbFFUSyXS1Pd7Fp3t&amp;#43;vvdr3GsIhZ0DpPd7vAlzo3MK2wvBcF/uaDtgbXjYN4WDDvg7Dgo8TQyCw&amp;#43;9j2JRazcsiwM6lg28AFAEI/7CVIEAVaV/tW7orJfsAzeJ6o610szzRh3o5EdKY2BkQStJDLtLFJjAKA0uKiL9wvLzGpQfGjfCWBQchI9RwrKTt0WNpaGymBhhvzj10PLKwFwtWVVVR8&amp;#43;fKjrmqsZjDFlWYIpbqr&amp;#43;FzfF511YxjaeYFR65Qnf1eZdbQozaEKGCxlLA6V9/tZ0UgH5pURc9sCvZoxZLKqisES3aQjaK/hO2X/4a/WLVdl7n3ZwXpX6b76pV1VQZbyifYHD1R26H4Gx/f0rNMB7fdCBt1hrTaaGEsF3hqpC//Y7brOgRhMKCg03pb4pNFBPRKZpmrZt5SSvl5yrfukWkG8EIlsmi&amp;#43;p9jbcVZtt/OA6bej7DyNzd3fFRIi&amp;#43;anJQd2PZyP/Sm4FRnnHhSDG2328&amp;#43;fP/9/AAAA//&amp;#43;4GeW7X9Y8&amp;#43;gAAAABJRU5ErkJggg==&#34;
					data-sizes=&#34;auto&#34;
					width=&#34;1068&#34;
					height=&#34;1022&#34;alt=&#34;Entering credentials and other settings for OIDC authentication&#34; title=&#34;Entering credentials and other settings for OIDC authentication&#34; 
					loading=&#34;lazy&#34;
				/&gt;&lt;/a&gt;
	&lt;/picture&gt;
	
&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;The key here is that the &lt;strong&gt;Admin email address&lt;/strong&gt; &lt;em&gt;must&lt;/em&gt; match the email for your user in Pocket ID since that&#39;s how you&#39;ll be granted access.&lt;/p&gt;
&lt;p&gt;Then I moved on to the storage setup. I wanted to use external S3-compatible object storage so I wouldn&#39;t have to worry about blowing up the disk on my VPS. So I selected &lt;em&gt;Cloud Storage&lt;/em&gt; from the appropriate dropdown:&lt;/p&gt;
&lt;p&gt;&lt;div class=&#34;image-container&#34;&gt;
	&lt;picture&gt;
		&lt;a href=&#34;setup-storage.png&#34;
			target=&#34;_blank&#34;
			rel=&#34;noopener noreferrer&#34;&gt;

	
		
			
			
				
					
						
							
							
							
						
					
						
							
							
							
						
					
						
							
							
							
						
					
						
					
						
					
						
					
				

				
				
				
				&lt;noscript&gt;
					&lt;img 
						class=&#34;post-image&#34;
						srcset=&#34;/gokapi-for-self-hosted-secure-file-sharing/setup-storage_hu_26adb747bc811570.webp 320w, /gokapi-for-self-hosted-secure-file-sharing/setup-storage_hu_aa8b396078f48ae6.webp 640w, /gokapi-for-self-hosted-secure-file-sharing/setup-storage_hu_240e165264cfd1f6.webp 960w, /gokapi-for-self-hosted-secure-file-sharing/setup-storage_hu_d1f9739f4ed4b1ba.webp 1068w&#34;
						src=&#34;/gokapi-for-self-hosted-secure-file-sharing/setup-storage_hu_d1f9739f4ed4b1ba.webp&#34;alt=&#34;Enabling cloud storage&#34; title=&#34;Enabling cloud storage&#34; 
						loading=&#34;lazy&#34;
					/&gt;
				&lt;/noscript&gt;

				&lt;img
					class=&#34;post-image lazyload show-if-js&#34;
					data-srcset=&#34;/gokapi-for-self-hosted-secure-file-sharing/setup-storage_hu_26adb747bc811570.webp 320w, /gokapi-for-self-hosted-secure-file-sharing/setup-storage_hu_aa8b396078f48ae6.webp 640w, /gokapi-for-self-hosted-secure-file-sharing/setup-storage_hu_240e165264cfd1f6.webp 960w, /gokapi-for-self-hosted-secure-file-sharing/setup-storage_hu_d1f9739f4ed4b1ba.webp 1068w&#34;
					data-src=&#34;/gokapi-for-self-hosted-secure-file-sharing/setup-storage.png&#34;
					src=&#34;data:image/webp;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAAB6CAIAAAD4VczjAAAUQ0lEQVR4nOxdW48bOXbmIVkXqdU97RmvZ4MdTPYhyCYvQf5BHvYn52fkdZGHIAgw2QCTy8brS3dLqiqSC/IrHR2xSmq1umWN7TqwDbkuLPKcw3MnaX/66adXr17N53OttUpARCEE/q02wBfxQ96Svyc4BkIITdM8PDxY4N0517ZtCMEYAwJ477XWlICRjuvOOSIyxmitQwj8DEAnuOjoPg8gIq21VUp57&amp;#43;/v7&amp;#43;/u7rz3ZVlqrdu27brOWlsUhWRwIuq67v7&amp;#43;XilV1zUQrbU2xoA8xpj5fF6WJa5McBiIKBKg67q7u7uff/65aZqqqpRSq9WqaZqyLIuiAFptAvz37du36/W6qipg2VprjHHOee8Xi8WbN29ub28xey49wF869AQIITjnmqa5u7tbLpdKqfV63battVFAdV1njKnrejabLRYL4Prh4WG5XIIquLJarbz3bdve3Nx47y89tM8GLFh4sVi8fv16Pp/jKtiZiLz36/Xaez&amp;#43;bza6vrxeLBUQ8nsTMAMGKoui6bj6fV1U16YDjwUKILxaLsiy7rsusHe990zTOuaIoZrNZWZZEdH197ZxjNRJCaNu2aZq2befz&amp;#43;fX1NagywTFggW6W79lt0AAWEcwepVRVVdmTEGIhhKjWbS/Whq1BK0y6gZETQrAuAVA8fBQ8zrf2CXdYpdw65kcGaEc6GV859KwPu75zjnyOGGZUIvUcpg2C9/nHV0gGnvrSk7WYDp3zTQiNi3d0RHe8CbwTKUtUGDInEcEF5UOAR2dEP0CDoVOdwahPvu&amp;#43;x4TOPtv/oY5JRDvfzeNEq/SoLDm29umv9h8Z3IRginciQ/sSHZ5YWylSG9BNp4INyPrQ&amp;#43;WK3sLsd777sEkE6yT7C&amp;#43;2AyDapGREr7OhOTH2CXkr/D1IY7wGGQAjDr&amp;#43;imxBNgKjA6JYzmPZuIwO4AEtIEOR3YxKAbkhKB//UUFR&amp;#43;jdQRCKFJEiehn70ZvRi0hOr1Wq5XDrnJAEQCwFttNbQT7B38RjG0LYtKMQEcM7xY0BZnNmJwGVZWmuBF9wF&amp;#43;vgxhGGKogB&amp;#43;s7gL7AtjDHumTdMwI3MsR1JORnQim1tbVVVd11nYpicAKVVotSh1ocklhCUZoVgKWU3FSY5tFF86TiOdf3c7PJi52w4lzw4XiQiDB1pxCw2t12tQDihgzY9nwLbAHVx9IA48CLyjcWCk6zrma5Bc8j7&amp;#43;iwgNLED4RmgN0Zqu6/AizxX0E/0vy1IpVRQFX98hQGydqNa6MrlqjA8nHapP0sOkgP1Ey91bxpiqqoioqir0kq9rrauqYhHEMgq9B2cVRcEzAEOSwgpczBiEx87iC3fROOYEuzUszRh30nwAEwChPJ/QK2Af7bCoCRuw1iLINuRiKzC1YfshFp8BeDv7MLoOjuBe8q1Mto46EIxE2SwLX5Yh3M7o4Ec1Z/YuyxkpPTLNzETdp8yZfnsJEJLCZOEzxOBzIOxRBdIqHX1xSLZn9&amp;#43;VpIFXo878&amp;#43;2kJPAO&amp;#43;DU8GrQDwLNnIDagCS5MkDgFaPkkFl6p/5BTNXMq8Uu5JCbId8AkpIjj7Slj0Ntmbog/NrF50xZlYW34WmeaFPMENVUF0InQ9WkRkL0MECgUblQXJgg80&amp;#43;CPeyLGez2VCPnQNYrKMb5/uQZdOz82rZhcZHfEUjlBQEBKnoB1ityojCp40cMyD9OeT3MsaHZj6uwyQlorquP40s&amp;#43;mSOulUbX3dmlSbd&amp;#43;uASymT4oTTJDH26OiBShhRpitgbuRuhKArYQqxXpaECGsBehCEBqXVuGuDro&amp;#43;7by0LvB1hNxlBtE7duhBAlX6yPRpzmByhlNOl&amp;#43;Pu3eEtYFbLt9jfBskA7tp&amp;#43;FQ6X6f6RPsB6hewIdxM&amp;#43;jk74N&amp;#43;Ofp3I0KHW8hE8D5cvDirct/OPgN2Pzv6cwth/63T4KWGdw40yQjV8ZHBIRx4cWOGBhV82LoCYyFoeMVo6XirNPRRpJFUj3SURufB0PFhREiFwR6s9C1kI1njo/7UcFLylJKPSUshG072RfkVfms8FBGU6nxY&amp;#43;bDsgg8B0gjhOQ13ICito6JO4eXoK1RWl/pxGoT0vAtRE5iw013nXNd1cAL8BjJ3kS0iDtowmlgzI8yAegBuYV/mRwZQ5Sck1ji4xhSVaM0ILy9Kr03KLu5/WZZVVVlrJQ0s8ORCeGjV&amp;#43;8Y1Lmycr2h6puBLxGOpqbbxtcaFxP6hOGYKxJYjdePPXWMa2eb1eo24G4BdLWABI8QDrA&amp;#43;5VqNpmhACoowoHmjbluMzbC9JnpUxS6Yfomkycoloa9u2rIHQpgxNS6qAk5jHOSkreUVrfXV1xVGpXQJEY5Eqo2ZWW0IsGgaMwoQhir5YoQlBBUyOI6Ug5xWy66MhlIyzZDBAciJPZA6UIsbJZOPEAJd3cDSG3W8giAnAk4xnD5cHorWMAFnpAvM&amp;#43;nmRbmdvkUHmGh60ZuiipsuRDb4mS2jhi1OPRYELZSJ1CD&amp;#43;2aMSBlFJGOEmxohvJoudPDpJ2c0XKOW2vhFTOuWYhJwcKIlspDYg3h60y2SN&amp;#43;QOylTBVm4kN14HtRQc7C03BeOjviFVAk7CJQogxKm47PEvTSjoRvQowBxCJnzkqEhYwyzJydPgH1InufUIB1jYkpdesBiPtJaHaruHTP0KJyemhUY7RujWGYTIS6ZJGBPrsbg6cxRudFRSdgXc360RmZYd3wOS3cTjk56OOQR6f4nZyPZCdiH0yHwRJUXgXpUl3J4h&amp;#43;e&amp;#43;NCjBd5gTLBA4O7avACnvw/4HjvSoz&amp;#43;sJRzM0hLaLFg5HgWijOaVbkMJEwWgqj0tSpjRDdC90SvRnQ4IuZatgaHTvNLXrCkhFfVY4Zq48B3oztPPhrg0fGt/6oHutS5ai/Y4ZYElpTa2L2CwN3ZQ6mvaP9151PjY&amp;#43;rIqQclM6PjIA8GhJyFmDBLJX50tC9GYoJdO&amp;#43;l0Ww3yl6XGEjhiILb6TJS30b0oM9MrYfZNHHsAYSt4oEjyqA5/ctK4p5ccirIrqtvbeNN1A0/sjQRgRFpyEXKaNwoCoCwIYQfCiII9QoSJOU7UvYmmyDnjs5w6bt&amp;#43;WTdblWE3vsdIDDdjbNCH6eED1RFZK6AzHrDq5JqmbEszaFTh3ws8DKssyZBd6sijnSungIbHT7iCWN2Q5Kwk5XFD/DwsNKNi6ie1JnjgR0Rtaf/LwVWfFJc3v&amp;#43;5EzpyoCoiKwh8vKlBEO3chtC5p5oIR6vg/Nbkp93EALK7fYrx6DqtA1URWQzyJcf0cpCFYM8BloPGqy7cp3A0ZgPUZm&amp;#43;EbaLKhabSRA1cGzJjad4cjqiKOK3fx&amp;#43;dGMnt39PkDTMAZ0MwuOK3bQ7OtnwEuqLULD230A/DfTa0cnLLkAaiQgtI6FNoivn&amp;#43;EI7avKoKro2WcKxP9Q0tUVhOxMsgiccNgnCQAR/ek4y11PreAHzI4imfwfKaipA4bkpwn&amp;#43;rA8tCeAIVXb&amp;#43;HIXpVDgsDOLos5GIZWqdKMjZkbNmhGC762KQInrw8MDQpIcVece88gZiVnBLFY1z2Yz5AxgyLJu5yprtuXxUTgQTC2sUEdlNT8jo&amp;#43;Ky9BPPdF0nUwUcLJEPywnK7FUUxWKxQI30DgEoOrpkLNXGBKEz&amp;#43;bFNtVYvjhA6PdJg2lcVwQjlSCcXGGNszCmMdBkl5vJmlAwxUjgQDzMJbQqGIOZiNI7lhdLVYI5GxAn9QeOga5OAjVRZ8g5gqss69SyLsEMA4FofCC1s61TUUw2hfVURGA9sUAyDI88oRpMZAkb6UEYhKmetreuasygsalDGLAnACYB&amp;#43;/KluWbI8y0YUaeNheIicvUC3uVo7S5Axx8hsEpYX4FsjBHgci8&amp;#43;shBgEgnicYC67ARSLc2E6W&amp;#43;Jc/F0UBRgzqwjn5RjgR6wvz8rEsaZcMmO2JIaFGAPTHn3gWKx0WZhyzAGyz1rrWQLs4DBOAJ/iln4jeYQO6P0DztE/1R7rqyJoJD8uVynxYgq52IEJwPEiLJKtqkpSDoh2zq3Xa7zC1Yy8diNbZ8ALZpBolCl&amp;#43;FuJYCcMqFzRgB5Dniuwk3pKWBa/bmc1me8vTYYY2TqW6xODDFum0KVs3WtVG11blKbXD2OeqCMrNUMifuq4hJVjmgps4l8umC2tOzACZzmQ5wJkcrKGQdo6s&amp;#43;kcLLKak/gQt5ZJp5nG8C95nAsjcEQ8NDUqVPiyG2CFAfMdHM3TZ&amp;#43;bULjeunAvLpWOZYGbouldHaPCn&amp;#43;yFUROveFh4l4Xv/GWeIsHslqTdqmrJAhwdiU4joGtnDYKMryxlkqmAUIf05Oo8wh4KZAtmybGFnqsi&amp;#43;gZEPYurhWE1Dfc30yXSIBfLzFpYvHOyFBrDDIAHHQpml4FoPxITS50AGrsZh9eHLwIjIMmBc8IbCKV6AqIBBgffLmC6wSYClJS1em71kPw8wFy0sFwNYRLrJ&amp;#43;HqJiH9vah86bzpfGe6UNRRvfagqblRpEKhGdQL7GBffEnVAwsi76dV6bUG5mKliG&amp;#43;VEyDmccebEcG3PM13Kmc/YYKoEbkVe4/KRfmJ6Qzu7C0LFiDQTXicPgnI7m9DXHTVkYPklP2j/8aV2vVrZSnHHh&amp;#43;mjwHGeKaa89eQgwvaym72bFj7fmO2MsKTbLYJZwp2UlCCb&amp;#43;cEEAS6pMiOEujFH8zt6Snl22Jid7niUhawVeNJgZrNIsHq06eZwA//wfH0Ptg10/GbVHAxHNrP771/Xvrb2uLIJIUu&amp;#43;xVJXhXx7VsLUTojESL1y8duSL7KNksYphaekJMTv7L/&amp;#43;zXFvdGdebxLQTlw5bN/gUQEDJaLoqtFP0j9&amp;#43;7jot1B5VlWXz0tPEc6szTQ2nS9Rv250W6Z9&amp;#43;v3dI5b31pqTTRXveie50Paxda/3jpxxhE0/Oq0HNNjVMPHdrZ3sbwoIqz4jJYqGdanHUk4lhSnTUpZn3COJGaW31TGasJtbQpNEcPrX&amp;#43;76trkoz2VAqSCVbQozOu59SGM7vXBu6XB2mGxC79RlsF&amp;#43;YshUxdlzwpHgimv/lU5pdyLVeWLf&amp;#43;ckMwLG8/carDK2wAQ4ZzZG4i6RrsjViZ0zIlIa8IUfUOv&amp;#43;xUeBTTbRKhv/aRdQl2/SEGZDacf7Py640lDkE7HzBFspW5MpNST/ZgkUJMid8XgL89qZoy9LbQonaESjPyJUhfFfrk/Uw2tGa5lb/&amp;#43;souCq1FIoH9&amp;#43;KGsP3ci8FGQudKzdsP&amp;#43;/seFmS10WcPK3/ZgkwvelKKcBn1OpzL04zfVr&amp;#43;eWl3VcHMWPwqfpm/2nH&amp;#43;bzxaKqa9L65VfgbcBoui7t6ytrj8kkf01gf1gUNzdFVRcjnkX6d8j8TzLSt8WE1lRWn7DhxJcNtjBUGCq18snu6sXfJg8QUixikxno/25iT3R4luLxPnyoyW425ZpAgt0K/kGMV0Z9swBAz9cHmybpV1/CkvksYFubz9mybO3csI78SW5hFnyfIIMtARhHx0S7jkfohPrDINeI0Whl0ovARIN9MG1zfmHgRXrhtNL7Yx6&amp;#43;SCzhc4EtAbLqsNFa8OziMdo4K&amp;#43;6cIIOcANLyYcTJpeJy&amp;#43;ySkuQ/TgMsIJjKMws4S0Yz9pQUpd8/ghUTHfCCr4Jgggy0BZHXR6PpQcHGWtj0GrZMlegB2CHBAYQ6dg&amp;#43;P9gBfq6pcJ4zUH&amp;#43;&amp;#43;BkbE5k2AdykV7O&amp;#43;y&amp;#43;ItUkD74MdKyiLvmU7Vp8GXOP3Er39AoH3jvZy&amp;#43;1ou7Xv&amp;#43;UvQhaSeQsHMuSOZYTYL7E0BuhrLf9FK1aS/Y1BcJh8zQF0HZhPfD8DQz9GSYyLAPJuPkwjAR4MIwEeDCMBHgwjAR4MIwEeDCMBHgwjAR4MIwEeDCMBHgwjAR4MIwEeDCMBHgwjAR4MIwEeDCMBHgwjAR4MIwEeDCMBHgwjAR4MIwEeDCMBHgwjAR4MIwEeDCMBHgwjAR4MIwEeDCMBHgwiCWKJ3axFR2ewDG94oUv3H8vOo8lmCrbGsf2uyaFeTL273k&amp;#43;n2hTTrZ4eukxL6VPz4o573zIyvvzGYr&amp;#43;n77&amp;#43;saF&amp;#43;4fuw8qvuuBxhkM6MkJTf/pR2ty1X7iBsyGDUj4dOVZZejW3r2a2Kuhr2w4u7Rswsv4qbTmvlk339n59t&amp;#43;qck0suVFWYb&amp;#43;bl7bzEDqHWh7Bs3M/3/t//tH770DkfWhf/eJ8ObrYah6i2zncuaFKF0Ta9ms4WDrcz&amp;#43;7vv69&amp;#43;9mVlj9x2w&amp;#43;qXODZxW0radc1GA8BaRROSC&amp;#43;u/3qz/88d0f//&amp;#43;&amp;#43;6bbbfmqi26vyb//q5u9&amp;#43;c/vNLHK/DQmVbx/cf75d/&amp;#43;9dG&amp;#43;LECU3nWxcoobu0EX&amp;#43;tixd9UNZQabTRONgh3F&amp;#43;5N9dF48LmuIGvBcD&amp;#43;XeeWy9VyuUwnOeC8e21t4bX5v/fLf/2vP//bzx87n47l2RyU8d2iLI3&amp;#43;zbdX17VRKlgc9TUv9O3MpMMZIhZBA7eZBOlkjdB0ofOBlEr7/OmkCcLNzF5XpjAvsaL184OAMz7evXt3d3cfgre2KMtysViYarZsuvcP7YdlZyITm6CiSuh8&amp;#43;Ljq7tZd63BopIrsPS/1D69MYfX92lE6LBjzIDI84fwdglbp0gE/Wm/VSGX1r67Lq8pofcgc&amp;#43;kJJs93Cx7ntkX3eexMCbQ7hiUxcaFLUalKty3b4sURUWT2flbfzAvum94ZP2G7jyrtWsqrhXaAxRUp7xiOPf6kQR2yMruv61atXs9mMT5gpq4pMcVW719f1u4eI1CLtRe&amp;#43;D9qW5nRe3V2VVpENZFFkQqrJUFSdu1g&amp;#43;18/Whvz&amp;#43;Xbz6vy7II4Ya3l9Rau6C&amp;#43;9/of/vrbX30za3etoJtZ8ds31zezUmvlVbDbDZieg8IjlsF/kevljdE42Wxohr4xti7t3yTTRXhRUWAsZsWisjgfya7X66ZpcArTWfkYe9Sf6VCMXxSEdFpCadW3V8Xt3GZHlZOCTvVt0yyXS/vx40cclXXW/TQwMT8BmX9RwPsM71xU5JM4WC6XHz58&amp;#43;EsAAAD//zjU41b8EACUAAAAAElFTkSuQmCC&#34;
					data-sizes=&#34;auto&#34;
					width=&#34;1068&#34;
					height=&#34;1022&#34;alt=&#34;Enabling cloud storage&#34; title=&#34;Enabling cloud storage&#34; 
					loading=&#34;lazy&#34;
				/&gt;&lt;/a&gt;
	&lt;/picture&gt;
	
&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;I&#39;m using Bunny&#39;s new S3-compatible storage offering but the setup should be pretty similar for any provider:&lt;/p&gt;
&lt;p&gt;&lt;div class=&#34;image-container&#34;&gt;
	&lt;picture&gt;
		&lt;a href=&#34;setup-storage-creds.png&#34;
			target=&#34;_blank&#34;
			rel=&#34;noopener noreferrer&#34;&gt;

	
		
			
			
				
					
						
							
							
							
						
					
						
							
							
							
						
					
						
							
							
							
						
					
						
					
						
					
						
					
				

				
				
				
				&lt;noscript&gt;
					&lt;img 
						class=&#34;post-image&#34;
						srcset=&#34;/gokapi-for-self-hosted-secure-file-sharing/setup-storage-creds_hu_4a9ab3f19731f8c4.webp 320w, /gokapi-for-self-hosted-secure-file-sharing/setup-storage-creds_hu_ce2ce7d71cfaad31.webp 640w, /gokapi-for-self-hosted-secure-file-sharing/setup-storage-creds_hu_6af21c8a9401dcd.webp 960w, /gokapi-for-self-hosted-secure-file-sharing/setup-storage-creds_hu_af445b2384886ac.webp 1064w&#34;
						src=&#34;/gokapi-for-self-hosted-secure-file-sharing/setup-storage-creds_hu_af445b2384886ac.webp&#34;alt=&#34;Configuring storage credentials&#34; title=&#34;Configuring storage credentials&#34; 
						loading=&#34;lazy&#34;
					/&gt;
				&lt;/noscript&gt;

				&lt;img
					class=&#34;post-image lazyload show-if-js&#34;
					data-srcset=&#34;/gokapi-for-self-hosted-secure-file-sharing/setup-storage-creds_hu_4a9ab3f19731f8c4.webp 320w, /gokapi-for-self-hosted-secure-file-sharing/setup-storage-creds_hu_ce2ce7d71cfaad31.webp 640w, /gokapi-for-self-hosted-secure-file-sharing/setup-storage-creds_hu_6af21c8a9401dcd.webp 960w, /gokapi-for-self-hosted-secure-file-sharing/setup-storage-creds_hu_af445b2384886ac.webp 1064w&#34;
					data-src=&#34;/gokapi-for-self-hosted-secure-file-sharing/setup-storage-creds.png&#34;
					src=&#34;data:image/webp;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAAB8CAIAAAAuDC/&amp;#43;AAASQklEQVR4nOxdW5PryG1uoC&amp;#43;kpLl5j9fHLleSyuZSSVVe/JC85p/kL&amp;#43;YlvyVV2bj2ZV&amp;#43;c8snOmYtGEsluuLpBtloUpdFoJHJmDr&amp;#43;yZ3VIiiIBNhr4gAbVjz/&amp;#43;aIxRSgGAGNEjnHNVVcHt7S0iCiGISAiBiADAn4UQqVZ4IwXwkXFXetioyANBRM45KMvSObdcLheLhRAiz3OllLXWOSelVEpFoTOqqloulwCQ5zkiEpEMYLUBgJSStTj0Db4DEJFCxKIo7u7uvnz5Yq29vLzUWhcBWZZprVlR/MgbY4qi&amp;#43;OWXX5xz0&amp;#43;lUSklEWYANyLLs&amp;#43;vp6Op1CwNA3&amp;#43;A6giKgsy/l8fnt7u1wu7&amp;#43;7uAGAVoLUGqIeIMebq6urm5sY59/Xr16enJ5avlJI1sQy4ubn54YcfTMDQt/Y&amp;#43;oNhoGGMmk0m07EqpaHBWqxWbIz5MCHFxccG7AMAYI6V0zq1Wq&amp;#43;VyWVVVnD9GHAKvgCzLPn36lGUZy5Rtk7WWpbxYLMqynE6n0bZcXl4WReEnkMbiV1X1&amp;#43;Pi4XC6vAnjmGHEIwDnHVp4/xB38mV2lqqq01sYYnl35SJ5y48FFUVRVZYzJsozn5J0/Oc4NCbyJ37M7Oj8AkPqdnYfx512HQYNXX/OHggqmxsuw/r8QnRKqndYd4kuHTnpYc2a/ARGllLx9VEOEV4CXmhDWCVYFCoGbTyr4LUf&amp;#43;AIX/IYAAwDCSRumn4DhLlI4eS7fwLgwpBI0QJQ4gMgQjQeKLJUckKiJHQqFApM1dlBquXWBtfWC1KX5IS0fz0t1714ZkUIBsLLkEuNAoESTtME&amp;#43;7QUI4EpXzD75OtzcOblVVLSKEjRgR8YTPc4/Wmt2tU97620DtL0qAXILTaImCwfEjAMLjjwJk&amp;#43;PxS6TPYfLUsGEd/Dw8Pi8UielYc1iEih37YwBgzm83yPP&amp;#43;Q40CxkTFSXGVypv2DWE/FUAscwKtHvdz&amp;#43;8HcVggw6gPYuiMRfynawlFOfOP2c&amp;#43;r7nQz&amp;#43;/wlDNQwoZCtox1fJQOALNF6H1fQBQSl1cXBhjIsnKCkBE55y1NrqtiMiRHftX/UTa1Je/UJugWkpn&amp;#43;5ntx5&amp;#43;JDeY8to9PN8YxkW5pfTgH&amp;#43;uF0awVQ8Fga8xOx/n04Vj208Z/W2SE&amp;#43;7/zEsS1qWYDoLLU8ImbLTy6mQ3yzE6L2gipHq4oq/mm&amp;#43;HQqGO9ycQhH8ope7oT68IOcneSE7D2jcIbY51tqqqlrPeKqVOHN4t0prJmJPq4A4LZ3wnHtQxwErS3eFeyqdpfUjy76QBDFTeJlh/nKTGOIAr10jYdcN8d3yIOCkAg//SPa1GBH&amp;#43;Fh/Qmbl7JXpmc9e0JQmyRKVbKwDCH4XCILljrwp2u698qzwZcG4nfdIjARUJ2vqEjSFihjydw0&amp;#43;FlrLPitoNzSRcGzmRuCaGGoAQmURzvBvqR5LEDTWwrMuy5Oc9hmDp855aG/aOouijdFq6OSH6dkMVwlTDRHXfCoZw7IhLWsd0W1&amp;#43;uqurp6Wm5XPI/Y25ZCMEzQUw2SCnzgD5Tzb0qgCUlj/b29wKSvxHR7hdFEccBpxyklFVVccKHnRyllJQyy7KeI&amp;#43;H&amp;#43;TFAko9d0NIgOqTXHHBE0bLm3PhCbTCZcEsA5iZjzYaIiZSO01v1Pj/3ooHZDnaMi0tGBe2hJGRpmzREhAFv2Z68uhhctFo3NS57nWmuOAyIRFM166vuzGnrTQWuOOStqN7RwdLdy88oRiUBH1xFANEsKQYGonKiINMJUoZHPWywKPqgNFLfcCgRY4mxq&amp;#43;J&amp;#43;7brh/Dq5XL0iEbMzS0mPhmDpWzU&amp;#43;r5jnPFU4l2CBQkiI/mJt2QlgS2BkKN4FYWZaImGUZV0gOS3kOEAewF3Sh/SCPwTBRvZ2lkUnIJDjy0lTeLzxIRvXcjiC7ZBqd0aenJzYyb6FEtTe&amp;#43;j1HHAVrCFeBMexHzj3sFJDy&amp;#43;9&amp;#43;WDVlytsMM8JhBSQMgHdB8e8y0x6d8nFdyJYSJhCQIlaOogDECsPR&amp;#43;RZO4Pk3&amp;#43;tp06R8kzLszFbnpSFHip3PwAZt8am2yO6Pp&amp;#43;Es&amp;#43;abLMtysVhYaznaYsJZKaUDhk1A9jYV1Qpg/9I1bv42&amp;#43;cwXw0&amp;#43;GNxcHB23siW7L0lq7WCzu7&amp;#43;/LsjTGcEWwc05rPZvNot85yCDoc/yp6CzOK7esvA4wEDisgmQO8P9mSk6hn5B158S6CfKTtj&amp;#43;nxA4dMKUspeS/XIWX7h18Qu4BdSBWOLpfubvCVs7PBzEDXHtBVHNqNpjHiULMUB0QiZGo6WgNQm/uQsTJZMIhLj/seZ5HToLj4fPd9oHoNSUZaOe6AAIDE41hcgZY5wYoDIztDPseQDhP6xsx0xv5ZA7E0ug3EqWtL247KmeyGP2lJENVBNxkcqaRkrQkc5nhI/G1cFpWheMPuTamo6UXd4fO&amp;#43;BQxJbm9K0W6gopLibdzAycR2QBeEAdcEiCPwufZeLMYCJLi0QNTxLUKu&amp;#43;joNN1YVVWsKE15mO1qbaYr0jRyFPqpKrcGSElu1I/Ef58InXT0em&amp;#43;gRTtl3WlwYrIsLkFIMzYnMUTDBGIpHc0AsWGL1p9fR0Rv7GoyX9s0XJwMtpdsdobK8ciTiG&amp;#43;AqgjnqAx0dO22Qz0PMyMEDQnBTLVkvvoAPQQG258UsaMqghMyMRCLk3NaKJfyE2lisuO3Ti21XuOAwtFD4eMAGyIy2VRHs&amp;#43;MvQQQazm&amp;#43;fSJgqzJU4ZBoOEYawjpQAJdPtxIHY4&amp;#43;NjWZYc&amp;#43;jIPwRaJZ4Vo1nl7n1nJvlOSNlSmzCvHIbEQnMgNCggZGBeeZQlAGhWSphcUSwffqf148twbRwAA8Bo/rbVSKgZlUQGTyYSXCH6wtHDtBelAR2tcs6E8JaeVWiFI9jGwkSD3VJskCIW9XpnbUTOXPfOCy5h8L4oirQSNrlE6V/dpoHvQAczn8xYX1ELindQE9YuKJKj&amp;#43;IkiJaSWhbZBWQbMVina/VYkVyyaOvNWXSDN1cM&amp;#43;K2gRx5ciBN/eii4KO4miR3mGMquKUuyvi5ZkjRg&amp;#43;iq5VFK6ucHhDn8GfFul2Idz7sW9ALWxVap0U0Kek42HXbuyLhVhI/ajGtpo7RcqrjN4I1HW0b67pL63sSW3vA3Maum45h1HYgli5CbpVGpwMlPSwt6k/PmVb1PmuLBgjEmI5eWiotcb1rzArEi0GAXEEuxYtqpDcW6XXspV2c1yuH/3ZeNx0rz11zf/ZnHYhZEsuKFpUrLLHIAg9a3wYFN&amp;#43;mSUIE80P9h7FmkFy1Pep/plHu&amp;#43;fMB&amp;#43;HbTG37kRlygJjcKG4Eo6wQpAABLAlVUSQB0lkM5FeuwFrVarsiwjJxqHAqfpT56VfOnV95iSBC7OxUwFTzRJTK6NeDjmkCRMil2L9Pjx5wYrsR1F9DKVUrPZLDLMJ7/n56651zScitU7iECNlDqDXHi5J7RnkR67JUqp2KKF0SJ8hsqL9U1FHEFzvgjbZ&amp;#43;bi3FgbykEviz4&amp;#43;&amp;#43;wNmJfteJcmzZU1&amp;#43;biZhXqmYThG2UpLpwpg0Cmv58tvu6X5mtJO1PvzK&amp;#43;4uEeZHesqLKeQVg7cb53RJFJo9cpR3paJ7S5ZYxTzNiHOLGBz/GWfzPuIay1aSo5den0RxTTOm3WOXPinWIVZIkCkv3hZ2XJJpEPPNCecgVT3Vg314OpqMrR1pCZ8wdy7OKouB6CGbiIh0dC7bikvnoNXE/idaEkfYAidUurF2t9WQyeXZVZd8pySTtBUI0gZiXWqjrB3TeDTomLKHk7x6kyaxITad9h1o9C9KccGysGddNxlqKOLxancDi3p2X3XMkXDQLU3MFXtxBZk6QVwBRFgxH4QQedVmcawuBnj&amp;#43;h3CyRSytzjTEcCkS7wQpIl&amp;#43;TFBzMGcSk/ykfGVa4p2RcTn&amp;#43;kiwH2X3Wck/NNdkSxlqbmH8Myz&amp;#43;&amp;#43;9uV3B0t6b1zyBe5eIT4EwiCyzGXLFtgUi270FsZhdVmO7as7jlQCriwMs4FdR//fSwvbWLBIXdh&amp;#43;wBy0JMNf7tTf6HzzLzZnlDQG&amp;#43;z/rA/BfznHx9EVz8USirR24FZV96mE3xaiXCdyX/9Hf3&amp;#43;Kvt8YYyMjXC&amp;#43;ierP/VD/c7uC0JJJhW4Q6zEea6EbRXCdhAjEtSXxrKMADYeaSXwo6K&amp;#43;vqqeS3Buo&amp;#43;HxTUKuKAPxkO5GQKxSBQE5CMD8BcG0EzwSWfMQwL13RLifcAgjjwwh5k0uNwDFBT7f1fqCoISyNhImC0MDPG4dMgkFABAxkdVid6vVROXpEWzoqLbi9pgi4AN2fFjvD6a2uCC/GB7Bgqub9hY/FMMjEOj8mHEGFUNfkEjkucgZhnSiDY32Aa&amp;#43;SPWJTuK9hctRc/saNpbYeTfggaOu&amp;#43;MaYN&amp;#43;oL7LlQjFI6HYjYAEsF9HXhM2TsYkLNTzgRTiQsNEyWdFxyS2C13ycwk6GQnOUVnasEq&amp;#43;dM4KwSsvWZrrFiibBcLNYrWaV5DG6FCuclYRnRfq3/9q2tziS3KN4iDzwaeVIC6M/Kfvsl/lkhmhtFfEfP60WDxF4iEsfyLnyLkNijSGZohSKZll&amp;#43;WSSKyV3cOfvBuo//vnm3L8R1h/gr6f6dzMVBsFac865oiju7&amp;#43;&amp;#43;XyyWif6Ib9sb/KcuSSDA5HZZ0W46c8zy/vhZZZj7ApK7&amp;#43;7beT8CFmf3c/TbwnuefDjS8CGC0nRrZIPWYojTGBQvBPN/h5hzhAZqKUJyC2&amp;#43;A3et91PoS6Mn3odCcddvIEaM13bYbEOmaA2HkI0hhi8l7RHFNwIMNADSqaUKjREkJrNpkrJWAkaGyTGDmZJ/XooWm10prU6cMH&amp;#43;W4bi26KtdUJpdUZaVBPJRRlckERhHWDph5O0ikS43FP6gaHVdDppUigiKj3hdnioweYkDFyr&amp;#43;N6HwsY6kxZXtcdBfP1ts5EJVNrOX6ENc9dxDe/dB42L9OpxvT0CUmaxpaFDylfTcrbOvVLC0RPpO5d8jfUIOKIA5JCn79lqwI8hx6ORVkV825IYCEnf0Jfk7UacCk1ZSlfT5lOte37lGT42VJR&amp;#43;fAdbLFqOL4k8&amp;#43;uzRl31rVflvBxvFImlNR&amp;#43;xjO&amp;#43;KsUNFNjK8vbC01eQ3eeOL3LWBdVHOmSfhjhEvnw&amp;#43;iGDoxxbhwYowIGxqiAgTEqYGCMChgYowIGxqiAgTEqYGCMChgYowIGxqiAgTEqYGCMChgYowIGxqiAgTEqYGCMChgYowIGxqiAgTEqYGCMChgYowIGxqiAgTEqYGCMChgYowIGxqiAgTEqYGCMChgYcYlS3ajvONQrIb/5JY8t0MZ/GoBIG8Ao7ixZWCoqZ7l1evPmpNgqZt2eYF3FTkmTdZAoNL9dqavH7gcufN/Vc4qa12Js90PiJnoqNMMCrwCip8L9&amp;#43;bH8/3m1LJ0jqhy50KRMNl3kwkYvcoS6g339pmZHAkAjTA1&amp;#43;mqlfX6iZke&amp;#43;/fcOhCGvrKL7QZmOXgEXpfnmq7ha2sOtWbSD8k3o91d9fmotMek1YJx5W9qcvyz/&amp;#43;efG4tJZEZamwjt&amp;#43;nZyRKBB4ilXMgwCjQoelPaV0Z2ssZBZ9m&amp;#43;h9/M8k1TrT8QJ1MnkHooFOtVkXoOeWahUD&amp;#43;rwP8Mrf//afFT1&amp;#43;Wc6&amp;#43;B2H/KP6x/9/30D39zlevcK4CEKCr39an6011xv7TcoKyovA6EEEaiCW/OKK0rwnv2JEKmUCFYrxVXWtIIlaXPl7q0FBtxpFf5Ua0Q93NZLlf39w&amp;#43;r1TIsK0UANMagzu7m7udfFv/7f09PpeNOL/yytlyjlvD3n6fcU1ihELnyBuT31/o6l&amp;#43;HNy7VwrfODQIfu6Y78I19ZEiC0RH6hfBXe&amp;#43;yNA3EzUzURmqqOD24cUfWwkws3HHx8fHx7uhQClZHj9x0U&amp;#43;w8rCqnL8UOpgmCvnn&amp;#43;zST7cUzZJChKuJ/IffTL6/0IV1bEAoNIxzoVVMeJl5PROw0hDCZAu8xU84mYKbibpqOpJ9S4DwTkZtTOacbdZWS26ooxGUBCead4qHlwKosDEugVcIItf4&amp;#43;cp8utBE6&amp;#43;Y/aXdc3ri9JW5kR0ghHPuigfcHtrRSyskkF&amp;#43;JXs9ksdPYKb2zUBqW&amp;#43;JPf5On8svY&amp;#43;DzSupHHlp//Y6m2WSu00p7icGQXyvv6ZvCtxzKs9zYzQlr8ELbUABNP0Lqs832ar0HntswW0UfH9pvpuxFRdwd3fXj6XmXv8frGcB1eFrOxQI7VfFqnJs7tNdiCJTmGupggbU7e1tDy9LSd8gctYfejtoXslDqqUdK6oK5qu6M4T6&amp;#43;eef&amp;#43;VUf59ZBfJfmR/WLOtERKTfND/l9H38JAAD//zrFg7DN4C9GAAAAAElFTkSuQmCC&#34;
					data-sizes=&#34;auto&#34;
					width=&#34;1064&#34;
					height=&#34;1028&#34;alt=&#34;Configuring storage credentials&#34; title=&#34;Configuring storage credentials&#34; 
					loading=&#34;lazy&#34;
				/&gt;&lt;/a&gt;
	&lt;/picture&gt;
	
&lt;/div&gt;&lt;/p&gt;
&lt;div class=&#34;notice note&#34;&gt;
&lt;p class=&#34;first notice-title&#34;&gt;&lt;span class=&#34;icon-notice baseline&#34;&gt;&lt;/span&gt;CORS&lt;/p&gt;&lt;p&gt;Clicking the &lt;strong&gt;Test configuration&lt;/strong&gt; button yielded a warning:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Test OK. WARNING: CORS settings do not allow encrypted downloads.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I know that Bunny&#39;s S3 support is still in early stages and doesn&#39;t yet support custom CORS rules and I &lt;em&gt;suspect&lt;/em&gt; this warning may be related to that. Encrypted downloads work fine for me, but if you get a similar warning and they don&#39;t work, try enabling &lt;strong&gt;proxy downloads&lt;/strong&gt; at the bottom of the previous storage configuration page.&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;And I want to use full end-to-end encryption; that makes the client work a little harder since it handles the encryption/decryption when files are uploaded/downloaded, but I like that the (possibly-sensitive) files will be completely encrypted at every step along the way.&lt;/p&gt;
&lt;p&gt;&lt;div class=&#34;image-container&#34;&gt;
	&lt;picture&gt;
		&lt;a href=&#34;setup-encryption.png&#34;
			target=&#34;_blank&#34;
			rel=&#34;noopener noreferrer&#34;&gt;

	
		
			
			
				
					
						
							
							
							
						
					
						
							
							
							
						
					
						
							
							
							
						
					
						
					
						
					
						
					
				

				
				
				
				&lt;noscript&gt;
					&lt;img 
						class=&#34;post-image&#34;
						srcset=&#34;/gokapi-for-self-hosted-secure-file-sharing/setup-encryption_hu_85f5af6ed23856eb.webp 320w, /gokapi-for-self-hosted-secure-file-sharing/setup-encryption_hu_ac896551fc75d2b1.webp 640w, /gokapi-for-self-hosted-secure-file-sharing/setup-encryption_hu_4d209ffee9cb6579.webp 960w, /gokapi-for-self-hosted-secure-file-sharing/setup-encryption_hu_1749a6bb2920449.webp 1068w&#34;
						src=&#34;/gokapi-for-self-hosted-secure-file-sharing/setup-encryption_hu_1749a6bb2920449.webp&#34;alt=&#34;Selecting the encryption level&#34; title=&#34;Selecting the encryption level&#34; 
						loading=&#34;lazy&#34;
					/&gt;
				&lt;/noscript&gt;

				&lt;img
					class=&#34;post-image lazyload show-if-js&#34;
					data-srcset=&#34;/gokapi-for-self-hosted-secure-file-sharing/setup-encryption_hu_85f5af6ed23856eb.webp 320w, /gokapi-for-self-hosted-secure-file-sharing/setup-encryption_hu_ac896551fc75d2b1.webp 640w, /gokapi-for-self-hosted-secure-file-sharing/setup-encryption_hu_4d209ffee9cb6579.webp 960w, /gokapi-for-self-hosted-secure-file-sharing/setup-encryption_hu_1749a6bb2920449.webp 1068w&#34;
					data-src=&#34;/gokapi-for-self-hosted-secure-file-sharing/setup-encryption.png&#34;
					src=&#34;data:image/webp;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAAB6CAIAAAD4VczjAAAa5klEQVR4nOx9644jyXFu3upCNnumZ7Va6UgCzsGxYfiHbP/yY/h5/Qh&amp;#43;AcOADQOGLANr2fJqZ7a7SVZVZhqZX9XHYBbZw76yd7YDsws2K5mVFREZ98hyv/vd7z58&amp;#43;LBcLo0xKoPWOsbIz2oCfokP8pL8/AanQIyx67rb21sHvHvv&amp;#43;76PMVprQYAQgjFGZyDS8b33XmttrTXGxBg5BmAynPXpfhygtTbGOKVUCOHm5ub6&amp;#43;jqEUNe1Mabv&amp;#43;2EYnHNVVUkG11oPw3Bzc6OUatsWiDbGWGtBHmvtcrms6xrfvMHdoLVOBBiG4fr6&amp;#43;ttvv&amp;#43;26rmkapdRms&amp;#43;m6rq7rqqqAVpcBf3733Xfb7bZpGmDZOWet9d6HEFar1TfffHN1dYXdc&amp;#43;4HfO0wEiDG6L3vuu76&amp;#43;nq9Xiultttt3/fOJQE1DIO1tm3bxWKxWq2A69vb2/V6Dargm81mE0Lo&amp;#43;/7du3chhHM/2o8GHFh4tVp9/fXXy&amp;#43;US34KdtdYhhO12G0JYLBaXl5er1QoiHiOxM0CwqqqGYVgul03TvOmA08FBiK9Wq7quh2EorJ0QQtd13vuqqhaLRV3XWuvLy0vvPdVIjLHv&amp;#43;67r&amp;#43;r5fLpeXl5egyhucAg7opnwvLoMGsIhg9iilmqYpRkKIxRiTWnejWJvPBq3wphuInBij8xmA4vlQ8DgvHRPusEo5O/ZHAZhHOhk/cRhZH3b94L0OJWLIqFqrxzBtFLw/fnjEbD96mFgQqHDYDoMPXYydT1dMQne6CLxrrZzWldX2QWjzUYUY4dFhj&amp;#43;i8lVSM&amp;#43;Qa6WJzKvHH4G613l47JsTsG4I7H9l9xo2K2Y3csZsMt5gPwpXCn&amp;#43;MGBQ/ugrvvwqQtDjFZrk8mQ/6XBC6dXyjZWm3vSIETlQ&amp;#43;xDdEa5OC1oGNR6rbpOGaOqSkG&amp;#43;YenGpH8hKO/HP&amp;#43;cEwGeMLFAQ4460&amp;#43;O0c3SGkf/gtJCr4ABN6n37C32I23m4&amp;#43;IQdovTeYy8aEiYudsjb9n1czuIkUykw/wTRR6fz/qBMSdcyC5H7oB07Kv2PC/h/&amp;#43;oD5&amp;#43;TEtpGpWd7RHjda3aNn3f9&amp;#43;kbrlViCljAI&amp;#43;ESvxyG9C/G8VGtHWnJh9Q6zRxCummMiQmAbmPSrZ0bv8GSMBuo5Vz6RyyTEhjArQyaZasm/Ysx3S7blmn&amp;#43;xUKtVukBCwJopSqjVrWpjPYgZ/6PUsgZXT3IsU1YMmkbGYaLwBTbrbq&amp;#43;Tmu1Nq0MT&amp;#43;J9&amp;#43;vzVV2mh3idc9P34SN6nkcAUsIPf4gPoFEKadhjSnyBAXY9fAsvWpmFdN1La&amp;#43;8QKmIes0HUjsrwfmQDzWzv&amp;#43;HOjGRsSzYACIBAIPQ5pqsUg/GYZxVVhG2xZ7aNwBRuvWmMaWFkrCWtah5kF6WCtgP9OSMzaN&amp;#43;vAhLZfcqvX4wOCduh4xAhpgF&amp;#43;PxgDsQk2KEuwQsT1Jhi2A8MMit5lwaeXGxU0XYMbiKD7gv&amp;#43;Z2iyZiRLfCP4gsrBCdh/ZgH3&amp;#43;DBufiCABlTE9vPsfgI0CPap1mw3KYZV0ahCQzim64bBQKwAKpYu8c71o5iBEIAM9f1Hr68Tz9cLNI/KBuKDsnF1JDzq4S5aqG0wZd8CqmlirtgJ&amp;#43;2b&amp;#43;yMBYlaYFD5Ph/9x8p0qoAhar0sBipX1vdpsRmbZbBIxsEXIR3gekBAShlIeM2AkJEPbqsvLUdA9MkBSGEgHv/kszAaPBAghehWDipq7YJIbUAOQJPdeM9RS8pAV0z0jOiDoyYDYtpAM3ieGrapxJBQa9jtZDANAErqHEA6QWuC4uh7nmZu894X5z5/Cpd&amp;#43;Zobc&amp;#43;bH1yxsisFN&amp;#43;V0cvKPMAMVVENMQ4hOqWtmRZd1&amp;#43;rduyR/pV9NYQoU0x7l5uXWPrjBd3eMe04GiFpVT4Ks5wBH03MIaj3ELiR8qXH9Gptg4bQzqk4ovN9jREUUCRxBB8xdmCfiqdIX23eCXhs4Nfm6C6eMNn2IftIZXHJtsxl6f3WQ5I1W2mhj9jLIh4c&amp;#43;FbxWXB&amp;#43;E0Q9wRlur2&amp;#43;w6UAjp7IuN0YiH&amp;#43;QFKWaPNftCBgcCnfZLPwINuV6S7nwPoB6hRwMfDZtCDVwH6FVwZQribADJcdSys/dygZ6Gb54BZ5kQf/LiDePzSiVCUtxSf8bSgEBhQfiZhDvKmnBCB9Mcscl598xwwmaFRxRB3rsChEDS8Yjzi6VZpHKNIJReHEIZhAHIl9pFXwCV8gzHIJaAiBgD8gjZEGTKpyAtVVYUqm3thhKU3yLly/meC0QwdQtyEuB5iiBHSCOE5A3cgm4Uur8OnAapxpjafp0HM431MmsDG8iGRxWT&amp;#43;GUk35xyKXyQN&amp;#43;H&amp;#43;mekAqzINvwgTAPlLTIOfpGAQrgDlepsAp74CY0HTbq4&amp;#43;d73ycnK9ketq80aNStdGtS4/R&amp;#43;ZjZP1anbIE0c6Ju&amp;#43;jgrFCIjy/oi/AlEgN9lhQsv4bPUE2BVVHJgngdk3yh2sHVeQNlkAiRjUTdWLZxxGrFoGDAKG1jr5ItVRiOogM1x4tKYV&amp;#43;A3eDBrbdM0KPziNie6nXNS9BOV/D9RQxRzPGaQ/HsvMlDcvZwVBDN0VevG6RBHS1SryRFDnCYTKT2nS9SpzGnWtlZWaW2KJIQijg78YobZolz1GBQ688E2DO71ogQgfiFV5IPqvZVBCevTs8SjNNN7gZjXXxvxkmtz4q4n4PShWYFXjO0zwxSOzno4lhHp8SOzkXQCTscpbf5nWPyXAJMZGmM/JAuHUSA9aU7pFuQwUbRG16clKXOaIbkXJif632AOoxk6hHjdx09d6EM0o9bVTif7HTvAaWWM7n3CZm31u9ok0/5zs8c0c5p8VxVxZywICpDqtHCPT3FN5ZiXsSMfCaMZqrNpP8oi2O86eVxxEkOJhSdp8shbeu&amp;#43;lDwyU0S7CVUkA2oXDMNB2YkeCJAnKI&amp;#43;lSoE3hldOgrIoYBHcy3qDTI2mrJxGUnIaTRMq8KgIO8PX19Xa7JSWArKqqnHPb7fbm5kbGfLz3wON2u4UDgfExRpAK6EaTD1xl59xisXj//v1yuXzlrSL7VRHmqK4EApGRUiph/xTGOlAVkfm067r1et1nCCGw2QaF1qANG0PA&amp;#43;FrrzWbDmniEa7pcRQK/F7ON5WY5nnFxcfH661D3qyJOdK7uA0VVhNa6ruvLy8umaVAXrJSqMkDOoBOEBLDWMnaNL7kJQAN8g92AzQQfuK7rH0Wnws4PiMccsH14gECVVREgAFh4HvcHKpfLZdH7x0u7ZYgQ0FyXFOHSQjPf/wmeEUQ4WkUfdia/3k8MxKl6044a&amp;#43;yRKHKiKmEJdiGUyMjoMA9o0ybNE5cHkDH/LMJxEN4mB4B3&amp;#43;xE1fW/OaY9B4M8SbHI4eyxIQB8WzTVHlyujaJg3cWm3NCc8xr4oQAAUL1FP3ok8EihehOgSrIXNkgwLjz0AuB5MMwDjC3dDbsh36lcC4A3xUWx9v&amp;#43;&amp;#43;QH4M&amp;#43;pVg5OWfYAVMxBaRMr4xDfP8ERO1AVwauojM8EQCMU0dp1nTEG2GR/DlDJLA0UAGYG2ZiQwa/A75gQ/YS0fR&amp;#43;/CeZx2VPk23zASACrVesSawxJCkWGnSmKBpeEVK7STY6Y1Sdpg8NVEfsLolnJnAzalaUagDAhv3OLUEzJ6H&amp;#43;RKeMWQe9U13VyZnalz0XW3SA7i5iZONjaTnGKZRTu4RSO1to63Vobhc6UbQowQPXUOnCie3OwKqIApgCBVuwDNp0xN8JuNak2gFZsIyAO6TDikf1S4P1hApkLouuHLCbuQiQiKSQXjF91XYfOXFhcIABsOdADVhkGVFWF27VtC1bbI4AaC0yPhxZ2dSrqvobQwaoIAtUvc5DAFD/Q6oelT94E1pi6Ya4YkorGK501jHTOQdxxt9GBwAAax8CjNA2INegb&amp;#43;ivSJ8fxAhhGL8c517atzFTLHXZaP&amp;#43;njKlPUkfgF1oQFye0PvmN2FwD7VYaJ2CrLwdgrPMSCWoGIA7e2bSvPtKBqoXtBwYLWc6asKbWcc977xWLBRTJkQiUPFgEPwUDASGna7ZmhilURWgkdsKsZRI7&amp;#43;vtprrIrQh6UqCMCtQDRhQxhjmqZp2xZbeN4bOy5elE0UEnbuOsxLYKSjUEQApWLn1fk8hdbhVTmtVBLyKXZmaOdVrkuMIe6QrqeydWtUa03rkrY4nQS7qgh9wAyVixuGYbvdQqyjZXyz2VBKgHGO3mUfoa8ZjlpBPiQzdD2ErY&amp;#43;dH7cC8uloc2ysvqyVNcbeK8TLqghzVxAVcgMbmT4aFdfBEq6DRXPHQtyvOS69ywk7oyo7FoOS65OEzaKpytHQB2Qk51UREqTlA&amp;#43;uFkRyYN1CS0LHSCyMBZPGENPt45BG1yGtzwQCsilBLY2qbcE0RxGJRNPpWRp1aDEE4UhUBAI5gTmw2G9gbtA6pabfbLQQ9q7JIJ7hs/BWRLv0vRPde7T6gGaorrZ3aq4oo8sCnF0MoMcO8KkKC9CelT1Rw9NjOPxmUhWfAg10OBipg5LzauPQuHP3I8wjuAH3EhqUxDktUxt1oSkrPi&amp;#43;eBcIsU8Wp5IgX&amp;#43;xIYoPOfnecoHgmzS25mhhMy&amp;#43;jz0oItcSHY0FkbuRXeFWIAHkJpCxOXI9tQiLQSnB4HYNwwAtUnihrwEmMzTELipxVkRWA7lzprEP7NImXZMZqg6nMEkAOsDzWD&amp;#43;9BCYgZWGdzC0XdrcMRWCjyPu&amp;#43;EkpMfnOuivghnxWBKughP8zSmQ&amp;#43;tNXosjb4voCqiD7ESVRESwMuwOOnEUw/LoD91ANickU7GjmQOgDRomgY7Bp4EnV6CHHwWoA7QRkekfUNm2&amp;#43;QNKFUZZAgetb67f0xBVJQ4FFFJsrw0QBkykj6qrNKlQ4twkzwblUGFpmnudvSeFfaqImo7nhURYmLbEGNrTWOPxZI/DwfOitgHsjZgnvXFMOoJKmEeFohYjXT0pTFKW5bhBOId1G3bFvc6Fqh4bpgcMaNbvXdWRMhbwebI8wNatAEHqyL2BohKdMnI9Idl/oQBZ0gtolgSQB7rVWSVOSebO9gDQwoV3VFFifXcln28WXX4rIiolBVIfAzwCQ5cEvVrRbixiGjS9MQPZQsGMU5&amp;#43;JzsfIypRzHIjFrwgY4NsGufB7fhD0pvlTI/xscuzIua4C1NSXiDuflRJOuTOlGSXAcJENroUfgBEEAPrkFEQ7sUBvviM8axnAU6ZKkH&amp;#43;BDdFQRHC3ev1ehgGVImBMxDE9wKwhrqucZDqY9Q4w9HR5&amp;#43;z5GIHIMWQe4aRkXDonuZw5qTACdI05knGMSYpMXiF8GROWxj4vyShxQVqKFP6EOpkKgLYWEwmIXjCtxiSPTI5izkJzPBjYpKdufbjtE7vh2CaURyA0ZKaTXEJmwDYX57buBN2cjyxLpq1Rdr7D9j1hCgGJWQYVEC6dCyJK8yIWX5AT8bhCMZB4MprEPI&amp;#43;knwyTSOKxnuzhBICnGjOmOj8iaQiqC8GH5A2MJ0YBF9kyHCrTOt2c4MzE3SY4dHXfE4YwkRwNlLHklr9CfJSagKEhuUVkfKKqKiR25rVZRd3R3VbQPL3zeB/CgUMrFXEkisr9YiHGOhgfcjWu2jWuQp7U1hiVd0mIpxBATy7xnAwy/SttnkKvSkOIz89L1LSYClxJ0jKfc6zttDCWZLXEHSOfCtwf137tfB28UsaLgwqQSozEZJxUcRJEuY2gO7k4LpmzelnrKxOXVh5HqqVEhqcqk8NFq&amp;#43;ncHpXCitE6&amp;#43;hCIAsFWkQdiz3n5mJVZZBaLSN&amp;#43;TgPuHb2&amp;#43;rj9bUftcAcALcbwla1Vb/6rL57c/Nr1xy9/B18VIIAG0Y/slKLCbHEYSQdYzELKu1KKnQWOC9X6/XtHcLooIJZHUF1Q&amp;#43;9Pxwhj0LuJ6SB&amp;#43;/t/ux6aGOxW7bpqn2pyRZt1WZm/&amp;#43;Wb5YVH//KKuxCZgZRzwiw8o7oBKKA4skEYhQ82UPDA9Wf/EYiHoGEld3B1FQTBAZbyPVQ5YG2iG9yXgBRdPiB/3z3/arp3zVpkk2REImnCndsfYFUTR&amp;#43;xHsO7BfZZt16cz7tvrUeR/2TiAl91GpsqSQ50YU8oEegKySAwFYdcO8JmN8IEARU4LQg9RihIPGmNxwMNXoNhe1Do&amp;#43;ygtZD3KgYdWytcjYzlKhDwZFBOS0cUTBqJw8gWUo&amp;#43;4pSzI&amp;#43;hXTuu6MReVsTopbR8Lh263bllmS7NdugiF&amp;#43;pV&amp;#43;Mkgo3WmpxmnpS8lDzGITUNDTIYAMpKzDeJaO0QjmkSAPJwC422hdW7N0BsUjOnfoIYKGs4d7H7sQrdat0zZX&amp;#43;WyGpIo7r8ORggcdlTZq6cxV44KKc8eN8gFpYfq0sspTBnz45JJsxBp1BuvdUGOKakPmk2k1YSehhI09a&amp;#43;CJqqratmWkT1aJUc0451hu/RitMEZDY3aDuxBs1GMdQ3aIQ&amp;#43;5xHGL6h&amp;#43;KSISifraLcMRnvUsj5Qh/iegjj&amp;#43;XrzIeKQFFnwXBwWQOaVFguFSeEo0X2li3BgaUKA0DyVgXFp&amp;#43;RTJ58JVfKwfsHTGVNonRwvIRQVu7HM2Mkx1WvBqEup9Xqga2wVMdRcJTJ7hpvetNfnsleLsAy3Rx1h04eYwhiMl&amp;#43;LyVg3jkgTc0VcHsTK5RSWB&amp;#43;lMDIwJGM32FLwZAtdqfsrHo4AX77dePrNlTtJJJ1GbuMSqhhLQJzMX7WZNIqt/MlJfxn7&amp;#43;urxlohiaQIurm5&amp;#43;fjxI&amp;#43;wfZgKAO7w6hSW0kgDMHrMOhfsDr76Ru4E9mhAguAsjnbBZaf52Xcd4&amp;#43;DyhJq2px&amp;#43;6Av/v/l/XFpa1b/Wx1S1qpyupfXNS/WVXVLIAkK&amp;#43;hlapciBbFJPirfMCfj/tQQ9AaYqpSBbinfpC9NR6SoES4WWbjrvPSYw83c3/5ysbpcNm2b45V7NUFP6PEZrdvKrlrrBJXpCaNiebVaee8pLvhgTQaZ1SKWpW6URhTeOjQX1pg/xsjKO0p8KCHE&amp;#43;2iAYp3zk4u4LbBXZLH7fcngrhpz2dq2MaIRI1eRII9o5IERD4AIOZWXayq7L9tExcN2u12v1zTnyf5sR5UyXdY0UrxgALi42CtMAMC3YtwCJIGpQ1kkE59ENxIGcm1YNjI50Adt28JZuxcNnNEo&amp;#43;sw7cTJCRvpba3J/0UOxn98CkbX4&amp;#43;E6U2QD6n2AlSF65AxgpKgoamJxilhGRHzZiAMWYjXlj&amp;#43;Y5MzMD2tDoD0zUyys2MDXcMU/xU1yjseIBPsKsEASXnBbCPAS119yGAAKnrGs0Ofd9TCjOejJPN5AGGUkCzwwCWDF1lWddPT00Gf2jwgGerqmLMrtCxMca2bWUXCRWGzBk8rC/8QCmOlHdPQIPPTVVUNRfJSOBXJtMLZVhIXpnOpIKlT8fMAZEIZsdr6pqmmacH5JkhheIt8goP88j2CHCspeQxcPckjJR1XXdzc8MXWEr8yq4x/oodrDj8j001kNSyxVWKeITSKPRQj43dsFgsqE6e40mPQdkj9kzFMHe4oyiNYnuwZIWDb&amp;#43;cjPSg2sUW4g6UnQd3LHhCZ1IWqYJHLi9UCSTjzSx&amp;#43;BPsZVpDMss8GyR2weq5DV6vM0jnQXimyljDecq4PjzASgbpBsLrXC/I3dByfBh6K/7tjIOzqZnuix7gGv5bWnT6XwD36&amp;#43;Y9jZ4QwEkEbkufju9cBLE2DSoBDicLfViQx78Ay/O8YTDtY3HBtQ1Bcd/KHsF7/jYU8x5V&amp;#43;UADTAMxFiCD5732WmsFAARZyOjyRTKASpafmZ9YTSbyqCbjLfwBlkcZHE5jxOV7SWUKuxxPEYTl56B4jYofI&amp;#43;bLeb9fqWYcgCL6wxYbxTnoeCmIE0XWhrysMLUG/LWwBTNFVlfweDCviVrH0HsJlZ2lGyYpfJZHxumgYvgb8jPvHSBJgCimnxxoyhUHaHyTiE2i8bldwnHQJZ/1wMkO7CPCg910YH277lUabFiQZ0D7m8IoMt5z8GL0oAoChGsKFGRqlt2yyL9rICciNLLMxxVxR6SulUYFx2D8yzmKQlw5my8EK2b8rFFJHq4pQ6VGbc7V689A6YIpFmku9lwSFHHiw9/SxDHTvb7&amp;#43;Dnz&amp;#43;rnO64We&amp;#43;Lg1VenhAGZBkcLYH9qcB5H7A3vhNd4fsVPCt4IcGZ4I8CZ4Y0AZ4Y3ApwZ3ghwZngjwJnhjQBnhjcCnBneCHBmeCPAmeGNAGeGNwKcGd4IcGZ4I8CZ4Y0AZwbxHrEnmvEt1SLhIFYlilCOqYaABLMqzooYM1exaB7b&amp;#43;0b2X&amp;#43;RT2I&amp;#43;ekfhFwrE0dYjKh&amp;#43;BnZzlorXHaAMDFfGDuze3waRM2Qwx4h0MuBjBTi1hAnzDS6PkURJxfkO&amp;#43;teZyT1mpZmZ&amp;#43;t3CXaUb90QHmZKNUYAQcrrbvhu5vt9WbwXhYJqKay75f11XI8NMaFGNed//Ym/Osft9/dDj6fStD7NLU1unYGL1HtfRh8NFpV1rj80zws0bcyusqdDVbrX76r/urXy9Zpedbll7odpuNUBp&amp;#43;YMbC1VOeDMf7z4&amp;#43;Yff//97//npht2hwQYra8u6r/4P&amp;#43;/&amp;#43;8tdX7xeJ&amp;#43;13MqPzu1v/7d9v/uu7Hs8uG0PuoM7rrfGpx79OXISpndW2NNcoH1Q1hyC&amp;#43;ArvMpQE2VaLPpx7dyf6FoHwHsPwx&amp;#43;vd7gzbBZGBhrjXNVMPa/P67/6T/&amp;#43;9C/f/jCE8dAZ4OVnq7q25tdfXVy2VqnocADKsjJXC&amp;#43;tzvRQO6OiGJL&amp;#43;wCXCIWTfEIZ9RVtnE8kqnbdFn8ro8bFHbn124RWXsmc9jfjFIenO73X7//ffX1zcxBueq8SzLZrHuho&amp;#43;3/af1YBMT2yy0E7/&amp;#43;sBmut0M/nTKT2HtZm998sJUzN1uv88uCsQ8Sw2u8f0dDqwz54Ahj8oskM1UHP9Y5g1RXy&amp;#43;rDhbOzVrUvlBq7MizvdwdChRBsjHp6fUvCTGW00r1JPFvgJknrxpnlor5aVjg3dDR8dk3b0/ushIHEs1vlMJOUQRJE9stEdwEJkdaatm0/fPgg3ylWN4221UXrv75sv79NSK3yAQEhmlDbq2V1dVE3VS5xVNqBUI3TTfUEr/7OhPlC2X0foOWcc8tlW9dVjO9kx5mP6hfB/PX//ern7xf9vhX0blH9v28u3y1qY1RQ0e1qvp8Ma4ct4wP22o8fkrmtq6pyczP0G&amp;#43;va2v15Nl2EF5UE9WpRrRqns23vtttt13U8qfc51zqevfN8t3glkI/HULVTX11UV8s92uTT0aFTQ59frO9&amp;#43;&amp;#43;OEHHDHxrE2ashX0JyGhMvBszL0vlQ5ZHKzX60&amp;#43;fPv1vAAAA//&amp;#43;5efVWFg52fAAAAABJRU5ErkJggg==&#34;
					data-sizes=&#34;auto&#34;
					width=&#34;1068&#34;
					height=&#34;1022&#34;alt=&#34;Selecting the encryption level&#34; title=&#34;Selecting the encryption level&#34; 
					loading=&#34;lazy&#34;
				/&gt;&lt;/a&gt;
	&lt;/picture&gt;
	
&lt;/div&gt;&lt;/p&gt;
&lt;div class=&#34;notice info&#34;&gt;
&lt;p class=&#34;first notice-title&#34;&gt;&lt;span class=&#34;icon-notice baseline&#34;&gt;&lt;/span&gt;Firefox issues&lt;/p&gt;&lt;p&gt;There&#39;s a &lt;a href=&#34;https://github.com/Forceu/Gokapi/issues/296&#34; rel=&#34;external&#34;&gt;pinned issue↗&lt;/a&gt; on the Gokapi repo about Firefox (and derivatives) having trouble downloading files which were uploaded with end-to-end encryption. I haven&#39;t run into issues yet, probably since I&#39;ve so far just been sharing files with sizes in the tens of megabytes. But if you intend to share much larger files you may want to use one of the lower encryption levels until that issue gets fixed.&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;All that&#39;s left is to click the big friendly &lt;strong&gt;Submit&lt;/strong&gt; button to save my settings and get on with sharing files!&lt;/p&gt;
&lt;h3 id=&#34;usage&#34;&gt;
	Usage
	&lt;a class=&#34;hlink&#34; href=&#34;#usage&#34;&gt;&lt;i class=&#34;fa-solid fa-link&#34;&gt;&lt;/i&gt;&lt;/a&gt;
&lt;/h3&gt;&lt;p&gt;Now that setup is complete, if I just point my web browser to &lt;code&gt;https://gokapi.example.com&lt;/code&gt;... I get immediately redirected to my &lt;a href=&#34;https://jwq.lol&#34; rel=&#34;external&#34;&gt;profile page↗&lt;/a&gt;. Oh yeah, I &lt;em&gt;did&lt;/em&gt; set up that redirect. Well it&#39;s cool that it works!&lt;/p&gt;
&lt;p&gt;To be able to do stuff in Gokapi, I can instead head to &lt;code&gt;https://gokapi.example.com/login&lt;/code&gt;, and this time I get redirected to the Pocket ID auth challenge:&lt;/p&gt;
&lt;p&gt;&lt;div class=&#34;image-container&#34;&gt;
	&lt;picture&gt;
		&lt;a href=&#34;20260525-140605.png&#34;
			target=&#34;_blank&#34;
			rel=&#34;noopener noreferrer&#34;&gt;

	
		
			
			
				
					
						
							
							
							
						
					
						
							
							
							
						
					
						
					
						
					
						
					
						
					
				

				
				
				
				&lt;noscript&gt;
					&lt;img 
						class=&#34;post-image&#34;
						srcset=&#34;/gokapi-for-self-hosted-secure-file-sharing/20260525-140605_hu_cfe6c9a5380fecb2.webp 320w, /gokapi-for-self-hosted-secure-file-sharing/20260525-140605_hu_de6cef4090d94737.webp 640w, /gokapi-for-self-hosted-secure-file-sharing/20260525-140605_hu_3a1a4b06f368f52.webp 760w&#34;
						src=&#34;/gokapi-for-self-hosted-secure-file-sharing/20260525-140605_hu_3a1a4b06f368f52.webp&#34;alt=&#34;Pocket ID asking if I want to sign in to Gokapi&#34; title=&#34;Pocket ID asking if I want to sign in to Gokapi&#34; 
						loading=&#34;lazy&#34;
					/&gt;
				&lt;/noscript&gt;

				&lt;img
					class=&#34;post-image lazyload show-if-js&#34;
					data-srcset=&#34;/gokapi-for-self-hosted-secure-file-sharing/20260525-140605_hu_cfe6c9a5380fecb2.webp 320w, /gokapi-for-self-hosted-secure-file-sharing/20260525-140605_hu_de6cef4090d94737.webp 640w, /gokapi-for-self-hosted-secure-file-sharing/20260525-140605_hu_3a1a4b06f368f52.webp 760w&#34;
					data-src=&#34;/gokapi-for-self-hosted-secure-file-sharing/20260525-140605.png&#34;
					src=&#34;data:image/webp;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAAB1CAIAAAAJA342AAASdUlEQVR4nOxd6XLbRrPFYF&amp;#43;4ydRi3xvnVnKrnFTlV97/FfIAqUq&amp;#43;eFEp2iWSWIhlBvMVeezOBKQkECJIyuYpl4omQXCme6a753TPwPR9X9tje9C33YBvHXsFbBl7BWwZewVsGeZmfoYxtvR9KeVmGrCIpU3afHtaVwBjTNf1RzpMaLsl1B7CLrSnRQVA9MYcuq6rfabulWUpvmADfWaMGYZhmqY&amp;#43;x&amp;#43;IFUsqyLDnnQoiyLNtuT&amp;#43;sKME3TcRxrDnQbnUT3AM55PseTOoDUoEV8dyWdQfq2bTuOgzGxeA3aVhRFlmWc8w3ooC0FqL11HKfb7Q6HwyAIGGNFUYRhOJlMptMp59wwDE3ToJJHBKrrum3bQRBYllWWZTZHURT11UADwnEcUuQiyrLUdZ0U3Pa8bHEG6LpuzmHb9snJya&amp;#43;//vr27VvDMJIkubi4&amp;#43;Ouvvz5&amp;#43;/Dgej6WUpmkahsE5f/xuQRAcHR25rosROp1O4zhOkqQoChITxAr5QnwYxbCHaA/ZH7xZuZIuK4pCCNGefIAWZwC6p&amp;#43;u6ZVnD4fCXX375&amp;#43;eefGWNpmo5Go8PDw7IsYXlIEJDF0rthBjiOI4TgnFuW5bqu7/u3t7dhGNJN4HUcx7FtWwgxnU6zLIMcqUmkJNu2fd&amp;#43;3bZtzXrnykSmyXrQbBaEPjDHHcXq9nuM4o9GIc358fFyW5fn5&amp;#43;eXl5XQ6VbtKXyFfraqkKIokSaIoglIPDg7gQoQQrutC7rB43W6Xc35zc3N1dRVFEaYX/RCaNBwOT05OgiDI8/zm5uby8jKOY/zcZqS/0XWAlHIymfz555&amp;#43;c83fv3nW73YODA9d1K10lC0C&amp;#43;Gu/DbQI0dRzHCYIAKvR93/M8zIzBYHBwcKBpmuM4aZpOp9OKMTEMo9Pp/O8clmUJIWzbjuM4TdPNBD&amp;#43;EDSkAEEJkWYaYB8O50lu4bs/zfN/XdZ3CU/iJbrfbn8P3fSFEr9eDg&amp;#43;l2u5goURRpmgbjI4TQdT0MwzzPK2YNFsbzvH6/b9t2WZa2bXc6ncXRsAFsbgbA5nqexzkfj8eTyeT8/DyO48URh0lg2zZjjEIRWHbP87rdbq/XS5JE0zQYFtM04znSNBVCmKZ5d3cHaaZpGscx57yiA1ptkc9wXdc0za9WAegtvCJM/&amp;#43;3t7fv37ysKoGuEEJZlqZ6AMTadTtXXaZrCHKVpOplMkiSBoPM8n06ntOZYjFPxZpIk9/f3nU7H9/08zxEWb9j&amp;#43;tK4AdcULMZ2fn//&amp;#43;&amp;#43;&amp;#43;9RFMVxPB6PF&amp;#43;0DYvw8zysrZ8yhNE055/1&amp;#43;n8&amp;#43;h63qWZZA&amp;#43;BaP4WzH6laFdlmUcx2dnZ1mWBUFQFMXd3d1oNKJvfQ1UBIBBHYbh6empbdufPn06OztDWEJLX5V&amp;#43;eWTtwxgLwxCBvOM4pmlCqUuNzEONoV/J8/z29hYBFZzTSsu6daEtBWCaI4wpiuLi4uK3337Tdf3s7Ex1jLis5rJTSsk5n0wmUkrP88qyxFosz/M6pkP9Ify3KArOOS3EKgzVi&amp;#43;eC0EPDMBhjt7e3cRzDK0L6pADOOdacdYYeDBSmFJxwTUnhF/FbcLzqmkD9aXBBmyGCZr/eXlIe/bRtu8LEUW&amp;#43;JeszzHKKs22jFoNe3GPAilmXZto2Ap&amp;#43;IYKFIoiqIOObgWtKgA4i9V7mVpQELBfnstAYiueJyMe5IZXCPadcLoBoiapRcskg2tQl1dP54R&amp;#43;6qioO2mHhexU036hpLyD6Uht4vWU5L0GqiTeEGI8tCV6vJ48bvEaVciS9AbuO3j3hUNIGfQtPd10ZYCwPy4rmsYRlmWoH9N0wzDMIqipR0DMwPi2jRNrJZxJTEQyOgidlItCZSNbBekTMEVPvU87&amp;#43;DgwLbt0Wg0mUygA9IlzQxd113X7fV6mqaFYZgkSdvBaFsKMAzj4ODg5ORE07QkSRhjvV7PsqzLy0tIp8L4U0LK87zj42Pf9y8vL0nQGIy6roMNTdN0PB4XRUF&amp;#43;VdO0IAiOj4&amp;#43;73S5ooqIooijKsgxE3mAw&amp;#43;PHHH7vd7vv375FQUycT5cUMw&amp;#43;j3&amp;#43;69fv6Y1x4tUAGMMCZN3795xzs/Pz4ui6PV6rusimQUKE5LFFCmKIo7jMAwty/J9v9/vl2UZBAHkiyRaWZZv3rz54YcfxuPx&amp;#43;fk5dMM5j6KoKIqjo6OffvrJNM1Pnz7leU6JX&amp;#43;Q7u93u69evB4PBdI40TbFGAemNlQGGBdIJnHPQsW3IR0WLPgDdDoLAMIzRaNTr9QaDQRAEZVlalmUYBtjNXq9XFEWapldXVx8&amp;#43;fMAwPzk5wYzRdR309R9//DGZTAaDwXfffdfv94Mg0HUdCjg7O7u7uzs&amp;#43;Pn779m0UReAbXNd99erVcDiElG3bHg6HvV7vzZs3oEuDIBgMBq7rZlnmeZ7rukmSwBw5jhOG4fn5&amp;#43;SNZ0nWhLQUIISaTyfX1dbfb/f777zudjmVZSIBg&amp;#43;HPOsyyzbfv4&amp;#43;BgrT03Trq&amp;#43;vOedIlSDlC8I5CALkCzG3kN2EbihB5s8xnU5t2z48PERS7PDwEIUXSPJ0Oh3Q3ePxGKam1&amp;#43;vFcYzamfF4jOkCuUNzLcmH0OIMSNP04uLC8zyMWYyjoijgS7Msw4gjEgKdB6usUnVIh5mmCfIHph/cBtIvsGlpmuKGSJwdHx&amp;#43;bpum6bhzHYCAQCPV6vaOjI8uygjnIKhqGsflVWOtkXBzHFxcXSBNiTGG4IYEeBIEQYjQagZ6LoghxSxzHo9EIdgkWgCq3oii6ubmB6A3DQDCDwggp5cePH1E1BKI0z3NUuyA3CcMCjSJYQhKtKIp&amp;#43;v49JGYYh5xzR2mKuog20aIJA1oNAhjP0fR&amp;#43;pXXID9/f319fXsD9JkiBA/Pvvv2HKEbljltzf36dpen19jTgdYsKUurm5GY/HyAr4vi&amp;#43;lvLu7QwUYivIwGizLchynQkkhOw9rM5lMTk9PkySxLKsoCopWWxIR0IoCYDpQ&amp;#43;BaGIUV4rusiowt&amp;#43;FMUgGHSkM0RE19fXiA5xQyTU8jwvigI1EKhfY4zBl8CyQeJq7SLWDVTvhhWWGgEbhnF4eIjBcXp6&amp;#43;uHDhyRJ4N4XaynaQIts6GIRMowypj8kDkNRyYup62e8UJe1RGuTHOkj&amp;#43;kW64VL6oaIA3/eHw6FpmqPRiJYXxCS2JJx/GrPJTXqVirPN14I/1CTYOjVLujFstC6IlrvqO5tswCLQJDihnd6goVYMrhG7Rk8&amp;#43;pz3NWO5aCoDd2Fi96gsFFRispIOnFUBW8pGdRntQMdKqu32eUIC6zWg3Exq7g8rqvea3nuY61OL9ZzfyawZl/FeSVS2yaS/9&amp;#43;lhVVk3C0Cd32C7uhlwvKlnJxfYs1qM/9M4jCc4nP10LVlYA&amp;#43;WSsFen9ynJ06UqSYln14sp36zSg8i0Kz2h5jIap7ankL5feSl1dV9bVKkG7XpWsrABkTZEPQU4KKS3KskIcQghwDJXeAnS9mv5Wt8yp4qbXtFEAEQHVeoJtViWI99XfrRT/qhVaSLotTghEH&amp;#43;qnbexqXk0BtIPl4ODAcRyQaGglFpOQDpXNapoGMlJVADQHehk0fTEHNkqoUUSlpI72vRB9j98FvYx3cCXuoA5w6gIqD&amp;#43;kmVCeBxpOm0fJKFQWIP&amp;#43;SZ18XTNfQBlOIgBdAeGNCc6CQuUxk02q8LGdEok1KiahPkM8avGv6iz8QZgNqjEmBqAD7CuKZ31N8iaVYMV6VeEWZWtY1UGPBQmeUmFEA7WEajEdJPldoC27YNw8jzPI5j8MZZlmHe0KYJokKpVplGN6QDA6LuKqVxjRJ&amp;#43;dWmCHE6e5xiwS8092S4kRFGMjYaRRars1FTtD96kIwzWW8m68gwANY80U&amp;#43;UjtaaKdjmrpLQat6gbo1W7/FBApa5xKu4E2qowJYtOlVhPdXPgQ84fN6zUcrdB366sABqtSyOWSnyya8DOp&amp;#43;c3b5sK2LXi1pWwg23&amp;#43;hopzdxN7BWwZewVsGXsFbBl7BWwZzZPyj3CQalS&amp;#43;GHhsfjP0LqMhFfF4gYlpmp7ngVeg1RORdLRVeN19eZFoqACUxNJ2Z/AkWP2ivPvVq1f9fl8ls3DgT5IkNzc3K&amp;#43;0K/rrRMB&amp;#43;Aw76CIKACTRwYQ6yL4zidTgcVr9j4QNSKukt9jyYzAAoYDAZHR0coe86y7OrqCqyylBLbgzDkQW1CAUKIJEk2sO/nBaHJDKBSZ2y7wO44SJyqyUGXksslhwwGtI4DWPThzU4o2HE0jIJgTGBbUK2v8ovqcYjEeqoJKWJSH5IvkZGVxJb6rUWesllftosmbChlBbDrASYoSRI1sQcvTQX&amp;#43;&amp;#43;Ah/K&amp;#43;GTmi3Bm7BXqJalHTXqYcNqfhE0ff3zVnYNTWYABjg2X9DOoTiOybZAZK7rIkFGJWO4AOETiQ&amp;#43;yw04KaIuS/mmaZlmGj1TXrY59znmapmvMEW4YTWYAFCClxBYi1biTtYGBgrYobUJZBDIalFjHR2qOkHKTVHCpfpeUsZkDhttDw3wAxTb0jgo1d1ip7EASUa0cUVNauJtarIDd0ouLPvW/pOyXiIYKWDroVMvwUNYMGcFKqo8&amp;#43;WvpbTy4aXm6C6Flc0OMdrgjloQCmzg1fqGRroqEC1HKrpeKmoEU9TINMtlo49Y2jeV1QpdxBLajCNmjXdakUhbZT46CM/XqY0JALogeBgOGhmj067wJHm6MQAQU5OBsYi&amp;#43;SLiwuKStvp14vBs9hQ13U9z5NSYkQv5fqhKkTxeIHQfs/HAc3zAaZpdjqdo6Ojsiyvrq4oFpRSZll2d3eHY4KIiKZJgwO1X&amp;#43;i6ae1oSMZRlS7OH3FdN4oiCvnxlBgcbqJ6bHLLtGR7aB48vzD/pRi35lEQrAp8Kf136cVkl9TlErERi1va1QiqUotYuSFBfbqSGhHsvhoaknF0AjwcKZ1GTFWYdEAtPZGI9gRUaDU1XwYhovCWPiUFU5XyUk9DYS5&amp;#43;CAes7H7&amp;#43;ueFKmM5To2rkytHj9CSdh8g42vKAL4I6xXeJi4Y&amp;#43;KKH20OkGRJdWdr5v7ADu56AhGYe9MeCKK29SJTcGIE0CKADeW91zQiO6ckwk7Z/Bm2qtcmWTE&amp;#43;6Pb2GKgKra8bEPNCfjKvxlZWxC&amp;#43;osP6sJ&amp;#43;mAqhjwm0aNwrO7YWabilZ7Ko65Ld10FzMu6RuiDVDlQuWyTjADqDcqVmPL5lc/el3zoZt/Sy9Z5D&amp;#43;CKk/Ai2UJr40kW2XuxrQ7eMWgp4KRHF1tGgPuMJBVQesvPsFn61oDBv1T2UTzthKjh46CnUe6gKWP&amp;#43;BTWrpzvMa&amp;#43;ZVj6Sr9SdQKQxvc99tEAxGtsA7YK6AN7K3KlrFXwJaxV8CWsdGTc1sBY9o877ntdsy8pCZnrnKl79RSwCLlu0X8s89gnveRlqmZhrYLbZNS44IVXBOivhqeVgAdzrMj64DPyR8hhKHLblC&amp;#43;6svAm&amp;#43;lgy5NgLv14qt&amp;#43;N2STSCl5TB7UObrXn2JHNdUh4ZbwoXVu8fS3&amp;#43;/60cDjTT3Lr8Nc7Z7Uj7z6n&amp;#43;4WymA7EOBaiP2G&amp;#43;ggKVnMP2r2auv75BWEzrLA1&amp;#43;eHJb/9z9yOJC1FcA&amp;#43;/2X6vzzHvxohydDVb5bUGOes47MwYZe3LEo0USsdXffs6AaH59LDhCmdqyZykbzNsqzm08gJnxuj68y2pOdonitdRzP0miZIslnkZ&amp;#43;uGZ5oG08mdSE2WX5rBpcyF4LJcSQPSNGaN8R3NMuv7pLpOeNVju/G8qU6ng&amp;#43;fG0AF7amVKlmX39/fYXFb/zv80iTFN16U&amp;#43;j4JWaZvOdN&amp;#43;yjhzfNy2dsbnoNV6WRSkw6qeiuM8zwQu5gga&amp;#43;NIPpKzWmrTCUjjPAPPA8D5u2USpCZyHSxrwNQ2fMNoyOZTu6Yeq6kDLhRSq4/DwhpMnyJj6FrRwKtPhQfxwLgSw8TkckawPHMJ1On10gvcoYVb6TCzHOM1GWvmm5hsllGRb5TAFSKzWZCp6XZZNmyZX8hrYyG1rfCqFqCEVzlEigelCquFIPMKyPz06yLGeRnxBSlCvN&amp;#43;lJjU1mUopzoujX/V0qZfjH6UtOELPlnWn8VcYqSCTFbBJQrOI&amp;#43;nFUA1Ng2e3kBHrT5UCdEgCprPLV5yLtOMhTEbhcw0535vlYZp2hR&amp;#43;ZP53ZnSUSE1&amp;#43;&amp;#43;bPCLaWmFXzWmEmk5YUm646qWgqgY4m3vg6AwmZTh3OpSf3sShrGLPpeUQH/3HAeQOIl3aDJnaCAu7H&amp;#43;9xWLp1ptA/b0Y6zUc64bNGztgA5mrlxn0nNkN9DmYajc6kqMaXIW&amp;#43;GNSJunsdb2ZXes5Ylsf&amp;#43;IuY2QtEooau7cbI0Obm4rPo18gF7W4uDP2ED9&amp;#43;FEdJISC&amp;#43;fjgZ2coTUwc5M3m8VewVsGXsFbBl7BWwZewVsGf8NAAD//656&amp;#43;oRjWk2CAAAAAElFTkSuQmCC&#34;
					data-sizes=&#34;auto&#34;
					width=&#34;760&#34;
					height=&#34;697&#34;alt=&#34;Pocket ID asking if I want to sign in to Gokapi&#34; title=&#34;Pocket ID asking if I want to sign in to Gokapi&#34; 
					loading=&#34;lazy&#34;
				/&gt;&lt;/a&gt;
	&lt;/picture&gt;
	
&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;Once &lt;code&gt;I&#39;m in.&lt;/code&gt;&lt;sup id=&#34;fnref:3&#34;&gt;&lt;a href=&#34;https://runtimeterror.dev/gokapi-for-self-hosted-secure-file-sharing/#fn:3&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;3&lt;/a&gt;&lt;/sup&gt;, I immediately get hit with a screen telling me about the randomly-generated password to support end-to-end encryption.&lt;/p&gt;
&lt;p&gt;&lt;div class=&#34;image-container&#34;&gt;
	&lt;picture&gt;
		&lt;a href=&#34;20260525-143412.png&#34;
			target=&#34;_blank&#34;
			rel=&#34;noopener noreferrer&#34;&gt;

	
		
			
			
				
					
						
							
							
							
						
					
						
							
							
							
						
					
						
							
							
							
						
					
						
					
						
					
						
					
				

				
				
				
				&lt;noscript&gt;
					&lt;img 
						class=&#34;post-image&#34;
						srcset=&#34;/gokapi-for-self-hosted-secure-file-sharing/20260525-143412_hu_ffab54ca293a0192.webp 320w, /gokapi-for-self-hosted-secure-file-sharing/20260525-143412_hu_cceee7946840c4e.webp 640w, /gokapi-for-self-hosted-secure-file-sharing/20260525-143412_hu_9427402b050c96fc.webp 960w, /gokapi-for-self-hosted-secure-file-sharing/20260525-143412_hu_901b0a2f504f7c3a.webp 1073w&#34;
						src=&#34;/gokapi-for-self-hosted-secure-file-sharing/20260525-143412_hu_901b0a2f504f7c3a.webp&#34;alt=&#34;Gokapi displaying the randomly-generated encryption password&#34; title=&#34;Gokapi displaying the randomly-generated encryption password&#34; 
						loading=&#34;lazy&#34;
					/&gt;
				&lt;/noscript&gt;

				&lt;img
					class=&#34;post-image lazyload show-if-js&#34;
					data-srcset=&#34;/gokapi-for-self-hosted-secure-file-sharing/20260525-143412_hu_ffab54ca293a0192.webp 320w, /gokapi-for-self-hosted-secure-file-sharing/20260525-143412_hu_cceee7946840c4e.webp 640w, /gokapi-for-self-hosted-secure-file-sharing/20260525-143412_hu_9427402b050c96fc.webp 960w, /gokapi-for-self-hosted-secure-file-sharing/20260525-143412_hu_901b0a2f504f7c3a.webp 1073w&#34;
					data-src=&#34;/gokapi-for-self-hosted-secure-file-sharing/20260525-143412.png&#34;
					src=&#34;data:image/webp;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAAA8CAIAAAAhVCWSAAAStUlEQVR4nOxc6XIcOXLGXdUXm5Q0O47w7vpcOxz&amp;#43;afv9H8Le/eeJmVl7NOMYHuqjqnAlHMhEoYtNiuJKzSAZITCCanWj0EAmkMeXH6j&amp;#43;7g//wr6252vqtMNxbEIIxhgAJGz1fcYYvUOv6b/TZ4UQnPM0adNnGWOCc4YdaPBHTqn&amp;#43;rhO4O2fqAADU594ZPkU7pQI450rJtp21TZNSstY672OMKSUhhDFaCOmcCyFIIYSUgK1KRGs1m82MNjHGfhi89/S&amp;#43;lFIpJVBGxhghhPPeWhtCIHnhVzOW6B82lSDqS&amp;#43;AIUnARIXofYowsJTZuCM5505iG5jxYH0LWNLaUIMZbmv6LdP&amp;#43;YdmIFtG377W&amp;#43;&amp;#43;efv2bQzhw2bT9z0tWGu9Wi2llNc3N13XzWazxXzufXDehRCttTHG5XLxV99&amp;#43;u1wuh6G/vvkwDAPg4tu2mc/nCUW2Xq2klNtdboO1MUQAyAcONSC4YKgJelNKyTiTQs7ylsjyHazNIvaeOiSWvPec8fPz8zdvLgDg5uZmGIbEmNFZJSH4fhiCD4xzmfWRnHd93zvnq&amp;#43;6/sJ1SAUKItp19&amp;#43;&amp;#43;1vfv&amp;#43;733nvP3zYhBhDbr5t27OzswTw5//5381mc3Fx8e7d2&amp;#43;CDx718fXPTD8P67Oxv/&amp;#43;b36/V6v99fnOdnabvN57O2afu&amp;#43;jzG&amp;#43;&amp;#43;&amp;#43;adFGKz2fZDH0JWbQgRLR5ZNsEZ40KgfHnbtKSG2axVWjtr&amp;#43;8FCjD5k8SmlY4zb7XYY7Dfv3v72t3/NGLu&amp;#43;uQl4ArTS8/nMWrfv9sNgpRRa6wRps93&amp;#43;9NP7y6uru6bs89qJfYDKq52v12sAaNtWKUUHdj6fG2O6rtvvOyH4&amp;#43;Xr9zbt32S5wPlj78y//t9lsFvP5&amp;#43;cXF&amp;#43;fqsbdvZbCaEUEqhfWgA4NdfL62zZ6uVxgYAnHMpZRz15H0go7RcLjjn9EJrne0GZEk5tGlaa&amp;#43;qmlMq6v76&amp;#43;vLxaLpfr9boxZoUnLGJrmgb3T/TeK6WaxkCEXy&amp;#43;v&amp;#43;r7/sNmQnk4gsZOMUluIoe&amp;#43;7zWbDOXfOxZhNhJSS1rzb7bq&amp;#43;77pBqd1iu53PZsZkix9DcM4JwbfbrRDc&amp;#43;zBYK7gwBqRUUuZPu76zg91ut8YYa222AJy3TYN2Oe//EELf9yml1WppjHEoNSll3/X9MKCDTeTk8zdCnhg6khiyy&amp;#43;m3263LNidImR3VYK0xRoq88ZVSxpi2bb0PnJ/YLZ9SAQDQ98P7n3/xPgjBaY/ECKPz5H0//Hp5ud9nDe12u6ZplFIhhOvrm/1&amp;#43;r43u&amp;#43;2GxWKQE1jpISaIB0UpFiNvtzoew2W5pC5Nq8xFBm5Ots3Pee2MM40xr7Z3v9nvvw9X1dd/32R/QgpVK6FsZZ&amp;#43;R&amp;#43;9vtOa7Xb7Wmj4Myjc07p/EMKWC7m2TlZ&amp;#43;/79z1fX1yGEU6mBnzAPIJvQZofXcC7GCAdYYhRgRogUZkgpaX9xwQFSCY2kaJrWaJ1YyoYFEuP5h7xlXjNkAyKlhAR5B2ejX743O16UyGzWnq/XqPhojBms3XzYOO&amp;#43;FoJgHA1mWO/MxpAkhcCGM1iwbrsgZT7iZODpe8iLz&amp;#43;XyxmDvnrm9uttudc&amp;#43;4lKmAaU&amp;#43;NRLW9OwuoEkGpP&amp;#43;j31ZmghiqQwrsxd6iB1/NK/fsE4OOcCzYVGvWeDE2L0zpG9oj7jgPQCR8L4qqYpR8uh3/kUaAURHLqaFxqG3pvmPNDz7psxfuHCIMZsPY6&amp;#43;59NT&amp;#43;lSHGCPHYU8V/NR2YgU8ezu5gJ502Hzon2LQr&amp;#43;3x7asCnrl9VcAzt68KeOb2IpwwBXuf&amp;#43;yz/bPf41FDzY9qLUAAmOwrh33TIFCatovOMQkYEmaeZRAW9heAUd9a8AXMLcVRjmALLz6uG51cAygjzZ9MQiEZyOWR0/Lb8UUEIQTPKthhjHlFvjaBNSinEQIMIIbVWUkgABC8SxBAhAecCMwbr/Smzqs9oz68AapwLbfIPY2U7c6qJcFELYpQeRwCGkgUAH7wUUkqptPLOm8bM2hljySPGlhIopZvGcM49ooGJYI8YpJCopBhCvG8y99jDJ9LTkyvg3sWMHxXTn1Lyzg1SQATOGYqYCQRiOCs/iY0WA7KNEWhVfPACC16IqAbAT/MIESLEApTig6iPBAm8z5qQIp8DwM53Z0j4T30bTRycthBW29MqAOG5vJyKCJHFqLXGA8iD6GktydKZQOudRURQaywKAOxP4wC5A0B82YfgrK31ScI12YCVXoIkoJj8iMKVUnBu0OkkzgVBDoifC60NuRMCsBxzpyqBHbWnVYAQomnaOVZXcEtyo7VUEiXClFKIhkKpto&amp;#43;iT4lBojeF0kqpPMmYjUoIWcQOUkKQWPER/YMEwYcIcURGQSlltOachxjpPJH8yaugG&amp;#43;BKKgSlA8MaJGNpv&amp;#43;92&amp;#43;z3pAPcKevgHz/EXtidUAO33pjGr1UprFdAIIFjdkktE4y3ZeDIQpgfG6chHAoRN07RNK1F/IYRhGDbbbYxxPpu3bUPSp5M0DJaqOliciUqrWdtyLkIInDPSIo1Jrp5xThry3nMhZm0bQ7i8uvLBW&amp;#43;sQi84/ZHyeTkpPewJIFoMdvM&amp;#43;7Pk3saYhBIHqMJp6hAhgUw00KyOGmstYaKyUZHGbt4JyDCFbaGmgqJRnn1lpn3aHmFQNEECK/ruYORclJSYkxmw29SAmElDEEa&amp;#43;12u7OWrI1iI6L&amp;#43;JWnKJ9sTKoAC7WEYQvB0lmmnE70A0Hxny4C4fDH0xculUVksh0FCijEeRWfrU2K7/T6bCITy0VezgFKf1iJqqJpum7icOjCqH1CAhd6G5UiJ&amp;#43;BlSSgyQ0IOPBKcnktLTngCslfuj&amp;#43;vW0VnNsW&amp;#43;9bKD&amp;#43;UXG514aOz/djD99ZYKoko3ZnANCnDqqqgqVJq8hcu/bFN1bnSQRvdYDoqWt2/xLsLY8eSKlS4Sd2K/vexAY9KaWPF8R6q2vjpxyc1YV/d/aQOMk770Iv2TaXpHSngrlgekEwV7F0aIElGVW9ptEa2WqxcMIH&amp;#43;jY8EMZzEdMfVfVlmX2hoQiQqTd2e9CjZVPc0xTAlOsRuGLJmZ0C5GFkiMRZmyXZTKouBa0mSaZNOFUNmRcmcpaUEIcTqftFccRJqKiF/cTBpzMAp2SDrlzAeq&amp;#43;qvayQ7RkXvajCnG7cuXCmppCLeRgTIDk/m/IZIU&amp;#43;UEIHNtNZvN8gohZguNgZrRRimV8xfnfTa&amp;#43;OQMiItQoVJI/S6n4N3J3zvuRW8hpEgUPQEpaTqPQBlCGhXPP/yEWAn1djji9A0hY5DfEMUkpWeeCDxxT5JxJoVZy&amp;#43;FQ8OYT8OmnMgZVS3gdrh5Ja85JZkyIjRGOM0YZmgByyIMccG8lxBgCc92V8WTJz3A2oNkoPkSVQsz/cRZI&amp;#43;Ihk2bZNlYh05MCEEJNjvu/1&amp;#43;r6ZshrOzVWEyoboAQGttjCGwJYdrk&amp;#43;8eF5xI/jHespJZfM5nrVAwakylk0hUBuWuJBc5DlhJV8ST6Ps&amp;#43;hLhcLpCnxaVUnDNkn3gSovOejzuOKKT0LACYrDUjhLCDta5Q5GhpdKRoAi3GxZTkBR&amp;#43;sszSIda5tmgVSIi1&amp;#43;JVHEBNLuqvOv2zyEUL0dMVlyou5DDrFyLN5Uvhe2PEmHwa6qYd9gre57k6NmziioQFIYBteC7GCR&amp;#43;Gj&amp;#43;6gs6h&amp;#43;UFqgRwtyeGr8ldUnCJey0yoiwGwsvQ0GVTQiV16kmpQEp5rtVAVbQup2YAHj&amp;#43;SIj8uR7SAHnTWRhQHyUWSOcLNKtA64QxjHRD5KdEjV5XzPD832m&amp;#43;aKm0&amp;#43;4g6VrYNWkA50iKFSTomnRIQXsqXOOUpEECjMXYccNeeNUkyQ93673XnntdFZHJgrIpUs5yNkqe/AwiRuEMg/JmNCgqMkFgM8TidUSKGVnhBBEquGm7g9oy0igm2xrGhhskS6/kBI4YwsGH1X2Qpk6NCEyZGnFZFkgfYB0PaIirMWmAHPE8dcIRXlAVEis&amp;#43;K97/sBsv9DcJDxvu8xpQdiDbPRjQlkN8UYGOPZVOajn7LFJmSdswPJHhXgnc9JY1UArdY5J4Vo23bWzmhEwgNw3xWHV2MUkkXeWj4oJdvZTOERs2g6RJaFVnjk0XQFSonzwnBDsZTIIJBfqkgZkd2I70aWt2kb2jsU9edJp2SynaSdGyn8R&amp;#43;4Xb4xZLBZt26TE&amp;#43;r4frC28OQKREOqhr65HmUxu3tEoCOtcAmjxS&amp;#43;mcEQOYBEj4BIKBqUojjQwjSiCMMVwI7xx3eQcq3BCos0jbl&amp;#43;jidfeoaRQllZov5qvlkg4mWaF8CJBcf/A8oxWy1g120Eot5nOjtQ&amp;#43;B5q2UIvtLlo1CurZp9OhOiCRbDTqdaJpQ07YNdhuGwXlPkAOlbyGG3W7vvScjizqIiDwXRj8xOLEkAJWhnqcUsdsIb9DjZf2obAoN8sbeJjtYYjASLS6ipaKQlJwwGa7qUUZjmUcz6DPxHBc03RiMYvBeArkfLF2ErutJ8moayWZ59UOx5pDDoZgNYvnikbbGKYdMKMp8bqS01tKSQoycMW0MnS8SLr7JO60kATJ55YREYijmQ549VVoQGhsw2slRV8hfMNhWK5WnHkLf9VmdsscrG4LsQw0xB2s7tBKAtHVIQOzS7GBDqPZH5cMpkZ4LCHhzEk0C6LreOjsMgzGGgoVJoFfu5xCSSA&amp;#43;ygqyQu2I0cgKKOCNiLZJOMMZceZ4RIlHtadPfUgBR9UeXyW5fEmK3MwBOgMFIExdU9qPwgGL24ocTVHi5FlZKcDo67Ulyy4SQvIR36BIw&amp;#43;FFKEks2m5E8alYbjUZU50npBpHREL1zAb0RWV4YXc&amp;#43;IPHBWg9&amp;#43;ay4xwdL0sNcLhhzSNXo25DKvc7Ds3saAmRjQSLgfqRido8lgB5LWn77CPtKMs/whR4NMMdex0u086In0ejXxIdPEtpeRisTxbrdq2nRYsyQw670yJ/ErJbMAbTh4vSN39lmlqeiCKfpwbereN4j5gB7fWPtJa7xlk7F2fUkfjfh6z8zFP3elz/yPHI9N2yvkjE3gWSPpYseKVgE2mlp5F3xzH/PaeFU2Yv4dJ3LuEh9c1HeeBVT08yEupCT/cANIw9JeXVxu0p5w8EsbKeZuHktyRiclH2YdhsE&amp;#43;KYp6qvRYFAF65DBNMphhguM8Mnvwu49O116GAYliesjL1XO301MTJteeHuz1qnJNM5vbEjuoLn55JffwLJ3NvO/EJKFye2/de7l54r&amp;#43;1w1&amp;#43;XOp5OwJB0VcI4KDBTETGPBw3zGm/XEe6gTm1Ydjuof00pGhf5rXHdyMt2JL2oTqorIHxBQheA&amp;#43;XgvNIYyq6kGaGtSCn0Kcix1KVYfr7wT10pVrPl4JnriBAmdDzKk75yxnIVwQf0trLZBuVJI1hIBoYvhNqdaopRSFfoG5C9ULZCEI4QXkxDze5vTOxdM5mNMqIC&amp;#43;&amp;#43;aRqtNCSoqZNDPLcxhjAWvL8XHUYvlURltKELjrXGwcZTk0p9CkmGmCRHJE/IgoswwuJ98M55IXhjGikp44&amp;#43;zttVax4hIACvXVKWQSiva18i0sBFiY0yDl16RxpI8wstGa0KSCS&amp;#43;y1u67bp8AnDvVGTilAqioFHwoGb9SUKpEdDE0eiSvCQKaEJMqqF&amp;#43;EwEMlqQH2LmZJlINP8FkheBJYIggRSVQKSVDOAiTggHpFOD0fQaS0sBG4ZnQIMH1HGCESiCKodk2WJx1OWqGFHcBXPibOJ2gn9QGItXZ9T4w2O1haLeF6hFqLEUQk8L7iBGP2X3JLutw64hX5JaIbYpL2F4pVGmPRSprrZU/MFIDU9z2h8&amp;#43;lWFZPX2lhE1D4BiJGJRfgBSVwKobQusEooenq5tyQrlkLGw3Ff3j/O7z95KfGe9uggJFWYYfpXZ24NVWGE28HCXVJBDZym1PaX64SpTXkVJ2yH0nxBxx6aAO3fgy/5svZ5O&amp;#43;aR7XUkYvTHDtZnZ&amp;#43;vzddM0gj&amp;#43;UvkSI&amp;#43;313fX292&amp;#43;0q6vsl7UkT6tehACnl2dnZP&amp;#43;X2h4uLc6qSjo6w0AcrDOmce//T&amp;#43;//8rz9&amp;#43;/8MPXde9cEDitShArM/O/vCP//Af//5vb9&amp;#43;&amp;#43;IWpMDpCAOP6l/EQG3Dv/3999d3V9/csvv/R9/9xz/0R7BQqgsMU0Zn2&amp;#43;fnNxsVquACswWDXznEfiVdAfF&amp;#43;JCLObzN2/eLJdLeue5p/&amp;#43;J9goUQK1ucwpcsZgcnLUwFtkpXVJKtW0riAH30oXPXpECcrJWmU/EiULgoBCtpmEqkYty6gvPfAPyMe0VKIA4ol3XvX//83fff/9280YQTylNCrWlJyNs48cf/3x5dWWde9oI5hTtFSiAsZzWXt/c/PFPf/rw4cNquaz&amp;#43;9tafFErlVwjh6urqhx9&amp;#43;7PseXrwC&amp;#43;N//87&amp;#43;WV889lYcb4qztrG0VEoqw8YkGKt&amp;#43;cAfK3&amp;#43;q63zhER4SU39XBS8xJavSQ8IKHyMYENgT&amp;#43;E6rzwM/D/AQAA//&amp;#43;ocIx85uVxnAAAAABJRU5ErkJggg==&#34;
					data-sizes=&#34;auto&#34;
					width=&#34;1073&#34;
					height=&#34;506&#34;alt=&#34;Gokapi displaying the randomly-generated encryption password&#34; title=&#34;Gokapi displaying the randomly-generated encryption password&#34; 
					loading=&#34;lazy&#34;
				/&gt;&lt;/a&gt;
	&lt;/picture&gt;
	
&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;This gets generated in my browser (not on the server) and and will be used for encrypting files uploaded the server. The server never knows about this password and thus wouldn&#39;t be able to access the encrypted even if it wanted to.&lt;/p&gt;
&lt;div class=&#34;notice note&#34;&gt;
&lt;p class=&#34;first notice-title&#34;&gt;&lt;span class=&#34;icon-notice baseline&#34;&gt;&lt;/span&gt;Save this somewhere safe!&lt;/p&gt;&lt;p&gt;The prompt isn&#39;t kidding: this random password &lt;em&gt;won&#39;t&lt;/em&gt; be displayed again. It never gets uploaded to the server and exists solely in your local browser session. &lt;strong&gt;You&#39;ll need to re-enter the same password any time you log into Gokapi from a new machine (or erase your browser&#39;s local storage).&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;If you lose it, you can rerun the Gokapi setup to generate a new one - but you won&#39;t be able to access any of the files which were already uploaded.&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;Anyhoo, once I&#39;ve confirmed receipt of the encryption password I can get on in to the main Gokapi interface:&lt;/p&gt;
&lt;p&gt;&lt;div class=&#34;image-container&#34;&gt;
	&lt;picture&gt;
		&lt;a href=&#34;20260525-151735.png&#34;
			target=&#34;_blank&#34;
			rel=&#34;noopener noreferrer&#34;&gt;

	
		
			
			
				
					
						
							
							
							
						
					
						
							
							
							
						
					
						
							
							
							
						
					
						
							
							
							
						
					
						
							
							
							
						
					
						
					
				

				
				
				
				&lt;noscript&gt;
					&lt;img 
						class=&#34;post-image&#34;
						srcset=&#34;/gokapi-for-self-hosted-secure-file-sharing/20260525-151735_hu_8b51ad71f9fd08ec.webp 320w, /gokapi-for-self-hosted-secure-file-sharing/20260525-151735_hu_bdc89d6a74974338.webp 640w, /gokapi-for-self-hosted-secure-file-sharing/20260525-151735_hu_8532735eee391be3.webp 960w, /gokapi-for-self-hosted-secure-file-sharing/20260525-151735_hu_2421d774c54a4f27.webp 1280w, /gokapi-for-self-hosted-secure-file-sharing/20260525-151735_hu_764be123a7d60625.webp 1600w, /gokapi-for-self-hosted-secure-file-sharing/20260525-151735_hu_aa4592d10c8279c1.webp 1808w&#34;
						src=&#34;/gokapi-for-self-hosted-secure-file-sharing/20260525-151735_hu_aa4592d10c8279c1.webp&#34;alt=&#34;Gokapi interface showing no files (currently) but a big friendly upload spot&#34; title=&#34;Gokapi interface showing no files (currently) but a big friendly upload spot&#34; 
						loading=&#34;lazy&#34;
					/&gt;
				&lt;/noscript&gt;

				&lt;img
					class=&#34;post-image lazyload show-if-js&#34;
					data-srcset=&#34;/gokapi-for-self-hosted-secure-file-sharing/20260525-151735_hu_8b51ad71f9fd08ec.webp 320w, /gokapi-for-self-hosted-secure-file-sharing/20260525-151735_hu_bdc89d6a74974338.webp 640w, /gokapi-for-self-hosted-secure-file-sharing/20260525-151735_hu_8532735eee391be3.webp 960w, /gokapi-for-self-hosted-secure-file-sharing/20260525-151735_hu_2421d774c54a4f27.webp 1280w, /gokapi-for-self-hosted-secure-file-sharing/20260525-151735_hu_764be123a7d60625.webp 1600w, /gokapi-for-self-hosted-secure-file-sharing/20260525-151735_hu_aa4592d10c8279c1.webp 1808w&#34;
					data-src=&#34;/gokapi-for-self-hosted-secure-file-sharing/20260525-151735.png&#34;
					src=&#34;data:image/webp;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAAA9CAIAAADqCPY3AAAOv0lEQVR4nOxc35PbtnPHAiApytKdLbfNxfZMGzd1Mu1jk&amp;#43;n//9JpX5v0IW0nzTeO7/LN/XB8J4kkCGA7wIIgKVF3urMj3fV7a4&amp;#43;OokhgsQvsAp9dQH7x9b8wAAsMGSAAg0DcX3FgnDHOQACT9J&amp;#43;hACYYSv&amp;#43;TAMaBCQ7SfXLOGXeFMGCuMM5cCQDAGLp/aNGRtdZdug&amp;#43;Lxn9qi4aukVnmmWHAWHjP//V/GvK30BVJJboPZv2j2PwWnqBnmrfij03BK&amp;#43;Rv0QPhreZPuEM/xZepPHcFfeY639sC228YCpP&amp;#43;cQuI4O6R7MCLjDEA9xu95CTKDGO10wc2imFeZf7aacuJ25cQPt3/UBaLLcKWmJcdfXrRY2wesHWJ&amp;#43;9IYldctq2maheZ2FANE&amp;#43;azc9HehJ3tqc3gY6QbGfkAyYI1sB7XX3MO2ROwooaNftMZqg0EBaAG153&amp;#43;FmdBlkDnRQ/Ofkdzb5zpfAfpFhF8Z63e5tjOs9Mr25joBgBAikQnnvJE7jSbqOIDWamPcnQHdrZUJQ3XEd6D/UCv52PBBHq8psW28MwWGWWsZgmyKtwzNSpnY5&amp;#43;Yahq9ty/Yc9mtdq4MDT9Pk4PAwz3PgQN2o1tpaw7kAYMtlcXl1pa1Ba4cLvzMNtPCWjYb4AnhzacGPNtkyiJv5jKN3A31s87YhdCMgTdOnz57OZrNRllm0uta11sYYzrkx5uzsrCgKpdQu&amp;#43;PkICnbaK0QGOwW7keJHESIaa6pKKaWEcBKv69qbHAsAdV2rujZrff&amp;#43;ekyS7jfde&amp;#43;s7HWlsUxenp6Xw&amp;#43;TxJprDXGOPft&amp;#43;461tixK1/0fRGMakn6KCA9hALgRoFSt9dVisQDyw73ZHSOH/HAU4KyQZPBJPOiOyFkhb3QGftgPRx9JIJtFEiniISmjR/Bg&amp;#43;tFKV&amp;#43;FhaQPwgKX/oKgRePjK2&amp;#43;XVo/x3RV1Jy642HrAtfSDUsZThitOX/bH0l0mtwPnanUf64ykiaC0UcV8pjlmyjd3JzqY795kQ0a97w7eogHvKNwBwzoUQtMiKN&amp;#43;kiipv7mcTKEgy7qPe9ozaKIO8hd5EAIEmSfDTiQjBCnhlyCGYTQ4CEcaclTuAoMiQNGW1U7cgacy/bGJiSN4DA&amp;#43;ybudZBlGRfcWmu0YQ00zYChRWMNAEgpgTG3SEYUXACAqhUuWVg235tBsL5elBhjD/ujyNa6eTHWllVlrRVSMGTaGETrn&amp;#43;T0LPV6zt2KkrAgd81AG0ce52rRxpXy92adOmqQDPfcPzgAF8ILkEc4BJ21YSQyrbW1FhQEJ8a668YYZguQehNCDENaCMl527xYvrVWa703BXTigTQCbgq4/GHkA//OzUophaC4MiNrbtGH9b2paYSL3to7XcUIvw9Dt4LHGNKlnt/p66RhereudZMhsNNmh1lQ842hN0H7XAbE0LqPqnCwlK8QgGUABNsYEB&amp;#43;qD&amp;#43;oARmkVFqlX&amp;#43;2dZr2&amp;#43;16QDYDA9fVtCw3btfoPqlYz2mVeycJ6T5Jclf62g9YsfsizUkzYR3PUWu19mH7stkfRptuTFm7O5N0JoTRomNDd3XIEBEEzvBbuvdcY1rHPh4gPWNX83C2T0zexfHnohjJ2HokXZHjcBlWE02RvThRJYeNsUOz7vfH6W/A1qZLMg2&amp;#43;fUv1gzvlrA7q&amp;#43;vC0Y&amp;#43;uYGfUXffKpvtv&amp;#43;S6wAEaGPO0/jMnreQBvPCmldUc8hIU0B0qs/1T2Qsa80PX05nUekCdM5MAF2Mr9X01Chi4Qf33F6w9s6YEQJJM5iBRQc1My1LfF/W8rO1rCSSnzPM/SVNWqLCtjTDff/87ongzrAb8pQHAhPCIznK0FHOUUxkcizUV9LusPnJl29wULy02LqLXWlKY5xBDd8mBlSLEiPO66qrvSkDnL/0bkM2kWoj7ntrTWGG201p3E0OE87/WqKeZDYOo1tXLOx&amp;#43;Px0WefPX16eHl5dXFxUYUcSCRIXNfaw1c3KMASGRP5ISwIAWCUpk8PDw8PD7Isgybo0edCsPSQT17JbJLUp1K/F8y0C/wO0Fh50lpbxC46E8VgjJnP5xfv3y&amp;#43;XS8ZYSlU/PRxtqrqVP2dyzCcv5ZO/Tuw8qc&amp;#43;ELazRqq6VUh7gbMHmoLBmd06Qvm6rRsQkSZ44Gicy2agDcAqYTiavXr58/nz2&amp;#43;4fLs7NDVVXYyLSu66pSN8GraK0tyvLq6qooygi/SRIQF/zg8ODrr9989ebNs2fPpI8CrnIBwMQIskMhU24WwpZ&amp;#43;B03cD&amp;#43;O&amp;#43;oId5KWXc&amp;#43;PiJsSZu9aFykKGq1Ntffvn&amp;#43;&amp;#43;/88Pj421h4eHHz11Zuvv3ozm82Gqu5yAYynkB6I9AlnSpglZxp9lm4YAR7kNP7a&amp;#43;SvOmY8TaBOkU1XV27eu6nfHx8aYJ&amp;#43;Pxq5cvXr18MZlM3MMbiHOepunBwcE4zw8OprNnT40xEZcyxhJmfv0IqOv6t9OzH3/8UalaQ03gj/Q7dVBwMZ1MX3/x&amp;#43;ttvvnnx&amp;#43;ZFMkkEb5Nsv/JYkA71tW8H6a61VpaxFLpyTrCpVKWW9DgjhJ5arqsrz/Jd37/7822/MmMl08vqLv/v2m39&amp;#43;8eJFMlx1lwu/84wLhgi0n6zd0&amp;#43;X&amp;#43;Gq3LqlKq5sCTRHIhtNZFWWitAaAq26oRMc9HR5999uWXfz979kxs0H3oYT5sAQwm9fhgOiVgWTSWE2&amp;#43;eRzpp5Hl&amp;#43;enp6fn4RbkUf4EeZ8zNZlmajUZJIuAaidlZ/IJ0CER0rfrhLIQgFdlox3FpLUDPBmdZYKWXscRy4lDLNstEo8wrYwhuTVJD34i/e2hgtQ5wBIElTIUStaxPMLkhpYtUQtj3xRMokSdzgu6lmCjxwzmlTAufudcFvfpEhsxalFDQo423aI8assYvF4ue3b//ju&amp;#43;/fHZ9IKe4UI/C7Hv30gANH5r2xDt4pZJH4YitV/elPP19&amp;#43;uCRnuFgs3r795bvvvj85OZFSflx4wtkgcskU7OEAxho36o1m2K8asSyr07Pzn37&amp;#43;&amp;#43;eL9&amp;#43;00joF&amp;#43;6a6MNdtUrgAsKCt30JlO1Ovn1z/P5onHCfuZz9A//JAESYON89Fez2ez5LB&amp;#43;N4ObZyDB3/VVeZ3rYG5motbm8vDw9O5vP54g4Go2eP589n83yPL9j1Z129p1w4Mu7hoGq0zSZTqfTyTRNNzvhgYZ2wxXbvuW62nL5&amp;#43;&amp;#43;&amp;#43;/LxbL2m/oMdrA0Zf/KAEEoHRTXeGDqJ8wU3og2Em3uo6LN1HJT1r1Gic4UHWw4zQN3Uqam4z89S&amp;#43;GrumnoG7sGe1mbkYbGZmzaJWyAPpOzbsLxX5Ek2Ot91A1TRz0roBIbGPW4Yak&amp;#43;PU6Z7un/YKB29f&amp;#43;MapqYqJNpYxJQGRre8YfKRIAdCw&amp;#43;7RSXQoqtpmprhN4AKqWMDRlmkqH1k7lHDaySnw1wmrCSDoQQBwfTo6Ojp4eHlIt3K0KPgny4vDw5Pjk9P1eqdtPi5uCKu2n0/zeFhZHggubRSSJfvXz57bfffPn6tZ&amp;#43;w3a44RLcC/d&amp;#43;ffvrXf/v3D1fz5bJEBjQCCEd41ECPCKdLkjRNE8oVk1KOx&amp;#43;Pns9nnnx&amp;#43;Nx&amp;#43;NbOwNkRVlcXl3lo9wvx1iDBWE3eQ/WEzQ3oceUdIkbPBi0qTjBzcQMne7jW&amp;#43;ZrdkrrMXQND7EtzU6CcPYJDrWIHsb&amp;#43;WTfG6Kosta79VM0t78/PL/7rv/&amp;#43;nKEqPG8ZjZXo5khujK8iUUu&amp;#43;Ojy8uLgi5Q0TZxfSDk0ma40haPkwX/qaUfJ9MKBB76G7XX/nu0&amp;#43;INLWbdxD8hHo7TZGitAMVR1AQYSJkIweMhPnQf/CEpBP&amp;#43;1LfU/SU/QVzwB5n6lbLrCoYdjziiRL7WMnHCAk19/Lavyhx9&amp;#43;EEKGjErfl&amp;#43;nQImOJ/&amp;#43;FQFa0Dlsvl&amp;#43;cWFUoqgO9k9o4Py8afTySgbOZ37yI81tqzK5bKgeXrjjmSej/M8Z8yt5oui8HxTlhvGop48eTLKsujHQmYkNCnNTkfAuYjZskVRLIuiruuVLkmlTSaTLBt5uAlJWwTlq7qez&amp;#43;dVVVH58ZU0TafTiZQyqMoDsYwxrfVisSiK0idaA/2apul4PDZaL31b4qb7brezAPP5vCxLqjfLssmTceYbaD3&amp;#43;UZWV498Ld3gQEHxN6se4DkAWVwM0CNIsFUJQR9W6RkRVqdjF4gKSlu/WWqUqY6CTJxjUKYXIsixJJGNgnbNB8BgRFcUpLdopAD2qro01ZVWRELsKoHx0KZxLlEL61azR2gAHAp0CuNbXmRuCMslGWROwCBMNVamqqjiAwdbeelSHo2iDM93aY8MRkfoHPWZGo6YyBhboVw8AbzwzJJ4xRRCJXDFYWuv5fFGrmgdkyo0AVdcx2kCfbmQWhbUGgNf&amp;#43;14iGxya5jrZcaqM9yAUhr993Q2sxHKblw6yEoFlrK9VT8wpjS1eaEV7WtHimBFxfv15xif5gCXV1dVWUZS9i5DcZVJWy/TiimxTiwmJAKWIfukaOdV3PF/NKKc6BoIRa1dtkvSNrNwXA0cu/lYn0EBAPp8U1F12NdVUau2e0LfFX7PvzflGtC4jZwCuL8HgCViwhKtUPuDTCtNikRkNjkUjBiEw3/gA6tCK7fvAkzABXPN/1Quw1MIp1teRhcjZD60opbbRcyQcil3tj3etaGXxmm6KuLyFekwJiuKZJaHciwNbBOO9SlAWNj9tgG2FY35a9OzRwJXtA7i&amp;#43;75LaEncBzONExBB3DMWxhB&amp;#43;jDyu&amp;#43;Tt0kK2idpbcqyrJVifcMVDQBNI6yl3S/3t0lkNP2l3yHTTEPvL8esc0zQNr37vu4NDtREBulkVJRtzOQ&amp;#43;c&amp;#43;1pM4Or2052wc1HEEb0gUaA3zDllm&amp;#43;w/TaZ6x68uwneLDnAW9Rwp6jWcN0bOWrmiKsxv23qxnaOgDIsKjWsB2Nh/XJLuff2AQ49CivFxub0GO1eYNvk3qEvzRG7MMAe9vnpQTUDYdKhACr2GB0YgvGVNSRqqPDQFgrrW&amp;#43;t3Sfr9amEK0ZPGgEzhBk3A9lGl9g/E/DXPHESeAaN1DC2A9kDbZl2LzbK1y11sOa7vKUbGunuju7LDWOGQ&amp;#43;LBzjG5XYUEHQ0N0VTFNF4grHob/FwAA//8flcJtUky8UgAAAABJRU5ErkJggg==&#34;
					data-sizes=&#34;auto&#34;
					width=&#34;1808&#34;
					height=&#34;860&#34;alt=&#34;Gokapi interface showing no files (currently) but a big friendly upload spot&#34; title=&#34;Gokapi interface showing no files (currently) but a big friendly upload spot&#34; 
					loading=&#34;lazy&#34;
				/&gt;&lt;/a&gt;
	&lt;/picture&gt;
	
&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;I&#39;ve got options there for limiting how many times a file can be downloaded, automatically removing it after a set number of days, and optionally setting a password for the file. These options will be applied to the next uploaded file.&lt;/p&gt;
&lt;p&gt;I went ahead and left those options on their default settings, and uploaded a 1GB file to test things out.&lt;/p&gt;
&lt;p&gt;&lt;div class=&#34;image-container&#34;&gt;
	&lt;picture&gt;
		&lt;a href=&#34;20260525-153051.png&#34;
			target=&#34;_blank&#34;
			rel=&#34;noopener noreferrer&#34;&gt;

	
		
			
			
				
					
						
							
							
							
						
					
						
							
							
							
						
					
						
							
							
							
						
					
						
							
							
							
						
					
						
							
							
							
						
					
						
					
				

				
				
				
				&lt;noscript&gt;
					&lt;img 
						class=&#34;post-image&#34;
						srcset=&#34;/gokapi-for-self-hosted-secure-file-sharing/20260525-153051_hu_626dd9e851c364d3.webp 320w, /gokapi-for-self-hosted-secure-file-sharing/20260525-153051_hu_a3ab690221b071d1.webp 640w, /gokapi-for-self-hosted-secure-file-sharing/20260525-153051_hu_5b82ca4cc8cd8c48.webp 960w, /gokapi-for-self-hosted-secure-file-sharing/20260525-153051_hu_72a4ee07ab2706d2.webp 1280w, /gokapi-for-self-hosted-secure-file-sharing/20260525-153051_hu_f957a12b1ef88e93.webp 1600w, /gokapi-for-self-hosted-secure-file-sharing/20260525-153051_hu_5c5358704b9b05c4.webp 1808w&#34;
						src=&#34;/gokapi-for-self-hosted-secure-file-sharing/20260525-153051_hu_5c5358704b9b05c4.webp&#34;alt=&#34;Gokapi interface now showing a single 1GB file&#34; title=&#34;Gokapi interface now showing a single 1GB file&#34; 
						loading=&#34;lazy&#34;
					/&gt;
				&lt;/noscript&gt;

				&lt;img
					class=&#34;post-image lazyload show-if-js&#34;
					data-srcset=&#34;/gokapi-for-self-hosted-secure-file-sharing/20260525-153051_hu_626dd9e851c364d3.webp 320w, /gokapi-for-self-hosted-secure-file-sharing/20260525-153051_hu_a3ab690221b071d1.webp 640w, /gokapi-for-self-hosted-secure-file-sharing/20260525-153051_hu_5b82ca4cc8cd8c48.webp 960w, /gokapi-for-self-hosted-secure-file-sharing/20260525-153051_hu_72a4ee07ab2706d2.webp 1280w, /gokapi-for-self-hosted-secure-file-sharing/20260525-153051_hu_f957a12b1ef88e93.webp 1600w, /gokapi-for-self-hosted-secure-file-sharing/20260525-153051_hu_5c5358704b9b05c4.webp 1808w&#34;
					data-src=&#34;/gokapi-for-self-hosted-secure-file-sharing/20260525-153051.png&#34;
					src=&#34;data:image/webp;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAAA9CAIAAADqCPY3AAAOsElEQVR4nOw8aXMbN7JoADO8JZuSK89XjleV1Muz/eG9rdr//wuyH3b3Qw4f&amp;#43;8GJLSlrWRTJOQD0FroBcHhJlBWFVKJWWZZGGHajG333jP7v//mrEEa4GtEKgWKHAQCyLGu3WkorRIGI6Jx1DhEBQEqwxlZ1ba1F3OmNeMKNp9VZq1Eg7DjjI0gpO53O4eFBv9eTUiKitbYmjiulUIjRaHR6eloUbscF0AQtbgn3gwZo3e91Dw8POu22Q6zr2tTGWiuVrGvjrB2NRtsm82qgt03AFQDRlVV1djZSShedDh9/5xw6JwBqY8aTiTFm948/8Df67zYJwDksiuL4&amp;#43;ORsNNJaO&amp;#43;u/BAYNRufFU1X1rVBpiD9owR7gNvgBRDTGG5xpUQAAXVhcQLA1Cj8BNJlWz/0FX0xXhWjskq8s/HoTC5aBF6TbL&amp;#43;axX4ZzO9kcxfWJ3GRBEzRxH4QACeBvXXPzHfwmwDJw3mkFN6CDvCRIoaSkn&amp;#43;9kcGMQ1BeFCxdAM8ulACVBegnccf8GITgp55Kp0WQxSRsibJvIPzIAgCPupzhIQghI7/j&amp;#43;e8KM21JECdzBViAkYjsrgQ1N4kLkmWBXkwKiira205kw1Til1t5RpfCfRRKSFkTyXpKzsngFODG2zsNOymB2qrSY7Wbn1IDrz51OWyvN4bND5wNm&amp;#43;hPGmEJ6UALROieoNC1AGGMrgl2UQYPTzWoo7qYMpFQ600pK59A6G66z5yKmA4BSCgRI6gRI5SMLELU1ZqeDOjoWGnegHr0u/KWgzZZlYY2RSpESWE5kknNw6AQKkN4KOWrTkEECZ62xFnycB9j4cLZfiJeXNG4QPN6AW2/92HvzoRSZEcmCQKRknaw5NV6EZ&amp;#43;XS2XdxF/6fNcGSohAunCj&amp;#43;2MDl4C28eUIhrLXGmF2wTppIw23JgM&amp;#43;&amp;#43;Ukpr7flF9SifKlrrvDUPLItaigCSCibkABz6NeFEI3M2xT18L0kkFqyBCi4k4Zq478W8bdiyBrAdsNYKYnqqzNLRZOYG8xHZSvUSWuPZ3/ikuI/A8GWbluwcoteArXI/ZMIoUG9dB9kO2GZweSEslIs3h4XC8rZbB6zSgpry5BO2qAnb5sXvD5i&amp;#43;S9464tZDoT8dsApIDsi2TcyfFkBzIIGhJ7m2FQeNimmzJHDhLesWhAvX&amp;#43;ITbvCCaHFYBHTISH3g4ivN2OHX8Q0CYo4kmXzP3kXL6hcCMS2CNX/23&amp;#43;SuwYL6WbllesNAw/4RPuOULECnwC7/peNGnNXDnC24eYsiXNGA22SQuD4V8JinpHDuBFyUyN&amp;#43;nYgcmgNDfp8o1HEqHkx4n6Ug3jk9Ev9gMu9AEgVEtkA1Ba2gnYAoSDWIBpgtusEL&amp;#43;sthsQDEJqkfVBdyRWYCaAhnJiRrgpF5ZXXoydC&amp;#43;ODfr/dbhdlOZmfgVwpkg3xahHLWdT6UFTAgtVJGSiR74neE513dXWs639LYUNeGvoJQOVJNHXNY&amp;#43;KMdIkK/2WtS&amp;#43;UwrsdprdeintEghe5C75HqHGo30uWxdFPnP8nUtaFa6dq9r0TN55rrSxf0xqWU/V7v8eNHw&amp;#43;Hw48ePx8fHRVmii&amp;#43;7ThCHt9RIIvSLnnLXWBc6IRksSoNNuHQyHw4Nhp90mapZIASWyPeg/0a1eVh1r80EJG4qTcZwIqWJcVXVZllxvSackfQoKNMacnZ0dH5&amp;#43;cn58jYrvdPjgYHgyHnU5nNeoGEUL3ZO&amp;#43;h6j3I3HlWn0hXOOv5X1W1P5XRys7tHlNRDq0xHxuo8zwbDAaD/iDPs3VKAOAF0Ov1Hz9&amp;#43;dEACGAz6VVUlnhpjqqq6dC7YOTeeTE5PTyfjiY2S1swapdS9e/eePfvfF8&amp;#43;fHRwcaK1WnAVPSAvygVSZdFPpChl6m3HcV/hQyhhrjWe99Yyx9LgEV44xVpJFURZv3vzru&amp;#43;/&amp;#43;VhSFc&amp;#43;7e/v6zb7998fz54YMDrfUlSiAzyPoy6ypRSzdlE&amp;#43;SRsbypkEeInQDgo22drY0hKkRRFK/fvGHU1tpet/f506dffPF0bzBQ1HJYIwPIs6xPJuj&amp;#43;vf0HhwfWuVSrRZewrwcUVV398u7999//WBZlDTWfSsoDBEvYk/LixfPHjx5mWbbGCoEARVx0NE60eNCMMWVZoUOlJAosy6qsSiotE3kgaPYOyqIAAT&amp;#43;9fKl&amp;#43;9nvu9XpPnz558eL5k8ePsnwN6jlucCyAECbM6GzHGpuxtiyKsqqllFmWKaVqU0&amp;#43;nhalrAVAWpRCCUaNz7XbrweHBl59/Phze10pfgBlInEJAp93udbs&amp;#43;aATpbbZWEuSl8QsilmUppXz79mepZLquuVNBTWxX13VZlJ5WYy/&amp;#43;uDnKAg/C5quqdg61VohYVV4AxlgOcwWGmnBJg&amp;#43;TOhjiKUJuyLKZFYewVUK8qoHoTX3qoAKQxVilpjJlOp3XtD13VQI3sseg5A0&amp;#43;2cpcWJGlC2xrj95g6GTLMdF5yozeS3lG52NwQnIgFokej0ctXr7RW9&amp;#43;/fv0AZLwbK8iz1sjxnyALZGJ9gnFgQVVW9ffvzhw8f2BmOzkevXr/OMj0cDj8ZdXOrhNZ6ly0lSHDW1ab2RkngAurptHj37r1Wqt/vSbkJaqQ9UsxDHZ6N5zmxqs3x8fHZaGRjxotCwGffvNACMxCdVn5vb29/fy9vtS4X6Dokc1EPNr1fc5m1dnw&amp;#43;/nB6OplMhBB5nu/v7&amp;#43;3v77eugXqODGwGZoEMNlFN1IiYZVmv1&amp;#43;12u1m21gmv&amp;#43;PTUIOIrm9xIVrgoyrPRqCiK2mtDZY2Fz755rskSKRCKwsFrzoduEopz4JzaUiEWvDbqTWhYRp3a0b8F5kvoYu3x6mmsochVQ/QB6NAH0sb8PuPpzYgtPPqyJdTRXm0EcO05WmwE5ojkhJuzoSjE6iG/m4ctor4KXHeIP/TAYxDJidjub3tr0OS1zwbyvNvt5nl&amp;#43;edK&amp;#43;AryZqapqPJlMxhO&amp;#43;otMw5R0sAD99L6VKfSSl9MFw&amp;#43;NVXXz548CD3qdIVRYCiNubk5OTVq9dvq1&amp;#43;gKr0GQBg0u6Fd3GIAEFrrVqulleY8Jsvyhw//6y///3/ffP11t9u5qiFC9Hn4Ty9fTqbT45NfxxOfSmvh8yN5pwSrACjX1VmmfSpvnVI&amp;#43;SsyyrOWhHSLmZc6tsehUdMA8y1XQKggdsfCQ6qqnlNIIzULPM80QLvyp8dcVEl3okaaLK8dSyNXJBvEiVSuXb1mLNGaA68pk6a7lNRybFUVR1YrHwFQtj46O//6Pf56c/Npq5fNo08D8Bdiwrut374&amp;#43;Ojo6qumbTwxrAY33ev&amp;#43;d5lukMpBShVSmcszW9jyHxWimVZ5nSXnhUhjWc63J1VyuV57nSGpbmrumdAiKKOvzNWlcT8O1JSHme5XmLrswaeHwbr&amp;#43;dAntcrQqq1as4xstanD1/msqdWayp8&amp;#43;eS8&amp;#43;ZoV5qtPncoyUSUB3h8dTafTH374kWMhrXWeZ41GDVKdwmfdK6pDKBy6Ylp8PDurqoobCJqPcaRGdTqdXrenMx3IJa89mUymVLYMLNa62&amp;#43;vR6zKc/9O0oLzG0isbIMuz/qDfbnsNxehdmD5LJaaU&amp;#43;DCJxpjz8/Px2Adnqd&amp;#43;klGy323uDPaUVD&amp;#43;oyZ6SUDt14PBmPx83yb5Zl/V6v3WkrKidw5isAnHV&amp;#43;7fmYS0xNmaU2S6/XE&amp;#43;HZRZfEzxTyldQrR4DpdMo1NXq0Wnba7cGg32q1lZLOudprTDkej6uqwjXFUTcrnfovDfPPZoSDHOa9wYGT9PxqULNZc5le0TNXCaEnvqOVAI4h4vOXkjcjqX6SBMDTn0qxTUxKkewjMhavjtF8SRB2Thv4TMyOreT555mt43IQ3xWQziEK2Qe3IdI2mwsWLFua6pVSGg9Wa&amp;#43;P35kJOZ&amp;#43;lqGPCOFmD&amp;#43;EzBWaRodMbYGRVFa67wu01a4&amp;#43;BdeSoKzcsp0MjXGCAFUF5z9iVX&amp;#43;/Hxces2VcRteChhNSTKaxItQJkynL32vqmo0OvfcF4lLXi7OYaInHRpDr0opq4rPZmoQWSrxcjk2SavJX7&amp;#43;XaSF8cuT4zCwIYKV3Sb86xKl3EnU8u477Yv5QUaOAx&amp;#43;jd2gyT8wAUzSIJn9Z0XtiN8aA9X2dd85uhg6yUmikppXlF4S3nAiqI1n&amp;#43;lu2uOxIQnBsArNc&amp;#43;pi5kDBrbFWZYxtYFsYwrnoupB1DC&amp;#43;O4k&amp;#43;FJ00RTMRl1&amp;#43;O6LgdG088JFvBljkdJtZaFglGhYi9vzDRraTUUiIYYbzfMwJrkfRWNEYikKajxdzRyDLdaXekklxSZtNITzSY6bRo9lG98/IuTFvrxuNx00svCxoiX7xjiO8ZW3kkeJmP8trBsHouiNCnTJGf13fnqrIsypInAARZ&amp;#43;Rkibx9c8yEAtk95lnW63Vaeszj59Qz8OF9sV/h1HF9MpwUi0rMLki0bS1QCsAjjmcfmBliShNey3Mw8XzCEpEIsmCCSrVTafyW6neTek0jWIA0rshNoWtV10DQXl9Y9IhP8xwsZe5mhuAwxZBZyVfd4gZhFbCSbjEIXNiSc6FIXw2LgQFRT5/WeH2wncthe8qs2wrtN&amp;#43;OeG3wNoWrDG95VcEawBiUh&amp;#43;CdhkPKFgoykwb3lTyZBtLp0Ro5R39&amp;#43;QPLp8r4c2szAYWlnFPX8ZHIWeF9ybtZO5Wit9fj2d/QR5VXY/H3kWJxKxZQtMo8lOnjPfFiMIADobKQQqoFmZwAISx/uC7OH8Y3oW4MBgbQYvGlFaM61fUZpu5DxO04Cc2n4q5dCU3R&amp;#43;u6bj6LwT8r8g9ArjiNEyilcB7WPXyENDLDln1Daj1DjVw&amp;#43;MbOAMHX7IkgwIemZG8Od3QiNxXphrioUSzcg7tNmwTaU08pl9Diw4tdW8rGjCFPyLAxHOyH&amp;#43;u&amp;#43;CTSUGuRDPABg8zRYp9ZBWvhP9X0iBCupJ8wEZnc4uQQnJFFpy8n89RlFJUZazpBXIzI/kbor7Sp224GGhACnwY2ry62yW5UJyJ8w3oHJAGsNHnF1jikt3fNQjpZzBfcTDrVtSj00v7FpokF1T0dhCa1QTR0IBbQPp1fM/uwHIUlFzATvuAPyr8JwAA///d8/o3uY15lwAAAABJRU5ErkJggg==&#34;
					data-sizes=&#34;auto&#34;
					width=&#34;1808&#34;
					height=&#34;860&#34;alt=&#34;Gokapi interface now showing a single 1GB file&#34; title=&#34;Gokapi interface now showing a single 1GB file&#34; 
					loading=&#34;lazy&#34;
				/&gt;&lt;/a&gt;
	&lt;/picture&gt;
	
&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;Now that the file has been uploaded, I can click the little &amp;quot;copy URL&amp;quot; button at the right to grab the URL I can send to my friend. I could also click the little pencil icon to change the download limit, expiry, or password options for the file.&lt;/p&gt;
&lt;p&gt;I&#39;d like to see what the experience looks like on the other side of things, so I&#39;m gonna go ahead and paste the download link into another browser and download the file:&lt;/p&gt;
&lt;p&gt;&lt;div class=&#34;image-container&#34;&gt;
	&lt;picture&gt;
		&lt;a href=&#34;20260525-154120.png&#34;
			target=&#34;_blank&#34;
			rel=&#34;noopener noreferrer&#34;&gt;

	
		
			
			
				
					
						
							
							
							
						
					
						
					
						
					
						
					
						
					
						
					
				

				
				
				
				&lt;noscript&gt;
					&lt;img 
						class=&#34;post-image&#34;
						srcset=&#34;/gokapi-for-self-hosted-secure-file-sharing/20260525-154120_hu_ae24ab407454bfb3.webp 320w, /gokapi-for-self-hosted-secure-file-sharing/20260525-154120_hu_de039cffd1d9c28d.webp 609w&#34;
						src=&#34;/gokapi-for-self-hosted-secure-file-sharing/20260525-154120_hu_de039cffd1d9c28d.webp&#34;alt=&#34;Screen showing the file name and size and a big friendly Download File button.&#34; title=&#34;Screen showing the file name and size and a big friendly Download File button.&#34; 
						loading=&#34;lazy&#34;
					/&gt;
				&lt;/noscript&gt;

				&lt;img
					class=&#34;post-image lazyload show-if-js&#34;
					data-srcset=&#34;/gokapi-for-self-hosted-secure-file-sharing/20260525-154120_hu_ae24ab407454bfb3.webp 320w, /gokapi-for-self-hosted-secure-file-sharing/20260525-154120_hu_de039cffd1d9c28d.webp 609w&#34;
					data-src=&#34;/gokapi-for-self-hosted-secure-file-sharing/20260525-154120.png&#34;
					src=&#34;data:image/webp;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAABwCAIAAABZzu&amp;#43;FAAARE0lEQVR4nOx97XMjN3J3dwMzwxdRLyv57HPt3fM4qavkw6Uq&amp;#43;ZRP&amp;#43;ZTK35&amp;#43;XSqXyUrHjO5831molUSSHnAHQnQIwMxxR1IqUpeVwzZ9lLjmDwQDdQKPR3QD03//dP7AAs4gIg4R/gQXEf19&amp;#43;Avj/JXwTQEBYRUzkb0hIs7yOzTefSJrUAtUtrO6G79hcCZ9SJ62fwiqfJhdpvb5OievKhq2Mw1MSSho&amp;#43;AZt8AKo85X4m2L5wr36yvFAVdllqkXbq6vXhhbGm2rFY5yw75sCFUKpYLl6WZMmAKjuEB4VBeXit&amp;#43;tH8EoQ2QR/UqykirmTU4sH9DO9df4R2snw5rNyQJTvb1ZJ7zz5sbSt5VA0vJl5SPLaXh3yTZa1RW&amp;#43;aFKQtTOnYSid&amp;#43;iT1MbWdci7lEA1rBlbXOEhxR6cA3XMHgtXdfls5p4zfvliRzu1WrZVR9709o8mn6ND5IGCYKCKOIZYJwtTWnZrjbOn42P0eAFc3/66kfev1l9P5pqC5K1uhiCkIBmERbmKPzXs/IF8Fr57sv7H4EgEFfDbGcL&amp;#43;ZmDuBmIDvj0iD0gfn9Z6X/A0wjjAYk8Mogf8NoIZPc94MCCHYL4IP53Ca&amp;#43;JHhiwM4gAHai/W1CwJb3KRPWATaD3tAfURtOq6bQsj3sGLbBP07BoUcZgyiXEyIFAe&amp;#43;RoXIbXs6e8AnCvegAG0hN60hNi4zmobLyBB8G3sU9s0K9kqXxxYKC7Ik96IsDqvwrRlkUCLOhQmIH3hAdasHFUYGdFUUP9yAB80GYqZxeiCkqFBYjupI7Wp4U9EEEYxD6tUt/LIwHlmSOMvsVzZAMBKvJtyeEesEDvgQ6KQAQK77V9QRLVZzUE1MgluSlyEZp96C6BD1L5fHdc/I/Di6B1LvauIMiVSu63iklAKSenLnkjlCHPdQFUWt8P4lMY2EDIrutWXqqc&amp;#43;p3lgW/KfgDAtp8YUShj1RfUwbOXCWWASxYFJbViQ1crVoF2XYCnUdG&amp;#43;RUgvfygV6gMqABRKmXpCyX1ffs2zrnIgdkz9lMd/x4jxAyvXBBOXnJn&amp;#43;bzg59jwQ3wnIzZALFF4&amp;#43;iV3W7Kpa6fijq4UMaIVqhW8kamD7b4vTv7G9t0IJcpFO/l2ZMdk7ZHu/Nh3mQICGNU2sY6iDk&amp;#43;pAJBLVc&amp;#43;mFGfw/M/hzPwi7HN3CTf41yYMUkkcjxDoHqW1BneWANKFMrUBGQSWUCKZhJEhBrP&amp;#43;CiSCtPtlt&amp;#43;kc1tNuKgtQu06XZQZAtupzsmMw1UIpuruwYebEcAFrPdZYHsU5618V4AnEmxSIoURkNHcDlyfyH3vifdfGT&amp;#43;IlYkeR/0MUlcllH3YanuIom7jL2wBQhII6DUikhpFiY3CzJvyNzx3rgNWmxZKe6vAIu69hsCZbR7tM/GuM6PAZAHRPPXM2qEAXZUHlD5s5rRGHYBWEUG4L8Qlw3i6uiLXdd&amp;#43;o8DOy&amp;#43;CIkTEeSYEG4TvBhLI7VYCymvqg&amp;#43;NK/nQfeh80hcrf6EIIjVBtZmjPDqRywnBIxnvQ&amp;#43;COCLWW5HqXDZY6DqwtkZkKqxNHyblzM0ywy6XBVWpA9EUERUq9IQgeMYWqA9aIoaSXYD9pX2CcGREQqozRdtlmc1OUOvB4StaB9RJdnWFthD8zRnzeq2NA97QefAQ49YMfQT66D/TQgIj&amp;#43;/CsAAqdFOhogUgPW0K4CZZSUNLO92eqzQHaF&amp;#43;5pFaY40xWuskSUpjjCkrpb6mY5IkR0fDQX8ACMzsnDPGzOcLY0ydRrROsixTRGVZGmubZ6sV8SG0IpjquAu80TunPyJqrc9OTy8uzhdFMZlMtNa9rJfP88WiIEJmXswXRVkiwGg0&amp;#43;u1v3p6fn9sAZs7z/Pr6Zj6fO3ZF4bmWZdnZ2Wkvy&amp;#43;aLRVmWwmEdLouzVjwLNRFZa&amp;#43;dzf5eZd1v9TlhDtVJnZ6d/9s03jt3Nza1zTiuVz&amp;#43;eA2MsyY8zl5eX7qytmOTk5fvv27fmbN7N8JiJKqWJRHB8fG2OY&amp;#43;frm5sOHD4rUyfHx6elpI44it4qiEJEsy7TWeZ7/&amp;#43;O7d9fX17hmw29dHIFGv1zs9O9VKj45GIcQW5vk8zdJer&amp;#43;dbscjdZFoUhVYqNuEkSXpBbDHzycmJ1soxv3v3jpmtsccnx19&amp;#43;&amp;#43;ate1ksSrbW21pWmZMd&amp;#43;BhdM2rNZnuf5eHxnrdutIOoEA6CyYrIQp2mSpqkvWRgJEu3/hsNhv9fjgNksV6QEYNDva&amp;#43;2Z0ev1PJWNnU6no6Oj0pjhYDgYDBKtG6&amp;#43;AIjoaDonUYjGPg0KWZfQwyPSToxPWUC/lF176Z1nmrPPCR8AYMzwaZmmapsnRcHhxcT6cD9I0m81mxhhEZHb9&amp;#43;UJr5RWnMOTe3o5FJEkSa&amp;#43;1kMgGB0pQA4JyXM8ejUX/QRwClNVm760pDZYrYdRl827fW3tzcfP/9H7MsNcZY6xAhTdNff/XVcDDwapKi0WgUxdHt7a0xXrd5/z5LkkQpFTVX59xkMp0v5lprU5ZRvlvrAIRZEOHo6Oj8/M3FxUWapqY0ZWm4C1rQrgsAoYW6m9vboiiUVs557ZKUOh6N4oBZlMWPP77z8trZsiyLRWGsVzqJVJwxQIhdFBFjjGMmIkWERBDkT7VtD&amp;#43;JgMDDGJjpZzBeX79/fTe6c2/EA0BUtiJmLooiCpdHWTdjC6KfLy7Isx&amp;#43;O7&amp;#43;WLhB4k4DtRUw/tbC1U&amp;#43;4FYgV0NfRCzK0jo3m02J1GQ6ub0dO&amp;#43;d2Ud176EQPqJyOLXIg4myWF0VJSjGgBWBAIb2x6SSslWEHzjbOySCR7OTuDoK8cr6v7VgH7a5POE5fS2MAkIcjPjmX4Uh0AvSQA&amp;#43;s8eSJYFjgd0&amp;#43;0HyqeeDSFDa21k884lT4OOMqACKT46tr/9nf3/f8Hnv5KsD1oLEjxQH&amp;#43;st90CCnQGdxXymLv&amp;#43;kv/03&amp;#43;OFbmk6iB79TpF9GR3cUiJKk/OZL&amp;#43;7u/st/8pfT6ohToBJSWarVGJe&amp;#43;9qGGufsYuYg2WCz4588yYjHGe&amp;#43;zSdhO7wGh4EnfDxqbv4io9GOM9pbmLQf5BFCqJ/0ll0DtiF9UmBAUjgDJCW4YgvvpLhCJQCix2saCfmAR&amp;#43;FADOyQ&amp;#43;d8E7YWxCELJInvCoC&amp;#43;pS9yT/22XEICYUkzT/dqEN5xNR6FdFkEhdkw3X5QP34vSSZZzxMUlNc0yUshL/clRGD5vqIlsqTaj9BrPur6Uv3vH2k6Dv2joxXt8EJtEbQlXV/q//wXnE349Nw36ij9Y1iWCFiL1vrvSolq9WZmLObqw6X64VsaX6PrhOFhLXQHTEGPg5lmE/zTdzS&amp;#43;lv4QdCLtnY3jHhHR2XJ/FZm/aErMpzQdYzGHnev7j6Gz84AKfox1mE/VYi5xdN3iWUZmqBSkjmIP1gfEOa0XKdsuZ&amp;#43;5&amp;#43;5JCXoth9BjTYw8i3DXAIS9kxtusBXV733CFs2ldxu0E4hoO3D1s44CGk3sVrExoJbDUGhIhwXB5C8AsB3t&amp;#43;G/7Et&amp;#43;auzEjDuRbnxYostJmLYnEkg9cvw/vu7Ott8NkINV5d9S0sU126fVvUxrqDCDWmxbWDWMtvg9aPGh9UOAux&amp;#43;QOAmIKIYdRFdCEqp6HmO8UhKqaYNOudijFdd682JKs9UQxExSZIsy5ryRZdTJL1zLoatPS/zLiBW8Pj4uNfr5XkOIShPKTWdTp1zw&amp;#43;Gw3&amp;#43;/H9gcAs9nsw4cPeZ4/w8f5zNjQWL5YprIsETG2iEj9xWKR53mM13xO7h1ArODZ2dnJycl4PEbEr7/&amp;#43;Wmt9dXVljLm4uDg5OUmSJLa/q6sra&amp;#43;0ieq23fNHze0AMT4uFiPGdMW7ZWouIZVnaEBj7vPx3jkaKZlk2GAy01qenp0qpoijKsjw5OTk7O4udwASkaUpr3KVP45kMiC09Bg0ycwzOiW7u6HfdX9I3MMbMZrPpdBrDNWazGQBMp9OyLHu9HiLO53NEjEFgz&amp;#43;3u&amp;#43;Ex/QAzCmU6nkfRxUGoGgLIs91r&amp;#43;NC1sMpnEgS1KfxGZTqeR4oPBIA7LIjKbzcbjcWh2W05U8bnm6BhhkOd5HIWiRJLWeomORN//HMTY96IoYgVvbm6CcdZGNkTqx1vW2hieHYi5hSB6hkuycYVLoLC7f6tlhNxz6jedoKXYNEo/WGvbs6D6&amp;#43;LvtN93YaqF2vbXTcpOAdTRuHLOfg83osQrKGoNPtUVgOOxy01nYli5JAV7ZPvKAB5B6j6MNoTffMq7xcBzWtH4MW7ktELdeI9Z9R9MeAQ8OmZ3jGROxgwB6EpuKiEoN3dgeTYAqbNesfkbhPm9IiN2Lu3ltxIaNjXFIQj3Ozjm7ED2Mmzb/zMJ&amp;#43;dhDkEs2YFu/RjJHNEzyIR5pvmjkqzs7t6V/b099z9oVQ&amp;#43;hIl/swgaHOV/0Hf/JOe/AeWNyBPW6c3nAegoObswp7&amp;#43;vjz/W0nPhV4&amp;#43;pnE5k96HbNdAGHnBvS/RFaq4FDPBJxiA26ihqEQPfdtPz8Oe5S&amp;#43;sPoWzkfwcrz4G6fGCxE98dFNWrO9inWezlavAK2/lyj3uLbj3hahBfZ7BE2/byimvwl7Nun1UwouAEHoJHGWgCBYG5gasaw6nar2/NoKoQFlXsyrSGuovmnw&amp;#43;jv3nIIVUeaaWzudp2f8xA8t289UNIUiCOuxrvameEhiwhVv&amp;#43;VdRQRTDqwa9PIFEwWcB4DoWttx&amp;#43;uX9kQN35qBcb5P2bPidjSI9GHqf/MS5/si5FnbWk9X0vnExTWc6J0/op9lb1FsXV2wdPYfWhilBiZ9q3VN16EfrIkTRUNjZ5qLJ5DhP4zUb6jlNbT1DKk2j9rHVBgAABcTX3K0wGG7iI6dNqEfMM3DqYFXE48s92uZ/W6CxGXWLdxy56CJwNQiE689Ei1b84Intx5ETeP9qzqJzArYVZ4CuogahJViRdET&amp;#43;K7ha&amp;#43;XJoh7uKba/x33MAsd4sNUpkV4fHe1rhbpdcW0U8ludBy3fqiGZQrNNtLUN14rcYcNIk/xVAsLZhqO&amp;#43;/7x0lZyprS&amp;#43;uziGyUJKB8bCIKt7DwHTw4CfXdUa9c6jjgU8sUyQyylK7gWLZKHhR6KnYTwzzot16wBRCov9BUSXG7P4QZtRERRBrIfuIrOiGnIL4/NfxGHASpb4n3f1MLNzbDUGvFZQomNPkR&amp;#43;CxChCK07It3ET5H7cpZih2pIbEW7ySqarqLb6sUEIq5GDQneZlT6xFzJBU5obn&amp;#43;eV9o8g&amp;#43;rfMCtg6hmRzbGw03sYp7/USF9e/vawqJALz0ssNwObci6Wmv3JiZ&amp;#43;uAqtbeubhUuREqrkDrwdI2u99Xb1xJ81I18ZMvDlsrbAa9cYP20zwyY7JTfgV7HPsX1D9kg/nrky1AVn9J&amp;#43;0HZKI&amp;#43;twSXaOzJjdPPNeBDHgKeZIMCOims1&amp;#43;S/Ro2AL6vDyyp1B0M3V7Hs1/W/PA37KIIrbrA9AsVS8T27&amp;#43;kcprTs8AE&amp;#43;j0GZSfHGE/FnQLWvykZt9hOYYNVFzZYssyYbQzNfsfKt6HgxsPLoGHEBCLdo5u1hwn9Diqxru5FhRyD0emhYN8D66xhwjRCl5J4c11Rd1EFW1ETp81wx6cQbwveGmr8gHbgrowIf8lg2Ko1a6L8csFHai/QwgeRNCOgdSFrYt/mYiUJ/FKPR4Uy0&amp;#43;MOJHiOAhzmFgd&amp;#43;sEnRdx0AFELEiNy2ILN/8G2SlE3us7zm8/zn3xGzRuPigCypzxpIXRal2lKziFza3nHU6aMNe//eJEQNj85d0OyPCdYXh5/haz7upputQKrC2Xad9r34ooyiAJffKNXjpRmUmWSWqRq&amp;#43;9Pgb5HlGhx5kO/9YzTrL7hmK5umO7X3115fi5UH8bHary4O&amp;#43;rg/Ve49tXJdHknTNqLJvWkSrqHGyoIhwVUW116iam0XVu4kJCESUv8XAAD//z1T/zS9a7hFAAAAAElFTkSuQmCC&#34;
					data-sizes=&#34;auto&#34;
					width=&#34;609&#34;
					height=&#34;534&#34;alt=&#34;Screen showing the file name and size and a big friendly Download File button.&#34; title=&#34;Screen showing the file name and size and a big friendly Download File button.&#34; 
					loading=&#34;lazy&#34;
				/&gt;&lt;/a&gt;
	&lt;/picture&gt;
	
&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;After downloading the file once (the limit configured for that file) it gets automatically removed from the server and subsequent visits to the URL are met with a 404.&lt;/p&gt;
&lt;h3 id=&#34;reconfiguration&#34;&gt;
	Reconfiguration
	&lt;a class=&#34;hlink&#34; href=&#34;#reconfiguration&#34;&gt;&lt;i class=&#34;fa-solid fa-link&#34;&gt;&lt;/i&gt;&lt;/a&gt;
&lt;/h3&gt;&lt;p&gt;Once the initial setup has been completed, the only way to revisit and change settings is to restart the container and pass the &lt;code&gt;--reconfigure&lt;/code&gt; flag. I usually do this by stopping the compose stack and then firing off a standalone container:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ docker run --rm -p 127.0.0.1:53842:53842 &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;        -v /opt/docker/gokapi/data:/app/data -v /opt/docker/gokapi/config:/app/config &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;        f0rc3/gokapi:latest /app/run.sh --reconfigure
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;██████   ██████   ██   ██  █████  ██████  ██
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;██       ██    ██ ██  ██  ██   ██ ██   ██ ██
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;██   ███ ██    ██ █████   ███████ ██████  ██
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;██    ██ ██    ██ ██  ██  ██   ██ ██      ██
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; ██████   ██████  ██   ██ ██   ██ ██      ██
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Gokapi v2.2.4 starting
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;###################################################################&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Use the following credentials &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; modifying the configuration:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Username: q12RsR
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Password: 9yyrmvLPNN
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;###################################################################&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Please open http://127.0.0.1:53842/setup to setup Gokapi.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;I can then log in to &lt;code&gt;https://gokapi.example/com/setup&lt;/code&gt; using the provided credentials and make my changes. Once I&#39;m done, I exit the running container and restart the compose stack to pick up the changes.&lt;/p&gt;
&lt;h3 id=&#34;conclusion&#34;&gt;
	Conclusion
	&lt;a class=&#34;hlink&#34; href=&#34;#conclusion&#34;&gt;&lt;i class=&#34;fa-solid fa-link&#34;&gt;&lt;/i&gt;&lt;/a&gt;
&lt;/h3&gt;&lt;p&gt;I&#39;m pretty pleased with this setup so far, and it seems to work rather well for my needs. I really like that the files automatically get removed after downloading so I don&#39;t have to worry about cluttering up storage somewhere, and being able to use external object storage means I don&#39;t have to provision a ton of storage on the server itself.&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;See &lt;a href=&#34;https://xkcd.com/949/&#34; rel=&#34;external&#34;&gt;XKCD 949↗&lt;/a&gt;.&amp;#160;&lt;a href=&#34;https://runtimeterror.dev/gokapi-for-self-hosted-secure-file-sharing/#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:2&#34;&gt;
&lt;p&gt;If you know what I mean...&amp;#160;&lt;a href=&#34;https://runtimeterror.dev/gokapi-for-self-hosted-secure-file-sharing/#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:3&#34;&gt;
&lt;p&gt;Said in my very best hacker voice.&amp;#160;&lt;a href=&#34;https://runtimeterror.dev/gokapi-for-self-hosted-secure-file-sharing/#fnref:3&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</content>
    </entry>
    
    <entry>
        <title>Pocket ID: Easy Passkey Authentication</title>
        <link href="https://runtimeterror.dev/pocket-id-easy-passkey-authentication/" rel="alternate"/>
        <id>https://runtimeterror.dev/pocket-id-easy-passkey-authentication/</id>
        <published>2026-02-24T21:11:36-06:00</published>
        <updated>2026-04-01T00:00:00+00:00</updated>
        <author>
          <name>John Wq</name>
          <email>jwq@omg.lol</email>
        </author>
        <category term="Apps"/><category term="Auth"/><category term="Docker"/><category term="Homelab"/><category term="Oidc"/><category term="Selfhosting"/>
        <summary type="text">Self-hosting a passkey-based OpenID Connect provider may be easier than you think.</summary>
        <content type="html">&lt;p&gt;&lt;em&gt;Waaay&lt;/em&gt; back in June, I posted about how I was &lt;a href=&#34;/tsidp-effortless-sso-tailnet/&#34;&gt;using tsidp for effortless SSO in my tailnet&lt;/a&gt;. I closed that post with a promise that I would &lt;strong&gt;&amp;quot;soon&amp;quot;&lt;/strong&gt; share details about my other OIDC setup. Well buckle up -- it&#39;s time for me to make good on that promise.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/tailscale/tsidp&#34; rel=&#34;external&#34;&gt;tsidp↗&lt;/a&gt; is really great for automatically logging into stuff just by virtue of being connected to your tailnet. But what about stuff that you might want to access from other networks&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;https://runtimeterror.dev/pocket-id-easy-passkey-authentication/#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;? Or maybe you want/need more control over the login experience, or to be able to allow certain other people to access your stuff. tsidp doesn&#39;t really work as well for those sorts of use cases&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;https://runtimeterror.dev/pocket-id-easy-passkey-authentication/#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;
&lt;p&gt;Enter &lt;a href=&#34;https://pocket-id.org/&#34; rel=&#34;external&#34;&gt;Pocket ID↗&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;A simple and easy-to-use OIDC provider that allows users to authenticate with their passkeys to your services.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Pocket ID is very simple to set up and use, and I think it&#39;s particularly cool that it &lt;em&gt;only&lt;/em&gt; supports passkey authentication. You set up a single passkey for Pocket ID and that will grant you easy access to any app for which you can configure OpenID Connect authentication. It&#39;s worked really well for providing me with out-of-tailnet access to a ton of stuff that I selfhost, including Forgejo, Linkding, OpenGist, and Coder&lt;sup id=&#34;fnref:3&#34;&gt;&lt;a href=&#34;https://runtimeterror.dev/pocket-id-easy-passkey-authentication/#fn:3&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;3&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;
&lt;p&gt;This post will go over how I deployed and configured Pocket ID as well as how to set it up as an authentication source for a few of those services.&lt;/p&gt;
&lt;h3 id=&#34;deployment&#34;&gt;
	Deployment
	&lt;a class=&#34;hlink&#34; href=&#34;#deployment&#34;&gt;&lt;i class=&#34;fa-solid fa-link&#34;&gt;&lt;/i&gt;&lt;/a&gt;
&lt;/h3&gt;&lt;p&gt;I wanted my Pocket ID deployment to be accessible from anywhere so I deployed it as a Docker Compose stack on a Hetzner VPS. My server runs Ubuntu 24.04 but any Linux flavor should work as long as it&#39;s got &lt;a href=&#34;https://docs.docker.com/engine/install/&#34; rel=&#34;external&#34;&gt;Docker installed↗&lt;/a&gt;. I front basically all my Docker deployments with a Caddy reverse proxy; I&#39;m not going to detail &lt;a href=&#34;https://caddyserver.com/docs/install&#34; rel=&#34;external&#34;&gt;that installation process↗&lt;/a&gt; here either.&lt;/p&gt;
&lt;p&gt;Pocket ID has a really nice &lt;a href=&#34;https://pocket-id.org/docs/setup/installation&#34; rel=&#34;external&#34;&gt;installation guide↗&lt;/a&gt; to help get things started, in case you don&#39;t want to just take my word for it.&lt;/p&gt;
&lt;h4 id=&#34;dns&#34;&gt;
	DNS
	&lt;a class=&#34;hlink&#34; href=&#34;#dns&#34;&gt;&lt;i class=&#34;fa-solid fa-link&#34;&gt;&lt;/i&gt;&lt;/a&gt;
&lt;/h4&gt;&lt;p&gt;This project begins, as many often do, with creating a DNS record for the thing I&#39;m about to deploy. Naming things is hard, so I like to get it out of the way up front.&lt;/p&gt;
&lt;p&gt;So I used &lt;a href=&#34;/manage-dns-records-github-actions-dnscontrol/&#34;&gt;DNSControl&lt;/a&gt; to create an &lt;code&gt;A&lt;/code&gt; record for &lt;code&gt;id.example.com&lt;/code&gt; pointed to the public IP of my VPS.&lt;/p&gt;
&lt;h4 id=&#34;docker-compose&#34;&gt;
	Docker Compose
	&lt;a class=&#34;hlink&#34; href=&#34;#docker-compose&#34;&gt;&lt;i class=&#34;fa-solid fa-link&#34;&gt;&lt;/i&gt;&lt;/a&gt;
&lt;/h4&gt;&lt;p&gt;Then I needed to create the compose file to define the deployment. This is just a lightly-adjusted version of &lt;a href=&#34;https://raw.githubusercontent.com/pocket-id/pocket-id/main/docker-compose.yml&#34; rel=&#34;external&#34;&gt;the default↗&lt;/a&gt;.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;services&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;pocket-id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;image&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;ghcr.io/pocket-id/pocket-id:v2&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;restart&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;unless-stopped&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;ports&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;m&#34;&gt;1411&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1411&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;volumes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;/opt/docker/pocket-id/data:/app/data&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;environment&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;APP_URL&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;${APP_URL}&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;ENCRYPTION_KEY&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;${ENCRYPTION_KEY}&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;TRUST_PROXY&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;true&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;MAXMIND_LICENSE_KEY&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;${MAXMIND_LICENSE_KEY}&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;PUID&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1000&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;PGID&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1000&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# Optional healthcheck&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;healthcheck&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;test&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;curl -f http://localhost:1411/healthz&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;interval&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;1m30s&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;timeout&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;5s&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;retries&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;start_period&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;10s&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Some key details:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Pocket ID will be served locally on port &lt;code&gt;1411&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Its data (including the default sqlite database) will persist in &lt;code&gt;/opt/docker/pocket-id/data&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;It will run with UID/GID &lt;code&gt;1000&lt;/code&gt;. Make sure to set that to whatever user actually owns the data directory so it can write to it and stuff.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And some environment variables to note:&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Variable&lt;/th&gt;
          &lt;th&gt;Value/Description&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;APP_URL&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;https://id.example.com&lt;/code&gt;, the public address where this thing will live&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;ENCRYPTION_KEY&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;will be used to encrypt data, including private keys; generate with &lt;code&gt;openssl rand -base64 32&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;TRUST_PROXY&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;true&lt;/code&gt;, since this will be served behind a reverse proxy which we should trust&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;MAXMIND_LICENSE_KEY&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;used for geolocating login attempts for audit purposes, get a free key &lt;a href=&#34;https://www.maxmind.com/en/geolite2/signup&#34; rel=&#34;external&#34;&gt;here↗&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h4 id=&#34;caddy-reverse-proxy&#34;&gt;
	Caddy reverse proxy
	&lt;a class=&#34;hlink&#34; href=&#34;#caddy-reverse-proxy&#34;&gt;&lt;i class=&#34;fa-solid fa-link&#34;&gt;&lt;/i&gt;&lt;/a&gt;
&lt;/h4&gt;&lt;p&gt;Caddy makes things almost too easy. This is all that needs to go in to &lt;code&gt;/etc/caddy/Caddyfile&lt;/code&gt; to securely serve our little Pocket ID service with automatic TLS magic:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-Caddyfile&#34; data-lang=&#34;Caddyfile&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gh&#34;&gt;id.example.com&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;reverse_proxy&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;http://localhost&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1411&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This will direct requests for &lt;code&gt;https://id.example.com&lt;/code&gt; over to the Pocket ID container that is listening on port &lt;code&gt;1411&lt;/code&gt;.&lt;/p&gt;
&lt;h4 id=&#34;initial-start&#34;&gt;
	Initial start
	&lt;a class=&#34;hlink&#34; href=&#34;#initial-start&#34;&gt;&lt;i class=&#34;fa-solid fa-link&#34;&gt;&lt;/i&gt;&lt;/a&gt;
&lt;/h4&gt;&lt;p&gt;With the pieces in place, it&#39;s time to bring them up.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# start the container stack&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ sudo docker compose up -d
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# reload the caddyfile&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ sudo caddy reload -c /etc/caddy/Caddyfile
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Now I can just point my browser to &lt;code&gt;https://id.example.com&lt;/code&gt; and see the lovely login page:
&lt;div class=&#34;image-container&#34;&gt;
	&lt;picture&gt;
		&lt;a href=&#34;login-page.png&#34;
			target=&#34;_blank&#34;
			rel=&#34;noopener noreferrer&#34;&gt;

	
		
			
			
				
					
						
							
							
							
						
					
						
							
							
							
						
					
						
							
							
							
						
					
						
					
						
					
						
					
				

				
				
				
				&lt;noscript&gt;
					&lt;img 
						class=&#34;post-image&#34;
						srcset=&#34;/pocket-id-easy-passkey-authentication/login-page_hu_f0f4ade2738d30bb.webp 320w, /pocket-id-easy-passkey-authentication/login-page_hu_94af983ccd886c92.webp 640w, /pocket-id-easy-passkey-authentication/login-page_hu_aad8fc91c1c3dad5.webp 960w, /pocket-id-easy-passkey-authentication/login-page_hu_5c3fb256e36dc757.webp 1213w&#34;
						src=&#34;/pocket-id-easy-passkey-authentication/login-page_hu_5c3fb256e36dc757.webp&#34;alt=&#34;The Pocket ID default login page instructing the user to authenticate with a passkey to login. There&amp;#39;s a lovely photo of a snow-covered mountain in the background.&#34; title=&#34;The Pocket ID default login page instructing the user to authenticate with a passkey to login. There&amp;#39;s a lovely photo of a snow-covered mountain in the background.&#34; 
						loading=&#34;lazy&#34;
					/&gt;
				&lt;/noscript&gt;

				&lt;img
					class=&#34;post-image lazyload show-if-js&#34;
					data-srcset=&#34;/pocket-id-easy-passkey-authentication/login-page_hu_f0f4ade2738d30bb.webp 320w, /pocket-id-easy-passkey-authentication/login-page_hu_94af983ccd886c92.webp 640w, /pocket-id-easy-passkey-authentication/login-page_hu_aad8fc91c1c3dad5.webp 960w, /pocket-id-easy-passkey-authentication/login-page_hu_5c3fb256e36dc757.webp 1213w&#34;
					data-src=&#34;/pocket-id-easy-passkey-authentication/login-page.png&#34;
					src=&#34;data:image/webp;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAABsCAIAAAAt2i1lAAAx50lEQVR4nNS9WY8cR5In7ubuceVRWcUqkq2WMAP0wx//h0Vjdx/mcb//Vxg1BoOZVqt1kXXkFYcfCzczPyIySalJajETEsmqzMiMCDt/drnr//G//8/ubrfarJRSACBE&amp;#43;CPCT4B/CYF/hd8k0Bt00A/xb/qHz50fXqQXffjj&amp;#43;fN0sscXLz917fjIWeWly6vQC/gbpCeLp9G1l&amp;#43;elO47fSd&amp;#43;H7/nZ03h82V88sMNXff5KHw/80Tn8MwzD6XDS3apbb9frzUZrYgBdIv4ngW9lzoD0N98k8CklrXxBj/hEkTDwQXr630BtAWLx2DDjAFzwga86Y4EvyZnI6zMjiq9MdJzzK70&amp;#43;YyIxIDIzkr14wwnnrNOVFkLouqmbtu1Wna50IHHkdNSESH1gpcgv8sv0SMU/kUGeb8yLzLI5Q8RcY0AsRXfOEZYFMaNJyYVSbOci4KFkE8Q3/eIyWUqXkpBpT8LtIwuLt/JXBAHn54&amp;#43;i76PoIx&amp;#43;cC2cIM01aKaW10pUmBjDh/FK62CRBpgOk18qXI51BiA9Q0pfkKh4RxEwwl0fkMHM5P9bV0zKNy6coGXnl6302FZf3nmieSVpyodCeYIKkJOIL4UoGgHfgwp/wCSXDEYgulcT/QUpguswfDQppL8UoaQUsyR/&amp;#43;ldfpv7QxmWVEMsA/S&amp;#43;lOxJd01Wh/3ez7vZ9ZI/AXVyk06Zq3om&amp;#43;dPfxMS6IpQQH24fuFxMuUnPRKeA9MdxDCAf4iHMhg1J1wXgB4op7mx5KA/GALQ04r3T5Alr3yxWh2ZipQiOFMrpdK74WYC2b6Cx&amp;#43;N2OAvGMB3G5VAsrmMdsL70qzDXN8gcyAii1I00LXA/LKl7HsIJHeOr&amp;#43;fxE5D9WxIkPJF54IST4WfhkfRSkmiGl/DQLFWSeAD0TRJmplcWD59l0wuxkP34ZJB&amp;#43;KMztVZlaciP&amp;#43;6kvkkTFMYlJkuy9FgBFG9Kh4XIh5eYcQHdFMLX1powIXM6RhpvpkY&amp;#43;P1WXX5PLoCvuikAJc1irkeaO0l0lWL&amp;#43;GBIaLm0kAEHSclShwyIaooikw1TVIL5AyZ3WNJ/9rQzBxdhWPpvhj6iikF&amp;#43;FlkqJ4lVNrlkCC75DtmmwuymiF9Q2MOMSUkBkMr4aTHj7RWXl6wgRAqUziWZcE3flr5MFqYG&amp;#43;Q1EfVm426wErD5CiBkMnSvAzDEk5DxHbmW0AAkNZUgyY9LcyBXfk81KlA9RoP65VpfQYXErorAq&amp;#43;ABEdI8ckF666N8CqvERYyXzvATIGVywBxe&amp;#43;ABq6lKB8PtoaX3Ai0pvELrEQ1UhkZ7AE&amp;#43;JBCCEnvX8KMWZiTqcNMKNBcvpNs0iCjF1GYRsHRXXRppUwmERGzuDMamtKuCLZPUfFZLKREkofncXxvwPZAlIAq3gaIYFk8fonnx0kOUZNFYgpF1UxuKT0MeWVUiRwnQ1IMJpuMMU72hnwe6hAZxgsdgIhomKayEIgiOBUUQDoKZ7JoX0etUVHQqF8KhbgIy4iGnsQdrXESXLpdFwya8wwPAMCBBMT0qFwgiujB00Oh340wMiAfRD/JuIVLa3pLMpEiEmJ85xMEnZlbWDjm6MUlO7YElJOeEK/ouRcomygQtFk6TxZTctgdzWC2D9Y666LcRatfCksh6wsYnFVcZImBUhGRvOFjSAWZqO9iOCu8V&amp;#43;zb6RsC8dHtOIKMbARZbQNkEkJ6AkAIWR04CcLZGFSJiIKI9EopyVY&amp;#43;RMueRV0mH0D/SCJ4egyZzpBlvOuFKIEqCV68&amp;#43;RkD8JsDpkx2pczYZAY4D9FauOSo09UKfS10wxfZLbZZpQTlMz1&amp;#43;fQQjJC8cteLfHvAnRJRkCcChHgStZIpHA05gFp066UxgBKmCdOFdh3gX2AeQ/CqptArRGcqjhMC0cPeRsgkMFeKPjyXn&amp;#43;jCD9BkhzeS9JG4ixAysJo8dfaGnwCfyambIsrIsIXxpCRM4kFDY25RTExRVFJkXvGhwuoHy0rkQUJEBxE8B4Hs22KLAhiLsi4rrnQxSxdgUGRoUxoFQwZUEydWl8WEdEOBlvFK0MRISGGJjArPYqMT&amp;#43;i8ikDIJmZgLY4ovSfRVPME9LoI8AhpkJpc5C2uTcYZYzSHqWEMGMxKI804tZACmRLT4YPQfSegcOSiCD74EL/8sSXDAIBkm&amp;#43;jZxw8BguaBJhG6WlVJSKYBYkUy7xaWWkU1KBaOhFmQbKcg/iMoe5YEP5W8G8AtozBPclEhUJvnlH4gdeLMHZnMFQhBLxelFqZDb/UHx18Q05LuQYRqKZD7QGcEkB0cwEojjpONdWvsdYIQTPHhQlg4LdcgLjWYnJIB1zEIWE4D8KhBALKmfUk82oBLjIQJYhTynUAmTBGeDrLpgGSy2IGMSTzyupWth4MU&amp;#43;U8AVL13zpfkFkRvpZ&amp;#43;nwWmZOJIgwToE9MKwcjQWcrNDRSOuKD44hckL5KRe4DAVBwF4CIg1IPOss/JCsl5DLbyT9nVwAZucZsqbgQoQX6S2HNjAHiIwekFG&amp;#43;0n5CsBae6QPg5pMwp8WTHFoIAZeJkfsOFWykBUqAfCBdcKhD1Ag/INJFTRovjYvQUvLNj9ER3rBDCOoksxPwQU10nRB9jJUg5Bpl4IBPwL73wLDy&amp;#43;pGSyx5AfPGsJwqvMAH/lkyXFyFKgTc1RfZbcTP4r0nAl75nSQFdvu4hKmf8y2Hmw6AEC9UNE7Ak4xzoLWXd2nOgrwJc2KcgQnk8GxvuUjkbny05ASpFpXkRnCSxGRkX4c2HHs&amp;#43;mcizJceGZIuDXlYWIeAArZzR/gc3KZIyfhC7LCpS&amp;#43;a20FRZhqucCDh53jRcD3Hz2kdSnqUAjJHqBAYFWC6NGimAjQ6MVcRWYHVgPAFQnmqAQQUhOUAhQAoiXpkAJsmtj/JWEGOJOaeOBFr9pwLjRYR/0DOfcfzFzwoJTNB&amp;#43;cI1&amp;#43;GX4BfnyV6sBi2PBrg/F1J4DV8L9nLeIYh/MTOAERoj0QiC&amp;#43;cskVC3oRLRPxIHgMBP06ok&amp;#43;lAyyaAcxIbc79yFIBSrsL8xfERcIs68cM52eCFqkFyCVRKDCduKigXTjZWbC7FPX5Bz8Akue3KMrXQCLhqI7CxsVxxYvvWkrCQcCFRy8jf0hnOVoQgulPAq25IIaHlJmWSQM4K5I0IOGeUudhRvxZVq5kiIcrT1caggjcINOGPuWviShfJXrRhem&amp;#43;AgXgWiHskgMXN8nYhDBN8AfkCJyDpAzsKhD0x8qvh2SDhOOYygEI51w0&amp;#43;xEFKSW1Tn44BiySoX9qkOBfi1grI6RkbWAmrmgAnS0zoNeZkN66QoDymCXylpbqmkkvLnER7n3s5PiwkLOLKApeIokdon/EnDHmDtEwewVWAIjhmZcOrIeUnFYEgwBNUKA&amp;#43;mqDoAnKUKwt0lIF/mfgHATk/vYT&amp;#43;3rlpnM7nU38&amp;#43;G2M/QtoyuflBJlwrexQXuwp3ZtK/sE8f&amp;#43;jYAoZRq2na1Wld1HQhOki64EByFnfIUaIu8dwKTJClf6z1Gx47js&amp;#43;B7hU15e0mpCKnJ/mitKRE0SzKIWSmGX5KlB85nLuwt3eVk7f7l&amp;#43;fvvvvvl55&amp;#43;Hvncfl&amp;#43;0UJXi/lPSr5sOLRdyX2CQuHe9c&amp;#43;H&amp;#43;NAVDX9d2rV199/c3964emaYCDvtS2QzCT4mNPYi4JFkufLBBSP5xZ5nWcAyvQiiFtgwZoNP&amp;#43;EgookJxR6kOOC1CAxK/9ePHYIXqybxvGXn376y7/&amp;#43;6/d/&amp;#43;67ve&amp;#43;&amp;#43;vOs0PHL78Ca585KPc/K1XucZAEIEBr9&amp;#43;&amp;#43;BZDrzaapG6lkibvQwFCJzM&amp;#43;jEnqXU7uEjBw4i1E8d0IgfZ1yCr2AVgxDsSuFi8JoVApGcIggC2EvITdcQ5veG/B2Mi/Pz7/89NPPP/00juNVhPFf89BVJUC8/eqrYei92EU/F6vOQqR6CT12aoPgYAW4JYKrEsH8hDhaUIUgRGGKAzHKzaqAhXKWamZ02BWnKLiI41MW7SKwRLcTYnE7mWkazTRZY37Fvf6XOYgG0zhO4&amp;#43;isKx&amp;#43;Q86Us4AxFqYyWK4gJGkAU&amp;#43;gBSIeDPQGOHlHeEcTAQC0qQs&amp;#43;T5wLgYYhFmZodyKiXnXrLVRZEg/y3go371v&amp;#43;SRc01FkEgHFFjXUdnNxVp8ykyVT4r9E6w1mSFZvGNjVkq0paKsjIYoWn6RfhAzL7z0cMDFh4Kf/y&amp;#43;p97scEANG/hVS9cXH16l7QkAR6gsO4GOwX8QzEDG8nkk8XFA8eeUiNZU6P&amp;#43;CS9AXeWzS8/Hc8YP4jzHiA/1CzkEg1WPDRByytEMok2SMobIkW4rKyFVPP0dzA1WSKXyR56SZjXdWLi0TAf8sDPv4EpViXvSll3w3RXPgZhoy5Tl3UM0AsigAiU78gdgk4sw5cze/&amp;#43;Hla/TEHlC6WS4hf1NOnZZRFxLC4wD1WyVJZ5EM&amp;#43;ddIX2xK5mPcvpJA2QC0sksm3PndIAs/ppqqYukvtfkCB8rxw5hthRee&amp;#43;NMTYevwMP8v8&amp;#43;YaD5CaLoKfPpx3SG91BkaCGaKTq0WOTLgNsTRdYAIYoqUnwtA7O5JqTv&amp;#43;zXl/TRyYFBS1/XNzc3Dw8NqtTLGPONxOp3GcbT2YwmPf&amp;#43;xayx9AlGIsIL8UHXKslMLMBkXuQSmd8VN6eVnPbvYa7RLtF3f4kQf4wiwg8W&amp;#43;a5u3bt3/&amp;#43;85//8Ic/DMPwn//5n99&amp;#43;&amp;#43;&amp;#43;3f//53a61z7ktdyy9&amp;#43;uOArd2fHk1IB8GL0rLx9gNjWRa/o2WmUlo&amp;#43;tR0sSLlxu&amp;#43;hhcqwFT58bvA/211rvd7p/&amp;#43;6Z&amp;#43;&amp;#43;&amp;#43;eYbY0zXdS8vL4&amp;#43;Pj33fL7DK5x&amp;#43;&amp;#43;&amp;#43;P96sYDJ5Gf1zwtm5cwt8yA&amp;#43;S67qpXiCf/ZLt3JxZ1D&amp;#43;4KFotOdgHcd1vrAXIA9U4eGcs9bWeFBL2Zc9YmuXd1fSd2Uny/whL0raRcE1/hIjWU2U9mI&amp;#43;gZmykawRV1gA5fU4aZ4/ibUiakz9fDpcObBP1B6Px8fHxx9//PHp6Wmapi8dbOcHubQpeYbEz3OMsywu/Zs9x0WhNWgAm30/Mx&amp;#43;i6LPJtgiumn&amp;#43;YCYCPf&amp;#43;NYzu&amp;#43;CRJ1z4zi&amp;#43;vLwcDof/&amp;#43;I//&amp;#43;P7773/44YdxHH&amp;#43;PbMcF8vRFz16k/bzb3udhskXLUXqXlUt4r8lWuKutPB&amp;#43;9reSBrijf70b6JPtPT0//9m//Zq397rvv3r17dz6fTUz2/S5Jp6JZhV8QuS&amp;#43;jmF/4gEHKwwci0Z/e1XFqY27TYfHIAJC8NOT5OYgXmAftJCKQbuhL0sE754Zh&amp;#43;Pnnn/u&amp;#43;t9YeDodhGCgIoOLTl7xeFO95ii31hglfDvGI/GuS/wRFIhBdBhI62SxfNBIU/Ob&amp;#43;/A9M78ajzDn4aJN4ROsLe2Fr7TiOz8/Ph8OBfuXEMDrkL4x/EEVQg3qWz9QcWVJ/FpvFWcYZWWLs6n0Z3OoUhc3&amp;#43;n8X7KcKdCwJxknAS33BCpNEyXh9f&amp;#43;Qyi4NUp9IULPfVl6f8LXEzE&amp;#43;QDsAoUSJl5Sn4dZYsQFUXgjMiki4WJCB7QUsRggcx46dcXJeTy8OHJSdJE3j63MVI&amp;#43;&amp;#43;aoagrCt8gHxUhCvfKvtX0itSysupG048XvtsmUf6ONvSu46h4/WYLEPLeapacuGMshExPxBnFIiyXBHLHZ95BqbIx0EOtmf5hvnt&amp;#43;LkdRJN8nQMU0NZ1ragTAIAMSzLi9Hdd11VVGWOmaaK3qInM4SFi9bxpGu/9OI50GnGOXp&amp;#43;miTxEmm6gOK6qKmKbwaO8dEn/ZIioo9Av8hNEIaoGpPQzExsJ7iIPsOMf62iCOktTw4tmMotlFjMZPJq2gYsa&amp;#43;eJ2fRIZkUer3AecBwB0XXd7e9t1HTF6HEdyquTxieht2263WyLiNE3jOFZVRfmflPbZ7XavX792zh0Oh9PpROSuqmq322232&amp;#43;Px&amp;#43;PT0ZK1VSlVVRear67qbmxulFH1P3/dPT0/H45FyeeVtxkfzaSiKjtRUyUmzYoZypgcShHOycLFOYLiIgwJ06ARqeeA1sZOtGczaX6Mb8fO0p883KlwSnHmBpjyklG3bPjw83N3dEa4nEElIpqqqvu/fv3&amp;#43;vtX716hWJ6jiO79&amp;#43;/r&amp;#43;v69evX1toBj&amp;#43;PxeHd398///M/ee4JDwzCM46iUur293e12Ly8vm82GpJ4ovt/v1&amp;#43;v1mzdvtNaJr0KIvu8vlaAo6QHP8Pmc5Con4uaWKiaL5&amp;#43;A1pQyKdDKmIlz0lyIWl31MQZQ5EK4KpD7OotOtRMDLkOwDXpjsyXq9Xq1WJMta6xGP1Wo1DAMhnN1u1&amp;#43;AxDAO2xcL9/b3W2hjT9/0PP/zQtm3TNNba1Wp1f38vpRzH0RjTNM12u22apus6pZS11hhzPp/HcWyaZrXiBapIM5qmuZLJ4LoUtYSA41nHK48TtZ8xh0xlyRjE5iwR916yYQcBGg0ct3JliY6VNl&amp;#43;G3dHNLyj7oSxIxsAX90wS/fz8vFqtcsc1HqQNLs6aTNNE2X8Xj/P53DRNiglIV06nk7X24eGh6zpSqfP5LKV0zmmthRDDMPR9n/TjcDiQBtBxOp2uiD97&amp;#43;NgTHvtOiBK5YuJZggEWK1PkAKmomiEMzThT6NLRy&amp;#43;AeygyHSIYlIU4oF&amp;#43;Px6RqwFPvZwjrXGUDW&amp;#43;enpqaqquq5Xq5VzjmhB7CHPTLUXa&amp;#43;3j4yO9kqz5y8uLUup4PJIBeX5&amp;#43;rus63XvytN57kn2yXeQqpJTkA87n88vLizHm4jZzKQQbpmZuL&amp;#43;H0OF7rqDfuWsL02voF8R9drqeFQ5WC41yfAGYiJBY3haSJ&amp;#43;QvBXsQjnjtXvbtUAe/9NE1ktZ&amp;#43;enrTWBFpIVKdpIidMlj0BSsr2HI/H9IoxBgD2&amp;#43;z0ZMTpZXCtbplKBtVZK&amp;#43;fLykr4hXetSThKdyq8VYjE4Arh8QbJRRX00efDyED5bBo&amp;#43;RcDogjl2JspyVI2oaE3ElT8tqQfkINNUeG1OXLMhqV7hfoi9Rij7IY9B4WvpsAqBkwelkQpkUDJOTn0tr5gTZ&amp;#43;hQ/fzx2Y/xTEvRS7HJzNEXNCX0nbOQXuVNacgFPo3pAvE0Bs0HOVHRLOMi7nBkvDQ/E0lw5NeQ4iLziBIhe5P201qUD1FonopBvICGlj5TSnYA8BQdE1vLMFDokN5Pm/Ohd4hZFD5eltLjEobPOgpWF8Ih5AJql3NoQ/aAMeepbT4QXImeVBErnZJ21TmdLh38k5I62BHDyeNY8BE2Qq1C41AeH9YC8sOMVHqQYOD18KY/zJhz2hKKsg7C4uXRmvrELQ7Q4p/ySD4o/CqqxdjIWVybLY7Muwb5CUZD0zoT/baH9c3&amp;#43;aAiznhnEaJ6PjPYqYfIgt6uzc/fwmozco0xBZF0VMj4eTrPMW1xK5&amp;#43;mzkD0lgF28lqiWiJyOT6J4gE02blLwpZTnlQxZfXp55NYtHz2KsGyc7TtZ5yK&amp;#43;zWueDrKR1TH1jjKUEknMu5WOiLU7S0PdjP466jKrJn2DeySY6Jrnk&amp;#43;mIMwiALfb7jlBn3Itw96eJVISOIeQ178JFsVKJvSlokfpDdv5T6dJBRIlz7oQtddwMx7304nVank9aVF7w&amp;#43;Es/JxAgzmX&amp;#43;LUkV5cevieAAyJk1pxORyYMAwjsNodE7goBIlLOuL1LabJb6zzhTJT1Gyg&amp;#43;Yyx2nqh34aR&amp;#43;fsVT3/iANM9prse&amp;#43;kSvPdxoi27U2LGwgSRniVL9SEGXOdK8A0BCv/4048&amp;#43;iELtvK/rpluttNazfsEi4x/VNHAKCScDtEyKUGCSdGhSQBssnSlyhMJHExQVKMOe1DVUxmizWMALa83hsH9&amp;#43;ejwej0HM/8EsMd3cNE0lpElmJw4ZQrIwJc4pM6z0aJ&amp;#43;Qow42ehjfP75T37XDNGpdWWs325vXb97e3OyqquJMcaYJ4o5IY5emxpyPoI5&amp;#43;toyUrDN60lpp69xk7DgZFzMYPn6Ri1&amp;#43;Um16WOeRErvmzez&amp;#43;Z8XQ6nfvTZIYLm/mbDnqUMkGWyHrpVBdHOvPjevYxBgTdMufT&amp;#43;enp0XoPIWqzu90hBIzdqq5qnCkt59jDZ2waGCvS8QmXOudtRNgOjWNdVXqydjSmn4yOuMbhYxu034VolyNJy1JwHk3AW1G49tB2t3b27uX9FuXlU5ojftVGfcJ3/kOHc64/n3HUAaeOAF6en3e7u7rG3JGilJyMhRheMbQE9nH9OYnu13FKHEOqikJ8Y9yYNSCQCXUCPXmqeECuDrD0EYEipoooK8hmpVXT1rc367qS21X9&amp;#43;PNPdf2JDPjI8XtTPy3vFOLEvie7fzqf3r17163WUqr1ZlNVFa0xxlofQh&amp;#43;W&amp;#43;cLM89SkK/AYQh0&amp;#43;yAcE/CSUA5AhRnAo/xaXRaB4p5jQSZWAVCJKUTUAaK26VXN3u311uxXOPv0iJszAfGaPXAlJf8vxaY53cckAw3QltRYY7nnvxwmLECJYiLv7h/V6g6rAhIh2xuXgObNgGRCQbp37Xuf0Ea8qQaPHeUKAZrppGNh5Z4K3Dm5NBRWqk1OQSlaV3qy6u9vNq9ttU6n3735598vPT09P4zD8yoDqRw8pZdM06/W667pU1frIQSlSytBd1Fj&amp;#43;setqrVVVWecnM6FABlwQAMtkTufz6zdvN9sbFTgkkqiXaCcrQXIL6SVr&amp;#43;3N/PJ10mjIi7JgEJ8Xv6Zm9tWYajsfD8Xj0wm82Nze727ppAKRSsm7qzbq7u9nubtartrbTKHDtEMWz9p94UBfi69ev//SnP719&amp;#43;7au619lwDRN7969&amp;#43;/d///fvv//&amp;#43;fD5/sh4QKRSmnmmpKABhjdm/vKAHnUBKIVXbdGk9VMcpCJ/RUDEx7Hj5eqKlG/p&amp;#43;GEauB1hnhQWRkzBBAVRcGSKgkSACkxn78/Hl5elJAHRN3TX65maDyeRqtWo3m9W6axtc88AKcXuze/v27d/v7//atE&amp;#43;f2rgJAG3bfv311//yL//ypz/9qa7rMqClc0pcRLmjv/71r0KI5&amp;#43;dnKuN8yoUpD2GMstYjOZSWSmmDgd04DC/Pz6v143p9o1UllcoJn9Tg43OJhnJW4zhQ5kornSCGts5i9GxFBviCq/TkLawbxmHoT94ZCV4r2bW11vr&amp;#43;9uar169uX71q26aqqxpdEpFZeiG13m639/f3N7ub6jOcMGnA7e3t119//c0331AZoMT&amp;#43;9BgpLKDSoxDiL3/5S9u2n&amp;#43;P8CSuO00TTohU9olXBMWBseD4d&amp;#43;&amp;#43;G88Vspq9yBIXnFQxdkmnM5Lhh9czzsh6Fvmna93mhd4Qo1SueA2WMMJ&amp;#43;JChohwMBzvT4f9&amp;#43;XyQIDbr7vZm&amp;#43;&amp;#43;pu17XdH7/66o9fvd3e3FS1psY5h8kHIXhFRqV1wLlKy7iYxKf1CKFv11VVpZplSiYnPEr1ReccFXYI4H0&amp;#43;9ELVt0J6pVW4h7qSNnAXg/MQhE9jiHK0VjkZ5Vl9grxPQf8waA9Wx0x9fz5671arVV1XCsCOU5ELilXQtEaHEG4cx/PpME19U&amp;#43;mubW5vb&amp;#43;5ub9fhWO1ub29uthUaZYfIyWESSmJOldGSF/NOjk/hAGWNqFBDzEh1LjEvlZDbMsZQ6fEzhzVASl3pqmkcuoEQ3AQu8LoBKGqu70/T2Kvtpm1rpJgnoGiNeR5Ph5enaZqaplFKOTNJGv0K57i6UqqupHd5Tjhco1hCFL2ZOZ&amp;#43;PZhrWXfPq7vZ2d4OdBrvAwKamrh4IispWjLAaBAsAs/L8ZwgiAQ9yqtQp9PHIlnzA999//&amp;#43;OPP36OBxa4gkPXdt3NjQcw1uAiNb6uq6YJlm3CVOLpsN8/P95uN9WqRZmm9Xbd2Qynw8svP/9wPvdt11VVhTUAi41OFZkLXdVdXRULtxZrEWAmdjoe9ufjvmvqN68f/vDmzd3tbrPdhK&amp;#43;rK1o&amp;#43;lMteGDOYgE5tqq7HwPgjq4X9pgPTtj051W&amp;#43;//ZaqwR8/jDFPT09/&amp;#43;9vfjsfj5ygBakC16jpZVWOg9kR15vV6BSD7vvf9eRyG56fH3Xbb1pWn1oogMSNOLfzw/t07LCdMAckjmmjatq5q70Xf92aYJjJBs8cVQOm58&amp;#43;m4f3kW3uweXr19eHi4f7XZrJu21Uh9Dhio8mDpX&amp;#43;qpUuSyck/AZzNgmibqe/iNYzBksvq&amp;#43;/5yRDWr7USpYIcC2Fod52aZp6qYRAoy1lTGDHU6n0/v375SSIUwJ&amp;#43;mdPp&amp;#43;P79&amp;#43;/fvX8cp0lragzA9eIwq6p1BUJMo&amp;#43;nN0J/P0QkH403JCOr1OKP96u9ubh7uX93e3q7R7CitchiNlsfZmPL2glafk0rm2s&amp;#43;XSEAQDy5LNyUMvfzIp&amp;#43;Xgym9HcrerbuUltSoIGo71LkRE1hhaWdta&amp;#43;/zyIoSgjhjqPjqdTkLCar1WAb1KM5ly7SUfE27TZDSZEGPpjGC/xr7f75&amp;#43;H/nSzWf3h7euH&amp;#43;1dr3mUsFlqdZ5m3OeqjErnC3eDS45d7yn0iBoqu9bJgeUn9RT3gc1JGQQNCkNVstlupddXU0zhJFSD8OI6Hw4GWP8JH1qRtVbDnkha1d951Xddhzxm9q7VK6&amp;#43;1KIVMWR7MBsTbYDePGoT8eXk7HQ9fW96/uXj/cb7fbbPQ5RYwyb3kzJ3pGWn0UV6TDGi&amp;#43;iaI7&amp;#43;rrYT/EZCxOY1Qj4pAkgVmBILlaUClK/p8yYGOCWjtW6blgygs&amp;#43;50Ou33&amp;#43;9PpBBK6tlspJQD6/nw&amp;#43;e&amp;#43;ohI0zTNNwMOY3hP&amp;#43;8rGyIY63EPFBBc2NAuGvMg&amp;#43;2N/eHk&amp;#43;HfeVVvd3t1&amp;#43;9fXN3e9s2bHkxikays&amp;#43;xngSzCNiY71qpMnFr5rCEBIgE1uKV6JFXEiCWJGVTgLCuXn5wLCt9mbX8&amp;#43;7/f7epo8Zo9BQKpxmuBauSCqQ1igMYFs7eAoUCCZ6PvzOA4hQpLKIEHCW9iviylQyzGxMZM1U2Dty7O35v72zVdv3z7c3wcMIBXEGimlTl0ka64lU9TmnR25zwckuFyN&amp;#43;qxUKLUMUYt5kugU&amp;#43;pYtKkTuVDj7nEycRyx/PB7V42PVNLquu7alBj0BAQvhYn7YmISUCeJQV2iWeWE&amp;#43;UkG0P4Y2JPGUaXaOVqcP/HBGW2vGcfB70/fH8&amp;#43;k4Dv16tbq93d3d3cZQHpe9RIrzJJYtSgVSEugnXzxOkzVWKlXhosgh1g6y8OmRMMn4OI5lkWtxlDmJxWc/3f5ghXxAc1&amp;#43;ZqXMrUkGQsm1as5rIuQH2Ag9DrySPO8RlLDSRCCVGYDyM&amp;#43;mrJ2EgfK8H6eNjrYGP8&amp;#43;XyaplEr1bbNerVSSlN5n5vnYssRRruOnltiZ7wUktgTkAGGAlqHuxEg6roJrknR9mQXM/y/mQdp45NfLUB&amp;#43;sQPKpWWk0rrS4Q/l5TWOiVOv&amp;#43;jgO4zCSOarruqKx8boJ9l2pSutxGo2xZCWstdJayjpPkwko6Pnp0fpRKZjMJLy/2W6bphVY/akx/1KLirAOGj7uOUqlMalAOinQpTgfNLEOQLmp6koIjhvbpqlxqn3ZK/0Bkl0p9ZbgB9KwEBvB2VdB2bQfe5fSiMKHwsISSuHfEvMQbduu1uumW3UrjGYRYowhKpu88JhQC7JsJi7XGGMaa&amp;#43;uqhga9lJKBgLZJQ5yIkbyFgOCx7Gh0fz5L7VWlPKaNwgWG4fn5OUhxVW02a4SdwV6NE3PA0wZvUmqtAPfgCL&amp;#43;KYIwUZ82Ci/RCNG17/3D/x6&amp;#43;/7vvhjG3PYlbBZFRDDWH0EplUQ7ebN2tgc4KbbuEi/Nz2i1cWIVCgTBFmGCX18qGldKJYfjau/7UgflE0ib3gUunVZrPebtebTdUE6z8ZQ86PYL73vmnarm2VDP52xIUJh6mn9nddVW3b4LKUlcQGVoNgvwTkZJI1tTKqStHQltZqHMfj6XS729Fq0sS8cRqH4Ald2lYpCDtqIvXtYAnTpS2B6IdVt/r6m2/&amp;#43;/D//18PrN6fj0TqXWrEJrVJumfp8Ihyw4VrDOCV1swkqBz9c1XWF4wLk3IK7M&amp;#43;Zl/7LfH6SUq9W67VrM8jriCmISjblUFA6lckEfeO6FsA2hDPpBa92t1916g5ln/Ko4R3Y&amp;#43;n84Bg8qu7bBOEL7XOjuNyINhCLANc/OkNNSqgLtHxr6qQt&amp;#43;090Jhza9tmt3NdrfbrVerV3d3D/evNuu192IYgs6N42isUVJVaOd0FbB5XVEtQsQezaATlK2k8Rql9N3d/f/3/&amp;#43;s//vGPwzjGyICDZ8TIo3WuQtIQcjDG9OPY90OP16Xe8REfrB96533btKvVSnF3f3jzcDgMzh36AaRqt9vbu7umbYX3UzDP4bYBoK7qYE9Wq6aupZJFdZbDSvyqicomNBVS18GOTMYArlw54v2nVjA7Tf35TO3ZxBvKktppOvfn4/HQNE3EY1G5ovr5WD121gVrUVXVetXd3d6&amp;#43;ffPm4eF&amp;#43;d4PHZkP5dxPMj3HOV7pqcVqoriqFVoY3YGAGV4BGiWSZUxTWSQmbTfAr2DJpHcMoy0w1RB1sQeRez2DvgsnqhyFQJHxunMYjQvJ&amp;#43;GJRSq9V6teq0VMMwvH///nA6GucMjsNZ4VVVNZgV0HVdUwPkNIFUqm6qtmu7rtI6oEwKZxz3LNWYGBjHUWM3n4&amp;#43;VhgBDcA10YyYzGXIXutLTGCAm&amp;#43;aTwFEIE0y&amp;#43;4M67sN6VcAODyoCT&amp;#43;LvgYXsBed1232Wx2N7tXr169uru7x79XOLxIDx9CZymbGqkfbJTGUALybg8SStRAN22sHYcxJXBIkJkFLjzqMA4Txk1KKtpBjxCcktJ5gUmrup5GG3NN62Fo2/bl5SVoEkbZTVVrJcdx2O/3Z6y/E2Adp7GxhjZ6pBbGAZ9lMmYIBlp64amiMhkboqRgA2n5Zhmibox4ww1TR2lE0Pho4U4UdktgR24INlUctcWq&amp;#43;NrhNnlt097sdl23omJJbJDluRbqXBmappaV3t3e3j/cv7q/2263bdc1daNRQFxAS8E6NxpNvSbXqgj4A8zX&amp;#43;IboVHmwK4jw6XzGHEiAbkjxoOWUm0A0axE7V4oiCedBQ0XLwCVgAsJEx4XZiHCZ/eFAAY6ZptPx8Msvvzy&amp;#43;f9&amp;#43;fz6TjFof3OHL2NBJct60chmAlhr53ztbTFDC7VNY6knohgOAyVzqDEHhKpgavEUREhmerXMUhsfBdp5Wugj&amp;#43;inaigCy65pS3i67pZrdZN3dBuAdzoRqgBCee978/D/nmvV6vVZr1drzdN00IIl925H4yxWpF30ZWulOZ1jWPBOS2VJlIjKTUwWpTB46k/nc80tyWlonRmMOko8rRQe1M3XRccD&amp;#43;6t6GVauhe/kzCYJciMYAjlTrc4e&amp;#43;1diPhOp9Pj&amp;#43;3fvHx9PWHih/W/GcTrs99779XpdVbUXImBBVQFIrJHZvjfDMNRVTX3XQVGsm4KCjgHmS4lRJ7t/CaCVpsYy19QSNi2ialptmwwygdHgMyIkCQFoiBkqSbvipSYszw0/2P3mT8cTdh0J6jv3xrp&amp;#43;GIU49MMYDE4bqEOQRTnc&amp;#43;19JgSUw7gKj3Yrjhi6EJULoeDztj6cgcdS0HRAYBxBCAJqyetV1wZXwbIx30vP&amp;#43;pN5jxsq7uEsXxdiIsgyueS3RsIeXghI4J3GhfwBJ/QrTNB4P3EsRICJlkgXbN2Mosz1SgbNtWsKDRB46jY6ubbu2qau6wzCmRhTV1CFEJQYEp4eQI&amp;#43;7zIi/XGRDJ4nBqmH4BbDwNShEsi7FmDBo9UFPiMI6B55XmmA6hTlPXWIeoawb5Ku2cSm7YIXwM1D&amp;#43;dnl/2p35IE3Fk9iks7Np2u1lvN&amp;#43;u2qYOPCcB5whXEA3kAqxwTt0Wyo54SP9ATAIpkUzfk56dtQCZ1Xe8Ph&amp;#43;PhQKAVuTBadIxUDDHGBwyOO2TSCBQayR5oNQQs32MuJ9ir8LBI8BrdHtNfV4jvqM1AzRd&amp;#43;mB8wW73Tp8bauORP2gSR9xHDugr5SMovCoy5Rtnz3jIa44O2bTpEQMQSXrSTU9DgvAu6fzw97w&amp;#43;H0wlnenI8hcvx61XX7m62m9Uq&amp;#43;B4BBGymaaqroBAa4do4oqUiOJjcoBBpz2HC7koF9afyTxVCnq6uG4VgwJgJO5p4pIA2iEIV8EqGME1XGmcXRu9c3TQrDBpwGCTwtW1qMjIcN/BzKl5HW5SlBlEOHvllYD8L5y&amp;#43;WjeZ&amp;#43;XRCg4/agWH6jpho8lyXOGAlyRBd60mdq6EUeUDpEV7FHYRjHl/1hfzoN40TdqYGp2IfUte2667abTReoFkCbQ2OFOU4npSXSkqdCY&amp;#43;VSyUGE0Fel/ktFTWrC02Rr2zThy9frDSrW/mU/TSOt4LHZhiOYC0RWlLnSgco1uiX6kgB/SafJjleUSsMNpYq8x4KwQhQDkPM3irEtX4a9i5xwnmXRmS14UBuojxkD2j5AcS3MT2gcAsQM8faIDEABEQHSGWOlgEopL2XqyavrOrj49brC9QUwmhUUD4RvrlTDSi0I6tHP4S0MUCj3kNZrsQjMKOsgUbRvNhtqWunP56EfDEXLmMZBQWavyG1&amp;#43;irfsjctjS942JG7&amp;#43;GdcUBpGWCPO&amp;#43;oGKeOi1abmZ72C0JnddxSONFQqTBJu918p9kg0AIciwYN3DKQeVRz2IzDS6/hBsNTBPQ1k2tq1SLJOBVV1XXdXVVeecnZyDWF6lYqrnVhspD1A&amp;#43;LGRTti&amp;#43;Ey7rcUxAwvNJI&amp;#43;dq0CbpfCAR4lToNtxW2J2EpK3hIqLxCfERz/E4FKzBtgiimuthMpy2VAZ7lVFGbrLBSjWjDTFk7Xe4YtkufrAvAIDODuhuCNDfbgMVLkfdsUbfkGacdDJeO&amp;#43;tkrGtSzw0TQW56IUsJDQHjWCdzyjk3mfFEUoMJh&amp;#43;U2w3VDozH9ciczT4hkHcRI2UMm0AKKn0oOOkCESCx8264qYsWTJThi8m/IL1m4yLSxJhuEZjlHH/csFNtAgrAgMk6iCkXTdLswNituI5Xo&amp;#43;HO3E9GdrqE4TXPD5DO9nzhheL3moXAnxZLhSiQNH2fLzKbjlAENshwPPyfpw8wd1sy/VXvHG2VMicpUut3oigjXUIjIJPHmM0F1AgdWtihKgVGXKa5BYoHLw/pshNgz5vHFz4T96njTQuLmIeV37xpYmhEljwl7RXjCxaqpjuxVoGPEUdZyfwjbS7YQoNNO/yTW13IabQAnjLybQfKICTliJEQ3Kn45xibKZzsrCbebafV0CO63RJSdkhn8YRMt1zf0wc9My/TrEOa&amp;#43;KKTrjrGYpq7LuIFVIhi11IRSFQrmhVgSSmcf02CvNjW7IkqyHQXBSKIyQ235IriGsFzAa2IAPUOAvjeX447jHM3Q3U0KBZ4Uj4efDRGSPodpWUHlxerC7WY6uAhTiSSpuxBlGisCuuIMkr3MzClGIMNq2KV9hWbDKlqv/soI8hYuGL1joEKHQb/Ay8BYtIJbI46pkHDtOALy3CxBNcQNzkvBbDdamSOfcJwFMcJUoRy4AlJsRE2mkSM/nTeRimEJcAQSzK&amp;#43;1KeP6JdfJXrnJwmDwYizp9x/pQDWi8ajKTkrBIbvsC4ED1hEthyjzabUTmfJC0HeHxygNkIxd5SKaGu6nXXIXyUtKcTmQkUAsrwq2QE8iqciVJFySUtMRB7xniGjvyGjE3FZZhFCzEQK70XyTZBnuFNo4xA/ZpUvaCVLq11574/nI7DOAJIDDJaAGFibkZjfb&amp;#43;hgDCEAlLFbZYBIxcuX9Cu9kmjNUJmpXWaYVKK15dwWlmnRcCaYqKkP6ZUFz1VvpChtBRYnD3mngslZVM3N5vNbrttsKXSxgkqKQMDuPYWZ2Z9niYXRTDqaQjFxwYNELOFPwG3V2Yr72XeXycP5bLFSYuJUUo5ID0aKAJOyTsbbn6yE9WOMAb0vNsjkhG7CacQimOzECUrNVZua4b0ETOriLCK9YIQruG&amp;#43;frTEEnkkqg0L3vBTalWJGrRV1jolJ&amp;#43;IQpYNKl1AeMlLE81oMnvZ9ldgRtV6t2rZVoLDoFjwU5RiKrTbTLUbc7jP0zrmYpBzz5kUoQFHasJcb0UCULpu46h3DobQkAW2lBDb77Ziilt45rauu9bRsWlrfAk2FGbALQulKI56oUnt6on7cStwndFMM5BNK47nXAEwEh9CpVUfr4NKxnYbb6EogmDe9ZOvPS6SCd3QVTMMGQ2wmayFnFCHvIsurGZak90UMmrY7jSTOoDCpYJq6dcHn8UazXqS1PovD83eaNIHvmKFp6QbaF49P5xH1oAqVDtyNa3ow7jfGUJpTV/j/bCQ4pY1KAUi5T&amp;#43;sBhTSONMVFXktgg5&amp;#43;P02ZKZB5CyQCKmW32A0mmeJQ5ROCTAdbFbMSQFtniZxJFCbfctk1VIFdESPl8haOQaQWEoAP0D7YKiOwnOD6mcIxH8WKYFteVS0A3jug5j5fnDkHqNZqwkd/YYJYRfcVwhgojefJ6vhYm/lOuqgpps6t0e3Kep/IXTXGzzbGScRALjOgFb2OT4iwVIyxeUYrepR5jP8/H5IXhOQ1OJWWMHtArQqQoSTp1nWJ9DCIcxu2xnYdio8Z0pBXpc4Ytgi7rPFYQbTJ8lnp5CDoLWkEGl25BAtLTcTUnSq&amp;#43;ICh0LXUmjY8YiJe8olEXnC7MexWxTkykW8xXZ4/kC4iiNV/PFQPJWxmUnSdK2OB7iXJKWIvGSB0Oj1yEKubzUEgaxkkfbsMCJS7EBbfnFVo6vGe&amp;#43;nWMnEZfPF&amp;#43;/5TkfWMy8aSOHsvCIDw1p2xd8RjFVYr4YytqH0D&amp;#43;wKciRlQatRJ68Eke5LqKikaIPNFqlMuapCoHFWY6Ydr7UgPXsKVeets0Hh5zFjn9HFXoah6UOxB7xdxdIwyo5SiCVaqrRvrMhCVvPJPWgd8YM&amp;#43;nuPaXPj5L&amp;#43;JS&amp;#43;gAO68KOxph/6/eFwPJ8Rozd1hZbTTM55icWylO6lPGMIp6UJmOV87k/Hk9ZBIAKJJ&amp;#43;OFr7AIQ&amp;#43;Vyy1MA3FpkncUlnVgD0uLPheRy5qWwPCJ5b9pNegbyCulO&amp;#43;XaYbeN3wSQQJXtczsVxDT&amp;#43;Z5sKIcUYv4UqHDfSTodkqS21RFRZ4I9OjzZSU0pYzLSdrFr7DDMNwOJ9e9odhHJB0nHU31mql66Y2mptuhBB1VQmsc4/9MJwHvX/at21rwnseW2MmqeSqbYe6FilgS2EqL6bvRWEosuuW879KcpUGJFvVzJ1c488lC1i0HWahhuwfHecq8NaxkuaSY6ScdtHajm3bMg24YSEvCO&amp;#43;57yVIbLipuHOfe&amp;#43;6BKiWVprQ2p5gSF3CMdzz15xO2a3kh2qY9y55aabz3WNrskv3RSnHbg/On0&amp;#43;nx8en/BgAA//8F3pF0OVSwGgAAAABJRU5ErkJggg==&#34;
					data-sizes=&#34;auto&#34;
					width=&#34;1213&#34;
					height=&#34;1021&#34;alt=&#34;The Pocket ID default login page instructing the user to authenticate with a passkey to login. There&amp;#39;s a lovely photo of a snow-covered mountain in the background.&#34; title=&#34;The Pocket ID default login page instructing the user to authenticate with a passkey to login. There&amp;#39;s a lovely photo of a snow-covered mountain in the background.&#34; 
					loading=&#34;lazy&#34;
				/&gt;&lt;/a&gt;
	&lt;/picture&gt;
	
&lt;/div&gt;&lt;/p&gt;
&lt;h3 id=&#34;settling-in&#34;&gt;
	Settling in
	&lt;a class=&#34;hlink&#34; href=&#34;#settling-in&#34;&gt;&lt;i class=&#34;fa-solid fa-link&#34;&gt;&lt;/i&gt;&lt;/a&gt;
&lt;/h3&gt;&lt;p&gt;Well Pocket ID is up and running, but it&#39;s not doing me a whole lot of good at this point. I can&#39;t even log in!&lt;/p&gt;
&lt;p&gt;Let&#39;s get that sorted.&lt;/p&gt;
&lt;h4 id=&#34;initial-login&#34;&gt;
	Initial login
	&lt;a class=&#34;hlink&#34; href=&#34;#initial-login&#34;&gt;&lt;i class=&#34;fa-solid fa-link&#34;&gt;&lt;/i&gt;&lt;/a&gt;
&lt;/h4&gt;&lt;p&gt;Since this is a brand new deployment, there aren&#39;t any accounts yet. I&#39;ll need to create one so that I can get in. So I&#39;ll &lt;em&gt;re&lt;/em&gt;point my browser to &lt;code&gt;https://id.example.com/setup&lt;/code&gt; to perform that initial setup.&lt;/p&gt;
&lt;p&gt;&lt;div class=&#34;image-container&#34;&gt;
	&lt;picture&gt;
		&lt;a href=&#34;sign-up.png&#34;
			target=&#34;_blank&#34;
			rel=&#34;noopener noreferrer&#34;&gt;

	
		
			
			
				
					
						
							
							
							
						
					
						
							
							
							
						
					
						
							
							
							
						
					
						
					
						
					
						
					
				

				
				
				
				&lt;noscript&gt;
					&lt;img 
						class=&#34;post-image&#34;
						srcset=&#34;/pocket-id-easy-passkey-authentication/sign-up_hu_5f91c2c7fd511d56.webp 320w, /pocket-id-easy-passkey-authentication/sign-up_hu_f188f4c4c9c28312.webp 640w, /pocket-id-easy-passkey-authentication/sign-up_hu_2c0e937b89cb31c8.webp 960w, /pocket-id-easy-passkey-authentication/sign-up_hu_906ceffbfbd81212.webp 1213w&#34;
						src=&#34;/pocket-id-easy-passkey-authentication/sign-up_hu_906ceffbfbd81212.webp&#34;alt=&#34;A sign-up page asking for first name, last name, username, and email address.&#34; title=&#34;A sign-up page asking for first name, last name, username, and email address.&#34; 
						loading=&#34;lazy&#34;
					/&gt;
				&lt;/noscript&gt;

				&lt;img
					class=&#34;post-image lazyload show-if-js&#34;
					data-srcset=&#34;/pocket-id-easy-passkey-authentication/sign-up_hu_5f91c2c7fd511d56.webp 320w, /pocket-id-easy-passkey-authentication/sign-up_hu_f188f4c4c9c28312.webp 640w, /pocket-id-easy-passkey-authentication/sign-up_hu_2c0e937b89cb31c8.webp 960w, /pocket-id-easy-passkey-authentication/sign-up_hu_906ceffbfbd81212.webp 1213w&#34;
					data-src=&#34;/pocket-id-easy-passkey-authentication/sign-up.png&#34;
					src=&#34;data:image/webp;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAABsCAIAAAAt2i1lAAAtbklEQVR4nNR92Y8byZF3Rh5VxavJPiSN7fHTPiwW&amp;#43;IAFPmBfv/8f&amp;#43;7Qvi10/GLAxsOeS&amp;#43;iJZZx4fMiKvItkazUx7JKfGcotNFqsiIiN&amp;#43;cab8P//3/22vt8vVUkjBGAMA/7f/41f&amp;#43;N7DwSvh1eC/9lj7AaAFjjpUr/uLk5fx6udwLv3XFS/G7nIsfCDd2djF3cif0NADxFy5ctHgj/ZielN5F30Rvmr9WfhToTc76v9KThI9a5xj&amp;#43;An9nrB2HsT20slkuluvlarOWUuK3OuYgEJQIDoHSEFgS7iA&amp;#43;TH7v7DldJFC6tfmLMKOwY&amp;#43;WjzXhUXOOcyI7Rg0IUhvlV3NnlokDNhcG5zM5wybPvcond8bECZd38MSzS38Y7i28iriQeGGullIwxWdWqWTSL5cIzgCdxAChvOVIf0j8jB5JMAZu9nr86E2W2E07JCbPHAPYCd&amp;#43;LVS5GkT0AhAuE9Z/w64YE7I7EL1Lr00UxSF9mbfsycCYS2kTUk8NaF6zpLDDLGMMa01lIIIaSQSkolIW6BLD8sKx&amp;#43;IWyLujfjMSVVFEiTiustEOGfJucY5U1fzreafyj/lnDuZ&amp;#43;i/oJAYzbXny1S4S6SIDkCAurULFZGo55niUdUc3GRgQLw3MAm0HDsA5l/R/XHBcM&amp;#43;FJOi&amp;#43;pnxM6JEPBMm9gRg7gbCaKLwnlfHfEHRilKm8zv7j/RqQ/J5FlpUlg2T5d&amp;#43;KIZKy&amp;#43;RGBd38zt2szdYZ/2aX9cVf3EHQfD9m9HgABLdMuspAtZmhSKJ/sgG/1/U1UBPPmcAFFo2boz4MKf8mTPDndLfXaIL0hL/R7u3eLC8D3m4Ee7AJQbQ1n1JeZzyOt9wSVn8RgCXlH22FOGyXqptpEZSFMWFkNRoAZEHyAz/GrN4Oe7/EA&amp;#43;QM/5RZMAwnBjAM8kiDODxqXmBPpIhLfZ7wY75hjgxyC&amp;#43;rpYipWFKfjOQnWHvIpiloPVduT2ZtVOPZPL6AvGDGAvoi5HxWs/g2uhIEmSABcdGEOGJkuFxCVCzemre5ltiSFToHZknneJKDDNocP8SzlEPCd6Sj0paZCRpk&amp;#43;AGlffC6Jxprb3dsRAUv6FZ3apYdi2q0MHUZiBVgACDvzqSeIxg8&amp;#43;0aXNRTpsnwH7hSzzexeVvP0QTMzk6ei5UqaOIj2wEaVGpE9MBZ2QJaQ9DAM6HZ53vh0xzxbB7gAf0oT4c291kPfD31vjEk7me467e8A/OCUKXP6z&amp;#43;5wdrcJgrqM&amp;#43;l7SRy7Rd66EZu8HEJyrqmoWC6kUbX56csu8/gCvTMKOO/FdznccRACeMGvYTLhkEnwoPsCAdiOboUlw5zoHzcZMASVN4hwzRh8Phw8/fP/08DiNgztTCx/T2DPIPeNA&amp;#43;Xis0Bin3hQ7&amp;#43;56Cz6VLWSp5&amp;#43;gql1Prq6vbN26vdtaq8Foh7C/wfGwhlHRljuOCtkOAEzYnGBSCiosgBQAaQAUBFk5VQYlLUfsGagysBUFJNbKbA8CPWWTNNzw8Pf//mmw8//jCNYwneLpHn3Pv9uEmdMcRduN4vXiCV3F3fCCEWq5WqK845aTW0r2ABzSZYb0wRDTPSGZD9AlvsdQDmJRXdsLk4eRsQJDkCIV46haU6ZKUTAFDCwsBEzqPa95of0OPu23b/9Lh/etLTdMEofmz9ejr&amp;#43;0gUgcLXHo9E67HSXYD1DafaYHiyzLvym3FnOgYDgEltvdEmCkTy0ZyxpDjLCSETBuRACgBhgreVR5&amp;#43;S9wcO9ZIMN8RV8lUdw4gGYYQYArLVGG7&amp;#43;sPXOvvtwFDIw2DhG7QC/JBcfPkbUnjeK3gocYNlmP8H&amp;#43;oLjjzPgUKvvVWw1mvyjznHF3ZG2EO0QlDnscdwC1ZmGR&amp;#43;&amp;#43;Yz6HC4sDvOgkGP&amp;#43;ggBzP&amp;#43;mfZTlChpJzKQQXwnqSoUC7ANK8MQZnUCPNPTO6ADkqljnupZ77/9HHUK1zLjyxZDQBpH4EbgJGMQvU&amp;#43;YEFPKmppPcLCFjCp2TlnHD0gRe8zi9&amp;#43;IQIUXAQGADfOAmpWl5jAHVjv2VrLS4gRzGX0xQARDAdE5ODQi8N9JUIoInjDnHtFFHQIXjDp&amp;#43;8CARH7UZnyGAgtwGCBAcCA&amp;#43;NyF/4Qrq1xPfC6YFpDVwiqZFP5xxHrSFte5keTqAwNAoediOdDL9AxkAkmhPwp1dBI66jheBODhV/zMTnO&amp;#43;5wF/BL/8nZQFKGOlmzwIOQORz1s14gBLNnbOcwnD4DksBPa9uUBVBiIRSaMV6BeSI6jEYx/mcUtGewgUGXOBEdMZIzSd/I&amp;#43;6A12RBqfHSi8mN&amp;#43;qlg0Kd/TYgXiWgDwGNQL7wc4ai1zmXX29kQM7EIUlFTufAOBhD2BiO3GJizgltSPBISzPFItYioZwE/5wEv3OOZGgqmFj0/Lyrw&amp;#43;joIECNKKZVSBE6MMVoT0jKvyQOMkAkCJ14FWUMxIecdMQ45dm29kFuLLHDcwxvrNwk4m503ix/zv0Dw5AQZAWQAanZexHyi8xbolyWOl2YAPOwv6F/iYFzcCdJsr8cCuoeqqrbb7d3d3Xq9nqbp6enp4eGhbdtxHHPA4xW&amp;#43;K3wdWQF6TMqnoBUlZzPoowCRwlaw6C4j3Iz7BLnBLSP86vUzoU&amp;#43;JJCUzI3hSPBHWF6oJkrKKL5X/N&amp;#43;MBLSfQzL/qDiDxr&amp;#43;v63bt3//7v//7VV18Nw/DNN9/87//&amp;#43;77fffovOxhkc/GVfxFKsJT50sGiJsAFSomVw3i1GvcRdMLLIJxszM4EFaIPx34SBMCHDyQWTQl6Sdx5hZGbALBSZ4lopJJMoTjaAv&amp;#43;YOoMtLKbfb7R//&amp;#43;Mc//OEPWuumaR4fH&amp;#43;/v77uuY7Oc&amp;#43;6//rrAJuBCkQgCxELgZ6qEEACJSfBdSn4fUTjIV3IJhQQH5fwmkjgy7TCDa5TCL8iKPoGAKfeY0IlfGFgsOoLPxD0FByQwYY6ZpUkpVVUUu5Kt&amp;#43;DQPILlIA5fhQqIggwM9o/QnbeFch2oYAhwJIQBPifQbGLFKfjHBUQN7fmFGbkW0QUeJZDEnwAvHngHwOA6bfCluY4NeHosaY4/F4f3//ww8/PDw8TNP0euaXhcBwVkEhro/KH9lhrU0cCD4ZkjvAJBR&amp;#43;1DpxB1DgIvzneEAokvaXFBJ3AIcy3TgDqAH3lHA1I6SC7kWaKX76pQzsL1q4&amp;#43;e04jk9PT/v9/q9//evf//7377//fqRo62uuDAV5qBeBmJdnnn7W/yk9L28CvDcQXrbhXyEn70WfgYHIAB6NsORcymwDynxQEWjLss4jtE8JoxNXOBCqoP/rLq314&amp;#43;Pjn//8Z6313/72N9L&amp;#43;WuvXdwUwjBzrFVKqlISaU2qgTP/w9COnvYHbhJNWssGGe1NA1PGoR5IFxr&amp;#43;5AH6KbBLe5zPID/M08CwVg8tLCndi5iK8wiLUP47jDz/80HUdaaFhGEyIt9pX3AQ55xSi9KSBGIvwByOdLukgxnJdkWWck1uMoQcDFulv0Z32F7eI0cMOIEAkoMT4M&amp;#43;8rBYJK6gd5D9UQpwUpyIDgSLwWRUr98/z8fDwe6Z9h&amp;#43;1v7ik4ArZh&amp;#43;5pT4I182VTxgoI2liAQLaQHE&amp;#43;AEBhaA/Qx&amp;#43;M2Vw&amp;#43;ZEMlEIYiBCFRDheDzIzHbA0v/OJ58K34Z4SgzOGm4vy1w6HOOfJ7T0IRZ6n111pQ1J0VUU7LoseBRRPzMEwCgkGCiQ0ck8qYzgngCiga6nkA4oTwPFKb50A0L&amp;#43;3urCAXTnRQAFHI1XMIlLkbFzlQJflo170U5ylpTTo61ylGEtDKscni60IBTvQYXtBd5caG9JzhV9zyyIaySm6WH6VMcHg5l6aUgi4p1Myj1zuP&amp;#43;1DBUNQ8s3zkrMapMAEusSHul1M/jFB8VVVKKboawfmkQOhvKWVd10nek6qhyEx6hXNe43LODcMwTVN6vWmaqqoGXC5ggkB3hYuCw1rraZrGcXyJDZCJ6dKPoUbiJAdf1AcETuQCppC5B6r/ihIoE81PtD/jiACKly6BeWAnNhby31AYiBMG1HV9c3Oz2WySXSXa0W&amp;#43;JHE3TbLdbYwwhHAI/5Pc2TTNN0zAMGhO2FBdijJFhIF5KKXe73WazecLlnCOiE&amp;#43;fW6/Vms&amp;#43;Gcj&amp;#43;PY933XdY&amp;#43;Pj23bUjjvfJ0p0ViIBWSXKSMf6rjoIVNJA/nJSbSpyivJuIx2JoNedo6CWKw7TMud3RTkHQjFTZ9r/8SAt2/fErlJJ2itrbVKqbZt7&amp;#43;/vpZS3t7fjOO73eyHEYrHQWj8/Py&amp;#43;Xy5ubm2ma2rbtcV1fX3/99ddCiMPh0Pc98Q8Adrvddrt9fHx8eHig6CkAtG3bdd1ut7u7uwMAAlE9li0Rmjp5JijM2nnZD8tKalbbVJYYAZkNBimalH0qHkoTE66JAZ4EPFkRzIQZEYOIF8DnIt65aBNpsy8Wi/V6TcQioR7HcbFYdF1Hmkcp5Zyr63q9XhMzAKCqqtvbW6Jd27YPDw&amp;#43;kzRhjy&amp;#43;Vyt9sppYgxi8Vit9s1TbNer6WU1lrSRcaYuq6bpiH2E7GSPjzRQhBKe9hpvWjm0UlCPtWyshkPWLQGGM&amp;#43;Llh3knKQQqR9yubxAnGW&amp;#43;Nwaq8m3Mii1frkJMMGa/39/f39MDk06nRWzQWnddl7J9VC1AAJSwvxBimiZS313X/fjjj7STdrvdcrmkixhjyDiTmSHZ77puGIa2bZ&amp;#43;fnznn6UXyKk6pHzUsj5qlfC44E7Kw/2HexAG5Nm5mJHHJqKxnmjuppXRZmKei0g5gGSPMLAG4F2NAzrlxHB8fH621Dw8PFN9frVYAQEqg67qnp6dhGJ6eniQuzrkx5unp6f3794wx4g15ZG3bSimfn5/HcWSMvX//vqoqUvSk6xIX&amp;#43;74n1hJ3iQHjOA7D0HXd8Xi8FMp2J/KdNgEApDrLWBcXDcLljZ9hSrk95PkbL9xE3IUl9V9ysHKc7mX4b63tum6apsfHR865UqppGs45Se6Ei&amp;#43;SXop7DMEgpj7icc4fDgbYOOV8Eb0h9Pz8/J7h&amp;#43;jnQTlKIrJwhQYrDzhw91qkX9YfGwgayxspFEHRyk3GDgWSwSDUoumRYZvNbEORcdPsJUGWW503xLqYEK7Zh&amp;#43;dKFFZH7H1BaCi1AgLZJfogIRAgtk/BumaSKKU7Qn9ffEiDeVyVqidUni9ErJiaTo6Rvp46Hy8MyPy6W0oXadnQr3BTUE7FSPxYL2ZFHAJZ6UOyCmFlzojXA/FUp2EfsQuI3fFkpPnSMn5XQ7khNQVRV1qZWBBOJKCsMSS7TWZAOIc4m4M5&amp;#43;z8L/ogklxaa3pg6lch7hCoCu9jXTRnAfoo7HwFCekjy7LrNSZfbT&amp;#43;DBVz0fmCS6ZLu2K/uLgJil32sWhC2h6p&amp;#43;taxy9RPu55iCWXh0InqgLMa9CSn9ClS2aW3nOjLQ5kl0LdcDJ2kzXT&amp;#43;jazggGPsdBunoo&amp;#43;4zZ0rIhEBgpzXwcI5NAFSQTbSixdmNbarYqfHGQRKn5/dFcwkxRVb74T65HaJkIGYPT&amp;#43;R9WLJSanHk6SXmuckAkEMIBKTy5bYTJqNVBndA73zxVASzImf&amp;#43;keK7V7yzZ0QIbwa5bMohpek823eBHChSxQid0seODdD/sBmW/fl4mYiFimHVOVAGolIk4ibTGWiOxGLOJfkt7idnEJK70xmpvwgZW8SWPrJLEIOwp1Rf9bD4FJnyey/WVNl2jn4RwYllt/jLvAg3UHxfWfaDNiM7o6VXTxnV0vXpJVIQ6ifOEEQiCxBuRVSOCixhH6mfP35lrKxrTF9Cymoi4b35E6TWi3jVOmvlArILHApVp3/m9Eo&amp;#43;mS05EwvFTIemhUhFnoysMXHWO4nThGHpLHC/YLLKvHF54va4FyrlOEzO28MTTagtAf0wWmazu1z2naJK7T/fkLqCUfY0JiavOGS7p&amp;#43;Sg4MQJCDJhlAXFENuchbSKWBPDE3MnaxUg5F8PJdiUrkyMZgbZ5k9w6FnizBoSbjZ3Z9HVworWsLKRN&amp;#43;LFznFlz8t&amp;#43;yzW85D2s1HAmDvdDXPnK94ci6SLCBbIqgIFR&amp;#43;ODSR4KfkL8P5eix3gEpFj0uWEP5noeI4miYWM6&amp;#43;id7XX5lIqWk7ysWBbHYa2lDmRWDSzr15BuDuGJDEottkQwgt06ylOBhoUeMcxC5CWDef8EoHlde&amp;#43;&amp;#43;w2A&amp;#43;oKONRF0THO2tPJIewi2iufmCUV&amp;#43;2lEKgMk5SvlBX8NS8ha2qRLL5V4ULQzBYpSkQLjXoVxltOX2K3hV0qzSC/186uekSf2S57/toAFGQVEYByoP79RsquEbc4ug7pea4cW1XwCD1JVGRnV0jlI/h05XL&amp;#43;CBy40J9lC6bEiSVK4ADljQ1kYRu1hGQ5xf39Qzj6RSbVEMBWK&amp;#43;ymn4GAW2swmocwOptucuS1JCWZiEUpZrVZ1XZevJ39qHIb&amp;#43;cNRD/&amp;#43;k0k1Iul8u6rgnFln6v1nocx&amp;#43;Px&amp;#43;EtLhqDs/YwVECGuz9ks1edcHvJBsx5CXRdjswhfCE3nFIykETY2CXAamhAu4kovAwpvuqR&amp;#43;/LnU9xdCV6XMJtWRADu9Yex7N3KcyfAx5zsJI5GbUgIJ7FdVxRgjcJU2x8eJfYFDaBHDIBOE4Lb0gjBGjXKeqg/z4JQyfzgLFwWckMacQOEHhKqXCPbDOIpYiM2oqDqaktIkwwVmlE5AoaYYhYKnaUqlnGVAwsus1gaY45dy&amp;#43;ZdIRhc0xpD3QMFR2g2pbyDl93/yaiUciIF5Ki4QYeZJqgTIWsQj9MiLyyguqRU3i&amp;#43;xjKCJOVUG0y0PygfZbmAqTvLQwCaQIbLPTKK2bP5KbxUlyWdVJUUmJLL2SzKVoH6NXQIgxSwOzZBGcOG4fp3766jPNF7AgFWbxYm5CijCxUBGHERRHxRnnklP2cBdTWCgY56ICw05Koiu4og4sljY6GrFCbsVFohePgxb11AxfxvXlxz5FXdBKkeeXYgmlo/ApF5zV/Zz&amp;#43;JtcFFSlvKCI1wDkjZ7GMU6R2SheseBopFwRYunJRtGFeAVF0QnmHwgCUSug8Qpcubq2NxSTpvXDy9zkJPoVS5Zsvos9fcLWL74/0sgG8lF69K2f5hTda8n7yU88dtqBK4hVx28hTySG1xqHwKqPVdXHeSkb1l2463DozNjoCl8PSX/oiuhprtTHUtJjhXal1XdYTxniZwxCfzYPL0hAXlqEO2iejjc0JmVQGl/qSMqBMNS&amp;#43;x0jpxirFZgUqKlFMUxWIwYhYI/JQYwKcSyH1qUOHnXDD/k5Eb4SmVnNGz4GZWMtY6bTxNNfEBe5Fs0jfRZSKqWev6UY&amp;#43;TiUl5BrkbBFkR400uh1RjtNWdZuJC&amp;#43;jLqviQ7fhOc0CaV0/5c/XC&amp;#43;UoTutfrCZg0veKva2EmbcTLWhSoDejrrZhaVqG9soL7WBrUvtQbY3MpUgCAsEhj6cZRs1g/McgTEuULEAmWz&amp;#43;IdSrby9Cm8wMElnOZhL1svS6tzFXNKltxU/pN68X8zUkwvST9baYRwPx3bRdlJJ6lDyPjbLNYrlFqSsqn9q0kFB1iK2wr8ycnduGMdxnGSpFzA9ERL6LhuXOPWS5bmEnAZHlYm4cN8xCG7tOI19348T1lzS5/ABlFInzlEKZ3r1iaEIg6GITw/ivF4ALj0HowbY73/43gkh0curqnqxXCqp8shCltJc2TEkSMTdjAOzjiaWQmRO&amp;#43;jd4vhmgwTgx5Gcj3cNb8zAp&amp;#43;nKbEpdzcQ0ASWt9OByeHh&amp;#43;Ox4PWOrFISrnAlbLkqajEGDON43hste0xlvfaRP05y2EZ3f39B97U/TRKqbQxm/Xmzdt3V9udUorHksEASoNL7EjaomsVRN8am/wMG7hitJqEENKrOWPGSdtoVkNwgj7sMqxkuTYom925wsimYZqmtjt2fTsVO6AMRaSylBSZ8PvA2pGDISH49Vbi5xJ9HuAyxrRd&amp;#43;/Bw7y0Alq5eXW2rql4ul5WqcBBPCBTxoI9Jam2hOaIVkFFHRXxEe72qlGfAOJlh8paeKGzJifeKrBDBYtMVFYjl7ec3CsGl4purtdXXz/fvVSXTR7TWfd9TujF5XlS8hpJi0Kll7vWbTn96nQMqbwa6/hmeOIYiOPDn56ft7rqqapQbivyHOUkp8cKygQYaU8OxjQA7THnYKwBKSiWk1MaMWhMDaHY08kZP2pSeZIx7lEPlYO6UhHiREqJuqt3Vqlb8YVk9/vhDVVVlpIFK&amp;#43;JOfceIbW&amp;#43;fgU0IH/xjqp8KIJG5aa9cPNFi77doPHz4slivOxWptld8HYbxADmY458o5HtE&amp;#43;ZzNMLIrbQRrj3QdtLBMWHGeO4JSHsgQ4eRp5ErgafezAhkw7YCCFWCzr693mZnfFnH744HWR0aZI5f9EtqTsdfmNVyqeoKAz4QUupWPOGO20m2gWhf&amp;#43;nub69W63WtBVYdpoTB04YUCDRYGNN33Vd38ucRSDkE&amp;#43;NREKPhFI&amp;#43;lTlnryDHRzjmhpJQVcIpb0&amp;#43;3K1XJxs13f7DZ1Je4/PH/48f3jw&amp;#43;MwDta5jwchyvWbK//L3wvAvalSSjtHu9Za/MFYPemu7&amp;#43;7evFtvroSUzBVWN1jZEHKY&amp;#43;Z7F38bavu2ObSshYnr6RPJu8hinGCt21uhxOB4Px&amp;#43;PRMbdeb66215WqaaJBVVfr1WK3Xe8262VTmWlkOKUvzFf5LBT9NSsKI6puRglujvUv&amp;#43;/2TMXrSE42zqZtFdIAC9ZPM21IHoeFNNsYaMwz9MIwSE57WWMNMaLQE0jt5RBmFkSf80r49Pj89PgDwRV0tanl1tVZKVbVaLpr1erlaNLWU3CMZtrvafvXu3Xe3t980DcwLCD8rwry8QiS8eME7t6iKWcjlcW8ycQ3D8Pz0tFzdr1YbIRXnYuYMpYqgYmk9jcNgMGGHmwaIU9IE/83kQdCFzUW5t&amp;#43;M49H3rrObglIBlXUmlbndXX725ub65aZpaVapC/ypknB3jUm42m9vb26urq6pSKW70iqGI113nwoEi610TQJSsqgqtrpaSkj&amp;#43;2a9t&amp;#43;6NfWcqXiKCeOGQGc12RN1uvM6&amp;#43;7jYT8OQ1XXq/VayUpicly6iP8sdSPzMDqOkL61dhz64&amp;#43;G5644c3Hq13F1d3ex2i0Xz&amp;#43;9/97ve/e7e52iiiL9kmjclN3DpCykopxPs85XDO8wE5/PC598XFjIIxHkEIIZRU3iYLzhwTUljHkD2DcxZPweCxcCJI2TgOehoIcFOht576rjs6Z5bLpVKSAzNjHaKhKePAGUt9wd6fGse2PUxjXymxaOrr3Xa3261Xq&amp;#43;Vqudttr66uFEJMDMJqM&amp;#43;lQaskh1alnXxG/hsYtJSfA36r2H/QGpkQJX8ACwD6GqrbRIgqMSRDi8KqJ2b5rx7HfbNZNXfHoGIMntn4a2&amp;#43;Pz4zhNVV1LIayeeHDZHDBbK8Erxa2Vqf4qmdyUEJymqWuPeuxXy&amp;#43;bmeru92l7vttvd1ruCNZXTCq&amp;#43;jNAYzJh3QkScupMJ5mD0SVFW1Xq/ruk5VykPbDcejHr3Jtl8M9VFWeNM0y6srB6CNoeHFlZR1429&amp;#43;HP0Dt8fD/ulht1lXq0bJeAaMc50eusP&amp;#43;/Y/ftV3fNAvsIfSbCWsHFHpiWqpqUSuZJ/YVFVnOOyDT8bBv2/2irt7e3X317u1ut12vV4vlUlWK1BWZb4umCo2TCcOFYr0MzPo82Uk4OiBonKZsUjTrs5H8PDXl/YDFcsmlnKZp0hMwUJVaLld4833f99PQPz8&amp;#43;PG82TaUs9qMxj1nHh4eH777/9sOHD357TxNHf61p6rppKlU5x/q&amp;#43;1&amp;#43;M0DROpoCKfQtOerena4/75iTm9vbt59&amp;#43;bu7vZmvV7VTSOR&amp;#43;gFz0YgSDMCSh0JDtUL2DmLQunjCaZqoUCd1uUzjODlrOMYffluKn6zSCHtryEMZGQhpjBHc/6mqmoqa6JEHa7Gr&amp;#43;YMQfLFYcACtTdse7&amp;#43;/vP9zfj9MkpTcbCEkNcI62VwFj06h7M/RtX0SJ8HQTikn3fXfYP01Tf321ubu92e12K1Q7QorgRofgN&amp;#43;YdMO7vHE71EP4u2XmRenxC6ogrQxHkdgosJPlstMc1m7eCQ4vrul4ulzgk0TJg2NkmbBA5nXpAnp6fGWOLxSKVybRty4CvVisafDxNmhUz0FPAbZomScPNtTHAAQcLedizf34a&amp;#43;3azXn719u3d7c1quZBKQqwUR82DCNnYNC&amp;#43;GKqI8hwDOHMDwhCcFCj&amp;#43;3auEfuoJ/FEMRfgcI3tTNer3mUqqqQk3CpZDTOB4Oh67vw&amp;#43;AKKYe&amp;#43;/&amp;#43;CFXdLup3iz5wdf&amp;#43;l2CzftSini6mLUsZ5jJD/AsoCAdgc72eFg01e3N9Zs3t5vNplD61NyCsNW4IkPMwrk0YZq7JRRtMTE/91E&amp;#43;r55/cV2UA5xMBlLKpmkqPMbBGq9h9vv9sT16tb5YLIVwAH3fWesQJkmypcJjH2G0GccJD69Q3khawx3NHgJymiWGHygK6KHrYf/YHvZKitvr3e/evb3e7Zo6DCSkswhs2IEl8VmcthjbUYxFLYkxvbPSoC92zfIBzmlj&amp;#43;r7fH/ZKT4xh7w0Dg4GgCTEfRtG9tyUFd1Y6TMKaIbTiUGy/77txHIwxXHDSNEIIRPiePtYaScBE68mYqTse9s&amp;#43;P1pjb3ZvfvXt3d3u7XCwEFxBzpKQlQ6o3Z8hSIsGayd8fHl4ANodUWazmcF94NCL/jFj&amp;#43;eDzyhwdV10pVTdPQoEwWp93QuEPUxxZ7nxRBQopOkorvuz6No3CUfbQWMYyjwhRJ7tzxoPvu2LXHcexXC&amp;#43;9kXV/vmrrh8cAyorixlHW2tqiNpdQkCf44TVp7Jisu0STj2Otib5cx9y9tJYjMclJ&amp;#43;4IeDnCavaTCHSmOI9LSienXO&amp;#43;TROoxs4Fx6kCJx&amp;#43;KKRU0oaCAU3FKaHxzZCd517oEUfJ43EvKuDc9X07jaMUormuV8ul5y3KcIi2Wqw6CjUXVIzqYY/XkozGJ4d5PoAzGNFDZt5Zi8eiXHjIL2yd70saR8XRJcaoiqTopFJKKkXVsuMwjsOA01wttXuil1o756QQSspxHHVs7TfGcmMo6uw9i0nLp8cHYwcuQeO0kY13UxsG0HYtRXIqpijKTa5WqAEBSNXbdAQlhWK5EDVCZVUpHKl/YXT0l6l/ThdlOLzbtaiXK4zeKGBhdMLkrYJTUnm5tlZPk0WHhgjk31k31JGJsYw6DXXE0fXOgIeeJK&amp;#43;y71oQVipBYSOMvtGYElEptV6vEHZq4z06b3qCAgmF&amp;#43;SKNluMYAPKSUikaAmusO8vaf871k3i3lAyKySupmqZpsIZDT7j3relbD/NxkFFDM0YYgHcnJz0N/TiOiIWqpqlxGLRnUggXaBMPBMtfKsmoOv82Qd3Swzge23a33SIPqYXcjpPfagRv8GAP/zsMbCjSbhpxFJRHH35sXspvusopdS9tSipzn02Oi7WhXur1NI1hGh0NGKIhU4AupJLKosnVkx76AQAkxuZpjBSx3qvrVLue3VQnPae9x&amp;#43;HX9mqz3W5Xy&amp;#43;XN9fXd7c16tXKODQMBWa/IBHW1ew0oifo8dLIb7oEtTuBFfwTrW8hrs2fVW7/14pxfXV39/ve/v729pTjgyRvQ&amp;#43;e/fv3//7bff7vd7DKtgwAybnIQauBDjMGLGxiF89KvverSUlthGEbVpsn3fHY9H&amp;#43;iI6ciDUVcUdaGN9tDUYylbKa7rr3e7d27d3d7fbK1w45gsnHIUksJKS&amp;#43;FQpRaOm4/m3DGeP4gQ0asBD0nuBGCePmj6ryqcZie/evfuP//iPf/3Xf10sFqfFNbj2&amp;#43;/3//M///Od//mfXdWmGpgnxLq&amp;#43;/cTiXJjmSSk7j1Pc97XOcucBQ3pfRGTaUgGQuVywIQozUZR0TvnKxWGzW6&amp;#43;3V9ubm&amp;#43;ub6&amp;#43;vbm5ub6erlcAAMiPZpW1Iae9hWROA/SLQZZshjesVij2h7bw7EdUDo&amp;#43;7yFiQojtdvsv//Iv//Zv/6aUohmMaQwaVedhiUL/pz/9KdTEBHPg4tlG9GiWKsmUVNS8aoz2Gh&amp;#43;Fr6qq9WpFPfV101xdbYnZJpUoQ2a4tW6oh4orudttb2/vrm93m82maZq6onZDAv7eLNekbCSZVhHOK4TUQpXIHwq6Dcp&amp;#43;1w/7/f7p&amp;#43;anre/vCLMjfbNEmWCwWNM2sxzAONVYSblksFnVdU8Fk6bR4sRVer2I5p1TKE5fCmc46j7aRMnSyQrNomrpB&amp;#43;ZR1VS&amp;#43;Wi7qqw1mC6ANnLmBf8dD3z097uVgsV&amp;#43;v1auXRJ2ClYtcPWlspuFR01LwSMsw1ptsqBgsFB9fGcguDCvHY9m3bHtq26zwqmJfYfYaVCsJIlyaXnvxV6iWmjr7SR0ktmHVVcS5cbQHWjUc&amp;#43;tfAoBA2nl1dFJ8AkSILL040LjrniWJ0b6nix&amp;#43;s269thKiBWyFmvh&amp;#43;2Fk7NAPY11VTeOBFAV8hDcVXArBBAMmQvUEs8yEYeDUy2CMGcbpcDzuj&amp;#43;0w0Og3TY7b51VB1trD4fDdd99dX1&amp;#43;nkX5935cqqG3b77//Po3uI&amp;#43;C0XCyut9vtzU2D26WuvIva1DWO2hYk7LyYrM1PD5YCNu8iSfNTkOGGakPNOE19PyBb7OCdYVkpWVWKAE&amp;#43;lFPpW/r8qgHyRB3ljMbZFx5qq6Z&amp;#43;e920/kIx1g2eEMZ9zB1D39o8//vhf//Vf79&amp;#43;/b5qGXj&amp;#43;ZpdK27TfffIM5LJ2yp9fXuz9&amp;#43;/Ye37941zQLxnayU9&amp;#43;3nswVOwTYUxxSHo9LRmJQMEM5R&amp;#43;7Gk8II38Zpm6TDjWTLyHvU9ni2DG6JeIAKqsDxDyXj0Jx6TZJ3XPJ76h&amp;#43;Ph2E40aXia2q6j/oDPuwOMMff39//93//9l7/8Za7lw0qpusPhkDxNJeVmvX5ze/v2zZtKVTRKe57QmFV3zPs7GDvvSo1tfnnoLXbKO&amp;#43;q9FKjvYr1C6HEErSfOp0kP49iqTgUp8BtBRdOMTSNuGIZnpH4/jgR8/Ue6bvgCbADNzNVaPz09vfSekz5hiFrIP6hQUsRmOld8oKDy3OGfRVVP2JIHDeBekGmoA6ktOnotxANdiLhhlhGscRMmY1BrCSlGDwMIlTKGU2wNMFBCEuzSXEew&amp;#43;soE/QWLFNHP/xgLs1LSNILcOIdv&amp;#43;ClfPxUvF5Or4uQJZi2zYQdQ8BpPTGLCC7WIw6XjgWOcl9WiPFSLeoYwh1E5xhdVXUlFs0Wss4u6ctN0v1xc3PVf/nJUtVlMPHOxwyLGg9PRgmXxK5T/T0S3VHdLA5uKfkuGLUrOhEiRnrT34hRjUtJZzJwOuA1TOyEcLZoONBQ8nUVMx0DIBE0dc1NVm2FcevMl/vnIz1gquyEuoKmjtmHtxQ6PCJGYvWfFJOETZRta30koqRTBhroGeq&amp;#43;kut8wCILzePB/bjHARCTyi7uiJYqTN0FHp6TRcsXIehDFyXuhr/LLj0LPVkSTsXeIYxUuABM85KNEOueLndGfqEASGRWAtS4ewxeaNmQYR8EFwSzPVEQ1eGxfOA8UrI0TzDRtggIEZaUUBkeFFkBSa9rigSn&amp;#43;fZiJe&amp;#43;lZyyLGy6SYv/Njb36NJaQH4pTYIOBNTUgcuKMyUObmA2mKDpTZnYUGbgwoxSoQ5qgO0Fonw3GtXKQuGIwChpZgj3Cg7N9wJAhKIholNyQaCb/VcIdif5nXa904MCGa5XK5Wo3jxOZDaMufXC6Mi7sptTUHvQcnYKM4zjJf7qNj8y&amp;#43;/fj5sIpxScPfm&amp;#43;uZmuVxK5akUWsDoVJiimjj9XRwwlRqqHUbyp24Ypkl70CnC0GwKTmDC0S9FWXwX&amp;#43;gOoQsXiLF1wEJs9sG&amp;#43;fks51XQEsOWkhl6jntDVDjF0ba8ZJy7revbkDKadpnFHfJZAWx&amp;#43;nEk/rK3wo8ImZRN1IIbN&amp;#43;0MaIST2KfBTUvM&amp;#43;BSK9RsuBLMq6aAQV1Xt3d3f/j6azz8QbBw0H6cvRfPi7fWuFyDjK0c0aamJvKuH/btcRhHDrypm6ZuAJhGZD9pLbG9oqrqipwrGZQKPSHPZ/xTpQM1x8dsp3977GESaVq5EBYjHFRKtlytb9&amp;#43;&amp;#43;W22uKA6TWmvzhoq0IXqm5n&amp;#43;HvuKiabZXm81qLTHyrkPvvZcM//WCn8yOLrvJ87aI08TmdQ8BG&amp;#43;JxeeHgeB5Pccc7X643m7qhygTUOBDH55GOxbpkSjRSP5c1XlYnM1GgSWDjBl0fhZX67yYsyMQ/WLsoK4w0eJeKjtTjImkVDuksyvgktQPG0BerSTOSdQjH6QGX2EguhfD7C/lSVdU4jRjqcunY1SSvLs5GCENBWMhWMMbqSm03Vze73Xq54hDqasirE5T6RzuUrubcWZNBMa6nnHHLYpUai1VlVOMv4oHhVOUXVL/Ls2ly4CsW6LiQa3FgWGxohxii5jigXS1qJ7ggrpD51dZMWg/TKCncGtJbsTo9UR/Y7L7T0VXUlEMtVGGLYByctEQqWCF9h2cXLShrn&amp;#43;IkqXUwNFbFh0nd5QCANfC1ENIxsCFRLmhqHcbCvOdOKsjmnsus7Z3LfdN5nGzkCs&amp;#43;pEkZwG89Joz6AAN6Q2UUs3QUEqak8x6WLs9S9nrq34ygyBIRcKIkGFT0JsskTJeUF4R/873SSeeR7TiZE4&amp;#43;j890Nxrkk&amp;#43;OLiovLI0NQHxaA6HQJxxYV3qZIst5GnWKzp3EsPh1roJxygUAsxzU39U8q5w/B3LulibMD5jbhVCliqUFjBOA44c0GwRx/EA5vlRdQFHF&amp;#43;M3wg6K1SHZIJswm4BagMM5aNgCbKm0QRvt6UPH2cqw23KML7AOHCubWE/VKKSjltLpcMFYzd5b1BmkbpCSVUVZOP0c5YhKrUUKT8VkRj7pnnZbObAiq0rCY1qPE2pbPXkFGO0C2XuBmT7Oa/8NJDIIcmgKXHlGWrxxRlieLkFj4OIJPI4qd0zsUUUJcFTK4&amp;#43;KwZ7olGxqwBVnRfOw1CpRNgLCcxRYmQsUhZKT6BY9ak4GBed3HKVFcGTsBlqfenbdrB8&amp;#43;kOMy4QIgsmhyWRyGxuXKJ/iNBlDRhNSg9fBe2KvJcKW6NjVoEaDB&amp;#43;2N/hfhAh5fkkySpCCK45jFcOHR5CRJlDqlSbqGsIxShUBTLUn4JZbaQII/tRXpC3VM2JYQUhMCoXn8dpGgKJVdFYlYWGy6thXgo4wOWBk/H8Qzp9HSCfRjnjTR5exNLvMtKjQwHJUyxTrOkm80wSlrcMtm/WUuQxyuGAVOdF0nRhriWd7JuQWJKGLAnxUbJ0IUbRRvdDvz8c2q5zjDV1rbzm9FreWixWw64Y6gTgVNPDQHItAGTf9W3bSuWhrocZ0&amp;#43;QYU0rWVSW4oPZi4xx9OKCQYGZBhC1QnnNLwkLNaOUYZcZmHbBh8mx2goqpFLMBFZmBsx1SKHNKxoU&amp;#43;HcIn0WGE5Ga6dMpGvCUbJpZor52MxcIhb3KwFyzMx4tlTiRmPJ6ulp1d563hNIzDsW2f9vthnJRSfTVwDqR8pJB1XWmpyfliHkBWzG8DNvRD3w/y&amp;#43;WlfL2qtDWOOsohc8GWzGOoqNeKYUMMSJt3EGaIsBkwhzjlLI&amp;#43;fKs&amp;#43;ShpPNJKj85Pok9rGRBcm&amp;#43;TXmMsD1AOzdAeVEwh/5nkI9wbBvRlOgUihTAjckPh9YTo6dAxpSTOYcUQbxB6IFMRgy/50GUqiBrGseu6tu&amp;#43;ObevFv2l66LXR4zg457CubiGFIDWDXTeVEl7xtMf28f7x/wcAAP//OXXWVVtoXnIAAAAASUVORK5CYII=&#34;
					data-sizes=&#34;auto&#34;
					width=&#34;1213&#34;
					height=&#34;1021&#34;alt=&#34;A sign-up page asking for first name, last name, username, and email address.&#34; title=&#34;A sign-up page asking for first name, last name, username, and email address.&#34; 
					loading=&#34;lazy&#34;
				/&gt;&lt;/a&gt;
	&lt;/picture&gt;
	
&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;After filling in my details, and clicking &lt;strong&gt;Sign Up&lt;/strong&gt;, I get prompted to set up my first passkey:&lt;/p&gt;
&lt;p&gt;&lt;div class=&#34;image-container&#34;&gt;
	&lt;picture&gt;
		&lt;a href=&#34;setup-passkey.png&#34;
			target=&#34;_blank&#34;
			rel=&#34;noopener noreferrer&#34;&gt;

	
		
			
			
				
					
						
							
							
							
						
					
						
							
							
							
						
					
						
							
							
							
						
					
						
					
						
					
						
					
				

				
				
				
				&lt;noscript&gt;
					&lt;img 
						class=&#34;post-image&#34;
						srcset=&#34;/pocket-id-easy-passkey-authentication/setup-passkey_hu_2a30cbe8f3cc114b.webp 320w, /pocket-id-easy-passkey-authentication/setup-passkey_hu_71418277331744d.webp 640w, /pocket-id-easy-passkey-authentication/setup-passkey_hu_2f2c5e56357b266c.webp 960w, /pocket-id-easy-passkey-authentication/setup-passkey_hu_b88e4d43964a2bfe.webp 1213w&#34;
						src=&#34;/pocket-id-easy-passkey-authentication/setup-passkey_hu_b88e4d43964a2bfe.webp&#34;alt=&#34;Pocket ID prompting me to set up my first passkey.&#34; title=&#34;Pocket ID prompting me to set up my first passkey.&#34; 
						loading=&#34;lazy&#34;
					/&gt;
				&lt;/noscript&gt;

				&lt;img
					class=&#34;post-image lazyload show-if-js&#34;
					data-srcset=&#34;/pocket-id-easy-passkey-authentication/setup-passkey_hu_2a30cbe8f3cc114b.webp 320w, /pocket-id-easy-passkey-authentication/setup-passkey_hu_71418277331744d.webp 640w, /pocket-id-easy-passkey-authentication/setup-passkey_hu_2f2c5e56357b266c.webp 960w, /pocket-id-easy-passkey-authentication/setup-passkey_hu_b88e4d43964a2bfe.webp 1213w&#34;
					data-src=&#34;/pocket-id-easy-passkey-authentication/setup-passkey.png&#34;
					src=&#34;data:image/webp;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAABsCAIAAAAt2i1lAAAymklEQVR4nNS9&amp;#43;Y4jR5In7OZHHCSTedY1UM8H9GC&amp;#43;xQz2n9kH2Pd/gwYGjTkgdUsqqfIiGacfCzfzK4KsUo&amp;#43;6tLMdVSplkkFGhN32MzN3&amp;#43;T//1/&amp;#43;&amp;#43;vr3ebDdCCsYYAPh//R9/5N&amp;#43;BhVfC2&amp;#43;Fcepc&amp;#43;wOgAxhwrj/jG6uX8enm4z7zripfitZyLHwg3dvZlbnUn9DQA8Q0XvrQ4kX5MT0pn0ZXopOVr5UeBTnLW/5OeJHzUOsfwDXzPWDuNU3fsZLNpN7vN9monpcSrOuYgEJQIDoHSEFgS7iA&amp;#43;TD538ZwuEijd2vJFWFDYsfLRFjwqvuOcyI7Rg0IUhuW3uLOviwK1FAbnMjvDV55dyyV2x8cKlHXLx7BIf1swwCWu2MQDY62UkjEmq1o1bdNuWs8AnsQBoLzlSH1Iv0YOJJkCtng9318mykIT1uSExWMA&amp;#43;wx34reXIkmfgEIEwjln/FrxwJ2R2NG/63fCRRxzxf8zs1jBGRJ/Z8O9cuCeKcYaPJyzxCBjDGNMay2FEEIKqaRUEqIKZPlh2fhAVImoG/GZk6mKJEjEdZeJcM6Sc4tzZq6WqoZiZdMFyk8DfN4mMVhYy9Wlg4FAa3HpcPmUhYnJ1HLM8fC2EKKtm&amp;#43;1mI4Ucx/H1eOz7fp41s0DqwAE455L&amp;#43;xwXHYyE8yeYl87OiQ3IULPMGFuRA/hdc&amp;#43;JxQLrUjamCUqqxmgEIFDJD&amp;#43;nESWlS6BZf904UILVl4iMR7cLe/YLU6wzvpj&amp;#43;b2u/Mf529y0m3cP9&amp;#43;/uH5q6PnanP/3w8ceffrauY5pZ65JIS6I/ssH/jbYa6MmXDIDCykbFiA&amp;#43;z5s&amp;#43;SGW5Nf3eJLkhL/I8sTPFMWQ95uBHuwCUGkOp&amp;#43;zniseZ1vuKQsXhHClwa2ukR2FmTdRmokQ1F8kXOOSCKFvNpt3t7f3d/slVcFpbU&amp;#43;dd04jd4RoKWiR5EhhuHEAJ5JFsMAHp&amp;#43;aF9FHcqSFvhfsWCoEWzmuNe2zvUnew8XwAnkRQ62khskmJusfGWCDbSAbcckEJvUNX7W&amp;#43;KUjKl/0YBJkgAXHRhTi6lXDjKaJiKNSVUk2lOHNGaw7Q1HWlFPeEBmBoczzJQQZrHjwGZDMe2Us2KqnMQtAghx9Q&amp;#43;gdve6DUdLeOR9aiF61OyeFExKyMdK9R2RhjPNsljDAgfCja6bOYmEVmshw4QTTvkYzAeJKEpJs54uUAZuEm07PQr3j9Wetp1hzd6zBN0zzPWpN8pMgeGAsaUPI/ihbQ1XlWfI404tk7wIXwp3QRy6gj0paYAVnKkuGAS1oQZS&amp;#43;5hsIUBn2InpCu7XL4sLzyUgkYnDkKV9zWQoHp4IxZxr2N58gha91SshK7rbVd3396eanrum2al8Pxp8en06k3xAKXPyOT4CdhCBQMql9Ek&amp;#43;DObQ66jYUBiveeHzYZMdIfe2YdyhegSCmcKzkWTlnEnjkqXBl/l0x9&amp;#43;iYoMkVWqi5ZDUZUKeOOKKxek6LeO/B/bCCUpXgTPVchFP6Kwzj&amp;#43;&amp;#43;PPPXd9LKft&amp;#43;fH557ceB4p/MAUAGkANAQ5ONkMsKRaeje0LnUwRAyTSxhQFLTisYNx5jLP8id2dhZshPLLnb0t&amp;#43;XKSqmMT4AWYqdW8UqkY/riIwtZaPI89OjObLrixvIuuip54MTAAskVxY8QW00RxA9hP/NGHvqur4fHGPGmHnWFDoBlA/vfUCQ5BgI8TIpZEX8x8okAKAMCwMTefDTpd1Ip1CIdQmAiP4Tw0rIR&amp;#43;k5KPa3xoJhFKg4t2JREYuc0b6MVLL8JCPkQmDiv9UHWCiLdLrFpDb5FBdDAwBnvQowG/yOK0JE5BJ&amp;#43;obYGH836C5NfJJ2xwXrKRETBuRACgBhgreXR5mTd4MHqZIcN8RV8lUNUXZcdWH5YVtKT/G7xOqUwhYFYoBCOZe440vysZ4u8JetVAnyWOcrCKsYT0QUHFeQkj8hp67hXO5IQFgjt0NsDMK8KFt9nCykgneIoipbZEPk4C&amp;#43;CjZ0zFLD2j5BCTMJ8Ti6gB3JKHSe6XL6jP4cLBYQ0KlVlWyrILQcTTecGD7AEhuWeiG4kgXSdkm6u0ouBHcAsFUpOsCmfF8xSsQhJzVmQbpBk88cBG1keL5J0xOIMWaZmZhS&amp;#43;FYFe5l3ru/6OP4dNwLvzTy&amp;#43;gCyPwIVAK8IUsPHFjAk5lKdh8W9rr8KcUDOcUqowq3MA3pY&amp;#43;sHSGFoTDXjLUXXXBp&amp;#43;WEEzwS8HShVxMoTAGlIeELLfZdKQxQj9k&amp;#43;cBWOOsN/ssh8eOO7Bg/V9e3lLyKQxZCBjBcPBs9Hzz3yG84IsARYRsmHNviIINCQYhkDowIJGfguXMikV0CGVEVlriIPssRSGF476ASRQZR8qvMpLsFvRiZ549xrcu56vnclPycpks5vsGBCe8Anj6c0LTYh7uHQZZC2vd6vA0AIEgaPDwgLpCvyADQMYIhaP1j16Wo63jBRAHa/O/cMEFBZMpSVnBigFJxJCbfGmwzgLzFIp6mxqgxpCSFoH96nMFiFBkBYnxS8SkCILP8vXIVxdiH0Awc8EDlGjPIE63h2dYAvS8uUGhoTPRiYB37I5zR1SPYBxfyiKL/hQuMOACJ&amp;#43;LTnAln&amp;#43;ZWrX4OvK/KocwZky&amp;#43;6f1KuvjZgxPt0CfmOFEgVogq35wqBw8slGOrYOYxe3gIkV5m5eeNEroD0soiOSavAxEepJgDyDEwu64a8E&amp;#43;K8V3JLhkYGegRhQyFQS8HMe8CI9XpihIETR1C9EvoToWEwceJnzwznNWBGp4MNDeO6ENoTTXAmWX8J4WImvZCwDVjhCcWHiDV4JY35rIAQDYBmHjF0jBGItssA7CwDrlQRCaQyTN4sf828gH50gJ4AMQMvOC8wn5uk8OasYG5RuwBOvpH8ZB7PlUyUvC2cchpS2MraoFp4f&amp;#43;GZ2m0kVyJAsqkSrW8lO3i0EIif1WQzY8o7D5Wy4W6qnAAT/4o0JvoKG3UZVsJguY7gZRQW5wS2j&amp;#43;NUzlqJPiSQVAuMfngxPDOsL0wTJWMWXyv8teLB0YWUYFIlQQNxsVddbZoqZMAsYaIERXZDcxX2sYXFXhOurJG1R4Sm9NJAL8DIQCRtCSnwLVQTtEnfBySKfbIENAkLQ3mGz6IKpIMMpBZNCXpJ3ykgWDMh1yciAAgstZapww0VUV0p0ZpIruVPwMKNsC/F1hcFbRC3LEIydUZNdlnJYMGjthKHggTckFOCnqAdlBjAiJVeF0k5RaraW3GfxwQD53wRaEzJBxAARGJCRHi4KDQDMlnlKnIp/S6AixxusjIIWAftaaEu34UJSH/XGlS4lecvwcgLMCnpByY/yx&amp;#43;UNlRcubZUrz4vpWHSinvSckyGCEH7GQI1iG58qRN8QwqFoxbwL8TmD9&amp;#43;kixP3eBJEB4kIuqc3IN4go8SxCEnyJB5dxUCHYUaKstdpoY7RbYWhfLA8wt7IlWUE&amp;#43;5yFWvLz8zuW3LnzGS5sUUkofq2M871Lk5QNIAmsiB0JOhuQOYRIKP1qdyD4CLsJfx10oyBAI4a&amp;#43;FOETKZQsjBDkc5Yu4P0dIhUHJxsYxY3Xfd89PT8fD6zzNZ8VutyKAO6PyOcUuMWBphD5LVbbSgIu8JBZKKbe7q5vb291uJ6SMeQLE9JB5&amp;#43;ln/p8y8vAvw2UB42YbfQvriRZ&amp;#43;BgcgAHp2w5FzK7AOgjFEy0JZlncdIIwGKq1SYns46N4768eef/viv//rD938e&amp;#43;iGi55eeeUWUC871i2RbnXapseecI59hgP9TVfWbt29//4//qH739xts2MFSj4tsIBQipVjBEvH0I4/4HTIJrZINPty7AlIjH/VI8sD4LxfA15FNivf5IuQv&amp;#43;BSLa2eRDjNGT9Pjz5&amp;#43;&amp;#43;/c///NO33w7j8Esl8/9XDgBQSnXd6Wq/f3jzZrPdIkZJFihERWiKitpniolJFRjnlBYj9GDABigDQq3dcieSBlBAJKCM8RfZVwKCSurn1P4s2AtIjrXWmKHvu9Ox77tpmv47ifpfPIzW3fHUdZ3WGisEiKdRt4iDAE15kWcJkQixMcX4IQKKJVPMwbASEMIIGzqBEIoQFIlyuAgyMx6rNbzIi9kCfFvHPgTvk0sp4rX/RoL&amp;#43;Vw8yH9aYhEguK2cI88dzKYouYZhU6AkSTGzgWFTGck7An4HQUM8D/3dpdyK1eQaieel3S&amp;#43;wSYGWDQhCFF/lvoN/XOxYxbBn/ccsjG0oQfBFNxNyd&amp;#43;ldSsFAKuiRMmOcq0ML0sBz3rOqRix6nwgW4dLdRX74Q/P1NHCm6SygJVsapRyLLoKO25py80auxRgixcg9UjIr2RSaar6w/415lypcuxXVld014gRUJUXIQf&amp;#43;sHrJ8idRCRX45dGCnTgZDaQ8yTk2hTl1eScRnbxDL&amp;#43;yc6joLIVig53dlPAiiwy3/RvRP51BYBu6mu7mdR2xOLDXbhAhE3L5LGAaTHwQf8Ngewu51Q8tCYmJxMBnhR4skB9tsruIbYIFoHPRVPz1T1vBql4qKpjrywFffbr84D6VPBndwFJgQXKwsJ5C/kgHrDoDRDPi&amp;#43;ANyOIslowPxBI7LyLOVS6/MO6puzHewS9BBr&amp;#43;WHEh9pVTbtrvdrq5rrXWPxzRNWmtDccvXuly0sDxaFneWvZ8V0GJnTnqLKJUcwOKjTEZjvbDcySylr13MYkSNKT6yhr/AnavN16AIgBCirus3b978/ve/v7&amp;#43;/H8fxhx9&amp;#43;&amp;#43;O67756enn4DJXAr&amp;#43;U5KAAALZBBPcfDZshorwpRSPeRfdBNRC0vqfy62yTjdmef6KgelqQ8PD//8z//8zTffTNP07bffWmtJCT57W7/2cKk9o&amp;#43;g/zDcTyRpxbBJ1cJBrgy77EhLt2FaN3yBTB0e4nosJX&amp;#43;xeKN6A5Z0VFqiwjulH6l776ukXWaG2bff7fdu2xIzr62ulVNLRr6UEoRwdektTn1d5N4tT6f5WzxwIQ9QMnY8u8aTUgFhacGE2wl2uMi7uDzLJk4qFSpVzlKT8Jn6YaD2O4/F4fHl5GcfxQmvUX3v4G7csPMWK9LEKwNZ1uc/zHg1zMfmCh0xf7Qp9cVEJCi37kmon9Ujtao79VtSnhzfGjOP49PT0Jzx&amp;#43;/PHHcRy/eggUG6ZXrcSpUSMXazISEUIQd&amp;#43;YI4Dw0ATJBNtKLF241jqv6f91nyhmwuitYSIorVO8rHkT94/H43XffWWv/4z/&amp;#43;4&amp;#43;PHj6&amp;#43;vr/M8rxqsvuaRLXGCfFzqfVx3x7sseW5RS4rymSeevAZAaSsg1wDz18UIYOkGnFtE/pC5e8FWfqWD4px5nj9&amp;#43;/EiDn4&amp;#43;Pj13XzfNsjPkt8oB03XK8u6R&amp;#43;0aYdWBE0oPhbNrK6pDn4RwYjls9xF3iQ7qC43pk1SzlA&amp;#43;r9jvwEfrLXjOD4&amp;#43;Ph6PR&amp;#43;cckZ4Y83WTADxc0RVZ/pucczkq73LowRZ/0wGRcIlscj2qknMpFsDXWKK1xcdYnidOiEOyWOF&amp;#43;wWWT&amp;#43;NXoETXAGDMMQ2lwvnoSEOIIGwZTUzZc0v0vMXoQQAKSbABXTCgAzogtstv4GWAlAleYwJxUF1qA2XWyPcHdOMvs149Di66s9etf/iCcAzW/cKVQ3UK&amp;#43;2ihgzK21YZl8xVYnFkkXI1ggrwoEjsa7kTw0/AT8P7eilxBpMTe9fqpwsQISiaJhYzn6MxBW6PqKAyQhuDwn7q8T6tTylX6VUgohnHNah2mhX/rm3HmIbVYMLtnUVdoRxJVDCGxCPga5d48VM7I0I8Y5iDwEsJy/YITHld99dpsh6oJELRId46xdrxySb7qqKkqjtNYUxROBZjziQBkrRR67QVyZB6zOYWdluvS6EGKDxzzPx&amp;#43;NRa52o9mXnQd7SJlsK59A08SADRalJgXFvwjjL5Uuc1mA4XstzPYAvv/WMxu6s96l47vx/l6Pm2Df5OZNMqez79&amp;#43;&amp;#43;vr6&amp;#43;HYTgcDlpr4sfz8/M0TZvNRghhreWca62HYXDOKaWIoFJK&amp;#43;jm151trp2lyzjVNQz34OGkC5C2I37vd7urqahiG5&amp;#43;dnrTXdiTGm67rT6UQfv8wCmsOzudwIDMox15QC5IoNVWEYs5yX4ZC/1xL7JzTUlaATmW8INQUHbDk5FP8r7rUIzcq0xV1kZjqEENvt9t27dwDQdd00TVVVkV2y1n7zzTdKKWOMlLLruqenJ2PMdrslfW&amp;#43;apm1bYgYpTd/3r6&amp;#43;vnPOHhwfOuTGmbVvO&amp;#43;fF4JH2q67pt26ZphmF4eHig8Ims38ePH//85z&amp;#43;nNKI4oJz9LNrjXFw3ABZciot8ULtemMZhbJGgB2g6l2AkLSNkkwCnRRPCl7gyy4Aimy6pn3hX2PsL0FV5EIw8z/Pt7W3btsfjkQSZ0GbCeYwxVVW9vr4OwzCOY13XVVUxxjabzXa7pRVfcAq3J5NSVdXd3R0pzRZ7SZRS8zyTBjRNQ/9uNhtjzOvrK&amp;#43;mBUuryLaJHDAuZYAhulxUpTobOpe7DvHDKou20pFWuigVFKvKA0PUSg/2wHEVsxKapupgeL1wyXGBGmQScc4I84cvLy/fffz8MA&amp;#43;d8GAaNx&amp;#43;FwEEL89NNPTdMopZqmeX19JbTHGKOUstYej8e6rsnOEAOen59fXl6cc13XGWP6vj8ejwBAGkB8IhNHYky5NLHtcDhcEv8EzHPsXxY0oJBOK8ezwLrIi7MvidqTC2pFgQV8JowEDp2kPBQfWBjbhEUm53IdIIU9K5R2BVe5BU6yeGuaJiLrx48fybuSBozjSEapqipym4fD4fHxkTE2TRPZeqoKkFsWQpAbJyL&amp;#43;6U9/GoaBqE8fIUXhnGOjZ14VgD5urX15ebnIgEjA0KZPI&amp;#43;blGimQrDEPSzRhX&amp;#43;jFrrxyhrscoEIwLvY1OpykJLqCK/rAbOo8olUxYFGYu3TjDlMYaz/jhkkDyAf2fV&amp;#43;&amp;#43;RcnUOI5kuKuqmvAgw2KMIW9ZRkSJ2a&amp;#43;vr1QXI3VZXRoW5Twgllhrh2H4JSQVyr6gouQNBVIDnDP6mhKnyFP2wYunJeWCAMuytzSgDcsOiGISyicUJrdBRI9zTntC96wN6MxnQFEqrUgp6coUehLCk&amp;#43;JrrTVZ8BSYkhWiX8kKUbxE100GJ3VRlRlGYjCVlH8xeY70siF4KbP6jHm6tJCBpewnP/UyYYtdjDZmd84yubZboRIPxU2nRQPCfHpRfLhQGEsxmbExEbgES4d&amp;#43;izCeH34g50yBI9kNIlNiD9FOa50YoJQic1Rmc8TIxAD6qhKuSDlgeusS9RmtrqeNoaHFHN65M4HDBzXGyxyigqlxfTmCGYXRGKO10cbKgiKsHMimNaGiU489LzYNisYeCrZoUElIOaEoFsGIc/FP3J3nmUbQVyJJzCBVKBeQiLeu01eREiRBTqxKr6SPl/RKvyY&amp;#43;ndfRHHa3ejJpk5LRM3AzGxlrnTaeppr4gLNINtmbmDIR1ax1w6Sn2cSiPAOA1LAILPQ/pv9K4HvhZaKdg8L2JdnxSnCO2hAqkFxiWAMgkj7ZHyJrik3TrylXSBAxBTMloUtyk2akHpZkiJIcKKVIqxJEEZE4p42dtZlmY13oMqCns27hUYn6xgbqa23Q&amp;#43;tJogM2jTEUQ5JwbhnGYJskW88AsIyDOFbYrUDaLf2jVyupVZIOBSTrLwYIFFJ43TUM0LWv9CdMnD0n8SCgFyqMmk5X4VBqcYp4kSHTyKMTvxOaEbZC3oGS7nDii9UrGaTqeurbrpZLUpOu/JM&amp;#43;IQxnsEaShcYXKolEpdi2FZXbiB50bfWwxS1b4YP&amp;#43;5WNB32bnEBVtSRgaM08JRZSEu6yOj3vRpnoZhmObJ5sVEWCmYCXpL9EoiT6EO6QfRMT0h0Z0&amp;#43;Xn5bEu3SXiWlKU8oCU0WzJ0pqkN//vLy8uPHH50QEj1/VdXtZqOkSjNEKQFLaVZYd4&amp;#43;4XXBgMdHEEkTmpD/B880AxhsJ8rOR7uHUYuIfL25T4XJp4kOApLU&amp;#43;Ho8vz0&amp;#43;nk893SiUgQD9RsHSViToUbpYnrLhFmpRcxSqYOUeeYQ0bZHqRQSP7k6sLoezziTf1ME9SKm3M1e7qzdt3&amp;#43;&amp;#43;sbhcvvlfluTIkdSVtMrYLoW2OzeAWuGK1mn0h6M2fMNGsb3WoAJ&amp;#43;jDLoeVjC2mYliWfbekvn9lnueuP/VDN59pQLIMye&amp;#43;toONko79wkB1LZqo03yXFz7nyueRgpQS0zFXXd09Pj94DoJPY76&amp;#43;rqt5sNpWqhOAJKOLBHpPU2sJyRC8go41KXZTGWK2rSnkGTLMZZ&amp;#43;/picKWHsmLlSvvNFdoYFV9XPwCwITgUvGr/c7q29fHn1Ulz9FjtixmfZnc50dJL5cTlfUlvvzKL17au4F&amp;#43;eIUXjlAEB/76&amp;#43;nJ9c1tVNeofIf9hnaRUeGHZQQMtU8NxjAAnTHnQFQAlpRJSamMmrYkBNEyBvNGzNiX4HnGPclE5WCYlAS9SQtRNdbPf1oo/barnnz4SzPlfJfGXj9SZkjzE1/3&amp;#43;JG4&amp;#43;xBpGWli767tPnz61my3nYruzyuuBSCs/uZxeFet4RP&amp;#43;c3TCxKKqDNManD9pYJiw4zhyFUz6UpYAzdSHHDDyGCYENLAfXDKQQ7aa&amp;#43;vbm6u9kzp58&amp;#43;YdFcm9&amp;#43;iMJkinF&amp;#43;nQ79wxC5gLqVjzhjttJsRWcJfze39w3a7I1VgOWlOHFgxoIhEg481Q9/3wyBzFYEiHxvXKotoOOGxtOaedZSY&amp;#43;LhbeAtcAQfmUtOy3G7au&amp;#43;vd3c1VXYnHT6&amp;#43;ffvr5&amp;#43;el5nMbPLYf91xxfn&amp;#43;jLA4ALIaVSOiaM1uIPxupZ90P/8Obd7mofpoiT1w1eNkAO5cGKf421Q9efuk5CjOnpEzYuTJ2XcUopjDV6Gk&amp;#43;n4&amp;#43;l0csztdlf769tK1bSiQVVXu217c727udptmsrME7OWxmH/L8yJfRUTt&amp;#43;BoFEY03YwK3Bzzj8PhxRg96xmNuqibNiZAgfpJ5m1pg9Dx5vDX289hHCeJBU9rrGEmDFoC2Z28RBnp&amp;#43;4wXHbrT68vzEwBv66qt5X6/U0pVtdq0zW632bZN7VMeMIzd7K/fv3v3w/39t00DZ3jL1/IKFIx&amp;#43;Ds/5y4&amp;#43;U9MVoCpNbNMXkBqXk3mXiMY7j68vLZvu43V4JqTgXi2QodQQVh9bzNI4GUSxUmrAEnjQhfzMMihGZVGvwcm&amp;#43;naRyGzlnNwSkBm7qSSt3f7N&amp;#43;/ubu9u2uaWlWqQlQsVJwd41JeXV3d39/v9/uqUmWtvERm/sqDc77ZbG5ubrbbLeUEv&amp;#43;6g&amp;#43;sThcHh&amp;#43;fk59viiyZp4mwNxbVRV6XS2lwdzN9l03jMPOWq5UXMqJVnTE9ZqsyXadedt9Oh6mcazqervbKVlJzO9lMDrGWFo/jIel4yjS90npOJyOr31/4uB2283Nfn93c9O2zd99&amp;#43;PB3H95d7a8U0Zd8k8biJqqOkLLCUD1EV2FYLSOg500M53T58ot1XX/zzTf/9E//9OHDh7quS0DtYnFqhcSlF6nK9m//9m9/&amp;#43;MMfPn78mBEhwqYQHFRSeZ8sOHNMSGEdroc7jc5Z3AWDx8YJcgheavU8UqZNQLueh74/OWc2m41SkgMzUy3TfaQicpoL9vnUNHXdcZ6GSom2qW9vrm9ubnbb7Wa7ubm53u/3CkNMBGG1wdV5w4RlsWZbDJ&amp;#43;YiygbITPp0uUr5cMnXKFEKUqa7na73/3ud//yL//yD//wD9QPQd&amp;#43;Q0tqLJYFSCNJHnp&amp;#43;f27b9&amp;#43;PHj4&amp;#43;Mjoa0A3AtpVdvoEQViEvRxb5qYHfpumoarq11TVzwmxoCD9i9Td3p9nua5qmsphNUzDymbA2ZrJXiluLVhzbi0FkGaf6PiRt&amp;#43;d9DRsN83d7fX1/vr25vr65tqngnVVVZWUwtsojWDGrEN05E0BpMZ5WMpg2ZKVfq3rmga&amp;#43;Eq6QYOcEw43jOAxD2QLNOa&amp;#43;qar/fv3379v37923bJmPSdd04jlTMIUKXICh9sG3buq4T19u2/e6779q2DfrhP8ibptns9w5AG8NxlbhKyrrxqjZN/oG70/Hw8nRztau2jZJxDxjnej32x8PPP/3Q9UPTtFj3d9hj4NUIMzEtVdXWSuYV&amp;#43;4qOLOcTkPl0PHTdoa2rtw8P79&amp;#43;9vbm53u227WajKkXmitw37k9j0TmZsLhQ7JeBxZzn2iCkHyjiruuaaE1VLVzwevYevqoIt8AV&amp;#43;PXKjATBRD4R6EY4GJ2cQrhSJ4joTdMkPUiVtdI/AeA04GbDpZz9183AQFVqs9niPQ9eIMbh9fnp9eqqqZQldvpLT09PTz/8&amp;#43;P2nT5&amp;#43;09k/BMV9rmrpumkpVzrFhGPQ0z&amp;#43;MsCyMRmiEwRzN9dzq8vjCnrx/u3r15eLi/2&amp;#43;22ddNIpD6LSykYhL7DFkGe4hiQQJxFg8vkL5EDwj4Ph8MwDKkoFtBZY4i4xBUKxkvjTi26p9PpeDwmcIk&amp;#43;nuoNyTmX7YikKGUd9Hj04XXSMFqgg64OQvo74f5PVdVJU30qbm3XdY&amp;#43;Pn4TgbdtyAK1N150eHx8/PT5O8yyldxsYkhrgHH2vAsbmSQ9mHLqhQIm4ZcAJkx6G/nh4mefhdn/1cH/nwww0O0KKkEYH8BvrDoj7O4eregh/l&amp;#43;y8Sb2gO1EqVQLoYagKv&amp;#43;onLLHP5fJg4Tu7rvv&amp;#43;&amp;#43;&amp;#43;//8Ic/nE4ncsIrdHqFwZXMW00av7y8/PGPf3x&amp;#43;fg7ZtRclUdf1ZrPBRRItreIkpbBB5DTdnjHm5fWVMUY2kPqduq5jwLfbLcel4OZZs2IN9AS4zfMs0XsiHM0BFxbyYc/h9WUauqvd5v3btw/3d9tNK5WEVOqzjmTfGJsqHCRrnkMAZwkgK0GLErr5dfFoqT3//u//fjqd9vt9iqz&amp;#43;ws&amp;#43;uAGqaOfjpp59IgXwwInhTN7vdjkupqgotCZdCztN0PB577JbER5bjMHzywi5J&amp;#43;wlv9vzgGy9b6LqkFBiO0gK6ucJMeYBnAYF0FHR2p2PbVPd3t2/e3F9dXRVGn8B6DFuNKyrEjPbCiqu5W4qiLRbmi3r0ZeTyVx80IXM4HJIs/&amp;#43;ojqDS2BKQXcWUykFI2TVPVFefcGm9hDofDqTt5s962GyEcwDD01joMkyT5UuFjH2G0maZ5nibnlP9ya7ijtYeAkmaJ8ANJpQ9dj4fn7nhQUtzf3nx49/b25qapQ0sILt1Oxgdlv6j3xtUWQ0XFGgpjENO71Br0FWGcFcn&amp;#43;yqNMIzQ6mMPxoPTMmGcDMDAIBM06eHjKtqTgzkqHRVgzWup8JWx/GPppGo0xXHCyNF5TsWHaW3BrJNlMrWdj5v50PLw&amp;#43;W2Pub958ePfu4f5&amp;#43;07aCC4g1UhKTUOrNFbJUSLBm9veHC22DzZDqb3v8FpdwGMufTif&amp;#43;9KTqWqmqaRopvTdmWMenUr4QEu2xRTREUUhI6CSZ&amp;#43;KEvQmeqPlqLMYyjxhRJ6dzpqIf&amp;#43;1HenaRq2rU&amp;#43;ybm9vmrrhccMyorixVHUO5A9RBCF1KPiTD/48kxWXQCgNxXaLjry/hSMU5Ud&amp;#43;PMp59pYG997k3CcHet5SvzrnfJ7myY2cCx&amp;#43;kCFz9UEipJJHI&amp;#43;2q03KF5ydAsAvdCj3GUPJ0OogLO3TB08zRJIZrbervZeN6iDAe01WLXUei5oGZUH/Z4K8lo&amp;#43;WRGQBXgGoyYITOfrAlJ26LAcqWLv4mDlqPimBIjqiIJnVRKSaWoW3Yap8mHcIBVezx8llr7UFgIJeU0TToaSWMsN4ZQZ59ZzFq&amp;#43;PD8ZO3IJGtOfK5&amp;#43;RNgyg6ztCciqmCOWmVCtkqgCpe5u2oCQolgtRY6isKsUwGMcMSVAE9Zf7yWSJfzPa/sJBQV2FYWiNPcKYwULISLxXcEpiU561ep6tc3NcrsWfWTeE0SKWUVPSgHRjmBH40JPkVQ59B8JKJVKL2TSOLy8vUopKqd1ui2GnNj6j867HxHXs8NtFWlqOIwDkJaVStAgszbRsd7v9fk/d&amp;#43;q5ActYkTpP27HwolBXzzXmbmnX3q7WsgFohD564EgUpbSEs78TlO3NcCIUzHZvtpmpbKaWeUfetGTof5jvnfF6L6TQDmH2so&amp;#43;dxmKYJY6GqaWpcDNozKcAF2sQNwTKnJTlV508TCO/IcZpOXXdzfY08BGLeNHtVo/AGsFYkcLvE1JqpMY5Ka/xx3C6obTfv33/4x//x/yulTqcThadpzLNY/BoSimIpFYwQbW7lMFi08AGG1yoMSLBvAJ9tHIdxmoBBVRNoLCKe7D&amp;#43;Faa2IBy&amp;#43;m7eLoC10glFL8D1LKdrer2w0QsKHneQp5eIfLEwEAwX9o8JVFl6tnPQ4jAEjE5uPoB8FtPPeu5zTVSW/jfMbhj&amp;#43;v91fX19Xazubu9fbi/2223zrFxpEDWGzKBMJY3TUoS9Tk&amp;#43;qvXhLViHK/CGfMSHulVVvf/wAYD/7u//v6HvMSrN5SG0Z9o/LaYzkIJxYybUc8S7NHYI6NHTeCA7u2k3SkmjDZrf8Xg6Pj4&amp;#43;zi8vwPn2&amp;#43;vpqf13XFVpFEwEMJ6Wom6ZFKAYh5bxpMN1RuJI2aElmb0vrRlTK3/I0MbT1tB0Y3rM/hn5AT2lpcIEQtXm2w9CnzJy2HAh9VRFnsrE/2hqEspVSm017e3Pz7u3bh4f76z0eu50kBxKLwEpK4lOlFC01Hfe/Zbj2KK6AhibfRwjUHmls0zTvP3y4vb3DeTlsdsHcm0jjM3DGFPotnvvg7DhN/TBSTKWNnua56/vD4dAjXrTdbLe4Bfg4jJ8eP&amp;#43;mPDl5fA3ItVbPbbXdbwH2sLTboTdOM0Uu7223bplVKJjCHwgeCRmYvZ/M0&amp;#43;sAR16PnLkR3oaQ1z5rsoFRynuZhGMj8IuxKo06bmAybsOaoyx0LgiJGmrKOBV/Ztu3Vbne9v767u727vb2/u7u7vd1sWmBApEfXypVUDc5LBNwxN2GyXD1L2D32qHrmzZraYITg3v87jjg1d8xo64xjZMuUUnVTSxE2tHGODePYDF73qOnNWDOM43a7fXl99aZGcMa5qiqyGH3fj9NocA&amp;#43;RWdPKBaHbW0jZSMnFhA/itLHaWoHbXXuP6k2rV0EEbLzhps9JHJ6dQ7NX3iSKxNYH/FLR8Kox2msvCl9VVbvtlmbq66bZ768J3DapRRmixmHNeKzHiit5c3N9f/9we39zdXXVNE1d1dhuRoG/d8s1GRtJrlUE8wJphCqRPzR0GwywhnHsun7WM5F1nvWIW7qSQSc7I7ioKiWoaO&amp;#43;Y8A9Gs9Qs1oe8EJCl8GcKL1wHHPsahlHPc3c6/fzzp6fHx6EfqJWD/IHsVdgyH/WbN82IBgT7iLyk&amp;#43;5idY7fvbKZ58mei1cYUkto6vcg766SSNCBmrVTKE5fgTIdmjShDOyt4A1c3&amp;#43;ASyrup209ZVTbpFz5u5gHPF4zC8vhyk9/O73Xbro0/ATsV&amp;#43;GLW2UnCpaKt5JWRY15hl31Xsq8DiFqHoPyfvw4eu76nfmCR6nucRSxhIFP&amp;#43;nrupN6w0axz1J02Zy1E0mhY/BDIXMGMgILsgG&amp;#43;sTSG5a568bHx8fHp6eu7/2FhI&amp;#43;Gp2k&amp;#43;HI7Ouc12W6FE&amp;#43;3gGt2hES2363gtHNVZUjSEJRfMyS4Xeywsf&amp;#43;SfLASTGJt7l1hXArvGRTy285qLj9PKqaAeYFJLg4enGyeGnal7o40UA2Lru1ElAMaHYQxs7jBNjx2Gc6qpqGh9IUaQivKvgUggmGDARuieYZSYsBu7CSt1mnObj6XQ4dV7iEKyjCRNKIYBBXammqTZt612JDA8cNtjCLVeMnmm0LOyiyVzRIM1QaSp6mGEYPI3QWwJwCqzneTodjwBYb2nSFq6MkH2t3YyWnob6mrqhABiDKU2n0dG2Tdt4b&amp;#43;fFGt2elF6ut5tNU9e41LYgYefFytp8vbEUrCDItH6KRqWg3lAfcgzDiGzx3k8KWSlZVYoCnkopzK383yoE&amp;#43;SIv5I0JlsXEmrrpX14P3TAWZcWACPkcu6mvdrur3RalCXzQNo&amp;#43;4hj7i2Ay00VjI0hQ4h12oi6ABcLv2uqqxtcbOey/UVVUdjofT8WiDi9czxk&amp;#43;4fnXoCfcxOFaYqZ/XG8lh8GErkpaKgSjClMZ6X1dVCktY&amp;#43;NzeEmGFWFUSTWG5cPaq5lTsoxWCflowpWSAcI7Gj2UAYf2DCzIX&amp;#43;OQTH9De494yqBA1Ggzkizd8cetPgVMuzlseT/3j6XjqyNTg5iWGCutelNrmZr/fbTY11q/RUnknUSmvEBJ3ZJkmtFRId/qbZlHS3CHHHLWpqT0WZz3aBm06x8DBBzwSA03GnIgt7CBw&amp;#43;0zBpVTOuWmenLOVN4MtPUeFtc&amp;#43;mrhqkOTm9nMmjbSzLrWyRMa5/KQfJimbdMOaXF73FSXlHs5cC8&amp;#43;aYwoQZR3ogcqGd6lWQAq8IKrpmHBpx4zi&amp;#43;IvWHaSKqYTVUc87bptm27X63az3VwGg9obpMk49YOJB3Cj2pmGvbMOtmLC76LsJexI5ROu3zF&amp;#43;ltUVPV/su32912d7XdHQ8HKjRSlX93dVXXtaSImdYFkNKznwuaN5ToVKIR57SPC9I8bSj1mRlEFme1Fhm9OzvpAlvyQgOoCzIt6kBmCzfy4S7m5mH7APRv1rgZizFotYQUkw8DKCplzOv87K28EjL6ZOuEq6rqyhNoq7CtLNYjDVXwhUB1FwHxJqcHsdROUQfnadsgMNZghW&amp;#43;mPZ4YY3uz8x5&amp;#43;HId&amp;#43;GIdBG03FdB&amp;#43;ReEEOXjFk5yLslUOoBCpwiOtS8TSn5YyxxZhjmcXn/ca&amp;#43;DG&amp;#43;5glnlHmU0amaZlalOO88zSZoIWwcFrxI2HCvWa&amp;#43;Zxsx&amp;#43;CSL1gIhbUVnWFCk6VN41pDhqftlLKWTdbQ/syOUQUcDNXobDYSXA30Dy74DJ1eTPG0qwhhJFSiaRPXav4KCYivQGnoo25yLyEYuxqG1uWZdf/NXHTKWAp5HM0nxWXAXNxwiLiwWlrwbL5Fcr/0xNYQjtowaZi3pLhiJIzASnSs/ayprxuMup8pw1uw1MATyJDTyR42ouYtoGQKTRNi9YkK2ypLY5yZoIbkZueS9Ocx&amp;#43;fyMivUlUrxlSUYw1hD2TGZI0EVB7wvKWSUOYC8Ry&amp;#43;Pm0&amp;#43;w1eImUTBDsmqMpcwLXYj/YioJhO4OFivpYVcui8msvySAYMVKwiv8Noy&amp;#43;U3ci9ZnZ0NdA50rq&amp;#43;w0LQYQ9R4o2auKcZSGBzSNRnLIJ2jolLS2XFpALy6rgQUUivARn4FjcXldbA8ywZRNrHGfI4z2amo6w9WuK2Rylo1XMECV1BgXQm/FCa3ExzjRxmGm/MBTxomGxq9D05NIO6y40qnjVA2CCB4RVpLlMdkb/0N/FWLGwvLUubsMXhjZkWI6C0zNIz1SMamjrxLBvrrVxBTNNclcEQdkohYWjWF4MISZ&amp;#43;aTUFbow/1WUYmcXG&amp;#43;rhrS&amp;#43;g2MrG6jB2ysw74eZyrpjqPCBOOeUxxuc1rMsBuOXqbuyVTSzKl&amp;#43;alNMKDG3KV9eskKceCO2kDZatPFotliOY5FA9wEPMUuUMx8LEMgMuwlL5JtxBJxGAn2UQeU8xsuDMhJjEYpDYni5iUFNVSXY4thHbo8v5tNYNSwNL0WW7zynG0ptcAY&amp;#43;vxwUSV9gpJSExHHSKAYIA0rIbk89Jn8YDAbFGiQf477SwfyRhCNxUWTwjYMrkivin&amp;#43;LDabSQLVDJH/ufd6nSW5oMtkEMNhSqKuoiu/CfEDY&amp;#43;wjX0gUHWUqpIsYcq30mteEARUjgFUBbM0bsOs1jZsnMK924ggHOlsO7aUYHD44rdWzbFuHS0D/JYkxJAXEe1FpE4TlMTJs72qL8Q0Y9m2keN6uIKwDH4Tt6gcK6uPZe3C8&amp;#43;IKWBqYhpRZ/qQk3Y9MN46E7jNHHgmGQ0AExjZD9rLUPyh8m2oNAkbKCaWojj/A0BNXgnVO0UEb8UcdtP/1BCWEQ4jFcxzPFMMYK7NAyJOqEsw5LxdWRz66be73bXV1d1VTnL0vIrnOOUoQxbkKaI0a2sQ1Q1u&amp;#43;xGKgACNOVxlTbaOPLiHIMLGBqkuzfYl0yFRprnssbL6mzCQnWCojX0SZwm97GJ3KfiE/7B3kVZIdLgUyraUo&amp;#43;L7MQg7UUZnVXtSYOiV6cEJ2wzA9TSrRiG88ZYwWfPIU0rMZjz9nwWN6coVpEMWgAhUWq2m03bNByEYQajRP8W7evKae225Vy/W3rDqGeLmfJCA2MjPUbmwkYv4m3v4kvyEsVhxDF4KhdqLQ4MiwPtECFqjussqLZ2govUk&amp;#43;kjC2tmrcd5QpRNBiQvRW6iaJws1&amp;#43;ZNW1dREhTgcki9/DTkbVPDCtk7KWUaUE6peVxfJwaaNj4N&amp;#43;nwMRgBhWC&amp;#43;d82yoWkMfgbCWv0sL5bmihpw7IYPgx&amp;#43;3fU1iekylX7IWB4&amp;#43;k8KDSjwskqy3IhgtTUnhMHUpPvpT1nSXOi5iEOwoWSjtJ4ymR9ZEFFeUHxD/5dQnl5TaJcTIhi5Pz1odjXZLEUWIo7KPTxSR13hfGNLbQuTbLFEfK01ismd2hjlLVuxk5/t6zgp6WFWV5wMBKXZVusQxKxmOxIVarQWkB7X3tOAY8Og8Nqq7oAIhTLbwTvF7tDskOOtVcaAdahJQLTCGpt0EZ7&amp;#43;tB2tpKSRp4xvsA6cBnIcOcNxingK70sZNFiC7QkbY7FV6wq&amp;#43;kXp5yhH1GotEjwV07O80z1pW2lcsqmkeEzraUZriyh3Lmhgbiaw0sd57a9AdMcgh1aBK/dIizfOKJZnoeIWkTWI4WbomkqzqC6HzgGF1lSbI8kkL5qnVXBdM5vaOFaN3ZSIhoV6GAFHIjpfMMXWwoWqFB4vGbFEyM80jkcjvFh8JhvB4HJYkW0UC0YuoluTo0MWN7WMoB4pfMxvjY1WhNogon6H&amp;#43;8EoK69PknwNxHwd8cqxx7XqKKWgTrWZpoZixoJTFAytDrPaeMPj4jJnGnlL2D3CCkIgKpeCRU29w9gVTYAJdTOE/HMROVxAqOL&amp;#43;h7T7OkDejXLBm7x4EUvv5UiPNgWkTJEt86xkzSJWk1UGi5m1FBnqoMQEIVttegMplgsTryWEXGxrHR8lSxfGKNroYRwOx2PX946xpq6Vt5wmYBtC1DgVQ4U2TnVwBpJrASCHfui6TiqfB2hj9Dw7xpSSdYVVU5rVxNq3Tkt4BDcLIqhAuc8tRNyLMVcuo5xaqiCFTQyKcaAi9CujwMxJWGhIYcwjWBTmdWzqCEYgK6SZLi1iloEdG1fFmK2x2BblXQ6nxgEXO6AIJpDhMTksdm903hvO4zSeuu7lcBinWSk1VCPnQMZHClnXlZY6LTJVqYphnXscxmEY5evLoW5rrQ1jbqKFswXfNO1YV6l3I6apIbOKa4iyCJhCXOcsLTmXu/UXRYwIsUfiRnLHP&amp;#43;VrkDDhNc4OZVMbdbmGJpcsH&amp;#43;HecLxUUoGe1D9m5Syu8qYHT4iBqghKSVyHFSHeiJySq8jQahFxWGvGaer7vhv6U9c5HD0bYNBGT9OYVlmWQpCZwambSglveLpT9/z4/H8CAAD//zYiELwGRFgHAAAAAElFTkSuQmCC&#34;
					data-sizes=&#34;auto&#34;
					width=&#34;1213&#34;
					height=&#34;1021&#34;alt=&#34;Pocket ID prompting me to set up my first passkey.&#34; title=&#34;Pocket ID prompting me to set up my first passkey.&#34; 
					loading=&#34;lazy&#34;
				/&gt;&lt;/a&gt;
	&lt;/picture&gt;
	
&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;I click &lt;strong&gt;Add Passkey&lt;/strong&gt; and go through the steps to add a new passkey in my password manager.&lt;/p&gt;
&lt;p&gt;And then I&#39;m in!
&lt;div class=&#34;image-container&#34;&gt;
	&lt;picture&gt;
		&lt;a href=&#34;initial-login.png&#34;
			target=&#34;_blank&#34;
			rel=&#34;noopener noreferrer&#34;&gt;

	
		
			
			
				
					
						
							
							
							
						
					
						
							
							
							
						
					
						
							
							
							
						
					
						
					
						
					
						
					
				

				
				
				
				&lt;noscript&gt;
					&lt;img 
						class=&#34;post-image&#34;
						srcset=&#34;/pocket-id-easy-passkey-authentication/initial-login_hu_3b35354e54e67f2c.webp 320w, /pocket-id-easy-passkey-authentication/initial-login_hu_57bd43a5f2d582eb.webp 640w, /pocket-id-easy-passkey-authentication/initial-login_hu_ad9f4f456112f94a.webp 960w, /pocket-id-easy-passkey-authentication/initial-login_hu_fa51d4700195b096.webp 1198w&#34;
						src=&#34;/pocket-id-easy-passkey-authentication/initial-login_hu_fa51d4700195b096.webp&#34;alt=&#34;Successfully logged in to Pocket ID. This page lists some of my account information, and there&amp;#39;s a banner advising me to add more than one passkey to ensure I don&amp;#39;t lose access to the account.&#34; title=&#34;Successfully logged in to Pocket ID. This page lists some of my account information, and there&amp;#39;s a banner advising me to add more than one passkey to ensure I don&amp;#39;t lose access to the account.&#34; 
						loading=&#34;lazy&#34;
					/&gt;
				&lt;/noscript&gt;

				&lt;img
					class=&#34;post-image lazyload show-if-js&#34;
					data-srcset=&#34;/pocket-id-easy-passkey-authentication/initial-login_hu_3b35354e54e67f2c.webp 320w, /pocket-id-easy-passkey-authentication/initial-login_hu_57bd43a5f2d582eb.webp 640w, /pocket-id-easy-passkey-authentication/initial-login_hu_ad9f4f456112f94a.webp 960w, /pocket-id-easy-passkey-authentication/initial-login_hu_fa51d4700195b096.webp 1198w&#34;
					data-src=&#34;/pocket-id-easy-passkey-authentication/initial-login.png&#34;
					src=&#34;data:image/webp;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAABvCAIAAACrTl/LAAASyUlEQVR4nOxd6XMTR9OfmT10YwlsIMFAKgd8eJ&amp;#43;EfEvl//&amp;#43;YTyRVqQoUz4vBQDgsbEvac46ndn6r9ni1EgZsy&amp;#43;D9Qbns1Wo16p7pa7p7/H7/ujGSMcVKcCG4EB7nTFsYY1iDzwDnXFgwVkNSnzHNmDJGM2Y4557ndbudwWAghIiiaDabZll&amp;#43;Mh40nGKW3MUPooYQIgj8wWDQ7/c557PZdDKZpGlmjMYNPkhv2VCg1Qq&amp;#43;/fbmDz/82G63Xr9&amp;#43;/d///v94vKe15lyYAtpytPwAzhnngnOmlFZK2s&amp;#43;8zEzgdrIXP7UuSeH73rVrV3/88Yc7d&amp;#43;56nvfixYvHjx&amp;#43;/fv06TVPQ3LfvBNWKFdBqtb755pv//Of/&amp;#43;v3&amp;#43;7u5uHMdZlgohwjA0xiilsJosM8oVwxiL49gyNr3Mi4DzgtytVksIkWV5nmeMsW63s71968GDB/fu3QuC4Pnz51qrKJrleaas1PePP6IgaKfT6fV6QRC0Wq22Rbfb7ff7kGKe5/m&amp;#43;b4yRUuJPxth4PM7sZyql1kaAdYNzHgQBSDebzZSSVqK0hsPhaDQaDAbtdltKeePGjSdPnuzv74NWfuUpmObT6TSO452dnb29vSzLhBCeV/DW9326zdUnja4GIBiIGvhTKaW19jyPc64stNb0Fr/y/jzPx&amp;#43;PxkydPxuPx8&amp;#43;fP3717lyRJFEWHh4dBEOApEEFggNUHLE3TJEnc515CgHqTyUQIIaUEG&amp;#43;I4fvv27atXr0ajURAEOzs7L168mM1mRCve611lLCcrKAzD4XDY7/en0&amp;#43;nh4WGWZWAmn6PykbjSGKyASyJQw/f9jY2N27dv37p1y/O8169fQ67keWlb8n7/qusHQA0IIbTWSqmPomnDgMoEBXzfhx5ljCVJEsexlBLSqYYBDc4CkNukO92XjnQA1MY6hveVg3MOVUxXjnnCc3XdUP&amp;#43;ssFoyi3McSYMaVB0xYV1p1/Kh3&amp;#43;k2UiDun40G/jQcMYBz7vt&amp;#43;p9MJwxBqutVqeZ4npYRpBB7AB4aBZIMeOrP4WJOpAXCMAe12e3NzczAYJEmSZdnGxkav14P28DyPrP4sy8AVxlie5/v7&amp;#43;&amp;#43;PxOI7jhgGfgGMM8Dyv3W73ej3M9E6nMxqNSIlLKclFgMvGOY&amp;#43;iiDE2nU6TJFnrF/lS4ZqhJsuyw8NDpVSSJHmeY9Yj8JDnuZTS933Ys&amp;#43;12G9oijuM0TS9zDO4zcRSK4JwJIRBxg0BvtVphGJL7AGZgrSBiaoyZTqeTySSKIvKtG3wUqrEgN5qxGPyh674FrYwmEPRRqGxJHgNZomSA1gJhVdqWwcpocEJgvpbROvcFTG1IHiEEWZZkgLqONeLazcT/WBD1qgzARPZ9v9frXblyxfd92PugPuiOlSGljC3gLqz163x5oE0bkLReBAUWnufBvCEeAGmaZlm2TEM0WIbayVrdEVNKxXGMKLa7u0Y8YIxJKbEDfMm3wD4B5jiqfoDWGmRNkqSys7PsKec7/q8B7rSuXwH46Spe94Zm5&amp;#43;vz4c7dqg6YJ3MFCLSR4oXxRGG4cx/zV4saJYyYKDQwvF&amp;#43;Ku8Vx3Jiep4uaFeAaSbjSWDtnh5rELCllFEWLAQkERJvpf7qoz4xbZl82ls&amp;#43;po0YEAa4DXJFFDQ9OEfVKGFYQheQo3A9DqNHDp4gaBiAPFwm5yCfFBiR&amp;#43;x27lmkb7FaJGBMEf9jwPmoCScLE1to5Bfs2ot4JA8UoUejHDq8Hno4YBsDhX2/6NNj4t1OgAKjyqrAA3H92tRGjYcBJUMtvo9xoGBEEQhqGbiUXb8bQBqZTKLRrX7ISgjdvFMtUqsC9GGShQxcQMhIboJQirhgerAblCk9h9qV4Jp2ma57m7AtzIBDnMbqFBgxVwJfbS&amp;#43;gC61d0KpouLOrnZk/kouJV77vX6aGhD1rNALVWbfJ41o5IXxIT934T/zwhYAtoU/8teEfQa5ywQrBOabmB8j5UtJ9gRM0zdlQoWOdfIMhfGsFyzOONxzqUqiHPEAMEL6t8c6M2&amp;#43;bodczJMiygYgx0m5eKVy5/Eb5hdKIXgJmQKpwrVms4y9mfA3E6E0N&amp;#43;b4Cmj75mrP3NxgvbbwfQ/F8EJ4wjrGzPZHcRxjY7TBc6G4GWdCeNA1Zeyo0P26HAEzWimt1eVrqsI5M8LzhecrZQ4ilUl2ELM4L8jgMIAxT7DQZ51Q9LrtMGwpJZXMg7AVtjpceGVEWkqtlfB863/pgrOW0ErlxhivuC7gdeC6tm1suBBaqTSZZUmkL104z3Au/NAPwo5UKpVJ4GvBDRZFyQBIjFIJC2E7ogSY5Z4fBK1OEIRecUXkWSrzVHie5wfl0rKckHmmZG6Xiy88bx5M5cWU14pzIWWmVa7y1C6RBem1AnzxzrlMW3zpSPaZOpVUT6DqnfOH2H&amp;#43;nuFgNt8/mzshr/QCtZJbxQmRopWSe2WkrfT9gxQrIpcy55J7Mad&amp;#43;y3DawEkZoxZVgkENCmMIB0XYzx7a38UMhfGOHUkpGfMv5YmKkKua9pxj5gI7rx3l5M&amp;#43;fw7zUkpH0Ig99J9xy9HW&amp;#43;0MwATsLTNOXNNP8qDUsqmX342DwwzSuZ2UIWwwIfUM8BYsudZqmSOtVNILpkXj1B5OUrbbkse7RMcxenwhQthT5sKZVpRIY48LxAd/4jE8/dbZaNsGMoriVL24uLzBl2sfKxCdzVWLDJLNPsWToLO3s2tw6/QwQqMAU9wj2W4LkdlKPlM4OsXv3FhGJN5miXMmOwU3NJiQMpqRGanypH7Ne//U95W/NfGKCW1Lr6f8HwbcJPFGyHcOb1ZseL7cA7FW3wNYb&amp;#43;e0ZYD2sYzCm2Bi8VU0gxkhS4vG6B5TBRSrJzOVreQFpnPRzslLa/sOIppUcoZjKfcwBYoLzHGY3Pmlb3VmGG6YAMWSVkNxLg2xUpHWz27MIwov4U&amp;#43;sQQ7KQ8KGhbLnTNH6h5bAdowqViuCm3MizHaqaVTISRmN5/Px7koNuwoSd3QbLVrTeFVGwKcm0wMtODzERk70UXBijLmKjgJhCPpweeSqWAsJi&amp;#43;fr5XyEzFfQHRRPOQo5lUyABQwJIBJzpcrgHHIfDbf&amp;#43;9NK2mnEGDu1cK82PFdc6oLUVQZow1LJ92MReKwdGDEnK&amp;#43;eKMU2zgRP5yj9r3S9GapZk6/ErR1&amp;#43;olMX2Vb7qkeXHmuPDYMfejvfyuWZZePPC091RHXtIaSrQuE5nNWjDZhmfJAUbdMUT1oZFGXs9EbOMB54RH/hEvvD7otfs3rB4Zdmrqz&amp;#43;YHzd3Fh&amp;#43;4&amp;#43;MuiObTsI1Y85HSAWT5NeCI5vsaxdjW54ocJj3LmiSYb9ExgGFPa5LL4WY0FQaNpJpQR&amp;#43;oMLoMEnwephY1WALhuLOq&amp;#43;iw27hhDXp0GcHztGqeKFECSYOukG4FWFUo7Fso8Yt4Vt2T7PDA2BTndKuaqokAXACySnoeRkEASWGurcRUFdTyeuiXC6UnjVsWExgqGEACBeGIRr95XnebrevXLmitUZfDspURP4EckYZY6irQe8g8I&amp;#43;KiqfTaRRFTQ7LImrygigzBQ2bwICNjQ1aBNiyR0PpIAhQ2ZplWafTabfbkEJBEPi&amp;#43;j4LLKIqEEGhs3DCggnoRBEmSJAk6pzDGDg4OMMGRqwsmYe6jdgxChpJZwAClVGrRkH4ZljIAkgQREs75dDpF7TzlVlCmEfWNQC4XbqDWTkjeQmF3w4NF1CfnQmFS1hvnHL0Jah/hkrX2nqawewXq84JIWVO0y22oSJ2iFwm6jAFnNv4vHktrxABo406n0&amp;#43;/3u90uWqhEUYT&amp;#43;9hWrlE5KceFm1TXNLhexqkhPCNHtdjc3N7e3t2/dunXt2rVWq5Wm6d7e3osXL3Z3d9&amp;#43;9exdFEbQ02p11Oh2skkqrZPqTrjSKAVjKACHEYDC4c&amp;#43;fOL7/88vPPP9&amp;#43;9e3c4HAZBgD6VOzs7f/3118OHD589ezadTm3yhECXRRzygJ/kl5F3DdLDXsIpEpe85KbeERNCtNvt7e3t33777ffff//pp59GoxEq99CpdXt7e3NzEy1ed3Z20LMSBg/sH3oO6Qw6/IEiFrCa1tjzxq1AWddCrF8BnueNRqP79&amp;#43;//&amp;#43;uuvt2/fDsMQzVrRRMgYMxgMvv/&amp;#43;&amp;#43;9lstre3t7&amp;#43;/DycgTdPJZAKykvmEReC2osNHQI1TFQKwGE1yu4UQjo6fcGJWbiY9GRFkFleS7AESjG4PsXNGvSccBMHW1ta9e/euX78&amp;#43;mUz29vYwuE6ngzjEcDj0PO/27dv3799/&amp;#43;vTpwcGBPUKptFzxZSr6GX&amp;#43;6JX/uCiBSVuwrUI0EGnGUnuNW8lB3EaK7s0Wq3cYj&amp;#43;FAMANpoXd2X60VQGIbXrl379ttvgyB4&amp;#43;fIlurmmadrtdsGAu3fv3rx5czQa3blzZ2tra2dnB8XDRLtK6K3SAZzmoxt5pSvEPNyGc5tcWeHOdGIAFdVCBlZWknuz24qEglrrisDXMyAIAufwt1kcx77vTy2gRQeDwY0bN3q93nA4HAwGQRBQRXGti&amp;#43;AKjVrHjS6SpKIzVOgtVGFCi8ZdN4tHOpEfTuNxjTE0PQWrVrTHOGssDUeTUY/I2nA41Fq/f/8eI7bnZCnf9yv7B&amp;#43;4UpieQ&amp;#43;&amp;#43;bO8Vrqk1QhY6myUFyTCQFwurnyTCrtd3u903trB3AhdAAAbyuKol6vh&amp;#43;P1Njc3YQWFYaiU6na76OgUxzHFmTHdKqV97kYNuEKfUhEpJKxJRACI97nTnDwJWhzSgua4q89pRdY2vztL2p4I9aGILMvG4/G///6LiHS/39/c3Nza2rp69SrONBRC9Hq92Wz26tUrHKNHPf8q05ksIpqGy8rN3F9cBlS4SG9xVwaxzV0BX0Ql81IGvH379vHjx91udzgc3rx5c2trq9VqXb9&amp;#43;HUselZS7u7uPHj168&amp;#43;YNGOBGjSoNeqkLu6sGFisvF6X2aqxo7eiGs06DUGeF&amp;#43;miolHJvb&amp;#43;/Ro0cbGxsPHjwYDAY4V7LT6WCPDNR/&amp;#43;PDh33//vbe3R5Y&amp;#43;tnFarZYxxh4YytrtttuC1C19JZeNZEUcx0mSnJwBK&amp;#43;654HQnLN0PiKLo2bNnrVaLtlawKZbn&amp;#43;cHBwe7u7p9//vnHH388ffo0iiISFGAA3AVIfBxiSUrVNfbpbET8iWW0Iu79VaJeBGER7O/v//PPP7PZ7OXLl999993169cRjHvz5s3Tp0&amp;#43;fPHny/Pnzg4ODRRsDYgQ8SNOUzEpaBK5cchUpjJwvZfKeCo4d4IDsB3Jt6FCTK1eujEajfr&amp;#43;PcPR0On3//v3h4SGJC7qZ&amp;#43;kxg9xjBBvcM1sWiezdIl&amp;#43;c5Yh5fcVNkUIYaj63aD6AOikmSjMdjd0MG73fJRHYO9AEJcXjIy/pJLJ6OddmyVz6wIeP6k&amp;#43;7FZdlXFa58Ai4V9U/EAOCEdLls5Pt8fIABl8ogOVMsm5qrekU01D8HNM061oz6nnFuhydgMZpotD71OtpPgzvm2kjnRbaslm5JhmGI8CcFeyn4pbXOs0xmmZFKGVssee7jJsD9DsMQsXEKWZOPTQ3ALiYP6jdk4H8NBgPEPmH1086UlDKezWJtlNZGo/RybcD2Ua/X63a7yI9HMCMIAiEEMlxp13d9w1yKpecHYKcU35BWAB1wYsuljWLc1rLy89cktcF92pKjyId72NkaT5tbEZetF0FIK8ee1&amp;#43;L5zlgT0hhbSYZOKucNd/8AJQi0v&amp;#43;imghEP1nvWH&amp;#43;1tuBkIwNJoKHm/biaPC47g0Tl&amp;#43;jdpBAnmeQ&amp;#43;4T0Sszbq0jZW6opnL9A6mJQRC0223ahMExt4txtLXAXdcQ&amp;#43;tgozbIMC8L9LhdhqK6pRljlCWMHuNfrIekBdRYXR5u534TOHkLA/KKdtrKit&amp;#43;0HoqFIB8LauWg1RpW8I2gCEvprHdpHYJUOIJnj9M&amp;#43;5QCeouh4WTpbAoevUe/aCjBNYlpyxdAVAs50kCr0uVL4PqWJ6dX1Dq8Gy1JhVSnjZcdqVhzJKfTjVEZ8ElaiDe507LWrKn&amp;#43;tuFejm1NDFE4Ui3DQbN0ZUxiTSTCupjFnLmqdMALi&amp;#43;NATqIyRtLAIbpBdLKlksDUV0u11K&amp;#43;oRFBPvHTWXN8zyOothMZFL4xXrecuc8AQaggspNRqe4UBLHiTFSa6PWM8LVWNq8G5Yc5XdSlgMlfZKus0350AOMiXPseuzOZhptxT9AAa0yRjJu26uZ8xxhZbQfEYpA0idKf90IxGLSvbLt5bTt73bOzj4NCZkDFIrAq67lZkfIGV9nOKKS103Xl5qhCMa55V0u9Wk1sLnTfP7zyi2Ype4Jy1JC1zLCymhrbbMPhCJ836dQBN6MPMM0TRHmXZZvew6ohCLgCSNz6asKRXS73TAMaVsmDEPOOapT1&amp;#43;vsVEIRiJq0220UG12ckMnqoNkHQhGoiSS1jJ/Y6Fjj3KfhVfIh4bS7FWTrGtsiPjEWhPLHynlW7pF6a4yzV/Ly8jxHNZVbl7musVVwzDE8jv8FAAD//3R2N6Y7V0EmAAAAAElFTkSuQmCC&#34;
					data-sizes=&#34;auto&#34;
					width=&#34;1198&#34;
					height=&#34;1042&#34;alt=&#34;Successfully logged in to Pocket ID. This page lists some of my account information, and there&amp;#39;s a banner advising me to add more than one passkey to ensure I don&amp;#39;t lose access to the account.&#34; title=&#34;Successfully logged in to Pocket ID. This page lists some of my account information, and there&amp;#39;s a banner advising me to add more than one passkey to ensure I don&amp;#39;t lose access to the account.&#34; 
					loading=&#34;lazy&#34;
				/&gt;&lt;/a&gt;
	&lt;/picture&gt;
	
&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;See that banner recommending that I add another passkey so I don&#39;t lose access? That sounds like a pretty good idea. Passkeys are really cool, but they can be a bit finicky at times. It&#39;s important to ensure I have multiple ways to log in if needed.&lt;/p&gt;
&lt;p&gt;So I scroll down a bit to the Passkeys section and click the &lt;strong&gt;Add Passkey&lt;/strong&gt; button above my existing passkey.
&lt;div class=&#34;image-container&#34;&gt;
	&lt;picture&gt;
		&lt;a href=&#34;add-passkey.png&#34;
			target=&#34;_blank&#34;
			rel=&#34;noopener noreferrer&#34;&gt;

	
		
			
			
				
					
						
							
							
							
						
					
						
							
							
							
						
					
						
							
							
							
						
					
						
					
						
					
						
					
				

				
				
				
				&lt;noscript&gt;
					&lt;img 
						class=&#34;post-image&#34;
						srcset=&#34;/pocket-id-easy-passkey-authentication/add-passkey_hu_613aeaaafd9e233e.webp 320w, /pocket-id-easy-passkey-authentication/add-passkey_hu_ea43dcb595d1d7da.webp 640w, /pocket-id-easy-passkey-authentication/add-passkey_hu_b4af93daece5c70b.webp 960w, /pocket-id-easy-passkey-authentication/add-passkey_hu_6a816def1bc8938f.webp 1198w&#34;
						src=&#34;/pocket-id-easy-passkey-authentication/add-passkey_hu_6a816def1bc8938f.webp&#34;alt=&#34;The Passkeys section shows my existing Bitwarden Passkey, and there&amp;#39;s a button to add another.&#34; title=&#34;The Passkeys section shows my existing Bitwarden Passkey, and there&amp;#39;s a button to add another.&#34; 
						loading=&#34;lazy&#34;
					/&gt;
				&lt;/noscript&gt;

				&lt;img
					class=&#34;post-image lazyload show-if-js&#34;
					data-srcset=&#34;/pocket-id-easy-passkey-authentication/add-passkey_hu_613aeaaafd9e233e.webp 320w, /pocket-id-easy-passkey-authentication/add-passkey_hu_ea43dcb595d1d7da.webp 640w, /pocket-id-easy-passkey-authentication/add-passkey_hu_b4af93daece5c70b.webp 960w, /pocket-id-easy-passkey-authentication/add-passkey_hu_6a816def1bc8938f.webp 1198w&#34;
					data-src=&#34;/pocket-id-easy-passkey-authentication/add-passkey.png&#34;
					src=&#34;data:image/webp;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAAAcCAIAAAAm&amp;#43;CCkAAAESklEQVR4nOxZ627yOBT0tUlFadV9/6csocGJY6&amp;#43;UKaOzdghbPtBuKfMD5WLH9plzx202fyk15pyUykoprbWawYsHroicM38BJ1/rGcYYSP/BwRVBoeecU0p5xgIBdgY5KOh64M&amp;#43;RUppmlARA/a21zjljjLVWa51m4FVBhtZa3krj&amp;#43;g2cXeYecs6QW0oJT5Zd0NPTU9M0xpgQQkoJt0opUKeUAj35CPA0TdM4jvz0fUMf8a1ZVGhqsKu/a61tmmaz2dBbvb29vb&amp;#43;/W2vjDKUU6IEdpZRijMMw7Pf73W4XQvglFkBfbYxZH0w1rd3DAgHGGHihGCPostZ679u21VrHGLXWTdPAQYHMGGPf9znnvu9DCDc47/8LdBXW2qcZBQcy5MJzDMMQY8w5w4UQJQEgahgG6rXWerfbpZTatnXua7y1FoPhi5RShxnTNF1gmLfDTW0Rqtm27evrq/eeiQ3fSnlChrVkSgJA1&amp;#43;FwgIIjaPR9H2Pc7/fkmZHEzCDJKSXkUfwa91SnVcUr3BZbxAYAOV5&amp;#43;pJ6I63TEpRI&amp;#43;D2btPAJ3i&amp;#43;eQIQS1&amp;#43;IUFAmgm&amp;#43;BzdnDEGp8ViCMh8jnPCGGWQoQhoNEVGzN3jGhuVY8wRXB0HwxII/phIJowxKaVxHIdhKBTzisD&amp;#43;D4cD5CtVocjjqZ31ThZcUG25JIASIeEIRBQH81ephvB9chbXksrLeINrjsTS1HoMxmaQCBT6gcHTNCFfuJHoIf1xHOkwThkxAEWpOVi2AMkelsHB8JDGRY8vtUy6KVyw6Cj6HIVu0uBIAAfXR6IpSLOQBgriF5XuKoBen/JvixsuzgUsEFAABCD5Kb5eePOV2FtHp&amp;#43;tGyLpOrAm&amp;#43;LiTZ/37K&amp;#43;TS0hozmvC3KYLnAytr3h8vOdbIZV0ALwBTgiOjlC0dR2AFv6TFvqpI/FCcJYET13ltrc85wRN77zWbTNA1lSqqkleCWGUuMMYSAQuFeOZDJqMxHqbuLs9YswBiDnkTbtimlruv6vvfev8wo0hhIPMaI3NQ5R2eFSuTj4&amp;#43;OmUfE/B3po1tpxBpLypmmQqiIVrGetWQCaQtvt9uXlBV0g9OZCCExJZWQGATFGY4z3XpYeUHxWKPfniyD97XbrnOu6Dvnh8/MzRIeM8XsEfL12DqJEPYXcq&amp;#43;97JKZFH4qVJ&amp;#43;oD1sMs3NBigjdbyeF&amp;#43;KNDJp2dezFNqnCQASoouW5jBVg&amp;#43;70PX/NjLwytaH1to5B0pQZt&amp;#43;Z9NGR7LoOHgKnCyHAA0NfF2etWcA0TZ&amp;#43;fn6gn0esHAXBnssUhuw6SgzpNRo16f5EAcQ6SYf9nGAZ4npXUY80CpmkKISCeSMsCsXWNWhjBqSJlfUM/F0WeLftgK4dds4Ci2qZ8ryK7&amp;#43;yNgsRQ/O&amp;#43;V8JfytiveBddT/ojtx/9WxW3cgD/wJZFMAT9w/334l7Gf/5HzgYshUpXRB8o/jhwXcAusWoOoG3AO3xt8BAAD//80ZItxBovwTAAAAAElFTkSuQmCC&#34;
					data-sizes=&#34;auto&#34;
					width=&#34;1198&#34;
					height=&#34;265&#34;alt=&#34;The Passkeys section shows my existing Bitwarden Passkey, and there&amp;#39;s a button to add another.&#34; title=&#34;The Passkeys section shows my existing Bitwarden Passkey, and there&amp;#39;s a button to add another.&#34; 
					loading=&#34;lazy&#34;
				/&gt;&lt;/a&gt;
	&lt;/picture&gt;
	
&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;This time I dismiss my password manager&#39;s passkey handler and use my Yubikey instead. Now I&#39;ll be able to log in to Pocket ID using either my password manager or my physical token.&lt;/p&gt;
&lt;div class=&#34;notice note&#34;&gt;
&lt;p class=&#34;first notice-title&#34;&gt;&lt;span class=&#34;icon-notice baseline&#34;&gt;&lt;/span&gt;No fallbacks&lt;/p&gt;&lt;p&gt;Most sites which implement support for passkey authentication allow you to fall back to some less secure method if your passkey isn&#39;t available, like an SMS or email verification code. That kind of defeats (or rather bypasses entirely) the extra security provided by passkeys.&lt;/p&gt;
&lt;p&gt;Pocket ID doesn&#39;t give you any other options. If you can&#39;t use one of your passkeys to get in, you can&#39;t get in. Period.&lt;/p&gt;
&lt;p&gt;(Okay, &lt;em&gt;technically&lt;/em&gt; the Pocket ID administrator can optionally generate and send email backup codes if a non-administrator account can&#39;t otherwise log in. And there&#39;s an &lt;em&gt;option&lt;/em&gt; to allow users to request their own backup codes but &lt;strong&gt;please&lt;/strong&gt; don&#39;t enable that as (again) it really decreases security.)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Enroll multiple passkeys.&lt;/strong&gt;&lt;/p&gt;&lt;/div&gt;
&lt;h4 id=&#34;application-configuration&#34;&gt;
	Application configuration
	&lt;a class=&#34;hlink&#34; href=&#34;#application-configuration&#34;&gt;&lt;i class=&#34;fa-solid fa-link&#34;&gt;&lt;/i&gt;&lt;/a&gt;
&lt;/h4&gt;&lt;p&gt;Pocket ID offers a number of knobs ready to be tweaked under &lt;strong&gt;Administration -&amp;gt; Application configuration&lt;/strong&gt;. You can change the color scheme and application branding, control whether users should be able to edit their own account information, restrict user sign-ups, and enable syncing account details from an LDAP server.&lt;/p&gt;
&lt;p&gt;One thing that I thought was pretty important to set up is the email integration.&lt;/p&gt;
&lt;p&gt;&lt;div class=&#34;image-container&#34;&gt;
	&lt;picture&gt;
		&lt;a href=&#34;email-settings.png&#34;
			target=&#34;_blank&#34;
			rel=&#34;noopener noreferrer&#34;&gt;

	
		
			
			
				
					
						
							
							
							
						
					
						
							
							
							
						
					
						
							
							
							
						
					
						
							
							
							
						
					
						
							
							
							
						
					
						
					
				

				
				
				
				&lt;noscript&gt;
					&lt;img 
						class=&#34;post-image&#34;
						srcset=&#34;/pocket-id-easy-passkey-authentication/email-settings_hu_7c41f4f7c6389a16.webp 320w, /pocket-id-easy-passkey-authentication/email-settings_hu_e8f32a514894720c.webp 640w, /pocket-id-easy-passkey-authentication/email-settings_hu_dce6eac8371948c3.webp 960w, /pocket-id-easy-passkey-authentication/email-settings_hu_1c1a16f0b417f3a3.webp 1280w, /pocket-id-easy-passkey-authentication/email-settings_hu_2903514aff3b8683.webp 1600w, /pocket-id-easy-passkey-authentication/email-settings_hu_7dc9a995227574.webp 1725w&#34;
						src=&#34;/pocket-id-easy-passkey-authentication/email-settings_hu_7dc9a995227574.webp&#34;alt=&#34;A screen listing a number of options related to email. There are fields for specifying how to authenticate with the mail server as well as toggles for requiring users to have email addresses, requiring verification of the email addresses, and generating email alerts for login activity.&#34; title=&#34;A screen listing a number of options related to email. There are fields for specifying how to authenticate with the mail server as well as toggles for requiring users to have email addresses, requiring verification of the email addresses, and generating email alerts for login activity.&#34; 
						loading=&#34;lazy&#34;
					/&gt;
				&lt;/noscript&gt;

				&lt;img
					class=&#34;post-image lazyload show-if-js&#34;
					data-srcset=&#34;/pocket-id-easy-passkey-authentication/email-settings_hu_7c41f4f7c6389a16.webp 320w, /pocket-id-easy-passkey-authentication/email-settings_hu_e8f32a514894720c.webp 640w, /pocket-id-easy-passkey-authentication/email-settings_hu_dce6eac8371948c3.webp 960w, /pocket-id-easy-passkey-authentication/email-settings_hu_1c1a16f0b417f3a3.webp 1280w, /pocket-id-easy-passkey-authentication/email-settings_hu_2903514aff3b8683.webp 1600w, /pocket-id-easy-passkey-authentication/email-settings_hu_7dc9a995227574.webp 1725w&#34;
					data-src=&#34;/pocket-id-easy-passkey-authentication/email-settings.png&#34;
					src=&#34;data:image/webp;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAABlCAIAAAAK1XytAAAPWUlEQVR4nOxdDXPiRtKeLwkwNuvafTdJvUldXf7/j7qqq8olt&amp;#43;vdtY0RkkYzc4Ue027PCJlgbIRNJ7UGoREz3T39PY35&amp;#43;PGjlFIIIe7/nODFIYRAL4zWWtwTYPWfZHdIKelWPuwEzwTO6isCBCmCUlJKrXSm1ArX3uPjEELTNL59e9ohewcppVkxvVIiN8KYPM9no0muFJjde1&amp;#43;W5WKxqOv6xP57AWLiEAJem/ayEEpJrU2WTSaT6Wik2n1grRVClGWplPLrPTE0OCLOWMkYraWUvgVcNCsqBKGcV9KFqi5lEawFcZxzdV0LIXQLz9QHXKNskmahhegGGsg/wr8hBO89jRo4SCmVUlprkur3O0AJYYLQLRnqsqyrSqwX7JxTSuV5TgvGMCwbDwWCaE/Rl3GEqlbHAF9yDbgzomtEAH4bJo1H4SPnXNM0zrmjIACxCxcnBhII/4sW4xwLpH4jvlNrPRERgLg1JQCXY4REjIrQRxTiRPXeQzBy&amp;#43;tFzjgLA0PT6QQd477Epmsdc2SM0OMqi2zpNWEIo7YDOR9HMOHnoeiqCIEyPgv0B6VQNbY1ONbvHtaUk2dfDj4gAKRjSztjg3Enbr35LOX0vjz12WBHAGHN2djZaW58krZbLZVmWx6LijhQM2D/P87PpNM8y2gdVVTnnqqo69AzfOJgQQuNcUZZeyiwzSkjRCp&amp;#43;maeAAR&amp;#43;o3NR9P&amp;#43;&amp;#43;M5YIIQTQheBp&amp;#43;pidGiqpuqCo2DWjbGbKIBlIRz7rjskKGBEVKGzPjL2ei3//&amp;#43;/6Xn4frO4&amp;#43;uaqFe&amp;#43;HtZFHbhReQ0zBCSrLsq7rwQYqngOvw1WtGaqVHOfZ7Hx68cFb5xaFV1owBgfSOQFAHWutXwM34SPbKfWVejxnflvnwHQNfCw9ttNBixyLzkfR/MkO3A6TO4IRIkjbiOt58e8/voy/y7tlsyhkCKp1g4kAHK30tmkaIUSWZbR4HnKg1XK/l&amp;#43;5MPeceynF/OKUcH0hPi6xqQOTlRX5&amp;#43;5DBidS9NAyOCWBHgZl4uqyulpPNGStMG7Tge6S1fHvE&amp;#43;9kQUJOBYBvCNgnsiPPKZpVfosRE2IxrwaaQbi7gBjMVJwqeENVLk4OXASCGUlJnSRkpnm5Vkl5ISMlwH4C3HDjEduWxp5CBCZYS&amp;#43;/sn1iKD04ZtEUMq/nfdH3/hqcdaVHzAajT59&amp;#43;jSdTufz&amp;#43;d3dHcXOiOURxebTootw2cqytNb&amp;#43;rbluQ4BNA/nb5wTjnpzwK&amp;#43;jhFQHyPJ/NZpeXlyGEuq7lyiHIOAGMMfSWEwAXrbWuhVRc9gR8NvFppzbeNLznW558DtcZBwQDpN/c3Fhr7&amp;#43;7u6roGaxPGCVNhHazGSOcctj9yBlmW8VVFxmuK60hncDWeJgnS&amp;#43;HaqoqPr/P4ojAptNJBEwooAZVl&amp;#43;/frVGAMuxgtun0QqN/IJ8JokUmrkkO0U8V1nXJqra45ZGs7tAr6SSPpzAnBrB2yBlQ7BfTGYYlVVFHgAd0QGYhSR5yhOHxrxLC52asVNSIyewHdh6kNw2ORzRNYRWdjPRuBzweAP39rA/pMj0&amp;#43;Rtz52deNlZf27/1fz&amp;#43;aMhAMskGbJXm9rac3JZM1Pm0Z65/h&amp;#43;FDwHgEBvZM1kIk6zmjkeQl5YxY0ACXdFyw2gHGmPPz84uLiyzLnHPWWkghgNaahCbl1hGGO9VsPR8M2TmmBdIBWmtjDCqCqEyIHHTY/tzyOcFuYBBTK4rCe6&amp;#43;1hmChCCh0A/4lKYTdYFs4OPY7LbGBOFnbgKEK3KqqSL7D5yJbrTOS8zrR2n7ATs2yDHKSh5HBRsOngYGPk&amp;#43;f5eDxG/SHVZlGMYdMyDr48KLDpdDoajaKZI1M0hEn2g6FX5Lhy15f7uungw1alcfcKpgEtgSQn376DAsLnfWWcbQtysZH5TZ1qlgdYDshfmANVEPNCOcTxB1a4uJpLOx8ZgnfOh&amp;#43;AfVcYB3TCECK2j0SiqTyYJi3zkAQlA6Aabo&amp;#43;oYYpPitcORP62pIJU2rRnZCGEhLw19jOqgPM8jF4zH1CgiXVXVwVUcj4aCdbj/GN1zcFhLSr1OwzW4fk8ASCHkVdJgS7oDKAFwuBU9BHOaplkul9gBB5/VJmiRHlpUK&amp;#43;/do/MBJEkpDNdTdMUp8eqreDQNAlicfJumNx9omik4KR&amp;#43;qodszYmwLk/ET1V0detIdQDiFr06qKyUA&amp;#43;QQHmmkHcP6&amp;#43;D8aNRqPIDxBC1HVdluXBZX0PcD&amp;#43;g86wA9wkGtYrHh/Rai41yvDwvGJk6g1oDAKqNn1vihSpgfGstWUSdyWeZnEzpTIu&amp;#43;BHT4AZTqQnQoqpc6uPTn0yDtRc4jz9/RobjxeIyUdQ8BOtPXL2Ru8CiO4TVikR9gjIGLT1qB4qB7nM3OayCHS0o5Ho8nk0me5zBGcZ3OhCJvYYxBNhhxdXAb5C0UCVXDQRiAtEVRoFZhX2xHzwENHkIRSqlRC5glv49KlKgY9ODiiPvnWuvJZDKbzSaTSZZl2NBUTYP4LrSF1hoMhPA7pJP3PssylCJgIHJTsG6llFVV7TG0Fx0&amp;#43;fOQHLJdLzJVXDEQ7ANw0KClUVdXt7W1d1wiL8lAEwkG8vIzsP6rxxg6A/uMDQY/lclnX9X4LWLi19uAHgM6kfnm0Z2gKIIo84zAPL9/DPWkpEY3dRgnT7t&amp;#43;vHYhHUXKlww/g6IbE3Nd37xFokhAmlDcFuqOjrBRUHw730Is&amp;#43;PwCJ3yGUj20CSHacMCREc9sUq6iqamgOzRN&amp;#43;AO1BukjDDjfnbuC4pqMMuIJtIaVsmgZGzqEn2wHdfgD1KUCyjLswA9nI3A9AaJaXRHKxiZ2RZjsOCFv5AfgY2B&amp;#43;yH8BLuEmvwoTHPGktAyEAVb6&amp;#43;HT8AmiDPc15Snx54OjhEwRJc3MoP4JH3ofkBZCxQLJ2q9galdUnxsjh6eFSci2xGlH5JH7EJ&amp;#43;69MFb4MymREiaNXm8zfBV5kf98rAhHdqgV4hlGgKjpiF7k8iKK8Ztg9sguGaeFsgkd&amp;#43;gFJqPB7/9NNPs9nsRwsIhlApHNlznG6cQtTZo7/nzcux5MD5fRN0&amp;#43;wHkGEcHgKJ9QKNo16O0lCJN0RnKoYnj4YBBMOvLly83NzdlC/CH0/5KqWnBT4HBFAEJ&amp;#43;XVoF/gZJxqkcH9I7/r6mhCE8oLOBh0RAXgxHT9Uzul3pPLh1cCQJYf3/IzY9k/pPxM6hDLewYKJ3r&amp;#43;QwjxhfxOYqJ/GpqONnJFP2NwjGMr9Ip3EWxLwniOIKcJRGHKA&amp;#43;ujAoDHB&amp;#43;fn55GySmYwyG5RHpQ1R1/V8PieH&amp;#43;QR7gXU4umm0bYKQeh1fBJb5iW0eq8Dg0z54PrRmqHPBVjY3Iylk07ja&amp;#43;seVMCSXaFuksdLDLeG4wQQpvVZhOpn88vnDZBpu74ofP2xVaxZ3ozZGVLxOxhLVVJ9osBu0It5ocX6Wf/50Obv0&amp;#43;Y&amp;#43;2kq8U64wHldBEvcvwArnW5zS&amp;#43;eOdmVVsV0bhwV5RX374vSnF7VxaFt41MilPovBVFSYlCyImnrXs6Mcudal6y8LoLHwoYEYKwNvy4XZR1Y4yyTnqvWcom6pbCA0FEFTKWNh0viBqs0MOh1d&amp;#43;zFmk94RCEc6G2TeOk8zJ4L1X0SwCANP4eFTlt0/GD34Md8G6xvyaAMXJ2Pv708cNoLBZFPV/45kEEyce7AcE7fhbumfDudYCUIc/kxw9nv//288Vl&amp;#43;Pr99j//tculWFfQRaX3uLLfYtUnA39vmEjtDvBe1LZZLJfChKKo68qtj&amp;#43;rxc9sUK0Vbs6iTaPrjJemXRQkG7tBt&amp;#43;iETXhR8XHnHLWGlhGVtw7frorJ/Zbms6lBbyUL5VHcGpPBmxqRFUwIQcJOJK2f&amp;#43;2Ehp8w1HZ9beahyw3QHOi7JqnC&amp;#43;Vlt6Ltm9xVABLA7hiIIykdcgc79FJY9zAzaHOGHi0A96qpQQlrOX0bHQ5u8hHoijrovCN49YOj4lGKOPtDFAYkSrnHqG0ZZfQN8n7gLUS/nQ5/ec/frn4EK6&amp;#43;3/71xRZLYj2qgaCGTYQOcCXOk6BOn/9SE0FPpuwNY3ZLWGfEWkTQNldayzXiEIrgRfdRN1fS0igt3YTWqGyf/0zoe4Z7JSy&amp;#43;XS8a92c2UlXtqxodvcnRjRq5c7lPjTIoVkrd7AG8Hi9qA3t0BVUvAQbd4FRRutrOhRTBK6k0K/hJEwBptIfkUmcgKPqtQ/InTti/F0GZNmdnZ3meV20DXcEqEjniCOjoUj8GN7kFnZGldwsPpYkXFxfX19coTUSJVWePaOpOQqeu&amp;#43;v3YFMudxHjJNQ4a7nvGZVk2Go3otBscXd4BjAtuFI9Sg&amp;#43;/&amp;#43;Ns6Rr9BzEvEVVz0geOiePp/Pi6KoqopKE3kMjkv5&amp;#43;6MdLbWiSlAOvMAirVfkP0TzngsXDdKKNzc38/mcGpeBu&amp;#43;kmzrzbo6n/eMH7RHcKD20rjTFoWhwV/ket/wHcoqcrEWajnm5RRIgr&amp;#43;bcaZtgGDDpdfP78&amp;#43;eLi4qYFfuCNDu9xTxgj0/Rk5CtYa7ep4uoM4R0d7MxAD827Z7NZXdfL5ZK6VYA34QnjEBmOEUQOcHgM/GezyVKKfIJNs9lkFG0Kte688r9rfb1c9fH9&amp;#43;YBv374VRbFYLHA&amp;#43;gKd8gUc6bUuZgDRbyQmAe/jR0ej3yKLS9tRpSKOtUQCVl8LzOUSZBn4lSk0/aXpx750WyJ15CtHv3MTzngBXV1fQvcAamZgp1no6pnOkkKTi&amp;#43;oMvmxMgcrmjsomoDxZ9XSfl&amp;#43;Fdz2qSUI7T21CNz&amp;#43;40jhMfnt0zq9REAaV56Fj8fwOcXffemQEVn4JrPNTKlNpGz8zBIelvn1onm01lasA1wvkmXzNf7xGbCt9MU2PebaE5Yc0/5bbSSnoX1EKB/2b0L2d1z3qPXHR2go9ed2AhKBmOC0YI&amp;#43;9V7aRjgv0wMaT06xJ66wzXOeuf7nDN&amp;#43;vpUs/xJ8GyrjM8EI0o8x9OPezc5GZFQ18EGWlr2/V7UJa20GAEzwJ1BwBP8TfKRVWhnjTVK5pZmfN77&amp;#43;G337R0zOlpGuc&amp;#43;3ET/vVH1vwpbt2JADsCvFdEkXGFxy6hwJdl6epKTMbh06X69ed8dqG1tnXtRpn/fhPaDXEiwI5ANjfpS&amp;#43;7YU8IjeC&amp;#43;8F7YRVS2qOmgd6lrUVjjXhv3DiQC7AO9TFJmkgIc4o/firlB/Xq0k0mQilPSNk7dzfXUty1qgXc27jcPsDNQsEG0u&amp;#43;25bCaPGOBe&amp;#43;fhdGCyF1CNpaebeUZSW8Nyfs7wYkZ/pvawNkTtlG3Nw9mKEhyJVoWsmr/wUAAP//XT3cWC3xRCQAAAAASUVORK5CYII=&#34;
					data-sizes=&#34;auto&#34;
					width=&#34;1725&#34;
					height=&#34;1366&#34;alt=&#34;A screen listing a number of options related to email. There are fields for specifying how to authenticate with the mail server as well as toggles for requiring users to have email addresses, requiring verification of the email addresses, and generating email alerts for login activity.&#34; title=&#34;A screen listing a number of options related to email. There are fields for specifying how to authenticate with the mail server as well as toggles for requiring users to have email addresses, requiring verification of the email addresses, and generating email alerts for login activity.&#34; 
					loading=&#34;lazy&#34;
				/&gt;&lt;/a&gt;
	&lt;/picture&gt;
	
&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;I&#39;m using &lt;a href=&#34;https://forwardemail.net/&#34; rel=&#34;external&#34;&gt;forwardemail.net↗&lt;/a&gt; as my mail server which makes it really easy to create/manage email accounts across all my domains, but the setup should largely be the same with any other email provider that supports external SMTP connections.&lt;/p&gt;
&lt;p&gt;Beyond just configuring the account that will be used for sending Pocket ID-related email, I also enabled these options:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Require Email Address&lt;/strong&gt; so that each account must have an email associated with it (that&#39;s often required by the downstream OIDC client anyway)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Email Login Notification&lt;/strong&gt; so that the user will get an email notification confirming their sign-in activity&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Email Verification&lt;/strong&gt; to have Pocket ID send an email to new users to verify their email address&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Email Login Code from Admin&lt;/strong&gt; so that the admin can trigger sending a login code to a user if they lose access to their account&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I did &lt;em&gt;not&lt;/em&gt; enable the &lt;strong&gt;Email Login Code Requested by User&lt;/strong&gt; because I don&#39;t want to expose the option to request a login code in case an email account has been compromised.&lt;/p&gt;
&lt;h3 id=&#34;adding-clients&#34;&gt;
	Adding clients
	&lt;a class=&#34;hlink&#34; href=&#34;#adding-clients&#34;&gt;&lt;i class=&#34;fa-solid fa-link&#34;&gt;&lt;/i&gt;&lt;/a&gt;
&lt;/h3&gt;&lt;p&gt;So now I can log in to my Pocket ID instance with my passkey, and I can even get an email notification to let me know about it. That&#39;s cool, but not particularly useful one its own.&lt;/p&gt;
&lt;p&gt;Let&#39;s add some OIDC client configurations so that I can log into other stuff with my passkey.&lt;/p&gt;
&lt;p&gt;Regardless of what application I&#39;m trying to connect, the setup in Pocket ID always starts the same: go to &lt;strong&gt;Administration -&amp;gt; OIDC Clients&lt;/strong&gt; and click &lt;strong&gt;Add OIDC Client&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;div class=&#34;image-container&#34;&gt;
	&lt;picture&gt;
		&lt;a href=&#34;add-client.png&#34;
			target=&#34;_blank&#34;
			rel=&#34;noopener noreferrer&#34;&gt;

	
		
			
			
				
					
						
							
							
							
						
					
						
							
							
							
						
					
						
							
							
							
						
					
						
							
							
							
						
					
						
					
						
					
				

				
				
				
				&lt;noscript&gt;
					&lt;img 
						class=&#34;post-image&#34;
						srcset=&#34;/pocket-id-easy-passkey-authentication/add-client_hu_841e8c8425c3c06c.webp 320w, /pocket-id-easy-passkey-authentication/add-client_hu_e74a0a7b167156ee.webp 640w, /pocket-id-easy-passkey-authentication/add-client_hu_ee43c9d8f73ae039.webp 960w, /pocket-id-easy-passkey-authentication/add-client_hu_7ee9095e4faba295.webp 1280w, /pocket-id-easy-passkey-authentication/add-client_hu_33b84fc36b1be675.webp 1431w&#34;
						src=&#34;/pocket-id-easy-passkey-authentication/add-client_hu_33b84fc36b1be675.webp&#34;alt=&#34;Creating an OIDC client. There are text fields for Name and Client Launch URL, optional additional text fields for Callback URLs, and toggles for Public Client, PKCE, and Requires Re-Authentication.&#34; title=&#34;Creating an OIDC client. There are text fields for Name and Client Launch URL, optional additional text fields for Callback URLs, and toggles for Public Client, PKCE, and Requires Re-Authentication.&#34; 
						loading=&#34;lazy&#34;
					/&gt;
				&lt;/noscript&gt;

				&lt;img
					class=&#34;post-image lazyload show-if-js&#34;
					data-srcset=&#34;/pocket-id-easy-passkey-authentication/add-client_hu_841e8c8425c3c06c.webp 320w, /pocket-id-easy-passkey-authentication/add-client_hu_e74a0a7b167156ee.webp 640w, /pocket-id-easy-passkey-authentication/add-client_hu_ee43c9d8f73ae039.webp 960w, /pocket-id-easy-passkey-authentication/add-client_hu_7ee9095e4faba295.webp 1280w, /pocket-id-easy-passkey-authentication/add-client_hu_33b84fc36b1be675.webp 1431w&#34;
					data-src=&#34;/pocket-id-easy-passkey-authentication/add-client.png&#34;
					src=&#34;data:image/webp;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAABgCAIAAABaGO0eAAAOo0lEQVR4nOxdS48bRRCe94y9ziooiBMIIc78/9/CBYkLIgcCXq/teQ&amp;#43;Kv/Dlc3V7bIeNPbvrOqy843n0VHXX46uqdjKfz8P/KLjRBWnYURKGYRRFcRzfBHBh6nf0UQDxjqIoOvcWrsyGYeDBYRieaKgvk/q&amp;#43;77ru0woAgadhGIKPYCVWint9FEUqAJxjBGAuvImENAxDFEWfVBD5HsdxmqZRFPV9HwRBlmVhGLZt23UdLsA1fd&amp;#43;HYZhlWZIkEMMwDN1/hPWEI23bkulN0&amp;#43;i/r5w4yxNqkjAM0zR98&amp;#43;ZNmqZN04RhuFgskiQBWz&amp;#43;emiRxHPd9X1VV27Z3d3fz&amp;#43;Ry6Cwc3m01VVUVR5HmOe0IGfd83TfPPP/&amp;#43;s1&amp;#43;uu66797tOiRP&amp;#43;J4zjLMrAvDMPZbFYURfwfZVkWRVHbtusdFUUBCYVh&amp;#43;FGX7UQVBAGuyvO8KIowDJumqet6tVptd9T3/StcBIf0&amp;#43;acVQOq6rq7rYRiapgmCYLPZ9H0P7idJgmWByV5VFRUODtZ1XZZlXde8T9M0cRy3bVvX9Xa7hXg4jmvw4ToEJxNqGfpAX/&amp;#43;zAKDcoV5gAx4eHtbrNaSnVhoqhXYYx3Gw67qqqqCXaB7wVdu2sBmw/njEayBo7zRN8dbmxRM9T3kNNrVtizkOVoLp4DiMM&amp;#43;5O44y746&amp;#43;a9yAI0jTFLGiapqqqQ87VyyNMfLyvO&amp;#43;2S8StxDRgH/uIz/4UBwPlYXCRwnwIjvbaoG2wBl9xpt6eC2rYtyxL8UiaCX5zXWA30RxkQ4Emq5RXk4A2xtl7J9AeNLPc9AZyrmsllPWIEcNZoXiHtqaAvY81IuHtj9FHaEwA1Bhn38QM/X2N8R&amp;#43;mQRVFQxJzPqTaF&amp;#43;bHnBaVpmmUZTe5HjdR2Q9cGw9ANQz89GRA&amp;#43;SRLrTyucRaMFlxyeGJzmq8vg87ijKCqK4u3bt0VR9H2PAKrcbOrNpm/bIQj6a4/VJcIns9ksjmNaeHAWUTqhKhzJsqzv&amp;#43;/V6vVqtyrKckAAggyzLZrMZQqcoirpdODt0XXBgRX8NOospXASAEbuuw9SOoojAIkTS9z1Owwc4b5d0iL3vtbdyAdoAjUCc1TRNHwR9HIdRBNyOClRHb5wf93lqWsyZqiWgOk7HizC1ATExpwReQzAUAG4IJxsqaBgGNwtCZeUeVAhTD&amp;#43;pgyBDvt24Y7HFDy7LEcBHlBmGYZlm8Y4nRpwQhVB78zHuaYMKMUo9gfO2OTpcBLuE9IQbIgCG9fuaQkh0xjaGzhDEm4RaN7V1wzbwIPpjxAy4bC8SoQKFMQR9ZvJsz5IhmbHAm35Z8VICIj6S0TIBmJgXvc1Q5qKt2yOdhNG7mBKyxHsHBEQHoCXwFjT0hfga9Os6RN7ICwNr0JsVMbIVcjQbAqltMOO0ySFeMMgLyOCU/apQYw2wuJp5JFEynkU4I82pHUQDjzhrUy7t8XcF4BGDOczOOhoNHGTFiUUdSx7oEDxEZp2CvCh7HuRDbtv1oz0QqTw6MH02GeyMPfyA2cvejX43/e&amp;#43;7lI8Tl8slc7X&amp;#43;lq9Ybdj25A3r0hkZCWEweOPoZQZVMTnBqq2KhYJjTvvZ4P6tZSmsMjp4&amp;#43;cYLTZho9q27JKZrtAqSOiXVDp4OQnEJqe8YX7nSWtYmfPF6QxhpTJuOYTX/AIHeoeyvAa9AmS2rKnsWkOZIRM/7vxcd2NmkI7UaekyUjA78RfkYvY1KhEyfXyj5vL0ijgeciADO/PQI4FNFNtuzZC36ddflTj&amp;#43;iM59p8gKLkZrEAPyFWNRGHlajOoQCesnHdVn2Ra73LXkYsTdOiKJCVZADJZY68B6rnUHl49WpnlIWhTpv5AIX/TNEYTQXgI8DveJdrFa3uQRFZlt3f389msyzLUPtGsKVtW4in67r1er3dblHqPAUBzOfz2WyW57kWkCEpBtnwCONk1Bqj0Pjx8RHJqFMehw9P&amp;#43;NbWDcVYAUpzUiBJoqdxQOMAyzie6p5sNJ6bh3ITbfxAraKdCszt8NW0vo&amp;#43;4P7Xr&amp;#43;PCYDzB5mFPkceg0mxGrqoqQuiL1GHRVVVwQUFl6ucmRMT9lKhVc9inH3dSCnqxHWOSLYlMm8lhepiaNXCPTMVSczNaHQ2lU1LZCOfO52gOh/DXhLh56KM3nyQewJkURdpM8Yb&amp;#43;GpvEIeDGpABU8IgA3mYevNKHGI5oaRNYaE4K5TPCFUtRMEQdPAfBN2aNo0jisYcH5eZ7f3d2hqILKOQgC1OWDXUT9OFRyw1uZ688HuJ1iHJnLTWUo&amp;#43;cWHKQiss9vkcHQF8FYKHFLDqFLiO0MSrnLwTmSN9jXRyH8VC&amp;#43;CDkP5DUT4lp0qbgzGVsnjoiLHcM8IwTVmWaQqfXS58Zxd9xL9a6jQCaRwtHiWZNWdEpVzQvPxRjWxKNw4ZKvbE4WBVVdvtlvxV5uqC8Drxh6a/vy4ILUo6lVDAxHXEjLaZbl9Q3vsk5No3k939sqjFTeHWde3OmNONsPf4nhFumma9XqMVyTwYVo5r1hhb5l0v701jNtAgMRtMrVLv6ElClq/xarYwC94OD2qZhnceGUz4wtwHlxEhIg6A9wlrGUVRXdfL5RI6epqIqScOcBWumimug2uM1kP04lFoBXkURTGfz6MoQsA45YyN9YJgh&amp;#43;kUx3Gc5znL&amp;#43;codTaq/jk4z9AxM1Gq1qqoKKwCRzXRmjCG/API8h1s9m83Qut33/WazgZqazlqG0iP3Oc3prrDW8Ypw2ziNJWTciG6C70DX65CSuYpxOp2sDQAaoW2VdV1TBU1wObuRl/ecC47oPLKNJQim&amp;#43;D6IMHmCAoqToimzeJw8K2DExroZtRv9T7I2QEu0ccQ1uVr&amp;#43;B7qiSBQlJjJxrcF8Ae1lxAD4RVFUliXUPfEQolcqJHZ/X2vvB/SIzefzPM&amp;#43;bptlutyyv10zklO3wJwEAXn737t1PP/2UZdmff/75/v37qqoIguv&amp;#43;EAj9yfe6rjebDdC6C48&amp;#43;iqLFYvHjjz&amp;#43;&amp;#43;e/duuVz&amp;#43;8ccfy&amp;#43;VyGIY8zzFChAjIO05aAEievH379ueff57P50EQIFGXpil3DSLwy/43IFaAjxQRvBjFcbxYLH744Yfvv//&amp;#43;/fv36/W6LMsgCO7v74uiAEJVVdVyuSRcfOERHqU9L6gsy7///nu73T4&amp;#43;PiqARYAIjMYHRjoA75B6NUi6Rg8GyDVwtEYeCuubXh0dLXC3tm0fHh7&amp;#43;&amp;#43;uuv5XLJvBicNzaueu9wFXJnQHh/f4&amp;#43;NZJIkWSwW33zzTZIkq9Xq8fERubosy7jTDFQQ4UYm2zTThPuqYYSpQCGCKmWFztlKR66x70yLyxV8ZeIXhQRlWT48PID1UEEYJFat7tUz3oGiIP6hc7xHTDLHJWKa/HevQaPrusfHx&amp;#43;12iy5DAEFQNZy8&amp;#43;EDus5iFNpn5L5oN5CtwBGAZgVUjJFoXtDNiqyJ8xgpjaol3gH5H8ynfDeNRO4xpxO5Jk153uzaVQcprb38nj2vli9uYh0jWbZS0W5ZpgxgmnabluEWWmbPkvopKk5F0qHRApm8SrCfyyhfQ05AXBB9Z/aA6DZcnScIqFaxa3ByzgS3EHJgygQPTNK8632atcMyYNMbp4smHys6Pb9ikEtONyPTxWtyh88Wka3Ql6lN04nATKCwIJiHwFGRX6PV67erIQc6eQ6lpdopzEuhnM&amp;#43;VNYQu4wf06NQVE0NAFco4IgNNcx0c1ogqEO5FyQHwZbDtBC6EMMgbZMEL7chULGfFniF9B6amyMrURpmyCNSZmMplqBDVvnDpcT2S0dzMQ77APCkDvZfxL8p16RkdJZcWbQPdRuf0fX/CoKwmdAz9NOe6d8q7NNOebc7ROZ6T2wNRJjL/R2ApgA6K3asytoPK&amp;#43;lS6Ry7jh9Iw5gHO7X/9/sfvpL2sFYFx141yaZ5x4/PIQnvv&amp;#43;5z79YqPdqwtCZpU2kMe9V&amp;#43;oU8xYcmq7&amp;#43;6edGrkJ7YNybN2&amp;#43;&amp;#43;/fbbJEmWy&amp;#43;VqtcJWq3Te9TItmlMHVAE7s4EotPNTVYi8GPoMxqVp&amp;#43;t133/3yyy&amp;#43;z2ey33377/ffft9ttnucoLzBFg5jIKAPBFsXcSZ2OAXfzYKBQluVqtWJsfCNPf8BisZjP50DfGAohClXvk5U2AB0Z5eIzVwBuQteb9VIao&amp;#43;kATh/3i0kNfRZA27YfPnz49ddf8zwHsshSdTBXgyZW2cNgqN/p8pfuIIpb0f3hVkxqHOD6ggZQY0Xmc5fBJwFAQX/48AEFHQg4MWcZuHLSaQE&amp;#43;LjfNJ7ynmadYH9yY0XBQwxmFLhS8UwgWzv4LEQC4U1UVK7Ax8TXnR/0D5Fn3U9ceFQI&amp;#43;2jGBR2hcTUa7rrf2tHBsRCNoZq7BrqcnT1Ien01VKKc5f3DG3VVCEX9uvo4WON7f/BSKVwWdUtrOau2vxpkL0RgUwZXOn2XQfhKcZtpjtM0BAjOw1NO2ur1kAXCjP5b8qSLmOYcAFmOx9bYvgGtPSCfB0eb4WV78jd3j5O8RA70YX3vKZHvEkP5lG&amp;#43;IVW8hfCdlIGBthI7zabDbYyfiqI3zh5EFDESih6N7kpG705PRZAPB5UBGEUGu73d6Qy69NtkuSv81m&amp;#43;uVBptTCSzfTfRZ5ImGd9SaNzn2CTYWM6/7fTPeJZOMAzcKzMIsViejZw0&amp;#43;GwGfVXRYYN0y5J2tqZFcA0BuEWti8ieAosEz2TWI1YEMeXkUQzVQh3OgQ&amp;#43;Xf7IRym5WxebhoElAe/5phfFNlImBkusJVV0NjBQzNf1PIA5c3WSDc7fCJ5BMAf9iDuxt&amp;#43;J0iJZgv64VovRbxb4dPI0ah/9eaGzNiK70Th5ImGWouh52gWnaULXYdX61pt4jpJnBaAUBQX1&amp;#43;i1SK9zwEZtXcgsnLB3mym92&amp;#43;ETywNHYCPLu7o7pdcxl/Cx5nudZlmEbGGbnIQDuNnqld3mW5Nk9HTCc/sgZdz6ig8SuPGohpuBvaucs8u8VgV9bNF&amp;#43;Bs1Q1pjMSmcupbWw8ffLvFaFbRLjk/v6XfnvoN/tu5CX7EyYj&amp;#43;/udTrfpfzr5N2690mBeI/0bAAD//38sXtHHq26GAAAAAElFTkSuQmCC&#34;
					data-sizes=&#34;auto&#34;
					width=&#34;1431&#34;
					height=&#34;1071&#34;alt=&#34;Creating an OIDC client. There are text fields for Name and Client Launch URL, optional additional text fields for Callback URLs, and toggles for Public Client, PKCE, and Requires Re-Authentication.&#34; title=&#34;Creating an OIDC client. There are text fields for Name and Client Launch URL, optional additional text fields for Callback URLs, and toggles for Public Client, PKCE, and Requires Re-Authentication.&#34; 
					loading=&#34;lazy&#34;
				/&gt;&lt;/a&gt;
	&lt;/picture&gt;
	
&lt;/div&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Name&lt;/strong&gt; is the name to set for the app in Pocket ID.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Client Launch URL&lt;/strong&gt; can be set to the main URL of the connected app.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Callback URLs&lt;/strong&gt; tell Pocket ID what URLs to expect an authentication request to come from. The client documentation will probably tell you what to put here.&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;Public Client&lt;/strong&gt; option is useful if you can&#39;t trust the client to hold a secret on its own (such as a web or mobile app deployed on equipment you don&#39;t control). I&#39;ve not needed to enable that for any of my stuff (yet, at least).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;PKCE&lt;/strong&gt; adds a bit more security and protection to the connection, but may not be supported by all clients. I generally enable it for all new apps and disable it if the client doesn&#39;t work.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I&#39;ll cover what settings I used for some clients in just a moment; I just wanted to show this screen once up front rather than needing to repeat it each time.&lt;/p&gt;
&lt;p&gt;Once a client has been created, there&#39;s another thing that will need to be handled before it can actually be used. Further down the page, there will be a section labeled &lt;strong&gt;Allowed User Groups&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;div class=&#34;image-container&#34;&gt;
	&lt;picture&gt;
		&lt;a href=&#34;allow-groups.png&#34;
			target=&#34;_blank&#34;
			rel=&#34;noopener noreferrer&#34;&gt;

	
		
			
			
				
					
						
							
							
							
						
					
						
							
							
							
						
					
						
							
							
							
						
					
						
							
							
							
						
					
						
					
						
					
				

				
				
				
				&lt;noscript&gt;
					&lt;img 
						class=&#34;post-image&#34;
						srcset=&#34;/pocket-id-easy-passkey-authentication/allow-groups_hu_62c1b58d46f5b6a3.webp 320w, /pocket-id-easy-passkey-authentication/allow-groups_hu_24ff07efbc77159.webp 640w, /pocket-id-easy-passkey-authentication/allow-groups_hu_db7890e78cf86b91.webp 960w, /pocket-id-easy-passkey-authentication/allow-groups_hu_15129136534cc86f.webp 1280w, /pocket-id-easy-passkey-authentication/allow-groups_hu_157806904ae3b75b.webp 1440w&#34;
						src=&#34;/pocket-id-easy-passkey-authentication/allow-groups_hu_157806904ae3b75b.webp&#34;alt=&#34;By default, no users are granted access to a newly configured app.&#34; title=&#34;By default, no users are granted access to a newly configured app.&#34; 
						loading=&#34;lazy&#34;
					/&gt;
				&lt;/noscript&gt;

				&lt;img
					class=&#34;post-image lazyload show-if-js&#34;
					data-srcset=&#34;/pocket-id-easy-passkey-authentication/allow-groups_hu_62c1b58d46f5b6a3.webp 320w, /pocket-id-easy-passkey-authentication/allow-groups_hu_24ff07efbc77159.webp 640w, /pocket-id-easy-passkey-authentication/allow-groups_hu_db7890e78cf86b91.webp 960w, /pocket-id-easy-passkey-authentication/allow-groups_hu_15129136534cc86f.webp 1280w, /pocket-id-easy-passkey-authentication/allow-groups_hu_157806904ae3b75b.webp 1440w&#34;
					data-src=&#34;/pocket-id-easy-passkey-authentication/allow-groups.png&#34;
					src=&#34;data:image/webp;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAAA4CAIAAAC6xWeEAAAG&amp;#43;ElEQVR4nOxcTW/TTBD2etd2E1rgQg&amp;#43;cOCFx5v//Ac6ckSqERKFSVRB2vF9&amp;#43;VT/JMNl1khZSZ/3i54BSf6zteWZmZ2ZnUcvlMushhMhmjIWu6/BDQfTAqd/qH0K3gRJC5HkupZw5GBNd1znnvPe/CcjzfCZgHED38WNNAKQfGwG5KoCf3XUqOD4jhhACHAghFD&amp;#43;a57lSCu6o6zrvPXFFUwX9xlm6HSzCsogGXB8PNYOwRUBVVRcXF8vlUkoJUVprvfdZlhEr1lrI2jnXdR1&amp;#43;eO&amp;#43;LoijL0vUgbkCAc66u69VqBW5mcKwJgPovFotXr169fPlSKQVxQ6D31/VH2rat61pKWZbl2oKUwsGqqhDRWmuzLPPeCyGklFmWNU3z/ft3Tsw/BfIcgz5ABX/jIuccZoU8z3EcNgFngoPkr9q2ha3gLphFURRSSqWUc84YQ1HWv0YAZFgUhRDC9ggksCYAkoWq/vjxg0/IuAGSNT0obMW/Wuu2bWEWuB6nQI&amp;#43;1FiYCSyJGd03Xg/M8Z24Xi/xtg6DgtKxDMjRBDhMAWGvrum7bNh6FEgf&amp;#43;qbAS30MI0TQNsUVhFZwYLi7LMpBLMCART2&amp;#43;Jg3Q9naXjhPgyHPfen9b7ee&amp;#43;ttXHYAmwRAJ8Oe6HQhZQOszEJnQjgcoGaI6vgsRDAUw3KRMgsMGBwDS6gJ8LmIFNcRhfjRvBNNgqrbdsW44wPfCZ0&amp;#43;kFzAJ80SNf4QcgIxMYEBM/groxrNw1FXhI30uDc1fAX4E/nT&amp;#43;GKz3HQcY0A0stBqOC61WpljIGAKHjnH0MWwDU3sBKumzGFgVeJXRDeh78DPZ0sgJtzrAScAPKBTy/qP8GWBXjvtdZxMryrRMHnvXFUbHBq5VYVvzA3owSxRQC9a1BX2MUB/6o9X8jV/CF4rLBiEScr7hjhHBCUg45SnnvsIIH3nxCCuCBG4HUHoqD9denRJELTyYQ44GFCPNuR9IOy2BYBiN6A2Kgp8BhBKHjEtGpHUN&amp;#43;iKKqqyvMckQJFDSijAfgucBO6IKRLVVVx6hB3G2MoJnnSL&amp;#43;FR04QsANIriuLZs2dlWWqtvfdnZ2dFUUD6dV3/&amp;#43;vUrCOFCF0TpmFLrU5T1jFZSnpzcY8Aa8jyveuR5jrryarUK1DeMgihzC7KBMbN57jFHeNwRgapDXdfkLZxzRVHAIzVNQ&amp;#43;V9QkiAc05rjdoFHRz896m/ZHLSxzRpjEEtBEeapiFfCnqCTxsgAJW1wQeM8iFZUKqbCijCORiGcj0ecEHpLM3z2vXfYDTDPShAXuXFj4Fi3Mn1DjbbT2JSCF7q2HNTl2Vi8yPbLlpANx3CjxHe/1ECHCDgtKDeAKVUnkuajA/ZJQjgX46IDj8657y1Jp4DT44UCejXJMo&amp;#43;EcOUdS/fP7aALBNILWFMqU0tKRLQr2YqYzRymb8fU0rVLwpimSgwlBMjLQI25ZR1/nE8r&amp;#43;28d5tV0iwlA8iOE2YcFfeu5th5QJdsY1iCBHTTTAP&amp;#43;EAkSkEWdJUeAEFma3d8pEhD0TxxlQCEwYHIMpDUJk/pjKj5KJtwPtdUmkxTSIgBLRs45pMFFUfYiI6kJdmE2ZCFxiCmIy34lJOwMPDnSIgCiRS22X11Ssbj6jMxvDAW37JsuqDnFWpNgkTVFAqCn/XrGlgvauwckJqCjm5BPUCNeUkiOgE1d9z51Cvoz4jw2aMUNFrH3/JkOUiQgLiDDI6HHGMsVfLUu6NHDar4xJlmhcyRKQAx0C0gp&amp;#43;dYPWuCmZmxIX2udpsOJMRkCsNpHrfBBnwDvAoa7T1/3gWkQQI3DQetu0DnJ9wSeNuDhCsFBNZbhzriU8ViBHlf6B3sO&amp;#43;ROllNSNwm&amp;#43;BEaPjhBbeJ0PACfPYoOFwF0i1Ly4uXr9&amp;#43;fXl5uVgs&amp;#43;C3W2tvb2y9fvtzc3NA2pCkRcCrQEin6DPkpvtEBc4&amp;#43;U8vLy8v379&amp;#43;/evTs/P&amp;#43;fXG2M&amp;#43;f/784cOHpmm01jg4E3AA1CFQluXZ2Vm/Ur21f5Si3rZttdZSyhcvXrx58&amp;#43;bt27eLxYK2RSJsq6rq6urq06dPdPtMwIOAlepFD3S68f5lYww2KGILqVKqqipspUZADNEDyGZo5JmAB4GaNrENnRIRitAo7SBfFPyXDXR7ECLPBBwGZKq17rqOQmHSYuIGTYlZltV1/e3bt69fvy6XS&amp;#43;qVQw5/fX19d3eHoXD7TMABDDYsA0EXN5X8bm5uPn78&amp;#43;PPnz&amp;#43;VyyfebWmuvr6&amp;#43;vrq7quqYs/T5m2nRBpbg6lgJ2ZVUxoOxlWT5//vz8/Bw7rumsc65pmru7u7qusVPDGKM6hif&amp;#43;kAnjUcJZrVZa69vb23i/KfXakMwVTRpJteX&amp;#43;D7C/w5xaqRVt/vrtlWYanhJUv1oTwMsss&amp;#43;hHA9HwXwAAAP//7Y5SjgP7a6wAAAAASUVORK5CYII=&#34;
					data-sizes=&#34;auto&#34;
					width=&#34;1440&#34;
					height=&#34;630&#34;alt=&#34;By default, no users are granted access to a newly configured app.&#34; title=&#34;By default, no users are granted access to a newly configured app.&#34; 
					loading=&#34;lazy&#34;
				/&gt;&lt;/a&gt;
	&lt;/picture&gt;
	
&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;By default, no users are granted access to a newly configured application. You can create groups of users and control which groups have access to which applications (really handy if/when you start extending access to people outside your home), but for now let&#39;s keep it simple and just click the &lt;strong&gt;Unrestrict&lt;/strong&gt; button so that anyone with access to our Pocket ID instance (which, realistically, is just me) can access the app. Remember, this will need to be repeated for each new app before you can log in.&lt;/p&gt;
&lt;div class=&#34;notice note&#34;&gt;
&lt;p class=&#34;first notice-title&#34;&gt;&lt;span class=&#34;icon-notice baseline&#34;&gt;&lt;/span&gt;Well Known&lt;/p&gt;&lt;p&gt;Some OIDC clients are really smart and can figure out how to talk a provider just based on the base URL (&lt;code&gt;https://id.example.com&lt;/code&gt;), while others might need to be pointed to the well-known endpoint &lt;code&gt;https://id.example.com/.well-known/openid-configuration&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Still others may give you a bunch of fields to fill out; you can &lt;em&gt;generally&lt;/em&gt; find the answers you need for that by reviewing the JSON document returned by the &lt;code&gt;/.well-known/openid-configuration&lt;/code&gt; endpoint. Give it a look if you get stuck.&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;Pocket ID has a bunch of &lt;a href=&#34;https://pocket-id.org/docs/client-examples&#34; rel=&#34;external&#34;&gt;detailed guides for configuring a number of OIDC clients↗&lt;/a&gt;, and basically every application which supports authenticating against an OIDC provider will include some amount of documentation for how to configure it as well. The point is that this is a standard auth method and there should be documentation to help figure out how to configure it for your use case.&lt;/p&gt;
&lt;p&gt;Here are a few of the client apps I&#39;ve configured to auth through my Pocket ID deployment.&lt;/p&gt;
&lt;h4 id=&#34;forgejo&#34;&gt;
	Forgejo
	&lt;a class=&#34;hlink&#34; href=&#34;#forgejo&#34;&gt;&lt;i class=&#34;fa-solid fa-link&#34;&gt;&lt;/i&gt;&lt;/a&gt;
&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://pocket-id.org/docs/client-examples/forgejo&#34; rel=&#34;external&#34;&gt;Pocket ID docs↗&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I still have the client creation page open in Pocket ID, but I haven&#39;t done anything with it yet. I open a new browser tab, log into my Forgejo instance, and navigate to &lt;strong&gt;Site administration -&amp;gt; Identity &amp;amp; access -&amp;gt; Authentication sources&lt;/strong&gt; and click &lt;strong&gt;Add authentication source&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;I click the &lt;strong&gt;Authentication type&lt;/strong&gt; dropdown and set it to &lt;strong&gt;OAuth2&lt;/strong&gt;. I set the name to &lt;strong&gt;Pocket&lt;/strong&gt;, and then set the &lt;strong&gt;OAuth2 Provider&lt;/strong&gt; option to &lt;strong&gt;OpenID Connect&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;I won&#39;t be able to fill in the Client ID or secret until after I finish creating the client in Pocket ID, and I&#39;ll need some more info before I can do that.&lt;/p&gt;
&lt;p&gt;&lt;div class=&#34;image-container&#34;&gt;
	&lt;picture&gt;
		&lt;a href=&#34;forgejo-1.png&#34;
			target=&#34;_blank&#34;
			rel=&#34;noopener noreferrer&#34;&gt;

	
		
			
			
				
					
						
							
							
							
						
					
						
							
							
							
						
					
						
							
							
							
						
					
						
					
						
					
						
					
				

				
				
				
				&lt;noscript&gt;
					&lt;img 
						class=&#34;post-image&#34;
						srcset=&#34;/pocket-id-easy-passkey-authentication/forgejo-1_hu_5268fd900003adf5.webp 320w, /pocket-id-easy-passkey-authentication/forgejo-1_hu_98f36576fe5bf2ee.webp 640w, /pocket-id-easy-passkey-authentication/forgejo-1_hu_f16746e35c28a7c2.webp 960w, /pocket-id-easy-passkey-authentication/forgejo-1_hu_2cf8925f2d555259.webp 1198w&#34;
						src=&#34;/pocket-id-easy-passkey-authentication/forgejo-1_hu_2cf8925f2d555259.webp&#34;alt=&#34;Adding an authentication source in Forgejo. Authentication type is OAuth2, name is Pocket, and provider is OpenID Connect. Client ID and secret are currently blank.&#34; title=&#34;Adding an authentication source in Forgejo. Authentication type is OAuth2, name is Pocket, and provider is OpenID Connect. Client ID and secret are currently blank.&#34; 
						loading=&#34;lazy&#34;
					/&gt;
				&lt;/noscript&gt;

				&lt;img
					class=&#34;post-image lazyload show-if-js&#34;
					data-srcset=&#34;/pocket-id-easy-passkey-authentication/forgejo-1_hu_5268fd900003adf5.webp 320w, /pocket-id-easy-passkey-authentication/forgejo-1_hu_98f36576fe5bf2ee.webp 640w, /pocket-id-easy-passkey-authentication/forgejo-1_hu_f16746e35c28a7c2.webp 960w, /pocket-id-easy-passkey-authentication/forgejo-1_hu_2cf8925f2d555259.webp 1198w&#34;
					data-src=&#34;/pocket-id-easy-passkey-authentication/forgejo-1.png&#34;
					src=&#34;data:image/webp;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAABLCAIAAAA3cxjrAAASu0lEQVR4nOxdbXfbOo4GSEqynHZnZjvzef//b9tz7s4msS3xDXMIkJRky078kqa5vei5bWJLIkWQwIMHIK/58eMHABIA/53&amp;#43;RVgIwV/ygWLSuCMSqDryiKCRFAIReEL6SwMfKYaHVwFqYgVohF7T35u4UTRE/LdT&amp;#43;4Cx6gBRtHSsFJp/xhfJhfmzFSXi4tbFvaURoOV9J7&amp;#43;ctLj4sDZ&amp;#43;fKU8Xx5O6737eWKkE2n0uW&amp;#43;Noh9t/J9N2Cr6wyoX1BAxluFSLIg4HxrKEuUzRNRaG2PqS8YY6eQl6yjIt3KB3Ns0DSqVvmCZN7RoMeaJUVuUp8kntJDjviGiPDyEUJ/zKWJmP6cx6ZD&amp;#43;gfGfIaCD/7cIYZo9iGhM0/e9aRp5f0BUiD4EOw7WWhlKRGzb7unpSWktn4Tgk4aVqqsHWQAgpHvHcRzSQPC9Xbf5/rf/aps2hOCDjyErj/8mWTneu3EcnbUhBOlY1222T08yrFkBMr4xWjvacVz07ds3Y0wI3lo3HPbWWpqp&amp;#43;SfLXAHJC2uC1hFY2Ad8icqyh8jfImqj&amp;#43;&amp;#43;02vSpgiEFhWhDjOL6&amp;#43;YAghz1ZEpVXbdW3byfT33qVp15i0eoBXD48/ETnrdruXNNQhAhDr2Gz7p03f8&amp;#43;jFMnd5ifD4I&amp;#43;A4Di/Pz8GHOqzamL7ftl3Lz01/KFKMwXv/&amp;#43;voavK&amp;#43;K0VpvkvQxxmEYQvDOuU8ZehFz/EEEG&amp;#43;CPqP4P1P&amp;#43;iPiDWuZEmfYjOWTs2vMajTGTnrMzfep137rDf&amp;#43;xAUYiQK3mvtY2y0NkqhWBweJPLep3HMs5tV4txu9&amp;#43;q9y9a5&amp;#43;BK&amp;#43;nNjUo3MuxECTh0lNjONAQFrpYtayhQnez21XCH4YBumCs2PkNfSJgv/945&amp;#43;EGtAQKg3wjeK/YmiB/kD9b1Q2ASSoplYpZZom2VDGrMgGQSaa5/eU&amp;#43;aiUSmOtlUIlJpg/1Nl/lOksP8jN01zW2jSNTn2RVgELPq5&amp;#43;gleVD7MW0wJrGq01opLZn59O0RcdHD2fgObP&amp;#43;TQF/PjxL1Ka0CQjDdgAbSkiwAA4pMHCqWs83gI40k9UoAxlA51Rhagle1k8xir5jgVaIVrcm5uYtXuKuia/kAFXdSuwxDWnV86fv/j2U8QI/EkeMk06DAC7NLUh8mjghVtx&amp;#43;gEvXbjyFS4&amp;#43;vnj3&amp;#43;jPeuAXf&amp;#43;/B3NP3BYsS0oNJJARWA89/qc7v2e0h2wnkR5GX882cFOwW2YyVS&amp;#43;uyZ&amp;#43;bPElOiQF4LWSumfrgMJ1kJMUEpiPZ380e&amp;#43;hgwpD09zXymhjZCmsXz451PNfXSmChkJAirwCEoAqeKY68qWjxBk2xeL0M0aqAEG&amp;#43;hxlYWGv407nGYoJAIigGizqJ0hpz/JP&amp;#43;keC&amp;#43;hjNzzFGRRJUrtFEAZoxREKosxAQqm1YbI2aR8XuUx8oFAkYz6k0XpDVEAHy9ku5UJkMM7AIbAXCMEDiW/mwuSCRPNokV&amp;#43;77vtyluJahRUmBETQRap2hAa51fO8eqwhBYicve236er1TVKaCsadpv37/3/TZNBaVCCNaOvEa19FAxWRRYbZo5jxS7ERiTrKiQHN4773ykaDhMQGGlBNYSWWt3ux3RGD&amp;#43;Ph1iJhBFBa73tt3/7&amp;#43;z/atkljH4UNSD12zhJB17abvtda&amp;#43;/SSHgGYCIPDYf/y/Pz6GlfZt/cLQprjbdtuNpu0CBR654FbaYSGItKzRcAKIO&amp;#43;NXCM&amp;#43;LMbgnLbKEcW0mtouKdKHEIPQIIg4jAPYu4fwPjmhIpIwf5A6m4BoiFHMBC9oknXCL54i2BBCMggc40qgezl4eI8QpPB4v9&amp;#43;HEHRyyJiGzXs1ozwRk7tm7BTZ5qS1KJorYWF6SAiBgJxNSzMzdJTnu3OOY&amp;#43;A7O3uvnCiAIAS/3716Z7U2wmqBDHqIMQYANDvN7ykrmpRKs1UpHMdxOByC9/d0SFp0zsbXeNjvsfgAMfdzKr/QRMKuQub4xMDUB4lnrrCCphwBCRdNdy3W&amp;#43;&amp;#43;VYAWn2hTCOo7UWlp2eszE8KFC9otbJNItbq&amp;#43;T&amp;#43;LcJTN1LkuRvh7nBgrqm1rx4/9Ne&amp;#43;&amp;#43;qoJgmv9UvW6988mtjCBedB1GuM2&amp;#43;WjKgZYZuPfLugLOxQFHYHxO817V6nnJ5jtCfMjslLAghxQfqQQkiBBzcu2a0ThBQZDsiWYsQQXMVMt7NNBHKcMHCdU0wHzI5havqLwa9pUXrsQoE&amp;#43;GaUxFqtqrWxugOlROxASZ/bXLtZAVwTqrfbo1pxEFV1yfDLXOKMUYYx8E593gnhhI5JfwDNEvvl9lwqgxapvUTyqSIjHiIowdjjGIdyMtQ9tlQogK6w3VxH5LZhIiB4cAVN5&amp;#43;ugATvmqbt&amp;#43;w3zQhOzL4kmUYf3YRgOPuQ8zE39vvRCxphus2lMk4LzFOpKHi2yPtLAUiQmjTj/FULk3HG&amp;#43;loOAOI4pckn3ZJ6Lo4G2aZqckZfrUUI275zjoPLKrjL4Zi8ImP67&amp;#43;mVPUVAC/s5apVBrU/Q5JV9EG567XDPmDxVmpbTpNz0vRFPrMGKOSHgtUjTGSAgmeV2KMc1zk8bX2XH/8jIkk&amp;#43;BFoxJg9v2273ullaQsxSg564bhwLFxvNYMYYl&amp;#43;xPLcgNpO4wDyzu1hP44jqjkMncq2MojmVOS17b1DUnsxRuedSTOYJM8udu8ogyWoN7AG5MrIw5FC9BgdQVjm0yRLXFuK4uwp3mx/qLJYt07ElTgg8grwb2GGOhi3NXz5yd67/W5nx1GIHWY9Z1BPZlq29lBYQlJMIqYFGtIC9UzP5ZWbgju33&amp;#43;/GcRCjMb2FxPRiS698HSoQXADLDeTqOgw9nRH3KPlq4QF1zvnrV9jcLQtSEl40xACO0pLFY0Mx1QfcAYOSApKFfIQCJra5eID5W5WfF6jtCI28U1VzQLnySvdE1IvHxBA9OKIFDF258o5GpvgRZ/WbNP/njKzHAW3bGtMohVT4YWCKIoQgiqFIta5A8gjC1oUQGE687ZwZwmRC&amp;#43;wr6&amp;#43;gZhFbARU9mrfUwzCom0Oir3iEQh0oXax5U4ICGQfisIpMYBxM452QROgASBEOzWFHNBbA39OI6039vRXp5QtT6HH0vnqqME8h9FW3M&amp;#43;bsHNnd5eflAARgFX5qmaMqNFQzJgNYX2CGE20IdgfbjA&amp;#43;K36gFrSmlMB1dtBSdovMmIlA4gl3n9PMEJ1hpxemgMxlR82C5cK8QmlxBSOjNW8NgiJkENHhWBY4UobVBqPiqKXkeYDYYWiAIg&amp;#43;EsSzS3wNhnq/3&amp;#43;&amp;#43;ss1LXBjUYzcUL&amp;#43;UeUorkEP7ACVglq3rQ/Ej25quXltzkQ6zrTNDxpFaaexKIBkJpRpdOfmEmAtNAVJ1TzaIZAdox2dKWIGFCj6dqu09rUYjAQw8Qph3EYgnMEjyFXZCKqGGTGnvPw63R0TFGJqxwATs&amp;#43;kyvyVcvwjav69zrP6iZMccgnEshlstBYFZKyZ4X&amp;#43;MkhblZGSQPKgxpm3bYjDt8PqaYjFyJdmaHttt&amp;#43;i5dk5EoKhTkOgxDCi7T7HmUnxBG940M1RkYKrnTZZ3W6ePnv9yAWM7cIoRolMXEw42zRmYoy3ueKrkCVwCC3MIK8DYESxQA9PRormPlIF98GE5cUCwY5jFeAGFWnnFe1hVQg2yt9WxgaPbwyebOmawFf1n&amp;#43;uzZFLJHRbrcbUyCm5t5RIjKocRhOEFC4HaWVXCklwxwqg8RyCJGCs4edH5Wsqim5BBR8oGAVROb/3t/Zs4KQnFB4q/LlkgKapu23vdZGXlf2mRTgkcZUMsGCIyUiVzl6qCU35Dm/5q8iTdmXcCxmV0tzp3fE40Lf5WMkcIFIkGBb8IxLLE41IDP&amp;#43;hiA&amp;#43;ND2Za7&amp;#43;5auSCEs4qAAC00ZtN33VdDcpkvtRNRVx/rsRWxBCkAh0THq6JcbBcg39DCfgDArEKbwisjyE6VKeh9Xy239TcBfDK26gSCroiDpju5X0Wh33gfRYZaDLcyUPD&amp;#43;AFYHyF4ipSRI6/ougS88&amp;#43;EzNmEJlM1Vl4CE4FOosvKidzRClck7B17fJAYuKAASJNjthmGopQa4SCdNMFwChlLaVe6HnEVIge71c3mZDqOjX1eupCWUUspoIzV08sm1HZCmLn0nzGWafLcnRS74gLxXImPYvASK7y0BES&amp;#43;yvBvoXCeu7hwKEtXZA1cOCnFhmAoAnr6KEdk8cvClOA/WyLpczpwa2Z2rGq0dXykfrSV8ORdEkeLj6Oi5CGqWDadHIsZGXCXXoCUnG87r4CqRQGzT913boVKiWoE3qcUQp2IhVoBhTJm6MQx&amp;#43;GHzwNbWndE6EacmdRbGcyI/lMqe8QPCIw5FIxTmXWj/tIZs3sT53FpNfUgByX6UIcMF3inGVucfomx3cA0tIEk7fbPqnp29NY2b1h1E2wzYcIdedrbw7zATvdy/Pu&amp;#43;AdD5l0RynVtt3379&amp;#43;7rosCVoEkYHbeOesYRujZjisUiBd4VhGAZb7wqHui2gjh/lL&amp;#43;SwrgxG&amp;#43;KD2W8KW94rngfay6p7hi9pytVJBDz3ls7ElcSEgEvNgnNKEYtsUKyOTklG4IPznsXKUz0VI7q8phR3c4GRLXvOBW1l430ESLGnOs5670e9LKXUJDkBTMFPYtDyyU4u5YeuNdZBne/e7XjgMJfTs2k1pM5KoWRssEqWeRInAbzuR/czUhp0by&amp;#43;PA&amp;#43;HQ3FYuf&amp;#43;ZequrOb9TflWh1me81vTW0&amp;#43;7&amp;#43;/LS7NHE5EkZjjNGmEJc571wOVSlVT&amp;#43;wMPKvqMYtgCsRkC/Wk6dq3BZ05JxSoEoVUTiIYnXOq3ELzZlbK73D25bT582R0cncK9Lj9rS87Yd22ndBb880O0j9Z&amp;#43;&amp;#43;IeOGK4mnK4LPcEYmJhgndswU43zL7/OW9dcBH&amp;#43;vUcuKaDg3AClsDvNtJzRpsp9lo0PDw62CkuT0eBsiy&amp;#43;cZmmyaZiNMUPE5Es/dL8fFWdy8xMuBWKyL8V5V5uaV1jKi1Hh2x5mf3IUpbjsx&amp;#43;T9e7z4BHuwvnN9mHjmhDgZq3gun882uyTlP3av392vfGEFcLqFSBXmh6bETIagJATWgtl/gMiRHX2/lR0ysThDOShBdl5wDZbhahJHIYJzYTwM7nQlfv42vMty0QmzD0iBmMS6bIJk7DmWSVGny/uWHlLBkFuWyW4a0/GxJlwJ6YXol2jAOc8bmDremeS9s&amp;#43;N&amp;#43;nyCoD0CfueHrBrnkAxTPRN79ooodKIQbo0Pm4CIPzQNfm2pdkBxrkhlvz5UNnJss&amp;#43;xs9owMuTQzBAkRUTBB&amp;#43;JbmkACmR42AnR2GAJb0qG&amp;#43;GycXg82cnuxxHBaK0cMSStZMfDx68cBlV&amp;#43;ZRYE0qpRv7jFOZFLgRgnh0fr7DGRNf1boOdDi&amp;#43;aoPD8Z9BCXX1WSFSDEkkBM3kkbo7/Y4MObMDQpAZY5d4AjAvjxL11y6BKiXrIohWhG&amp;#43;vhNSB8klxQwyfEE//Ay0Vp9&amp;#43;859RV9z8OHSHrGjNz/NudfPb9bG5drQ30TWa0P5UC9V63T5&amp;#43;MFQ6&amp;#43;FqjCpO&amp;#43;LZNMnICpjzk9Haaao7oS0/wN2V9j9i23wr61LwLnqG2Lb/mbfG8pWTc73Z0fSpG6GE5d8CdMKmU09kB4/lzW/4ssrJHbNokx9FmzQtqpYxs2uJQQNKQ5Xyh66WcPbd6u6D7o1Twn1JOShN5d8qBjzOV4ks&amp;#43;GSLZoDr02XZzFGqdDdeToKU2tADZk&amp;#43;/lcykEmNKy9QRFOkrv5t&amp;#43;/IAo9f1QBgK21yTQvJJ5fPKuJu1biJQYJhQ6SujyOwYWM47xW5kVyTgKBUAoUCfIZzF9KHnNUwW0yG/rjMhMm4/rNptdaS&amp;#43;lnpKgwWUWOk70sG6WQfPCHvR9HyjTQF1sG1x1VMBe6n4w9v49A6OguyaaScZyaF5&amp;#43;UqWal0I3ji3eBt6nemHb5VDlVQK7JndfkTAT0cl95zY7e0LD4k/KYpb75gDJn3aAOUnLKO7EDFzT4XO8GUnCL3lpHEBk0fy0aTmTtxCxj&amp;#43;k3fdq0Y3CkVrmqdfj5W23lnx/GGOIAPH2N7Uoobji4QNpQArXN5p&amp;#43;M0D6ZckCRnIoEyjfrVmf91WV8BTdv0/VZ29dfEm9AyogCpyBrHIZ9KdcMiKJv8cW2DmPh/JtxoXmS/hEAgH8lpm1d34NeQUwUkgGj5gC/nUjystC4nAh1bHu98XN3k9Q6hstE&amp;#43;A5ojKaW1pfLp/PFBSF/6lNfTOCB5PI4Dxgz7OfeSa&amp;#43;dLZZD8ibzh5La9MbGo7mxBEdZtJpfJiC88&amp;#43;usrQKiF&amp;#43;j&amp;#43;nWHx3gnzuqhw5A0N/Kzl7VMHRFtyfd07B1InfQjHrRxWo5enFEzN5R&amp;#43;h72kp&amp;#43;&amp;#43;BodnU8h4ULo&amp;#43;9v6lWWdju66Tni3mnSV0sTgvbX2ASVAsx2AEujOv8zH4Xgn/5&amp;#43;guxr65eU0DsCmaZ6&amp;#43;fdtut0YbKIekiGM4HA4vz88xDncqALnApOs6QByH8fisiLx722MMdU/kn1X&amp;#43;EwAA//8E8ShY&amp;#43;eYI6gAAAABJRU5ErkJggg==&#34;
					data-sizes=&#34;auto&#34;
					width=&#34;1198&#34;
					height=&#34;706&#34;alt=&#34;Adding an authentication source in Forgejo. Authentication type is OAuth2, name is Pocket, and provider is OpenID Connect. Client ID and secret are currently blank.&#34; title=&#34;Adding an authentication source in Forgejo. Authentication type is OAuth2, name is Pocket, and provider is OpenID Connect. Client ID and secret are currently blank.&#34; 
					loading=&#34;lazy&#34;
				/&gt;&lt;/a&gt;
	&lt;/picture&gt;
	
&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;Scrolling down near the bottom of the Forgejo page, there&#39;s a helpful Tips section which includes the following pointers:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;OAuth2 authentication:&lt;/p&gt;
&lt;p&gt;When registering a new OAuth2 authentication, the callback/redirect URL should be: &lt;code&gt;https://git.example.com/user/oauth2/Pocket/callback&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;OpenID Connect&lt;/p&gt;
&lt;p&gt;Use the OpenID Connect Discovery URL (&lt;code&gt;/.well-known/openid-configuration&lt;/code&gt;) to specify the endpoints&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;So I can now complete the setup on the Pocket ID side of things:&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Field&lt;/th&gt;
          &lt;th&gt;Value&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;Name&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;Forgejo&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Client Launch URL&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;https://git.example.com&lt;/code&gt; (the address of my Forgejo instance)&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Callback URL(s)&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;https://git.example.com/user/oauth2/Pocket/callback&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;PKCE&lt;/td&gt;
          &lt;td&gt;&lt;em&gt;enabled&lt;/em&gt;&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;After clicking &lt;strong&gt;Save&lt;/strong&gt; I am presented with the new client ID and client secret, which I can paste back into Forgejo.&lt;/p&gt;
&lt;p&gt;And in Forgejo I set the &lt;strong&gt;OpenID Connect Auto Discovery URL&lt;/strong&gt; to &lt;code&gt;https://id.example.com/.well-known/openid-configuration&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;I also enable &lt;strong&gt;Skip local 2FA&lt;/strong&gt;, and set the &lt;strong&gt;Additional scopes&lt;/strong&gt; to &lt;code&gt;openid email profile&lt;/code&gt; so that Forgejo will be able to access user email address and profile information.&lt;/p&gt;
&lt;p&gt;With everything filled out I can click the &lt;strong&gt;Add authentication source&lt;/strong&gt; button to save and apply the setup.&lt;/p&gt;
&lt;p&gt;I can then log out of Forgejo and try to log back in using the new &lt;strong&gt;Sign in with Pocket&lt;/strong&gt; option.&lt;/p&gt;
&lt;p&gt;&lt;div class=&#34;image-container&#34;&gt;
	&lt;picture&gt;
		&lt;a href=&#34;forgejo-2.png&#34;
			target=&#34;_blank&#34;
			rel=&#34;noopener noreferrer&#34;&gt;

	
		
			
			
				
					
						
							
							
							
						
					
						
							
							
							
						
					
						
					
						
					
						
					
						
					
				

				
				
				
				&lt;noscript&gt;
					&lt;img 
						class=&#34;post-image&#34;
						srcset=&#34;/pocket-id-easy-passkey-authentication/forgejo-2_hu_e62356c219249e65.webp 320w, /pocket-id-easy-passkey-authentication/forgejo-2_hu_749b1e612c0d7216.webp 640w, /pocket-id-easy-passkey-authentication/forgejo-2_hu_84d08c244091f7ea.webp 887w&#34;
						src=&#34;/pocket-id-easy-passkey-authentication/forgejo-2_hu_84d08c244091f7ea.webp&#34;alt=&#34;Pocket ID prompting to sign in to Forgejo.&#34; title=&#34;Pocket ID prompting to sign in to Forgejo.&#34; 
						loading=&#34;lazy&#34;
					/&gt;
				&lt;/noscript&gt;

				&lt;img
					class=&#34;post-image lazyload show-if-js&#34;
					data-srcset=&#34;/pocket-id-easy-passkey-authentication/forgejo-2_hu_e62356c219249e65.webp 320w, /pocket-id-easy-passkey-authentication/forgejo-2_hu_749b1e612c0d7216.webp 640w, /pocket-id-easy-passkey-authentication/forgejo-2_hu_84d08c244091f7ea.webp 887w&#34;
					data-src=&#34;/pocket-id-easy-passkey-authentication/forgejo-2.png&#34;
					src=&#34;data:image/webp;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAAB/CAIAAAComF1QAAATWklEQVR4nOxda2/bRrMW7xQpUbIl20LSgwZGPxXI1wL9/38gKFCgCIombWzrYsm68H4/OHreztmXkhiRokQ50fMhcCSKXM7szs4&amp;#43;MzsraprWuKA&amp;#43;8HU34HvHRQE146KAmnFRQM24KKBmXBRQMy4KqBkXBdSMiwJqxkUBNeOigJohnuxJHMdl/mWRpin&amp;#43;xR&amp;#43;nBLdGfqvo38pxIgVwHMfzvCAI/BqbF0D08RonUwNEL6xBathsWJIk1LDK23AKBeAlJUmSZVkURaiB47j0v5EkSRiGQRCEYbjnq5LIyomG4zhRFBVFkSQJ3SKjA&amp;#43;oWaFgURZXr4EQKEEVRVVVFUWRZ1jSt2WyKopimaRiGruv6vh9FUZIk6In4PP9VaTzh&amp;#43;uRf7C8gdAtZlqGArSMAd0uShOd5ekq1Oji6AmB8pH/RarX&amp;#43;Zw3DMNI0tSxrPB4/PT3N5/MgCPC2YRjm9zWe5xVFabfbqqpyHIefeGsEQZAkSaYBkGzGlLMNgyLZi9kJieM4SZKiKArDMHPzw3GKEcD/C0EQ2u32Tz/99Msvv9zd3SVJYtv2w8PDhw8ffv/99&amp;#43;l0ir4GcaBr77qhrus3NzfNZjNN02gN3/cty1qtVp7nkeBIyoIgsKrFBWgSCR1XyrLM83wcx7A5SZKwE1jlwjndJAwoitLr9d6&amp;#43;fdvtdi3LajabnU4nTdOXlxfTNKMooivzb4WZMwgC27ajKBIEQdd1TdOgD1gzcQ1JkvBVo9EwTXO5XDqOA7FmHDO0rdfrCYJgWdZsNlutVuw4OIZkTueGsl0yjuPxePz582dN0969e/f27dt&amp;#43;v//582fHcTLX04BgbQgsMgyCaZqu66qq2mq1Op0OZhRBEFRVxZyvKIphGDc3N6qqzmazv/76azQaeZ5Hj8AfPM&amp;#43;rqvrmzZv7&amp;#43;/skSYbDoeu60O5RZXJSBRDiOLYsazKZGIbxww8/oLduDnDIUdM0SZJYd/D/2r3u2oqioC8riqLrerPZ1DSt2&amp;#43;3Ka0DfkiQ1m01863meqqowO5ln4UrDMK6vrz3PEwThNN7wqRUAocAX0nVdURTP82az2XK5zHg&amp;#43;6P6qqnY6HUVRyNbHcZwkiSzLzWbz&amp;#43;vraMIzlcslxnKZpSZJA3FEUmaaJG0qS5HmeZVkwQbPZDJ9v1QEtU6Dpyn2eTdQwAmDB4YbO53Pf9//&amp;#43;&amp;#43;&amp;#43;/hcOj7PnsZurznecvlkkYAnBB0Yd/3OY67urried40zdVq1Wg0oKTFYkHWQxCExWIhCALceahwUwG4v&amp;#43;u6s9lsOp2ORiPbtiv3eTZxUgWwCy7HcUaj0XA4DMNwOp0&amp;#43;Pz9v&amp;#43;v5xHMOm0xzAOjZQ2O3tbRiGlmWFYShJUhzHpmlaluX7Pu4WhiGpNseqpGnq&amp;#43;/50Og2C4Pn5eTKZuK77rSmAZDqfz2ez2XA4/PPPP3f57xAKGX2APJYgCHzfh5XQdV2SJKwhLMsyTTNzt61CZ9knuLye541Go&amp;#43;l06q7BPvd4OJECqO&amp;#43;7rvv4&amp;#43;CjL8mKxGA6Hy&amp;#43;USwmLFQdh6H3aBapqmIAj9fl&amp;#43;W5UajYVnWcrn0fX/Pnss&amp;#43;BW7VarXCyi6jPzS&amp;#43;Onn8P06hAPJeoiharVYfP36ExZ/NZqywitJeaZoGQYDZW5blOI4dx/E8b/&amp;#43;f43G0JsCA27yMvbKsDHbi6Aogoy8IApna5&amp;#43;dneiUSVpIkURQFQbA/74hZOgxDYoQK&amp;#43;Y6YljGj7Frl4ra0Kn6VZBw8SPRNvPDWa6CAMAwLEb&amp;#43;4eblWgW/AH7Tc23pZuMYxRgB3muRc8l52vSfpIGN/T9AwYoR2XVOCat0fJ52EtxrZzStP0yR63D4qP16rTr0OOOXj9kS9rboE5WvGiSJimHix5MHfX7WqNGfkWIldMQP8lr7NWVjsAk1Xx7P&amp;#43;wNEVQGE/yJHn&amp;#43;WazCfYGvHzmenpVRF10XQfTAHeF/RYzJ9zZDIsHqg7MBEV0850r0hbFLVqtliiKlmWhna8yKwJ05s3NjWEYvu97nidJUrfb5Xl&amp;#43;OBwSzcB2ZOrvoih2Op3BYIAgAagxcvZlWQZLaq0BRZKOdV1/&amp;#43;/Ztu902TdO2bQTLPM8jObLjg40KUPxL1/XBYKAoymg0Iv7u9cWEeZ5vt9vv3r27ubmZTqez2QxiFQQBnDtYeLw5S0mappmmqaqqhmFg9KALY7nrOE6r1bq/v7&amp;#43;&amp;#43;vn58fByPxxAiOL4oinRd//HHH/v9/pcvX6bTqbYGuCMsRBAVgEDJXmEhgoCPqqqIKziOQ3YMj94/aWMfHFcByIdA1EXXdZBo7XYbMZY4jpU1sM4Ejx/H8Xw&amp;#43;//Tpk2VZCAY0Go2rqytZlpGx8vz8/Pj4qGnaYDB48&amp;#43;YNz/O4GxQANk2WZcMwbm9vV6uVZVmwSFh4Y01&amp;#43;dXUFgjqOYwR7IX00AOuyTqeDmNrd3R3UM5/PHx4elstlhWGy4yogSRLf98G4DQYDWZan06lhGJ1OR9M0JAs1Go3pdMpx3GAwQAfsdruLxcLzPEVRut0uBKRpmuM4cRxLkoQIDMKNnU4HbCiMjyiKGFv4FmEfwzD6/b7jOJgeOI7rdrtBEDiOIwgCIskYOs1mE&amp;#43;Ov0Wj0er12u311dQUGFw1zHMeyrAqTtI4&amp;#43;CQdBMJlMPn36dH9/f3Nzg5wDWZY9z4OnYdv2crmEPjBpJ0miKAq&amp;#43;lSQJ0UpFUXzfF0VR0zSMBpAz6N2CIPi&amp;#43;32w2DcOAiEFRIONIlmVM5oIgGIaBX83n8&amp;#43;Fw2Gq1ms1mo9FAe1qtVpIkk8kkjuPr62tN01RVZXMj4EFUKJ&amp;#43;jmyCe52EZyNZjHnMcB9kijUYDX0FYgiCQkSWuBvfxfR8BfQrpgImLokgUxSiKwOPjJr7vm6a5WCxms5ksy&amp;#43;12G3K0bRve1Hw&amp;#43;H41GV2tAhbgtwmqe5/m&amp;#43;H6wBhqrRaDiOg/ZUKKLjKoCoUNu2n56ekLGDLLkwDGE6MNOuVquHh4cgCERRDIIAEd3VavX4&amp;#43;Aj1SJLkui7P85Zl2bbtuu54PBZFkfo4eI6npyekt4xGI9d1J5MJgsBRFLGzvaZpLy8vCAQ5joNhhBAFJgOYndls9vLygtBYkiSLxWI&amp;#43;n1eboHhcMg42V1VVJDEgDiyKItIXkNqGuPxkMrFtG8RykiTL5RIZDIZhUNZmHMeYaVerFVyddrsNeYmiSMkWrutKkgQnFW6oKIqtVguBZTi&amp;#43;sixHUcTzfK/XMwxD0zRRFF9eXhaLBeIWoije3t6KojgejxHQh3vGBjurEdGx2VBy8sjXpqwITdPwFbo8/HRcQ3Fz2CgWEGKappSqRhF2ctXxQza2RXxnZrXVbrcpGGCvATWrqgrtsql2m4u&amp;#43;CuRz&amp;#43;loReHmkrVEc6kjhjpw2QCvI1qZwEKt4URTx4VEbVoMC/vPgbWmwNTZjM3WX2nbUBtSTGZd5sXoJYZYFYT/MyQ6uEMUUkJ82WxpHynstiq25coffNn98F1AAG1M8E5GdOSijImcW2VcBkD4WpcdIk/9WQbllu9ynAgpASn5OVP2CTdDcvmsQ7NWXuf/GEdr5zeKrdruAMblIvzRyRHeQG3oyZ7koDmnYPr&amp;#43;t0EMtrwA2KrvpaVEaMwXEdzl5OUm4Xx1wlLBOD6K2ZT7JLLI2v2X3Ku16qczCLbOAKKeSkgoApw9ynKb4zNZG/JeW&amp;#43;FAYaYLehCK9xBpRTIqonoyM6LXxK8QY2PxZEAzw/9jkhq1CBMhMw9cAO0L9gGWQ8BZ0QwQeSm&amp;#43;nKakA0FXdbhdEPIkvIzIiEX3fx45c0h8Jkfh9EiVCj6IoEslM70/MKOXMUkiSYorgMonFg&amp;#43;tMusFv2UFAgWJwU/D06LnsWKTNqsTKIakdmxXKhQrKKwAtpogVGofYLJtND9aXIoj0JhQBR1eFqnBDXA8eG9IhghNiJQoPIsBzsR2MpEBNQvPQPdkxR7YL1D8xr9STELWmRoI9pB1keAq&amp;#43;pdzeEnNDSQWg961WKwgFcgcpjzHBNpHiSmRYOI5DV6XOhaRoMlkYEGTfoAAE0FkF4J4IEuA&amp;#43;FETDOKA94psuORrM7r8k8VH5DjSSdEz0Ldu9DqwhUVIB2NCDfdU0GyPSgpAWvoIgYFIy2dFkQ9Fx8A5BEGBAxHHs&amp;#43;z5SQlg7wE4DuDmMADvnQ/ck903albq/IAgYlAhtZqoYZBrJhh/YwUQpQ&amp;#43;U43fIKYNOqyLBgLFOfzTAhbEwm01YaLvTffdYcmV&amp;#43;xH&amp;#43;7jRGG&amp;#43;oU2pW70v9pOtbttWMnV/lHdDNx&amp;#43;M7pBDNX&amp;#43;1ieU46pyNj1/9IaXL5z/6deSG1hhXKYdzaO2F16wZFwXUjIsCasZFATXj6KmJWyuA0QXnMA3Wi0MVsMl0s4IGZ8cm2BCjwubhHNiGV43yCmC3/rKf08oLfE632221WqB0sNwHU4a0ddr&amp;#43;8N3iIAUQQ0I6YHe7QwGdTqfX61FmJzhObHYIgoBNR/w&amp;#43;cZACQP60Wi3QyKBlkA9LXDmR&amp;#43;yC5ms0msvsvEwBQno7GCNB1/e7urt1u4xPbtpHpDw45CAL0dOIyUSUVejpNRaQzx6ExYUmSUAkXHRyJ/ERaQdDYG0QzMLGk4DLZeNP&amp;#43;NFwOXtfAOtQLQjd3XRfCzZTroaghCZfqphLznrkhccX0Cf2XJV/ZkFaGFizNDNeCg9hQ7MEzTZOsPKKP7HZc1KJFnIvYaXR/yuKne&amp;#43;KHFPkCKDYCU0blv9mfENAhKt9IdDyUjwdggsUuasuyIF&amp;#43;UsmVLosDuQwdsLBcbvsheUc1u7NBDcI0WDVAtgqBYWGSi6qQJbJJh6xOfOQ4aAdjMRlFfClLTpgZECBBswiih3XckNVIARYlpycamIJBryxadZBMRMnd&amp;#43;LThIAXhbGBP6kM2DpB3ulHJCl1FuBJv6gRt6nsemruBvaCVTXGmzm5P&amp;#43;XosaDpqEd9USZHsl1gFbs7J25U5lLmaLnuwZp3wt0q/AC9ozyriZg5YTSs255yuS7J6ogA3dJOPYrzK1zzNZaRS7P7wZrxSHLsQ2c9bJL6TK5aqqkmlGehYSgSih7BWZ7MpxEBfE7plh82QoWRFHIlxfX4OfSJJEVVVd1/Ffx3Hm8zl2rF8UUBi0mRZ1/HHKCqVIUoEHOhRElmVaE6Rp2lwDxRsyddO/KxxExsEppJoxvu8vFgs2zS8MQ1TXwdoVayi6A/J2T1Mj&amp;#43;2xRwRyAs5EMw3Bd13EcJMdBvqjtbFnWZn1U0lB&amp;#43;SCAnfpmzvaDaPRRHxUEmiK08u3ULHx1cxDo/GR90k31jH8FWXGQznDPbCzKq2rqH4jz1UU1qIqptsFX7SSiU2M3W16bk0Uw4k9LNWe1SJRTK4KQjEdncU7oVe7obObtFS1KfDBWshGH6kYOPwnhseizS/DED09YfEJbkRJG2wAXhYtyftktA0HQsDDRK0mdZCmJPaQMBKMLzdHYPYkNBnyG3G59vlheh3T&amp;#43;0RYmsEG1KYTe9IKSDTULsLjO2y7OGjj7E3yCr2afkmLhzQAVkHAUDiI/MjH3UxqO&amp;#43;TNfwPE9BMeLRSFJsqjoZfcr9p2ZQfI1CBVAAS7h&amp;#43;9WzEGnFoQGaTj8tw9EQjszt4drGhUAZWEplDRHb5PCyjl2E&amp;#43;2Lz587Q/FcwBGQ9k8yVLvPkxeut5Sr&amp;#43;y1MT81yv68mcrrGPgkpxbMy4KqBl7KYB16Y7fpG8NmdyZDPadA9jjdc7ZrT4rkC/ObrrPoMAkTDTARQF7gpJ3KihZxi6gLtLfH2zS2NYLCowAWihV17zvAvkTZ&amp;#43;F1wGUerhYXN7RmXBRQMy4KqBm11Y4&amp;#43;Es7TR8iZOAvXjq6iPdWDrTl/VqVlKWxVQeVctmjR&amp;#43;YDCEjgirt/v67q&amp;#43;ufGmLkRRZJrmdDrFyd&amp;#43;bOiigAKRYURDxTED9q9vt/vzzz&amp;#43;/fv7&amp;#43;9vcVBSnU37T91xZ6enn777bc//vhjPp9vJkHtpQDKTsDelRLvlklLyWlx0Tsj5p6m6c3Nzfv373/99dfBYEAbbwrdZ2tyPKHEW&amp;#43;P89i9fvgRBMB6PsZcrc03h4t35h0/vAqxzpn5n5oXLnaWNhN80TVut1t3d3WAw6Pf7RU0Q7dpkz1FlG5l/FngOkIN8e3tLB&amp;#43;ZkOlmx8wOKPh7A0Yztdpui8PicEq1QHRGndBXVAVvREzvRMnv8vgrwZTjwM0kS6mRsEJuSa4oKIUkSFEzd1aQCI6DQg1ngADqcB4nRQDtnkPmDM9Kwm6z0U9i6ekWB0qHI06bIPp27hVTiXq/H1oPdv1WbGfwsTnqmPPVTVtZ4yXrnTKo6gtx6lnU/djCqGB1dDkmSOI4zm82osgdb5xnJQv4apSsXZFjfohpF/eNer4cc7zAMUQGAai3jTGoqe1yiVZXR0SU0kSQJsufY&amp;#43;r6Z&amp;#43;&amp;#43;SHjfZpVRiGOEsSZ34WvQnqXqBYMjbeYlsD68KVOMUWZQRc1911CnGBkGSm2PD&amp;#43;oOLE&amp;#43;1TnL6EAJEMul8t//vnn7u7Otm3quUVvlclmPNww&amp;#43;r7/sAZm&amp;#43;JILMepiMNnnsMYhUDbqZDL58OGDbdv9fr/EOoBF/oKg0H183x&amp;#43;Pxx8/fnx5edm6FaXASXqUY3smpFDGnYUN6XQ6OJu27tY1yMF1HAe1wbbSQcWOMjwHuW&amp;#43;CTQwtvWI6EqrMijjzeGTOrvwa8VWJfWvxgDPvJZs4L275O8RFATXjooCacVFAzfjfAAAA//8DqhjSexlZlAAAAABJRU5ErkJggg==&#34;
					data-sizes=&#34;auto&#34;
					width=&#34;887&#34;
					height=&#34;877&#34;alt=&#34;Pocket ID prompting to sign in to Forgejo.&#34; title=&#34;Pocket ID prompting to sign in to Forgejo.&#34; 
					loading=&#34;lazy&#34;
				/&gt;&lt;/a&gt;
	&lt;/picture&gt;
	
&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;Assuming that my username and email address match the local account I have in Forgejo, I get prompted to link that existing account by logging into it with my existing password.&lt;/p&gt;
&lt;p&gt;Next time, my Pocket ID passkey will let me in right away.&lt;/p&gt;
&lt;h4 id=&#34;opengist&#34;&gt;
	OpenGist
	&lt;a class=&#34;hlink&#34; href=&#34;#opengist&#34;&gt;&lt;i class=&#34;fa-solid fa-link&#34;&gt;&lt;/i&gt;&lt;/a&gt;
&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://pocket-id.org/docs/client-examples/opengist&#34; rel=&#34;external&#34;&gt;Pocket ID docs↗&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://opengist.io/docs/configuration/oauth-providers.html#openid-connect&#34; rel=&#34;external&#34;&gt;OpenGist docs↗&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Based on those docs, I&#39;ll use &lt;code&gt;http://opengist.example.com/oauth/openid-connect/callback&lt;/code&gt; as the callback URL when I create the app config in Pocket ID.&lt;/p&gt;
&lt;p&gt;Unlike Forgejo, OpenGist&#39;s OIDC configuration is done by setting environment variables in the compose file. Here&#39;s an example of what that might look like:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;services&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;opengist&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;image&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;ghcr.io/thomiceli/opengist:1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;ports&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;m&#34;&gt;6157&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;6157&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;volumes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;./data:/opengist&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;environment&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;OG_OIDC_PROVIDER_NAME&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;Pocket-ID&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line hl&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;OG_OIDC_CLIENT_KEY&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;${OG_OIDC_CLIENT_KEY:-}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;OG_OIDC_SECRET&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;${OG_OIDC_SECRET:-}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;OG_OIDC_DISCOVERY_URL&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;https://id.example.com/.well-known/openid-configuration&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;div class=&#34;image-container&#34;&gt;
	&lt;picture&gt;
		&lt;a href=&#34;opengist.png&#34;
			target=&#34;_blank&#34;
			rel=&#34;noopener noreferrer&#34;&gt;

	
		
			
			
				
					
						
							
							
							
						
					
						
							
							
							
						
					
						
					
						
					
						
					
						
					
				

				
				
				
				&lt;noscript&gt;
					&lt;img 
						class=&#34;post-image&#34;
						srcset=&#34;/pocket-id-easy-passkey-authentication/opengist_hu_7acdc8af59a3711f.webp 320w, /pocket-id-easy-passkey-authentication/opengist_hu_c1c2d396ab38279a.webp 640w, /pocket-id-easy-passkey-authentication/opengist_hu_de1b46f5fa6d68c3.webp 900w&#34;
						src=&#34;/pocket-id-easy-passkey-authentication/opengist_hu_de1b46f5fa6d68c3.webp&#34;alt=&#34;OpenGist login page featuring a button to Connect with Pocker ID account&#34; title=&#34;OpenGist login page featuring a button to Connect with Pocker ID account&#34; 
						loading=&#34;lazy&#34;
					/&gt;
				&lt;/noscript&gt;

				&lt;img
					class=&#34;post-image lazyload show-if-js&#34;
					data-srcset=&#34;/pocket-id-easy-passkey-authentication/opengist_hu_7acdc8af59a3711f.webp 320w, /pocket-id-easy-passkey-authentication/opengist_hu_c1c2d396ab38279a.webp 640w, /pocket-id-easy-passkey-authentication/opengist_hu_de1b46f5fa6d68c3.webp 900w&#34;
					data-src=&#34;/pocket-id-easy-passkey-authentication/opengist.png&#34;
					src=&#34;data:image/webp;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAABfCAIAAACvNFhmAAANc0lEQVR4nOxdCXPbOpJG4&amp;#43;AlyU4cJy&amp;#43;Tmno1//9X7W7N5rJjXZRInL0FgKQVS7QjRTG9Y36uPD9LPAB86EaT6IP/9dc/yIjhwNMs/5XjAIAQgoh/vkmvC5zz5JGvAQilVAghOCdAtDbGaGvdyyACw89LB&amp;#43;z82wePU/sgKIU0TS8vL969u7qYzZxzq9VqsViuVuuqls65P9nsJ4AeUSJfOgXopzE0//bA&amp;#43;04DgDzP/vrw4Z///PTp06erq7dSqpubm/l88e3b9y9fv202G&amp;#43;cG6zwiWmuctbEFQKARhpchmz8BgFHGOANg&amp;#43;1/2EpAk4vr6&amp;#43;l//&amp;#43;nsymVTV9u4Oa4/q6urNdDZFgv/&amp;#43;9&amp;#43;e6rvf7Cx40ku3np3MHVw5/EKXdn&amp;#43;EQxPbXk51CdNZ4ECCMMkIp&amp;#43;o&amp;#43;sQ&amp;#43;fv2ifV3YUfO&amp;#43;DMFAIAMg6UAuC&amp;#43;EBwmgFIo8vzTPz6&amp;#43;f//&amp;#43;9vbm27dvjDFKaZIk0&amp;#43;n00/V7WcvFYimlQnQPbsa5SLOUC0EIMVpLKY3WD8YUgCaJSLOMUhZH3HlYa4zW2vVwtgtE4s9Ax4BxLhhjzjmFiMYSJDRMgm6JCPIftRZGlQD7DPiPwPmG4BnlCJq51tujwwQA0KLIr66u0jQty3KxWGRZVhSFJxOxKPLr63eTSTGfLx4sBEBplmVvrq6KYoKIm025nM&amp;#43;tMQ9u71eXLH/79irNMqCADo0x1phttS1XKynrXxACjN1jjHEhGGUOXSDSE8A4p0DjIHvdS/2Pc85YQxApZUDhXlBaooCAnwLeyjjb0tLcpF&amp;#43;w&amp;#43;gjwfRCCW2tWq9Xt7S1jLM/zWQAhJE1Tzg8s4EAIZSxJ0zTLrLVccgiz8dAt/NRNs4xzHhS67zsSUm&amp;#43;3UvXaBQfbGoaXMgLOiylD52jQbwDtL/8f6rkJoEGau5UDA2/YjBeCNQDPt5QcJgCRaK2rqmKMbjabm5sbY8x0Ok3TdDabFUVx&amp;#43;&amp;#43;PO7M3rqEy0UuVqpaRC5&amp;#43;q60nv6Jx6mpFytlkopITgh4Jx1zsm6jpP0F1oOjSKy1lgjoKU5DKcNAxrUECIFcI4ARDUXT41Ngm6VIpEI4px95medPgLcdrP9/v1GSlnXtVKqruvpdPrx48e///4bgN7e3pblASsIEaWSbjGnjDWjY3oIUNIt7aZce4XQKmhnnT50/D46GbHWKllbowGoDSyGFcR4KWg1cHfTZtwNRI3ffd79vj&amp;#43;m3zo/Fu2K0/MccPBT53BbVf/7&amp;#43;ct8Pl8uV3HieG3LxWaz/fz563//1/&amp;#43;U5ebBCtwsp9ZKa7snZzxkGnqd4xdN9aCfv24Fec3DKEVKgvpyzvn1KehZSoE8GNedOzTNOfAMF8fdX&amp;#43;B8g09ae4/1Mdprhhpj5nfzOZByvUYklDKl9OfPn61zq&amp;#43;X6y5evSqmDA/WrgxgtklPl3ZtbTADQeIn7zrEX92AWV6K4GO1/20sAIlHaeNWMJEmzoGrd5y9f54uVMVYpNeBTWNOrsJbGp68BW/IUANqHo4Nf83010qC1oTkX3oZDB0ClVEa7znrrfZx5BjRPwNCYmi8efW9NuNb6yXOjqRdWPOfck8ePOAJcKTl0G141uDVm6Da8avBxj2VY0KEb8NoxEjAwRgIGxkjAwBgJGBiP7QnH7Zd9MwnaB&amp;#43;uD3444Cn1bkpQLwRk3RpvwoBDIIGHPy/9wwRllxvrvHbq&amp;#43;jd8RT&amp;#43;IAAQDAGJtOZ8VksinLuqoY55yz&amp;#43;PaNB4gkESLRStWy0ko3Gy&amp;#43;DOqr8P8VhCWCczy4u315d&amp;#43;aFO04uLyzwvwh4TESJhjAGAEMKGPaztdnP7/dtyMTejRjoePSoIaJKmk&amp;#43;nMWlsUkw8fP04mM5EIIM1LYK015wwRZV2X5VpJuSlLM77VOB49W5IE0TnGWDGZOmuTJOU8eH9wFiWg2m4dOmus1tpZ1&amp;#43;f2NeJJHCbAWrvdbFbLJQBore3Ndx4YKIrJm7dXlMLdjx/b7UZJGbX/er02dpz&amp;#43;p&amp;#43;AAAYhojVku5tpoSqk1Ju4HcMEvLt9U1dY5d3vzvVyttFZxP1YpedBJYsSTgHfvPhz8nFLo/BW6LcA8z7O8cM5tN6WUMlqf2PiCjCbQKeh7EPNj&amp;#43;8D/GYwxWm/KsvOfGaf876P3SXgfjf&amp;#43;atX&amp;#43;yPa8O47uggTESMDBGAgbGSMDAGAkYGCMBA2MkYGA8tiP2vC35D8GxD6d9IUowUnAyjuLgEQkgXfToedr1H44T5&amp;#43;tjryJ2Y3dHPAFo41&amp;#43;PxOOL8Dj6v4xTB2q0ggbGEW9Dd/GaF&amp;#43;jzaoXjCYAYen1yKOH&amp;#43;aX39&amp;#43;U2O/4jybENZz&amp;#43;YHdTQBQIBSxnnIPnHiTY88D36OR&amp;#43;vnC3412caJYxeNEhtCw9G6s3B8PAFhb5Jxzigjx0sBhN1ORimBHRu3jdl9MMiNoAUPSULQ/0WIa2YfwP0AYHSlAUpDtogQ&amp;#43;d5Dc7gCnrqd56c&amp;#43;AXDO4pnSGRxLQJN4iIYt4xNWAgBI0zTPc8YoYpsswI9pxybE5Ckh8YoXNUqpMcZay0PSl&amp;#43;AGYGNSnDj0Ic&amp;#43;KE4ILIYwxspZICGO01de&amp;#43;pVF1xAZrrepaWmuOHkFERxEcnDDz&amp;#43;nAkAb8dFEpDOpW3b99kWRbDl9E5EyLrGaUuDH3I22GEEGmaJknCKK3qqqrqkDiNR7qC/ySNEqKUrus6SZI0TaWU282WC54kCTo01gBAyLcGzjkSktyUZencoq5db4hub/dbD9nz4UQr6PeAMY2XV2OUeXEOxAjOrXNaN&amp;#43;7AnHPBOY0e2kFr2MATZ1wwCHOchWkO1rroLRkVS8xrlKapMQa94gIuBA2iY2NGp3PO4N/FkQR0cem48/cR8NOwquofeCfW3I9fCAF3zgUnGIoYEwdZJNjM92B4BCdtG/POxLMwpHSAkHUmKCgT9WIcZVEmnDHrZckBkJhtKqSEctY5pZSSqvX5OKILiKf2ux/HSkBMKRLyvvRnAHkEAKSurZQSforej8llyH0ePiTQpjvBn8LM40nQXa1L4AdNHhoSlmtocwE157Qrdtd&amp;#43;PM2ex&amp;#43;CLf0YGjlZBwcywhmhwJz5F95J2Qp6knVeGB26DvX&amp;#43;ePH5NZjp3tpc0JxCAoQH6QNq1V4GTTdjDOGUR9mJoX&amp;#43;nLiIPpj34HJ1tB43vS82B8GzowRgIGxkjAwHicgN5EWyMe4tSBemwRDnb5SMEv4qyb8tHYap9VRwb&amp;#43;IHokILy6fYmp4F88zuOYdcqVRpyE0QoaGCMBA2MkYGCMBAyMkYCBMRIwMEYCBsZIwMAYCRgYIwEDYyRgYIwEDIyRgIHx&amp;#43;IYM/JYXRrtF0fdedbfC1x&amp;#43;6fqhdRKMz3O5h3f/vb6O8iEJu0JZeivkTnwhWbR3/mpqybV2ppmIgBo9&amp;#43;t1fCpom0uc&amp;#43;OHL3S7&amp;#43;uodQVZ713Amg2i6NUcwgxoG69y73YYr0ApFUmS54UQibWmriujDaV&amp;#43;SrlYkTrsOMUKX/G8eI9YVvTZaOghgNIkSZM0I7G5be6yvSpzGJxkG0/8WKAx&amp;#43;u8zRrO8yNKMADHB4xmtbYMqGn6jS3NMwYWEaKXqaquNIUgo8z8k8hSrQgZKwi3AaEUQszzP8pwEf97o1G6tVSoUbyWEc3FxcXn9/kNeTLRW87sf0YWdIIm5BhGRMSaEoJRZZ51vBgTX1brabg5WYHwmAuK8SNJ8MrtgoXFNQr52j6ypWdcW/ovlUJ2zQiRAqfGjrTmjb968mV1cJkkaJmBtQ15LDJEXNPScc&amp;#43;GcVaGenrV2tVze&amp;#43;dm3JSSUqE3SOO4hX6nwbAWhdM5Vm9JZfXF5ef3&amp;#43;rxiUoXVwea6rxXxelmtEFEkyu7i8un5fFBOlFEEiZT2dXVBGrbHRT5pxlqZZFwASu79aLr5/&amp;#43;2rt&amp;#43;nmSs/VIQOMQ4akQrCnDFyJSGkQhjQokhE0Za4GLJGSZ5loxCoSLJEnT2eyCca6kDHPKz1MgJM2yvJhwzuuqinkwpayr7Taq7HBbfyUWQmI4F9yzlVDWTH9JqQ1JMuP1EVFrJet6u0mqrb&amp;#43;ia2spxjqOMaqHc5EXhReCoP5IkADGBTrnZchLrpd1Y3SSJNvn8kU4lDc06EEla0LQ6wnOY9nl3cT1LohwiNnyWiU03reec4HojFbobAjiQ2tMmmVaKSllrNlMCCn0xAs&amp;#43;52W53pSltSbmoLbGxJLY1oI1xo8Too5hM8aG25FQSFtrrTfl&amp;#43;sftjawrABpiavxFtFahMKvVWpXr9d2P26KeaiWXy7mzDigkXrCIVz5JmogklgkPFY&amp;#43;JMdoaW1VbrdSzrQGH84ZGLdTU4m2CT0hXlq&amp;#43;rCxdzejTuuqFQMmOMeH3iJxTnPPXIuNcSOvYqBn9lWTaZzRhlm01ZV1VU31GNxLJaEJj3V&amp;#43;sShwDtbJ5Qc9kwxrIsF6F0d1OM1VlZy1Dk0t8lSdO8mCTtIoyIQeGwEH7DsjwXIlFh4YnaxsX11xgp62dbA/oSt&amp;#43;4stffRDXtRjDuHhyg7aMs&amp;#43;3JsigUgIWUgtNmX5iJf8kArcL89Rm&amp;#43;A9urv&amp;#43;bCPurPytVRZCZWHH97&amp;#43;pqt2c0JXQxCYHahdaGwskdCUQolm1b0o9A/oJOPWCXbLd&amp;#43;78DHnw4bA2O3QYM6wFy9iC9h3052LfBs&amp;#43;4O3oAO46uIgTESMDBGAgbG/wUAAP//ukpuih5Z8ZEAAAAASUVORK5CYII=&#34;
					data-sizes=&#34;auto&#34;
					width=&#34;900&#34;
					height=&#34;666&#34;alt=&#34;OpenGist login page featuring a button to Connect with Pocker ID account&#34; title=&#34;OpenGist login page featuring a button to Connect with Pocker ID account&#34; 
					loading=&#34;lazy&#34;
				/&gt;&lt;/a&gt;
	&lt;/picture&gt;
	
&lt;/div&gt;&lt;/p&gt;
&lt;h4 id=&#34;linkding&#34;&gt;
	Linkding
	&lt;a class=&#34;hlink&#34; href=&#34;#linkding&#34;&gt;&lt;i class=&#34;fa-solid fa-link&#34;&gt;&lt;/i&gt;&lt;/a&gt;
&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://pocket-id.org/docs/client-examples/linkding&#34; rel=&#34;external&#34;&gt;Pocket ID docs↗&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://linkding.link/options/#ld_enable_oidc&#34; rel=&#34;external&#34;&gt;Linkding docs↗&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Same pattern: I look at the docs, see that the callback URL should be &lt;code&gt;https://linkding.example.com/oidc/callback/&lt;/code&gt;, and create the new app in Pocket ID.&lt;/p&gt;
&lt;p&gt;Linkding is also configured via environment variables:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;services&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;linkding&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;image&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;sissbruecker/linkding:latest&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;ports&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;m&#34;&gt;9090&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;9090&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;volumes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;./data:/etc/linkding/data&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;environment&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;LD_ENABLE_OIDC&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;True&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;LD_HOST_PORT&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;9090&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;LD_SUPERUSER_NAME&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;${LD_SUPERUSER_NAME:-admin}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;LD_SUPERUSER_PASSWORD&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;${LD_SUPERUSER_PASSWORD:-}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line hl&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;OIDC_RP_CLIENT_ID&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;${OIDC_CLIENT_ID}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line hl&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;OIDC_RP_CLIENT_SECRET&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;${OIDC_CLIENT_SECRET}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line hl&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;OIDC_OP_AUTHORIZATION_ENDPOINT&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;https://id.example.com/authorize&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line hl&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;OIDC_OP_TOKEN_ENDPOINT&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;https://id.example.com/api/oidc/token&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line hl&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;OIDC_OP_USER_ENDPOINT&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;https://id.example.com/api/oidc/userinfo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line hl&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;OIDC_OP_JWKS_ENDPOINT&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;https://id.example.com/.well-known/jwks.json&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line hl&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;OIDC_USERNAME_CLAIM&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;preferred_username&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;div class=&#34;image-container&#34;&gt;
	&lt;picture&gt;
		&lt;a href=&#34;linkding.png&#34;
			target=&#34;_blank&#34;
			rel=&#34;noopener noreferrer&#34;&gt;

	
		
			
			
				
					
						
							
							
							
						
					
						
							
							
							
						
					
						
					
						
					
						
					
						
					
				

				
				
				
				&lt;noscript&gt;
					&lt;img 
						class=&#34;post-image&#34;
						srcset=&#34;/pocket-id-easy-passkey-authentication/linkding_hu_ef233fdb3a131614.webp 320w, /pocket-id-easy-passkey-authentication/linkding_hu_3fb04f5c16a610c7.webp 640w, /pocket-id-easy-passkey-authentication/linkding_hu_9c893a5a098a782e.webp 915w&#34;
						src=&#34;/pocket-id-easy-passkey-authentication/linkding_hu_9c893a5a098a782e.webp&#34;alt=&#34;Signing in to Linkding with Pocket ID&#34; title=&#34;Signing in to Linkding with Pocket ID&#34; 
						loading=&#34;lazy&#34;
					/&gt;
				&lt;/noscript&gt;

				&lt;img
					class=&#34;post-image lazyload show-if-js&#34;
					data-srcset=&#34;/pocket-id-easy-passkey-authentication/linkding_hu_ef233fdb3a131614.webp 320w, /pocket-id-easy-passkey-authentication/linkding_hu_3fb04f5c16a610c7.webp 640w, /pocket-id-easy-passkey-authentication/linkding_hu_9c893a5a098a782e.webp 915w&#34;
					data-src=&#34;/pocket-id-easy-passkey-authentication/linkding.png&#34;
					src=&#34;data:image/webp;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAABOCAIAAABnvolYAAAPnUlEQVR4nOxce2/bxpbnDN8UZcly/EjatECzBQp0F9jv/zEW3X&amp;#43;K3PRumyixLdsiKb7nsRB/8blT2ZZlVw/vVgeBI0vUcOb8zvsc2omiyNrT7ojvegN/d9oDsGPaA7Bj2gOwY3K2fD/G2N03tdZb3gbo7ma2v5MtAcBu6e6xcWZ9S9vczEMAKKW2BsbGAcA57Vu698xaa3lLGz02Y4xzjp1wzu/djFIKO1FKbQGDbQDgOI7v&amp;#43;25HdHI6Kl4IIZqOlmNgSu4zlIZz7rqu53mu63bb4JaFn5bWyrJUtxlJm9kCBpsFABLneZ7fUa/XOzw87PV6nPO2bYuiyLKsLEshhOM4hMpDZwaWYJ/Wum1bIcTqogpF9DwvCALHcTh3OQ9sO&amp;#43;I86MxOJWWhVKWUsG0BQ9S27f9tACzLsm0bsu953vHx8c8///z27VvP86qqmkwmv/322x9//JEkyXwrjgP9eEiuOedhGB4eHvq&amp;#43;L6WEkJZlWVWVySnyNAuKAgBc1&amp;#43;1u5DvOwPffBP4bxx0wy2pFUtef63rctvPNSOna9hzgTfNn4xoAJeCcO44zGo1&amp;#43;7shxnKZpkiQ5OTlhjL1//15KicvuDZNAnPMgCA4ODhhjTdO4rtvr9aIoSpIkyzIppXk713V939da1x396dO5Ig2i6N8O&amp;#43;v8Rxz8E/sBiVtumef7PJPmvWf6r1jectwTkRpVge2Eo2DccDnu93mw2a5rm6Ojop59&amp;#43;uri4OD8/L4piIVKik&amp;#43;MnsU9rXVXVbDazLKvX68VxDHPUtq3rukEQeJ7nOE6v1wNUaZpOJpMkSYQQ3eKM24Hvnx30//3V0X&amp;#43;ORm96vZAxqxV1lg1tW7UiFaJgrLo3TFo7bQMAOgaOlGXZhw8f8jx/9&amp;#43;5dr9cbjUZhGHL&amp;#43;r5SQAhUYYph4GBCgAo5LKeHb4ziG9w468jqK43g0Gnmel6YpMJNSdnvgNo8C/83BwQ/HJ2/OTodx37W0JUSYZqxprtP0H2U5tqx0C5zZQSIGia7ruiiKpmls2xZCIO4msm07DMMoijjniJSAgW3bURRBtIMgaJomiqIwDBljcRzjmrquy7K0bbtpGq11EARFURD3O5qroucN&amp;#43;/FwNOoND90gmGMvBBMy9LwDx&amp;#43;lz7iE02gLtIBP2PC&amp;#43;KIjjPJEm&amp;#43;fPmS57mJAcVOnucxxgCAUgrf9TxvOBz2&amp;#43;/2iKP51DMcpyzLP86IoYGp8359MJo7jtG2b53ld14Yp14xpx7V8n9n2V4snpSoK1dRzHLfJkG0DgECzrmvY5SRJPnz4ABdK10gpq6rSWruuSzYH7MP7jDHXdauqKssS9q1pmizLZrNZ27bAsmmaPM/pjlrrWyunpKradlpV06Iofc9zPVtrK03byaTIZknbZko1XVqwDdoGACR6iKxns9nFxcX79&amp;#43;9ns1me5zc3NxBP87K6rpumIcdAH3HOYU&amp;#43;GwyGsjePMj4ClkDrhSmSz921GKVWU1fjm5oPvH&amp;#43;a5dt1AKz2bldfXn7Psf&amp;#43;r6XMnSsrakB9vTAKVUWZbn5&amp;#43;d5nn/69Gk8Hk&amp;#43;nU/hS4po2CExcWIQxlue505Hv&amp;#43;2EYwsIgrFrwJXepW1YrWdfV&amp;#43;fX1L0ryJElc90Brq66T2eyfWfbfdXOudLO12tRmAcAZYMGFEJPJ5JdffnFdF8lXVVUPsX7JgkKI2WzGOY/jmDFWlmWWZeZSj29Gi1Ykef4PIctZ/ofjDCxLt21S1&amp;#43;O6/ixEqpTQWplB8OZo4xoA1qO6cnV1Vdc15zzP87IsScCpHCSEWAUDJHFlWXLOm6aBGj3KKZT8hBAIcLW&amp;#43;FrKoqs&amp;#43;c&amp;#43;wuliO4qsenKIGjjGoCaAWMMDsB0jGYtGpfdDUnvJaUU&amp;#43;L7goh8lKWVd13jR5boVs1LrgWIcpGEdbFhGG9cAJE3g/kMV4GeUo59hoIE6NrO8HA113E45mm1nLOXlNGTMUsffoiEDIubuvCW5UF/a4U5AO0jEtnzHJfQSNrPxcjT9fNTCLFTwn31T6riZ66C8Yfp/803QNvvSROsHAGVL1I2pCYXkdkmDCXUequAvXEkm22QffYTqKSVuqBcJIdAGQBECBSjGWFEUdV1TZSkIAtpq27ZIs7eJge267hqXQxVsMBgcHh5GURQEQb/ff/XqVRRFiKzNBj11YPDmYDA4PT3t9XrIjUk80YmMOoKc4iOoi23bBwcHJycnKIgyxkaj0cnJCcpw4L7jOIPB4Jtvvjk6OkK8q7WmN1&amp;#43;9etXv94fDoeu6&amp;#43;AqtD2gf7RT9FVqzBti23e/3f/jhh9FolOd5mqac8&amp;#43;FwiIMFQYDj4WLKv8qy1Fr3er3T01MIeBAEgAH9rCAIzs7O4ji&amp;#43;vr5G/7IrIM9l3Lbtk5OTH3/8sW3bX3/9NUmSwWBwdnaWpiljDMIOdL/77rswDJFLV1Xled7r16/fvXsXhiF6BtfX15ZllWVJkSjqrI7joD6I9vV69WPNADDGwjA8PT19&amp;#43;/btzc3Np0&amp;#43;f2rZFzcBxHHAfnEURrW3buq4/f/6cpqnrulEUQTkoM5hOp5eXl77vv3nz5vj4OI7jNE1hcOq6vry8rKoqjuPXr1/Xdf3x48fZbOZ53sHBAdkcqJ3v&amp;#43;1DELMuQxPX7/dPT09evX2MeANoDG4gMoGkaiILjOLPZ7MuXL5tIj9cMANIuFCnPzs6klFmWDYfDIAjQn1JKTafTpmkGgwE6w&amp;#43;gmVlWF3hasVhRFKK5dXV3hRRRFg8GAMXZ6ekoO03Gc8XiMVjt1ldG4B6d838fKWuvBYACokEKfnJyEYej7PmMsCAK0M4&amp;#43;OjrArbFVr7XmelPLjx4&amp;#43;Xl5ebcNHrB6CqqsvLy/F4/P3333/77bfT6RRzKLAkdV2j5uP7PtqHaO2CiWiEKaXiOEatH43GoijQEYvj2Pd9pKme511dXU0mE2oXQ4f6/f5gMIABQX8Ypi8MQ0AIGT86OqKhB/SQPc8DqFVVRVEkpUSfGX77z221tdH6TRBjrKqq8/PzKIpGoxGkDz1IOFXHcWBJqRBtRjhmYe62ava1UoSiG0QbJgJ1BbLXcRzDCdm2Da8DowErhEUwnIEXYCh13MyxOCEEzCM8VjdHtJEm5frDUBw7SZLff//95uZGCIGeO4QLvfKrq6vpdEqTT1mWCSGKori8vMyyDNKNhsxsNiuKoizLyWQCs0DupK7ri4sLTEh8&amp;#43;fIFdtx13bIsx&amp;#43;MxmjzQPN/3wUQMFN0W475Gn4gCkiQBtJh5QavZtm0o0PHx8Xg8vr6&amp;#43;btt2vexaMwDoulxfX6dpenV1BXcaBEEcx71eL01TmKOLiws0wnDmLMuKooDcgblox4MXSZK0bfvx48fpdEqmH03HNE3BaBRc4TbPz89JuiH4FOxCz0iW8Q5MDbZKp8BcxcHBwc3NTRiGmyuOrr8YZ0b3eAfTDP1&amp;#43;H7NvlmWlaYr&amp;#43;LXW&amp;#43;wO6707uwP&amp;#43;CayTj6CFEmGauFmaLF03bvm2MyDyXe8DewZgDp5uYGw0XrZdeDAJgcfBLydxMWmgmkUR&amp;#43;MdVJdjBixerKzhHcLO18YWVwow5lvLiyCOVRYKnPPK86h0uvlX7kfANweQwnmZA6Jtlk2uVtqpqqL2Qg0BZy&amp;#43;ay4LhwxTgE8X/B5&amp;#43;VUpR7YGq9uZm8Cl5dXDNNEHmMc0rzdY/vSClIVbQlOMCcrQ4JdJ4BwHFQ42m&amp;#43;30A6iRxHCNiQagOFwf7a3ZRCCqTcHKTCwgKyVbgAAhsoBywSFgKXMNrYigyJkRHCBmpiYYeFr5CqgbjjqE5JLQLCofrKe/DO7iR6SHgmcAKrEbZIrGVoKLXuIuUEqn1Q3rwIAC2bfu&amp;#43;j8ADARnyGrN2hPlkRPQ0FWu2IekdMBeJD3FBKVVVFVZwXRfc9H0fYCilgiAArxEFwiAIIfCaBhTJISN6QTYLuaENYKjdFHBIFcWXpIXIJ0h&amp;#43;UQvBHhACKaXCMESCRi6BIDH1iQKBJVbofgDI6pkmiESbVBLrmkcl2cfxyFZQtE5lOGqRU3UMqoqhK9wRvKbsH/4WPDLH5SD1ptpRIE87hzCaIRDEGZIBmPGReRkVcc3pArOBala2idd0Lqjg8ocMlvkA3/dpWp9Eg/QO56QC50LB3axo4kqEj/BsjuPQ9BWVEMBQ8xEBRE1kMSgQMu0vBkkxm4Vcj5airSKcJ1eEr1NhhyqmuO9CZwIHgSThXJSXLXh4woCe/CGolj11sjwKMo9K6mwO85jXmwr0EOA0&amp;#43;UwO7d5bLzDiboxE1yC&amp;#43;QjXfzJLMPZgtGvOCuy2Hu5sxWfzQeZd86/E21Op5wPOi0nvXWZj9/&amp;#43;urLT/quna&amp;#43;CXpCJryu3a&amp;#43;3prjKai&amp;#43;Q70T7J&amp;#43;V3THsAdkx7AHZMewB2TKs64S08L/hU&amp;#43;upau&amp;#43;DbYsx6IRvsgrv5z9U8/0oAUFHhJSBB8evXAovNteNYjm1tpmP1ZNLakpK1whJyFQweB4Aqo8hR17TNv0SU7rdKad/V/Z4VBdq2d68E2mJKWVVjzXKWl6tg8DgASNNRL3uq&amp;#43;K9&amp;#43;/VNDdSll3TRSCRlH&amp;#43;mg4x8Cxn7GxtacIWilWVBZnViuYVH8VABpbQxnnGQCYxZx7r1lSql2&amp;#43;slCKK2b5nu6Fuhda9krayTrmO91DGUpr1e2LI5uG6TYez&amp;#43;sci8Zzq3rFx/aUnjukomKOY7H60ctX9QFmaWhFgu2i2ZO7bSwUNcuyxFMrT6LOLXWe1&amp;#43;6sP/6tRg63/a5G2yrVKmUzy&amp;#43;O2w7mlLWV93RyKZzaaFkoJvfrDGnq&amp;#43;JZvPlWAFm7iSD1jtxvd8EUNqURTBi1AVmgqlRVFMJhMq6z9ldeO/p2xwrpSMOYxry5JM292vkeOG9pwVqhNzpTX&amp;#43;bpHbgVpJUcqVlRRsX5lpW/pbEZg7g8ibANDgzTapszNzLtmMydubd79y7GUu8kzpryaIgly2iYeHHwfg2W4KLUPMYqINQIOh1NLBxNlzbqGN/57y7bkKatUqaTOmuodRlaUL0QqlHM47f8UaJecaYGnbYtrSovvKqrcBvCufaCUNeN6TC/R4HoYMqV1jziWYHf&amp;#43;nLq46/llSWkrN/62mSHPLo3WjFOuY25kWSzHVMMEthiF0qZU5gqs7IXyCE5bSkmr&amp;#43;YoWvPAIAtXXQ6ntGFERd0&amp;#43;Wx0DPCUCmEUsKqm3nEzfnqYWhn/f8Uhqr5vz8d7p5BlRVX78JQVlaWEKtA9rgGoBeKodqXlojNfYnV/aWnsnpeIvbQN57pl24TMTbLWdOuJxNGuxx90RdYirC0YkJaWc5ehnCsvxRhPr68jg2ujb5aCSnnCWfz/7oY96K7el8P/FK39xi9DLX9G9MegB3THoAd0x6AHdMegB3THoAd0x6AHdMegB3THoAd0x6AHdMegB3THoAd0x6AHdP/BgAA///NzkpFwEIgUwAAAABJRU5ErkJggg==&#34;
					data-sizes=&#34;auto&#34;
					width=&#34;915&#34;
					height=&#34;555&#34;alt=&#34;Signing in to Linkding with Pocket ID&#34; title=&#34;Signing in to Linkding with Pocket ID&#34; 
					loading=&#34;lazy&#34;
				/&gt;&lt;/a&gt;
	&lt;/picture&gt;
	
&lt;/div&gt;&lt;/p&gt;
&lt;h4 id=&#34;coder&#34;&gt;
	Coder
	&lt;a class=&#34;hlink&#34; href=&#34;#coder&#34;&gt;&lt;i class=&#34;fa-solid fa-link&#34;&gt;&lt;/i&gt;&lt;/a&gt;
&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://coder.com/docs/admin/users/oidc-auth&#34; rel=&#34;external&#34;&gt;Coder docs↗&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The Coders docs tell me to set the callback URL to &lt;code&gt;https://coder.example.com/api/v2/users/oidc/callback&lt;/code&gt;, so I do what when creating the application in Pocket ID.&lt;/p&gt;
&lt;p&gt;Once again, I&#39;ll update the OIDC configuration in the Coder compose file. Coder is apparently smart enough to figure out all the endpoints with just Pocket ID&#39;s base URL.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;services&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;coder&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;image&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;ghcr.io/coder/coder:latest&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;ports&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;s2&#34;&gt;&amp;#34;7080:7080&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;environment&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;CODER_PG_CONNECTION_URL&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;postgresql://${POSTGRES_USER:-username}:${POSTGRES_PASSWORD:-password}@database/${POSTGRES_DB:-coder}?sslmode=disable&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;CODER_HTTP_ADDRESS&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;0.0.0.0:7080&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;CODER_ACCESS_URL&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;${CODER_ACCESS_URL}&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;CODER_WILDCARD_ACCESS_URL&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;${CODER_WILDCARD_ACCESS_URL}&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;CODER_EXTERNAL_AUTH_0_ID&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;${CODER_EXTERNAL_AUTH_0_ID}&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;CODER_EXTERNAL_AUTH_0_CLIENT_ID&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;${CODER_EXTERNAL_AUTH_0_CLIENT_ID}&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;CODER_EXTERNAL_AUTH_0_CLIENT_SECRET&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;${CODER_EXTERNAL_AUTH_0_CLIENT_SECRET}&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;CODER_EXTERNAL_AUTH_0_AUTH_URL&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;${CODER_EXTERNAL_AUTH_0_AUTH_URL}&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;CODER_EXTERNAL_AUTH_0_TOKEN_URL&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;${CODER_EXTERNAL_AUTH_0_TOKEN_URL}&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;CODER_EXTERNAL_AUTH_0_VALIDATE_URL&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;${CODER_EXTERNAL_AUTH_0_VALIDATE_URL}&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;CODER_EXTERNAL_AUTH_0_REGEX&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;${CODER_EXTERNAL_AUTH_0_REGEX}&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;CODER_OAUTH2_GITHUB_DEFAULT_PROVIDER_ENABLE&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;false&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line hl&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;CODER_OIDC_ISSUER_URL&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;https://id.example.com&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line hl&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;CODER_OIDC_EMAIL_DOMAIN&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;example.com&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line hl&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;CODER_OIDC_CLIENT_ID&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;${CODER_OIDC_CLIENT_ID}&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line hl&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;CODER_OIDC_CLIENT_SECRET&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;${CODER_OIDC_CLIENT_SECRET}&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;CODER_DISABLE_PASSWORD_AUTH&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;volumes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;/var/run/docker.sock:/var/run/docker.sock&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# Run &amp;#34;docker volume rm coder_coder_home&amp;#34; to reset the dev tunnel url (https://abc.xyz.try.coder.app).&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# This volume is not required in a production environment - you may safely remove it.&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# Coder can recreate all the files it needs on restart.&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;coder_home:/home/coder&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;group_add&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;m&#34;&gt;999&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;depends_on&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;database&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;condition&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;service_healthy&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;database&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;image&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;postgres:17&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;environment&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;POSTGRES_USER&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;${POSTGRES_USER:-username}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# The PostgreSQL user (useful to connect to the database)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;POSTGRES_PASSWORD&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;${POSTGRES_PASSWORD:-password}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# The PostgreSQL password (useful to connect to the database)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;POSTGRES_DB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;${POSTGRES_DB:-coder}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# The PostgreSQL default database (automatically created at first launch)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;volumes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;coder_data:/var/lib/postgresql/data&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# Use &amp;#34;docker volume rm coder_coder_data&amp;#34; to reset Coder&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;healthcheck&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;test&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;CMD-SHELL&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;pg_isready -U ${POSTGRES_USER:-username} -d ${POSTGRES_DB:-coder}&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;interval&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;5s&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;timeout&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;5s&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;retries&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;volumes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;coder_data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;coder_home&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;div class=&#34;image-container&#34;&gt;
	&lt;picture&gt;
		&lt;a href=&#34;coder.png&#34;
			target=&#34;_blank&#34;
			rel=&#34;noopener noreferrer&#34;&gt;

	
		
			
			
				
					
						
							
							
							
						
					
						
							
							
							
						
					
						
					
						
					
						
					
						
					
				

				
				
				
				&lt;noscript&gt;
					&lt;img 
						class=&#34;post-image&#34;
						srcset=&#34;/pocket-id-easy-passkey-authentication/coder_hu_8b1af41d97d755ca.webp 320w, /pocket-id-easy-passkey-authentication/coder_hu_c6904df4ee5c6ba.webp 640w, /pocket-id-easy-passkey-authentication/coder_hu_df08946ab1a77b70.webp 915w&#34;
						src=&#34;/pocket-id-easy-passkey-authentication/coder_hu_df08946ab1a77b70.webp&#34;alt=&#34;Signing into Coder with Pocket ID&#34; title=&#34;Signing into Coder with Pocket ID&#34; 
						loading=&#34;lazy&#34;
					/&gt;
				&lt;/noscript&gt;

				&lt;img
					class=&#34;post-image lazyload show-if-js&#34;
					data-srcset=&#34;/pocket-id-easy-passkey-authentication/coder_hu_8b1af41d97d755ca.webp 320w, /pocket-id-easy-passkey-authentication/coder_hu_c6904df4ee5c6ba.webp 640w, /pocket-id-easy-passkey-authentication/coder_hu_df08946ab1a77b70.webp 915w&#34;
					data-src=&#34;/pocket-id-easy-passkey-authentication/coder.png&#34;
					src=&#34;data:image/webp;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAABOCAIAAABnvolYAAAK80lEQVR4nOxcb0/jxhP27tprO07C30OorcSLSv3&amp;#43;36fqm6uK1LuEEEgce//&amp;#43;ZD8w8i8B4nAkJlc/Qtxh7M3sPLMzszNrwsFgEPToDrxrAf7r6AnoGD0BHaMnoGOEXQvwHjDGNi9677uQ5UdxTASwZ2xyAO37Z3Qn4844GgIYY0KIMAw550QDAUp3zhljrLVHRMNxEADtx3EspRRCbC4CqNtaq7Uuy9IY0xPwkeCcR1EEArACNu/x3mN9eO&amp;#43;dc8eyCI6AADgc8j&amp;#43;cv5y5McbAAW6z1h5c0vfgONJQxtiLrn/zNrrzgNL9EI6DgNdSz9du6wn4YByRQnfFcRDwE6MnoGP0BHSM4yDgKDL69&amp;#43;E4CGjPARWF9i/Rx&amp;#43;A4CGhZZcM92AYfSrQfxRHshKFWUwM74deyUuectfaICkHHQQCVOcuy9N6jGPdaNVQppbVGQbQ7eXfAcRDgvbfWlmVprX27HN2vgH0Bnt051zdkOgMpt29Jdowj1fWLODQB1NfdmizSnfA8e5KkubA6wd4JQIGeuiicc7QVyxqvaZZ6kGEYKqWQ/zTVRMnoJpHUwGlGhc3HpZRxHCO2dxi3906AECLLstFo5L3XWodhOBqNoiiaTqez2cwYQw6dVIBIG8fxly9fsiyb1YCOSI9xHCdJ4pwrioKSTtAphBgMBlmWBUGglEKjWGvd7FNKKc9rFEXx/fv3PM/JFGhZHGZDt18CGGNSyuvr65ubG2PM3d0dY&amp;#43;z09DSKIppkGIakdFejLEulVJIkFxcXZ2dnSPyhZa31arXy3p&amp;#43;fn19fXyulptNpWZYYoSxLrXWWZb/&amp;#43;&amp;#43;uvl5eVyuby/v1dKGWOIABCZZdkvv/zy22&amp;#43;/PTw8OOeiKAIBnHMhhHMOH4Sn9qqivRMQhuHJycnNzY33Xkq5XC6zLBsMBsaY8XgchmEURZinlBLb3fl8/u3bNyFEmqYnJyfOuZOTEyGE9z7P89vb2&amp;#43;VyeXFx8fvvvyulhsMhdGqtvb&amp;#43;/n8/nZ2dnf/zxx3g8/uuvv5RS3vvRaDQYDOCUtNZBEGRZdnV1dX19naap1vry8hKKxsIqy3I2m/3777/39/fHTQD0UhSF1vrq6opzPplM0jQdj8dxHDPGYHqz2UwIcXl5ia3W3d0dIkSapmdnZ1LKMAyTJPHewyq11nEcj8fjIAjSNOWcl2XJGJtOp1&amp;#43;/fj09Pb2&amp;#43;vhZCKKUWi4UQ4urq6ubmho5WwNLhiE5PT6WU1trlcum9H4/Ho9FoOp1CjAN04vYeA5xz8/n869evcRyfn59D72ma4tRCGIZ5npdlOaoRRRH8Upqmxpg4jofDIfxYmqbe&amp;#43;8FgMBwOoT5cBz2LxSIMQ8bYZDJZOzwhhBiNRpeXl8YYuDXO&amp;#43;Wq1ms/njLHBYDAajbTWSqnVagWmi6KYTqfL5XLf5n8IF4QTIrPZ7Pb2FmdGGGNU2EGopIMkdJakmYBSMY7CLDxJWZbEBO5UNay1k8lkPB4nSTIajeDlKEpjrSDk0LAYZ1UjSZL5fH53d9eMzPvD3lcAVLNarb59&amp;#43;2aMgTriOMZUsxpa66Iobm9vi6JgjOV5vlwuy7K8u7uL4xi5UxiGcGgPDw9a64eHh9vb2zRNEcattc6579&amp;#43;/z2Yz59yff/755csXpRSi/f39/d9//w2a//nnH8YYHBrnXCkFP1bUmEwmeZ4jdB8mC2J7fUUJQThJkjiOoyiSUsLe0zRNkmQ8Hg8GAyllnufIBaEO6FdrPR6PsyxzziHrx1KYz&amp;#43;eLxUJKeXJyAlZgv865RQ3nXJZlw&amp;#43;HQe18UBRhKkgTpFkw&amp;#43;SRI8hfiPjHa1WkHgx8fH&amp;#43;XyOAL4/5TypaN/viDXPVFEdTUoJHSEzKcvy4eFhtVphycPSUXkmVw4CcAAUDgTPrmXucGLIJpu7XNq4NX&amp;#43;kjQVRiNHgDA&amp;#43;zNdtCQLPwu6tAmykEldKQkERRBHdMefpr96/VDF4T6cUSKf2KfmzWU9tPquWda0eGtz71VgzAeiQ1Ad77pjlToQZqbQqxOUOYFS0IWCuGRUpKVkkmieOecOVEElYG7H3NxvErRFf8tllToh8xCM0L1ykaNzWIhAoDQs4ml5sao8Pb2DZuLXJsISCKIjgKuAWMKISIoojOIWOqsOg1JpCZwO&amp;#43;TBnHMlgTFsBhBCIHlj2QJ3kZKiWVKKkBMxn4VmQ9dJG6KokCihetkj6QdlKSa3gaD0PQxtSiKwjA0xhRFsXkAmxwsGQHxaq1FHvX2MeEtBEDXUkp8BupWuEJOFpUDpOpQPXbzyDWpsCOEwB6KkneEUNr04zp6ijRtYwxGFs/A&amp;#43;NBUWZbL5XKxWCCTkVJSzko6xbPNeWFY8N1kBY6xaTqYF/bqGDBNU3BPHwHWm&amp;#43;NbaxHA2&amp;#43;zj3iKADJyWbTNMNa0Jxkh2DRXAPLXWFDBh0TA6ckTUR8RoIIlmgutIKMnb4Dpqbc0VQPETKsBKano5fIQxBoJBBhg1eTzITyU8mo61FjuYNcdFOmn2RFGAalNkfSsIQzi8E0F2wTmH5TaLlxALy58mQ&amp;#43;qmX0FurFMpJVUXqNm7dg8UgdIxEbZJPNQE&amp;#43;sk5wETgGEkMUi7cAlw8OcPmBhDjkCTkScgFNUN600CbgAa2tD3aZEHNacPrrTVJ1hKM5sVmJtO8jdwIAsAWM3nlzQDKI9duoA8iUptaWFPfGwkb3bP24xuiNmfdJnHaeR/w7qx0c5wDNKQ&amp;#43;Str9YedSxEfN5DCNwE&amp;#43;rd8JxHE38idET0DF6AjpGT0DHaBuEP&amp;#43;Frck8Btk4jA8aCTyJgnX9W39vF/1YENM/2dM4EpdhPzTLBfRgGoQheeYH70PA&amp;#43;sJZpExjbhoPtBFBNtFmd7xbYzRpjtHM&amp;#43;jvwoCwaJF6L7ReAD5lxQqGCxZMtVGw62E4DaA1pau5p/&amp;#43;/t3TdittaVS1hk7HPiL04qDULxDsA/fKHjnWF4EnAXaMOt&amp;#43;lIDm32lAtWsnadbq4y/e874/rMEYM85xx4JY&amp;#43;iz1WRqItquTBYyz6qsi0juPGMKeXXfgm3dWKq0vNK&amp;#43;/BeergJQXLAwDVm69vW0MaJacWoIawmgFN1s0VD231qIY135YGorzOvKK2vvjqx04YyHnERfeB9pZH/iIi5DzwAcueBIOxSOBAq1zxrdv0PtKJMGrRdDCJ7aKAe0&amp;#43;&amp;#43;IUHpZTovCOKoIpHTV3OeZ7nk8mkTT1uY/TGP7sIyEAeQ3E1cNUFPgijVNSF69rMnfeqrqZGNamFNSvbepGyp89oKc8hjqejs4aDCCgFEwE4pXMAGZri8IAJVn33zykV9Cae3FJt8uzJNTWSXBa09EK7YDsB7w5T3nul1OPjo1IKfQXqMlIBuSxLtPp2H73xz25Pe1&amp;#43;5dW&amp;#43;r767uRvrcaONcyHkdr5hytloBgRc1ScZ7613bj/FB&amp;#43;01A2xXwvnev0G6k8zZIYddONrTsWrw4ePWQq5LuwLnqq91C8lXg9co5Vim3DsI&amp;#43;cMwpZngdnFl9sXkoBQtlhyBsbWBd9Z8Wj2whAPqi1uA7siD0DrceA3lHGmqNcc4Epaoybs7bp6GV3v8/DXXV1/9NblOetjOv01C2KgJj2lC2fQVQex3vSbcUY68gm6hiSZBXdrEq3rcRe&amp;#43;2Jd8al540YWyyZ0h&amp;#43;zE6YjMZ&amp;#43;zFBF4x4wNHpfscxjHx5ciaLYHOCq8E568hLXVhlP91MW4T93be5rwZxVvGz7Hsv0PoyegY/QEdIyegI7RE9AxegI6Rk9Ax&amp;#43;gJ6Bg9AR2jJ6Bj9AR0jJ6AjtET0DH&amp;#43;FwAA///uuQE847uCIQAAAABJRU5ErkJggg==&#34;
					data-sizes=&#34;auto&#34;
					width=&#34;915&#34;
					height=&#34;555&#34;alt=&#34;Signing into Coder with Pocket ID&#34; title=&#34;Signing into Coder with Pocket ID&#34; 
					loading=&#34;lazy&#34;
				/&gt;&lt;/a&gt;
	&lt;/picture&gt;
	
&lt;/div&gt;&lt;/p&gt;
&lt;h3 id=&#34;outro&#34;&gt;
	Outro
	&lt;a class=&#34;hlink&#34; href=&#34;#outro&#34;&gt;&lt;i class=&#34;fa-solid fa-link&#34;&gt;&lt;/i&gt;&lt;/a&gt;
&lt;/h3&gt;&lt;p&gt;This login flow isn&#39;t &lt;em&gt;quite&lt;/em&gt; as effortless as what I get with my purely-internal systems via tsidp&lt;sup id=&#34;fnref:4&#34;&gt;&lt;a href=&#34;https://runtimeterror.dev/pocket-id-easy-passkey-authentication/#fn:4&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;4&lt;/a&gt;&lt;/sup&gt;, but it&#39;s still pretty smooth. It&#39;s nice to be able to use modern passkey-based authentication for my self-hosted apps, and I appreciate not having to rely on some Big Tech passkey implementation to make it work.&lt;/p&gt;
&lt;p&gt;And I &lt;strong&gt;really&lt;/strong&gt; like enforcing passwordless logins for the apps I expose to the internet.&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;Like the internet.&amp;#160;&lt;a href=&#34;https://runtimeterror.dev/pocket-id-easy-passkey-authentication/#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:2&#34;&gt;
&lt;p&gt;Or at least not on a single-person tailnet.&amp;#160;&lt;a href=&#34;https://runtimeterror.dev/pocket-id-easy-passkey-authentication/#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:3&#34;&gt;
&lt;p&gt;I talked about Coder a bit in my &lt;a href=&#34;/january-2026-check-in/#coder&#34;&gt;January update&lt;/a&gt;. I actually sat down today to write more details about how I set up and use Coder but I realized I hadn&#39;t written about Pocket ID yet and that seems like an important prereq for my setup. So I&#39;ll write more about Coder #soon (and maybe it won&#39;t take 8 months this time).&amp;#160;&lt;a href=&#34;https://runtimeterror.dev/pocket-id-easy-passkey-authentication/#fnref:3&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:4&#34;&gt;
&lt;p&gt;It&#39;s hard to beat the login experience of being automatically waved through the gate just by being connected to Tailscale.&amp;#160;&lt;a href=&#34;https://runtimeterror.dev/pocket-id-easy-passkey-authentication/#fnref:4&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</content>
    </entry>
    
    <entry>
        <title>January 2026 Check-in</title>
        <link href="https://runtimeterror.dev/january-2026-check-in/" rel="alternate"/>
        <id>https://runtimeterror.dev/january-2026-check-in/</id>
        <published>2026-01-31T00:00:00+00:00</published>
        <updated>2026-01-31T00:00:00+00:00</updated>
        <author>
          <name>John Wq</name>
          <email>jwq@omg.lol</email>
        </author>
        <category term="Apps"/><category term="Code"/><category term="Life"/><category term="Linux"/>
        <summary type="text">Checking in and sharing some of what I've been up to this month because I'm real bad at blogging regularly (or irregularly, for that matter).</summary>
        <content type="html">&lt;p&gt;I&#39;ve sat down about a dozen times over the past month to write a little something, and each time I&#39;ve gotten distracted by doing other stuff instead. So here&#39;s a big(ger) post to stand in for all the little posts I failed to make, just touching over a few highlights of the month.&lt;/p&gt;
&lt;h3 id=&#34;cellular-switch-up&#34;&gt;
	Cellular switch-up
	&lt;a class=&#34;hlink&#34; href=&#34;#cellular-switch-up&#34;&gt;&lt;i class=&#34;fa-solid fa-link&#34;&gt;&lt;/i&gt;&lt;/a&gt;
&lt;/h3&gt;&lt;p&gt;I switched my cell service from Mint Mobile to &lt;a href=&#34;https://usmobile.com&#34; rel=&#34;external&#34;&gt;US Mobile↗&lt;/a&gt;. Mint had been largely &lt;em&gt;fine&lt;/em&gt; but US Mobile tempted me with more coverage (they operate across the big three national carriers rather than just one of them), more features (like the ability to switch between the backing carriers depending on your needs), and way more data for less than I&#39;d been paying Mint.&lt;/p&gt;
&lt;p&gt;Leaving Mint sucked. Not because it was sad or anything, but because they deliberately made it hard to leave. I had to call their support line to get my account number and transfer PIN so I could port my number to a new provider, and that (of course) meant repeated badgering about why I was leaving, begging me to stay in the form of offers for discounted service, and otherwise just dragging things out unnecessarily so that I&#39;d give up and stay. At the end of the call, the representative even tried to transfer me to their &amp;quot;upstream carrier partner&amp;quot; to see if they could get me a better deal. It pissed me off enough that I couldn&#39;t do the whole thing online (if I can sign up for your service entirely online, I should also be able to &lt;em&gt;cancel&lt;/em&gt; the service entirely online) but it was absolutely insulting to drag a five minute conversation into a full 30-minute phone call. So while I didn&#39;t have any problems with Mint while I was a customer, the frustrating process for becoming a not-customer ensures I won&#39;t be a customer of theirs again.&lt;/p&gt;
&lt;p&gt;US Mobile has been pretty delightful though. I&#39;ve got great coverage, a great set of features, gobs of mobile data, and I&#39;m paying significantly less&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;https://runtimeterror.dev/january-2026-check-in/#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; than I was with Mint.&lt;/p&gt;
&lt;h3 id=&#34;crucial-tracks-integration&#34;&gt;
	Crucial Tracks integration
	&lt;a class=&#34;hlink&#34; href=&#34;#crucial-tracks-integration&#34;&gt;&lt;i class=&#34;fa-solid fa-link&#34;&gt;&lt;/i&gt;&lt;/a&gt;
&lt;/h3&gt;&lt;p&gt;For the past two years, I&#39;d been using &lt;a href=&#34;https://musicthread.app/&#34; rel=&#34;external&#34;&gt;MusicThread↗&lt;/a&gt; for tracking/sharing the music I was listening to. I had even &lt;a href=&#34;/adding-musicthread-to-my-now-page/&#34;&gt;hacked together some javascript&lt;/a&gt; to get my latest shared track to show up on my &lt;a href=&#34;https://jwq.lol/now&#34; rel=&#34;external&#34;&gt;/now page↗&lt;/a&gt; (and also on my blog).&lt;/p&gt;
&lt;p&gt;Well for this year I&#39;ve switched to using &lt;a href=&#34;https://app.crucialtracks.org/&#34; rel=&#34;external&#34;&gt;Crucial Tracks↗&lt;/a&gt; for that purpose. Crucial Track&#39;s pitch is to share a track a day, and it suggest interesting prompts&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;https://runtimeterror.dev/january-2026-check-in/#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt; to get you to think a bit more about your music. Responses can be (optionally) shared with the broader Crucial Tracks community, and it can be really cool to read about the connections that other members have with certain tracks. I&#39;ve not done a great job of answering the prompts, but I try to at least include a brief blurb about why I&#39;m feeling a particular song on a given day.&lt;/p&gt;
&lt;p&gt;Unlike MusicThread, Crucial Tracks doesn&#39;t have a public API (or at least not one that I could find), but it &lt;em&gt;does&lt;/em&gt; offer a JSON feed of each profile&#39;s page. So I put together a little &lt;a href=&#34;https://git.vim.wtf/wq/web/src/commit/3308f76b9ab03f6c20418a3f8104ec20325101e7/.forgejo/workflows/crucial-track.yml&#34; rel=&#34;external&#34;&gt;Forgejo Actions workflow↗&lt;/a&gt; to periodically scrape my feed, parse out the interesting info about the latest track, and post that to my omg.lol pastebin.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;Fetch Crucial Track feed&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;run&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;sd&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;          curl -sL &amp;#34;https://app.crucialtracks.org/profile/${{ secrets.CT_USER }}/feed.json&amp;#34; \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;          | jq &amp;#39;.items[0] | { url, artist: ._song_details.artist, song: ._song_details.song, artwork_url: ._song_details.artwork_url, content: ._song_details.content }&amp;#39; \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;          &amp;gt; crucial-track.json&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;POST to paste.lol&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;run&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;sd&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;          request_body=&amp;#39;{&amp;#34;title&amp;#34;: &amp;#34;crucial-track.json&amp;#34;, &amp;#34;content&amp;#34;: &amp;#39;&amp;#34;$(jq -Rsa . crucial-track.json)&amp;#34;&amp;#39;}&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;          curl --location --request POST --header &amp;#34;Authorization: Bearer ${{ secrets.OMG_TOKEN }}&amp;#34; \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;            &amp;#34;https://api.omg.lol/address/${{ secrets.OMG_ADDR }}/pastebin/&amp;#34; \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;            --data &amp;#34;$request_body&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;I&#39;ve then got a little &lt;a href=&#34;https://git.vim.wtf/wq/web/src/commit/3308f76b9ab03f6c20418a3f8104ec20325101e7/res/js/crucial-track.js&#34; rel=&#34;external&#34;&gt;JavaScript bit↗&lt;/a&gt; that fetches the info from my pastebin to embed on a static page:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;c1&#34;&gt;// gets latest Crucial Track from pastebin
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;crucialTrackScript&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;document&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;currentScript&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;urlParams&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;new&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;URLSearchParams&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;crucialTrackScript&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;src&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;split&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;.js&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;params&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;Object&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;fromEntries&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;urlParams&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;entries&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;crucialFeed&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;sb&#34;&gt;`https://paste.jwq.lol/crucial-track.json/raw`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;fetch&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;crucialFeed&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;then&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;response&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;response&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;json&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;then&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;feed&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;kd&#34;&gt;let&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;crucialTrack&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;feed&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nx&#34;&gt;console&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;log&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;crucialTrack&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nx&#34;&gt;crucialTrackContainer&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;document&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;createElement&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;div&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nx&#34;&gt;crucialTrackContainer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;className&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;crucial-track&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;plain&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;params&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;plain&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;===&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;true&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;kd&#34;&gt;let&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;innerHTML&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;plain&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;innerHTML&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;sb&#34;&gt;`&amp;lt;a href=&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;crucialTrack&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;url&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;&amp;#34;&amp;gt;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;crucialTrack&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;song&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;&amp;lt;/a&amp;gt; by &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;crucialTrack&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;artist&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;else&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;innerHTML&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;sb&#34;&gt;`&amp;lt;a href=&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;crucialTrack&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;url&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;&amp;#34;&amp;gt;&amp;lt;img src=&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;crucialTrack&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;artwork_url&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;&amp;#34; alt=&amp;#34;Album art for &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;crucialTrack&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;song&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt; by &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;crucialTrack&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;artist&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;&amp;#34;&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;&amp;lt;a href=&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;crucialTrack&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;url&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;&amp;#34;&amp;gt;&amp;lt;strong&amp;gt;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;crucialTrack&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;song&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;&amp;lt;/strong&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;crucialTrack&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;artist&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nx&#34;&gt;crucialTrackContainer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;innerHTML&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;innerHTML&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nx&#34;&gt;crucialTrackScript&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;parentNode&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;insertBefore&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;crucialTrackContainer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;crucialTrackScript&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;})&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;It&#39;s not the most elegant approach, but it works. So that&#39;s something.&lt;/p&gt;
&lt;h3 id=&#34;turning-40&#34;&gt;
	Turning 40
	&lt;a class=&#34;hlink&#34; href=&#34;#turning-40&#34;&gt;&lt;i class=&#34;fa-solid fa-link&#34;&gt;&lt;/i&gt;&lt;/a&gt;
&lt;/h3&gt;&lt;p&gt;I turned 40 this month. That&#39;s wild. I vividly remember my dad&#39;s 40th birthday party, and it feels mega weird to be the same age now that he was then. I still feel like I&#39;m making shit up as I go, and he seemed like he had everything figured out and under control. An interesting thing about being an adult is realizing that basically everyone else is also still in the &amp;quot;fake it til you make it&amp;quot; stage of life.&lt;/p&gt;
&lt;p&gt;Anyhoo, it was shortly after my dad&#39;s 40th that he bought his first Porsche (an absolutely gorgeous 1995 911 - the last of the air-cooled generation). So I guess it&#39;s about time to start shopping for my own mid-life crisis car&lt;sup id=&#34;fnref:3&#34;&gt;&lt;a href=&#34;https://runtimeterror.dev/january-2026-check-in/#fn:3&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;3&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;
&lt;h3 id=&#34;lord-of-the-rings&#34;&gt;
	Lord of the Rings
	&lt;a class=&#34;hlink&#34; href=&#34;#lord-of-the-rings&#34;&gt;&lt;i class=&#34;fa-solid fa-link&#34;&gt;&lt;/i&gt;&lt;/a&gt;
&lt;/h3&gt;&lt;p&gt;My partner and I spent my birthday weekend at the movie theater watching the extended editions of the &lt;em&gt;Lord of the Rings&lt;/em&gt; trilogy. It was really great to see those films on the big screen for the first time in 20+ years&lt;sup id=&#34;fnref:4&#34;&gt;&lt;a href=&#34;https://runtimeterror.dev/january-2026-check-in/#fn:4&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;4&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;
&lt;p&gt;It also gave me a lot of big feels. We &lt;a href=&#34;/namarie/&#34;&gt;lost our Pippin last year&lt;/a&gt;, and I cried a bit during the bit of &lt;em&gt;Two Towers&lt;/em&gt; where Merry and Pippin are saying their goodbyes as Pippin sets out for Minas Tirith with Gandalf. Saying goodbye fucking &lt;em&gt;sucks&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Oof.&lt;/p&gt;
&lt;p&gt;Anyhoo, the extended version of RotK has got to be at least seven hours on its own.&lt;/p&gt;
&lt;h3 id=&#34;coder&#34;&gt;
	Coder
	&lt;a class=&#34;hlink&#34; href=&#34;#coder&#34;&gt;&lt;i class=&#34;fa-solid fa-link&#34;&gt;&lt;/i&gt;&lt;/a&gt;
&lt;/h3&gt;&lt;p&gt;I&#39;ve been playing a lot with a self-hosted deployment of &lt;a href=&#34;https://coder.com/cde&#34; rel=&#34;external&#34;&gt;Coder↗&lt;/a&gt; this month. While all their marketing is leaning &lt;em&gt;hard&lt;/em&gt; into &amp;quot;AI&amp;quot; agents and workflows, Coder&#39;s core is about providing reproducible development environments that can be spun up and down as needed. It&#39;s kind of like an on-prem alternative to GitHub Codespaces that can integrate with any git-based software forge.&lt;/p&gt;
&lt;p&gt;I put together a few &lt;a href=&#34;https://git.vim.wtf/wq/coder-templates&#34; rel=&#34;external&#34;&gt;templates↗&lt;/a&gt; which use Terraform and Docker to define the tools and features that will be present in the workspaces created from them. Once deployed, I can connect to the workspaces from a desktop IDE like VS Code, a web-based IDE built in to the workspace itself, SSH, or even an integrated web-based terminal. And then I can use the tooling built into the workspace to compile and run code, manage my infrastructure, or anything else I might do in a terminal or IDE. The workspaces can be set to automatically shut down when not in use, but my work gets saved in a persistent volume that gets automatically loaded the next time I connect.&lt;/p&gt;
&lt;p&gt;This setup has been really great for working in a consistent way across multiple devices. It lets me switch from my Framework to my MNT Pocket Reform and pick up exactly where I left off on the other device. It also lets me easily build x64 apps and containers while working from an aarch64 system (like the Pocket).&lt;/p&gt;
&lt;p&gt;I was previously struggling a bit to really accomplish development-type work on the Pocket due to the rather underwhelming performance, but Coder lets me offload all the heavy lifting onto a more capable virtual machine. It&#39;s pretty nifty, and I&#39;m having a lot of fun tinkering with it (which is a large part of why I&#39;ve been too busy/distracted to write anything else).&lt;/p&gt;
&lt;h3 id=&#34;new-chatmail-relay&#34;&gt;
	New Chatmail relay
	&lt;a class=&#34;hlink&#34; href=&#34;#new-chatmail-relay&#34;&gt;&lt;i class=&#34;fa-solid fa-link&#34;&gt;&lt;/i&gt;&lt;/a&gt;
&lt;/h3&gt;&lt;p&gt;I&#39;ve been operating a &lt;a href=&#34;https://chatmail.at/&#34; rel=&#34;external&#34;&gt;Chatmail↗&lt;/a&gt; relay at &lt;a href=&#34;https://chat.vim.wtf&#34; rel=&#34;external&#34;&gt;chat.vim.wtf↗&lt;/a&gt; for &lt;a href=&#34;/self-hosted-chatmail-relay-for-delta-chat/&#34;&gt;a while now&lt;/a&gt; and it&#39;s been a great experience so far. I continue to be impressed by the Chatmail implementation and the Delta Chat clients, and I love being able to contribute to decentralized secure communications by hosting a small relay.&lt;/p&gt;
&lt;p&gt;So anyway I deployed an additional relay at &lt;a href=&#34;https://uninterest.ing&#34; rel=&#34;external&#34;&gt;uninterest.ing↗&lt;/a&gt;. This one runs on a &lt;em&gt;tiny&lt;/em&gt; (1 vCPU, 768MB RAM) VPS that will cost me less than a dollar a month to operate.&lt;/p&gt;
&lt;p&gt;PS if you&#39;re already on Delta Chat, &lt;a href=&#34;https://l.vim.wtf/delta&#34; rel=&#34;external&#34;&gt;reach out and say hi↗&lt;/a&gt;! If you&#39;re not using Delta Chat yet, &lt;a href=&#34;https://get.delta.chat/&#34; rel=&#34;external&#34;&gt;go get the app↗&lt;/a&gt;, set up a profile using one of my relays (or another one from the &lt;a href=&#34;https://chatmail.at/relays&#34; rel=&#34;external&#34;&gt;public relay list↗&lt;/a&gt;, and &lt;em&gt;then&lt;/em&gt; &lt;a href=&#34;https://l.vim.wtf/delta&#34; rel=&#34;external&#34;&gt;say hi↗&lt;/a&gt;!&lt;/p&gt;
&lt;h3 id=&#34;upcoming-blog-merger&#34;&gt;
	Upcoming blog merger
	&lt;a class=&#34;hlink&#34; href=&#34;#upcoming-blog-merger&#34;&gt;&lt;i class=&#34;fa-solid fa-link&#34;&gt;&lt;/i&gt;&lt;/a&gt;
&lt;/h3&gt;&lt;p&gt;It&#39;s been fun running this here blog on Bear Blog, but I&#39;ve always struggled a bit with whether a post should go here or over at my more-established &lt;a href=&#34;https://runtimeterror.dev&#34; rel=&#34;external&#34;&gt;runtimeterror.dev↗&lt;/a&gt; site. When I started this side blog thing I told myself that I&#39;d post personal stuff here and tech stuff over there, but I don&#39;t always know where to draw that line. So much of my personal life does involve technology so it seems a bit daft to try to separate these parts of me.&lt;/p&gt;
&lt;p&gt;So I think I&#39;m going to consolidate my two-pronged blogging strategy back into a single prong over at runtimeterror. I&#39;ve started migrating older posts from here over there, and I figure I&#39;ll do some minor reorganization along the way to help things make sense. Once I&#39;m ready, I&#39;ll repoint this domain so that existing links should continue to work. Or at least that&#39;s my current plan.&lt;/p&gt;
&lt;p&gt;We&#39;ll see if I actually follow through.&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;My spend with Mint was $420 annually for 15GB/month; I&#39;m now spending $270 annually for 30GB/month.&amp;#160;&lt;a href=&#34;https://runtimeterror.dev/january-2026-check-in/#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:2&#34;&gt;
&lt;p&gt;Like &lt;em&gt;What artist or band changed your music taste forever? Pick your favorite song of theirs.&lt;/em&gt; or &lt;em&gt;Share a song that got you through a difficult time.&lt;/em&gt;&amp;#160;&lt;a href=&#34;https://runtimeterror.dev/january-2026-check-in/#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:3&#34;&gt;
&lt;p&gt;Just kidding, probably. There still really isn&#39;t much on the road that I&#39;d rather drive than my BRZ.&amp;#160;&lt;a href=&#34;https://runtimeterror.dev/january-2026-check-in/#fnref:3&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:4&#34;&gt;
&lt;p&gt;The event was celebrating the 25th anniversary of &lt;em&gt;The Fellowship of the Ring&lt;/em&gt;, and I guess the 24th of &lt;em&gt;The Two Towers&lt;/em&gt; and the 23rd of &lt;em&gt;Return of the King&lt;/em&gt;.&amp;#160;&lt;a href=&#34;https://runtimeterror.dev/january-2026-check-in/#fnref:4&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</content>
    </entry>
    
    <entry>
        <title>Tech Refresh 2025</title>
        <link href="https://runtimeterror.dev/tech-refresh-2025/" rel="alternate"/>
        <id>https://runtimeterror.dev/tech-refresh-2025/</id>
        <published>2025-12-25T00:00:00+00:00</published>
        <updated>2025-12-25T00:00:00+00:00</updated>
        <author>
          <name>John Wq</name>
          <email>jwq@omg.lol</email>
        </author>
        <category term="Apps"/><category term="Linux"/><category term="Tech"/>
        <summary type="text">I recently converted my Framework Chromebook into a real computer, bought a tiny open-source laptop, and switched to some new software and services.</summary>
        <content type="html">&lt;p&gt;I didn&#39;t really plan it, but I&#39;ve recently done a bit of a personal tech refresh. I got some new hardware, upgraded another device, and also switched up several of the software and services that I use.&lt;/p&gt;
&lt;p&gt;This post will go over some of the big changes.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;I started writing this post on December 6, but then I decided to &lt;a href=&#34;https://vim.wtf/@wq/statuses/01KBY1KPJY0ZXX0G476YC3GA73&#34; rel=&#34;external&#34;&gt;change my tech stack again↗&lt;/a&gt; and I&#39;ve been trying to catch up ever since. At this point I&#39;m just trying to wrap up this post before it is out of date again.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;hardware&#34;&gt;
	Hardware
	&lt;a class=&#34;hlink&#34; href=&#34;#hardware&#34;&gt;&lt;i class=&#34;fa-solid fa-link&#34;&gt;&lt;/i&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;h3 id=&#34;framework-chromebook---framework-13&#34;&gt;
	Framework Chromebook -&amp;gt; Framework 13
	&lt;a class=&#34;hlink&#34; href=&#34;#framework-chromebook---framework-13&#34;&gt;&lt;i class=&#34;fa-solid fa-link&#34;&gt;&lt;/i&gt;&lt;/a&gt;
&lt;/h3&gt;&lt;p&gt;I&#39;d been happily using a &lt;a href=&#34;https://web.archive.org/web/20250305143906/https://frame.work/products/laptop-chromebook-12-gen-intel&#34; rel=&#34;external&#34;&gt;Framework Laptop Chromebook Edition↗&lt;/a&gt; as my primary computing device since early 2023. It was cool to get all the security and stability attributes of ChromeOS combined with plenty of processing &lt;em&gt;oomph&lt;/em&gt; for actually Doing Work in the &lt;a href=&#34;https://support.google.com/chromebook/answer/9145439&#34; rel=&#34;external&#34;&gt;ChromeOS Linux Development Environment↗&lt;/a&gt;. At the time, I was still pretty active in the Google Product Experts community and enjoyed helping other Chromebook users get the most out of their devices. I especially loved helping users explore that Linux environment.&lt;/p&gt;
&lt;p&gt;Things have changed in the almost three years since then though; technology has generally turned to shit as corporations raced to shove &amp;quot;AI&amp;quot; into every crevice and orifice, destroying jobs, user experience, intellectual property rights, and the planet in the process. I used to be excited about new tech and new features, but I&#39;ve become increasingly discouraged&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;https://runtimeterror.dev/tech-refresh-2025/#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; as every &amp;quot;new feature&amp;quot; turns out to be &amp;quot;old feature but now with &lt;del&gt;AI&lt;/del&gt; a predictive word extruder bolted onto it&amp;quot;. Corpo innovation is dead, and it&#39;s time to for me to move on.&lt;/p&gt;
&lt;p&gt;To that end, I started looking for options to move away from ChromeOS and back to a &amp;quot;real&amp;quot; computer. The Framework hardware is pretty nice, though, and the whole point of it is that it can be repaired and upgraded. Of course, this was around the time that Framework decided that they wanted to welcome (and financially support!) far-right assholes in their &lt;a href=&#34;https://community.frame.work/t/framework-supporting-far-right-racists/75986&#34; rel=&#34;external&#34;&gt;big tent↗&lt;/a&gt;. It didn&#39;t feel right to send them more of my money... but I didn&#39;t want to just waste my existing hardware.&lt;/p&gt;
&lt;p&gt;I did some looking around on eBay and managed to find the bits I needed to convert my Framework Chromebook into the more traditional Framework Laptop 13: a mainboard with a 12th-gen i7 (i7-1280P) and a US-layout input panel to replace the Chromebook-specific keyboard. Purchasing the parts secondhand meant that I could extend the useful life of my current laptop without directly supporting Framework.&lt;/p&gt;
&lt;p&gt;The process of replacing the laptop&#39;s mainboard was pretty simple&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;https://runtimeterror.dev/tech-refresh-2025/#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt; thanks to the maintenance-friendly design. I think it took me about half an hour, and that includes the time spent finessing the wires for the wifi antenna back into their appropriate channels.&lt;/p&gt;
&lt;p&gt;&lt;div class=&#34;image-container&#34;&gt;
	&lt;picture&gt;
		&lt;a href=&#34;laptop_surgery.webp&#34;
			target=&#34;_blank&#34;
			rel=&#34;noopener noreferrer&#34;&gt;

	
		
			
			
				
					
						
							
							
							
						
					
						
							
							
							
						
					
						
							
							
							
						
					
						
					
						
					
						
					
				

				
				
				
				&lt;noscript&gt;
					&lt;img 
						class=&#34;post-image&#34;
						srcset=&#34;/tech-refresh-2025/laptop_surgery_hu_494f1d65928aabf0.webp 320w, /tech-refresh-2025/laptop_surgery_hu_6b20a9ec31ccf3b0.webp 640w, /tech-refresh-2025/laptop_surgery_hu_51280248d36e79a4.webp 960w, /tech-refresh-2025/laptop_surgery_hu_7d7cc0107f0db813.webp 1200w&#34;
						src=&#34;/tech-refresh-2025/laptop_surgery_hu_7d7cc0107f0db813.webp&#34;alt=&#34;A Framework 12 laptop in the midst of a mainboard transplant on a cluttered desk. The removed Chromebook mainboard, memory, and storage modules are sitting on an antistatic bag, and the (secondhand) non-Chromebook mainboard has been installed in the open laptop shell. There&amp;#39;s an adorable little MNT Pocket Reform mini laptop (palmtop?) nearby displaying the Framework mainboard replacement guide.&#34; title=&#34;A Framework 12 laptop in the midst of a mainboard transplant on a cluttered desk. The removed Chromebook mainboard, memory, and storage modules are sitting on an antistatic bag, and the (secondhand) non-Chromebook mainboard has been installed in the open laptop shell. There&amp;#39;s an adorable little MNT Pocket Reform mini laptop (palmtop?) nearby displaying the Framework mainboard replacement guide.&#34; 
						loading=&#34;lazy&#34;
					/&gt;
				&lt;/noscript&gt;

				&lt;img
					class=&#34;post-image lazyload show-if-js&#34;
					data-srcset=&#34;/tech-refresh-2025/laptop_surgery_hu_494f1d65928aabf0.webp 320w, /tech-refresh-2025/laptop_surgery_hu_6b20a9ec31ccf3b0.webp 640w, /tech-refresh-2025/laptop_surgery_hu_51280248d36e79a4.webp 960w, /tech-refresh-2025/laptop_surgery_hu_7d7cc0107f0db813.webp 1200w&#34;
					data-src=&#34;/tech-refresh-2025/laptop_surgery.webp&#34;
					src=&#34;data:image/webp;base64,UklGRsQEAABXRUJQVlA4ILgEAAAQJQCdASqAAGAAPqE0lEQjISEb&amp;#43;R9UMwoE84BlWSJwP18uVcEAdovCcX&amp;#43;gf&amp;#43;UcWnrnP/yWnvNqpEROym1hPPr01h2K4yxo&amp;#43;&amp;#43;cqo&amp;#43;FooxeeVl95heni5elkaprY5unL&amp;#43;dwaFENiDl9chst4AWEMa8Zzz&amp;#43;/khtOku4k&amp;#43;2ng&amp;#43;nP/RZdWiPAjHtGLF8vc6e6a&amp;#43;g&amp;#43;E9RRIsH1Q3P&amp;#43;toZazM5W0gAPEiHLP5iYBfCGiDhjBfkBgLPEih7wZ001O4HV3SfYQKTT7pCzP7WgWHw73DyVkAj4wKSF40UCqKOHngbc/JXRhKX0DAtNe09s6VkuR7gplaxwghWMF7ZGL43tqeKdzLZuDS9&amp;#43;AOUsb&amp;#43;pW2ibpSf7amAjx5ZluTeTCa54aN&amp;#43;fRwf5APW8RXRcJrIGe3a&amp;#43;zQrwAD&amp;#43;9y9ek/h&amp;#43;Ph2FULWAyS1m7HuLU&amp;#43;7EOd83tydxGUxrzfzUslXnNxkr8RdmwtIOb8Gg9jsvAZzCMIVTI4eG1iwGd&amp;#43;XokvZ1XiSz3spfReEbubk6keS8PMB1yR0iaUxZXgRi5uabO0GTOBfsMQiU2RE34pZUKIV46XapiQIuQmJGH9dv&amp;#43;XaFksWYIDLIXxG7xaVYiMjkXWi9gCbsTMTazt3f2ADbH&amp;#43;jkHCpuXQvGWhgvr/lIc5Y/KIxy/99CI9WdIR525OaHtMroNUxFqjQ3OiDiUt8&amp;#43;lBsuHTqFLJtnDIQUSkF1Pg8VfrvZgcFzI9FNqFRxVEISXCndlmrECKNVVGqTX6rJi4K6dLg1WzxlTh43dALJbh/u7pMtGNGu046MMuglGt5eJKlnPtsIjyhi2EjR1j9nYyciNQHG2Nrb/KRMX6mpll98bOhQ3d/mqZwttAyDKmCMct0luKNiqNJo4/eUZdoMabLWsjop03&amp;#43;BeCinGdwjzG0l6YPUREq0gPZhYtRkdlxU50JqV13uPSzVj9EmqDDmzwh8f2lf&amp;#43;qYdyZDH/2zZCDM66qglRPaCFOC5GjyiIE4sob6SSz5WK8Co128iS67LWehu&amp;#43;6A6IrXNDyMswqvfrKsoBuHK/JBJA9vsxCcn5w&amp;#43;v7/etR8iufHMKsWrAShngqrnXXVgd9o3OXwvKqihlc&amp;#43;yfEmoZTYVtGu7yN7CGuH4ymPBQbknlJx1zxqOPs90bwuGZlK9anbdaLydhlTzIVAI38p2L7gwmcmMqG6bTVkwpPRuoaHc9bSBX1nWs3ou0Z/kcQK4OvMPuaq4cq21CGluwS6NA4atZOO&amp;#43;aUQspPZcMUscEoZFC88Rm39zgz2CYCFMw9GlinuhvFTEFvu75XTmixPBwLu&amp;#43;RSg&amp;#43;N8LI&amp;#43;vVpPBkck7gxicYreYsNqjoosHPQz1xSkvFM5z1bqKFGFrR5ZzUbpOaxtD3jg3/wy2PbLZkzmTpvKPXUa/3pi4dcSC4if0mmRCxggYHaArax2Ecv8&amp;#43;08R99icjLwxxr5aLwNhtQRelPIxhld2&amp;#43;tJo8brDOARmXE3GqBbNWJjl/n814rHr73s3yOcQFgYMXsRXh3TAyK3NHL56IIuVhgjkNSEL/vpSos6om7nIdBM3PVjV0SHIcHBMEkXrVrV8jWjJ8XnsVRFWTiLGVHRlHg3fRjcgt/tFE1awaczPnKK&amp;#43;aXa7ZsAAAA==&#34;
					data-sizes=&#34;auto&#34;
					width=&#34;1200&#34;
					height=&#34;903&#34;alt=&#34;A Framework 12 laptop in the midst of a mainboard transplant on a cluttered desk. The removed Chromebook mainboard, memory, and storage modules are sitting on an antistatic bag, and the (secondhand) non-Chromebook mainboard has been installed in the open laptop shell. There&amp;#39;s an adorable little MNT Pocket Reform mini laptop (palmtop?) nearby displaying the Framework mainboard replacement guide.&#34; title=&#34;A Framework 12 laptop in the midst of a mainboard transplant on a cluttered desk. The removed Chromebook mainboard, memory, and storage modules are sitting on an antistatic bag, and the (secondhand) non-Chromebook mainboard has been installed in the open laptop shell. There&amp;#39;s an adorable little MNT Pocket Reform mini laptop (palmtop?) nearby displaying the Framework mainboard replacement guide.&#34; 
					loading=&#34;lazy&#34;
				/&gt;&lt;/a&gt;
	&lt;/picture&gt;
	
&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;Even now, ~6 weeks on, I&#39;m still struggling a bit with the Chromebook keyboard muscle memory&lt;sup id=&#34;fnref:3&#34;&gt;&lt;a href=&#34;https://runtimeterror.dev/tech-refresh-2025/#fn:3&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;3&lt;/a&gt;&lt;/sup&gt;, but I&#39;m otherwise enjoying the new setup. More on that in a moment.&lt;/p&gt;
&lt;h3 id=&#34;mnt-pocket-reform&#34;&gt;
	MNT Pocket Reform
	&lt;a class=&#34;hlink&#34; href=&#34;#mnt-pocket-reform&#34;&gt;&lt;i class=&#34;fa-solid fa-link&#34;&gt;&lt;/i&gt;&lt;/a&gt;
&lt;/h3&gt;&lt;p&gt;Sharp-eyed readers may have noticed &lt;em&gt;another&lt;/em&gt; laptop chilling out in the photo&lt;sup id=&#34;fnref:4&#34;&gt;&lt;a href=&#34;https://runtimeterror.dev/tech-refresh-2025/#fn:4&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;4&lt;/a&gt;&lt;/sup&gt; showing the Framework surgery. That&#39;s the tiny-but-thicc &lt;a href=&#34;https://shop.mntre.com/products/mnt-pocket-reform&#34; rel=&#34;external&#34;&gt;MNT Pocket Reform↗&lt;/a&gt;, an open-source open-hardware mini-laptop that&#39;s designed to be modular, upgradable, and repairable. I opted for the first-generation Pocket Reform (equipped with the NXP i.MX8M Plus processor module) rather than the newer RK3588-equipped version primarily because it was available &lt;a href=&#34;https://www.crowdsupply.com/mnt/pocket-reform&#34; rel=&#34;external&#34;&gt;in-stock in the US↗&lt;/a&gt; without having to worry about our dumb tariff chaos or international shipping delays.&lt;/p&gt;
&lt;p&gt;The Pocket Reform has a low-powered ARM64 processor, a small 7-inch display, a delightfully-clicky ultra-compact keyboard (with RGB lighting!), a cool optical trackball, and comes with a remarkably detailed &lt;a href=&#34;https://mntre.com/documentation/pocket-reform-handbook/index.html&#34; rel=&#34;external&#34;&gt;Operator Handbook↗&lt;/a&gt; detailing how to use the thing. The handbook even includes &lt;a href=&#34;https://mntre.com/documentation/pocket-reform-handbook/schematics.html#&#34; rel=&#34;external&#34;&gt;schematics↗&lt;/a&gt; for basically every component in the device, and there are also details on how to interact with some of the components&lt;sup id=&#34;fnref:5&#34;&gt;&lt;a href=&#34;https://runtimeterror.dev/tech-refresh-2025/#fn:5&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;5&lt;/a&gt;&lt;/sup&gt;. This is definitely a laptop made by hackers for hackers.&lt;/p&gt;
&lt;p&gt;It runs Debian (unstable) with a good bit of customization for supporting the Pocket Reform&#39;s hardware, and ships with a choice of &lt;a href=&#34;https://mntre.com/documentation/pocket-reform-handbook/desktops.html&#34; rel=&#34;external&#34;&gt;graphical desktops↗&lt;/a&gt;, either Sway or GNOME. I started with Sway which was pretty cool, but honestly the tiling is a bit wasted on this tiny display; there&#39;s just not much room for activities so I eventually decided that just sticking with GNOME (for familiarity and broader ecosystem support) and multitasking via workspaces fit my use case a bit better.&lt;/p&gt;
&lt;p&gt;The Pocket Reform been a ton of fun for little bursts of computing while on the go&lt;sup id=&#34;fnref:6&#34;&gt;&lt;a href=&#34;https://runtimeterror.dev/tech-refresh-2025/#fn:6&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;6&lt;/a&gt;&lt;/sup&gt;, and it was pretty perfect for use during some breakout sessions at &lt;a href=&#34;/kubecon-cloudnativecon-2025/&#34;&gt;KubeCon&lt;/a&gt;. While it doesn&#39;t have a ton of computing power on its own, I was able connect back to my &lt;a href=&#34;/homelab/&#34;&gt;homelab&lt;/a&gt; (through the magic of &lt;a href=&#34;/tags/tailscale/&#34;&gt;Tailscale!&lt;/a&gt;) for running heavier workloads.&lt;/p&gt;
&lt;p&gt;I may even eventually &lt;a href=&#34;https://shop.mntre.com/products/mnt-pocket-reform-upgrade-bundle&#34; rel=&#34;external&#34;&gt;upgrade to the faster RK3588 chipset↗&lt;/a&gt; but for now the Pocket makes for a pretty great go-anywhere computing sidekick.&lt;/p&gt;
&lt;h2 id=&#34;software&#34;&gt;
	Software
	&lt;a class=&#34;hlink&#34; href=&#34;#software&#34;&gt;&lt;i class=&#34;fa-solid fa-link&#34;&gt;&lt;/i&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;h3 id=&#34;chromeos---nixos&#34;&gt;
	ChromeOS -&amp;gt; NixOS
	&lt;a class=&#34;hlink&#34; href=&#34;#chromeos---nixos&#34;&gt;&lt;i class=&#34;fa-solid fa-link&#34;&gt;&lt;/i&gt;&lt;/a&gt;
&lt;/h3&gt;&lt;p&gt;I had already been using Nix (the package manager) and &lt;a href=&#34;https://github.com/nix-community/home-manager&#34; rel=&#34;external&#34;&gt;Home Manager↗&lt;/a&gt; to maintain the user configuration within my Chromebook&#39;s Linux environment, and I&#39;d gotten pretty comfortable with that approach. So I decided to go all-in and load NixOS on the recently-transitioned Framework. The beauty of managing my &lt;a href=&#34;https://git.vim.wtf/wq/nix-dotfiles&#34; rel=&#34;external&#34;&gt;dotfiles↗&lt;/a&gt; with Nix is that I was able to get &lt;em&gt;most&lt;/em&gt; of my apps and preferences set up on the new system very quickly. I love having that kind of portability!&lt;/p&gt;
&lt;p&gt;I spent weeks tinkering with my setup, slowly learning how to configure (and use) Sway more effectively. I added a bunch of plugins and utilities to really customize things, and slowly made it into a system that felt like home.&lt;/p&gt;
&lt;p&gt;Of course, NixOS can be rather finicky. After a few weeks of daily-driving (and breaking) NixOS/Sway I started to realize that maybe I wanted an underlying OS with a bit more stability (and less prone to typo-induced breakage). ChromeOS&#39;s immutable system and image-based updates had really spoiled me!&lt;/p&gt;
&lt;h3 id=&#34;nixos---bluefin&#34;&gt;
	NixOS -&amp;gt; Bluefin
	&lt;a class=&#34;hlink&#34; href=&#34;#nixos---bluefin&#34;&gt;&lt;i class=&#34;fa-solid fa-link&#34;&gt;&lt;/i&gt;&lt;/a&gt;
&lt;/h3&gt;&lt;p&gt;A friend had been telling me &lt;em&gt;for years&lt;/em&gt; about their experience with &lt;a href=&#34;https://projectbluefin.io/&#34; rel=&#34;external&#34;&gt;Bluefin↗&lt;/a&gt;, an OS experience based on &lt;a href=&#34;https://fedoraproject.org/atomic-desktops/silverblue/&#34; rel=&#34;external&#34;&gt;Fedora Silverblue↗&lt;/a&gt; (an &amp;quot;atomic&amp;quot; desktop OS where the system is updated as a single unit instead of a bunch of independent packages) and built via &lt;a href=&#34;https://universal-blue.org/&#34; rel=&#34;external&#34;&gt;Universal Blue↗&lt;/a&gt; (a framework for building custom Silverblue images in a modern, repeatable way).&lt;/p&gt;
&lt;p&gt;Bluefin comes with the GNOME desktop environment, a curated set of essential applications and features, an integrated app store for discovering and installing graphical apps, and &lt;a href=&#34;https://brew.sh/&#34; rel=&#34;external&#34;&gt;Homebrew↗&lt;/a&gt; for installing tools you might use on the command line. It&#39;s basically maintenance free in its &lt;a href=&#34;https://docs.projectbluefin.io/administration/#bluefin-gts&#34; rel=&#34;external&#34;&gt;standard configuration↗&lt;/a&gt;: the OS (and baked-in packages) gets automatically updated each week (but only after going through rigorous testing to make sure it will be a great upgrade experience) and your installed applications get automatically updated twice a day, completely transparently.&lt;/p&gt;
&lt;p&gt;It&#39;s kind of the perfect&lt;sup id=&#34;fnref:7&#34;&gt;&lt;a href=&#34;https://runtimeterror.dev/tech-refresh-2025/#fn:7&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;7&lt;/a&gt;&lt;/sup&gt; Linux workstation for normal people. You don&#39;t have to even think about what operating system you&#39;re using; you could treat it like an open-source Chromebook and just have a reliable, self-updating way to access your favorite (non-Google) web browser.&lt;/p&gt;
&lt;p&gt;But while it&#39;s easy enough for normal people to use, Bluefin easily adapts to fit more advanced developer-focused use cases. Enabling &lt;a href=&#34;https://docs.projectbluefin.io/bluefin-dx&#34; rel=&#34;external&#34;&gt;Developer Mode↗&lt;/a&gt; (by simply typing &lt;code&gt;ujust devmode&lt;/code&gt; in the terminal) switches to a different OS image that has Docker, Podman, VSCode, and support for &lt;a href=&#34;https://containers.dev/&#34; rel=&#34;external&#34;&gt;devcontainers↗&lt;/a&gt; baked in. It also includes support for &amp;quot;pet containers&amp;quot; which let you easily install and run packages and tools &lt;em&gt;from other Linux distributions&lt;/em&gt; within the same workspace. It&#39;s kind of nuts how cool that is.&lt;/p&gt;
&lt;p&gt;I&#39;m really impressed by how well this modern approach to a Linux workstation actually works.&lt;/p&gt;
&lt;h3 id=&#34;nix-home-manager---chezmoi&#34;&gt;
	Nix Home Manager -&amp;gt; Chezmoi
	&lt;a class=&#34;hlink&#34; href=&#34;#nix-home-manager---chezmoi&#34;&gt;&lt;i class=&#34;fa-solid fa-link&#34;&gt;&lt;/i&gt;&lt;/a&gt;
&lt;/h3&gt;&lt;p&gt;Of course, once I made the decision to abandon NixOS for Bluefin I needed to find another way to manage my dotfiles&lt;sup id=&#34;fnref:8&#34;&gt;&lt;a href=&#34;https://runtimeterror.dev/tech-refresh-2025/#fn:8&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;8&lt;/a&gt;&lt;/sup&gt;&lt;sup id=&#34;fnref:9&#34;&gt;&lt;a href=&#34;https://runtimeterror.dev/tech-refresh-2025/#fn:9&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;9&lt;/a&gt;&lt;/sup&gt;. Bluefin recommends &lt;a href=&#34;https://www.chezmoi.io/&#34; rel=&#34;external&#34;&gt;Chezmoi↗&lt;/a&gt;&lt;sup id=&#34;fnref:10&#34;&gt;&lt;a href=&#34;https://runtimeterror.dev/tech-refresh-2025/#fn:10&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;10&lt;/a&gt;&lt;/sup&gt; for this purpose so I decided to check it out.&lt;/p&gt;
&lt;p&gt;Whereas the Nix Home Manager approach was to forcibly replace (and subsequently prevent modifications to) the designated config files, Chezmoi takes a more measured approach. When you initially tell Chezmoi to start managing a file, it basically just copies it into a local git repository (version control is neat!) while leaving the original in place. You can then &lt;code&gt;chezmoi edit&lt;/code&gt; the managed file, and &lt;code&gt;chezmoi apply&lt;/code&gt; to apply the changes. If Chezmoi detects a difference between the source (in Chezmoi&#39;s local repo) and the target (the original file, likely under &lt;code&gt;~/.config/&lt;/code&gt; or similar), it will ask how you&#39;d like to handle the conflict. You can forcibly overwrite the file, abandon the changes, or merge the files to keep things in sync. Being able to merge rather than just blindly overwrite is pretty cool, particularly if an application wants to make changes to its own config file.&lt;/p&gt;
&lt;p&gt;Chezmoi is packed with a bunch of other capabilities too, like &lt;a href=&#34;https://www.chezmoi.io/user-guide/use-scripts-to-perform-actions/&#34; rel=&#34;external&#34;&gt;using scripts to perform actions↗&lt;/a&gt; (including &lt;a href=&#34;https://www.chezmoi.io/user-guide/advanced/install-packages-declaratively/&#34; rel=&#34;external&#34;&gt;installing and updating Homebrew packages↗&lt;/a&gt;), &lt;a href=&#34;https://www.chezmoi.io/user-guide/templating/&#34; rel=&#34;external&#34;&gt;templating config files to make them more portable↗&lt;/a&gt;, &lt;a href=&#34;https://www.chezmoi.io/user-guide/password-managers/&#34; rel=&#34;external&#34;&gt;integrating with a bunch of password managers↗&lt;/a&gt;, and &lt;a href=&#34;https://www.chezmoi.io/user-guide/encryption/age/&#34; rel=&#34;external&#34;&gt;encrypting sensitive data directly in your Chezmoi repo↗&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;It took me a few days to figure it out but I&#39;ve now migrated the configs from my antique &lt;a href=&#34;https://git.vim.wtf/wq/nix-dotfiles&#34; rel=&#34;external&#34;&gt;Nix dotfiles↗&lt;/a&gt; to a shiny new &lt;a href=&#34;https://git.vim.wtf/wq/dotfiles&#34; rel=&#34;external&#34;&gt;Chezmoi-managed home↗&lt;/a&gt;. And thanks to a few well-placed scripts, I can copy my standard configs to any new system with a single command. It&#39;s neato.&lt;/p&gt;
&lt;h3 id=&#34;chromefirefox---zen-browser&#34;&gt;
	Chrome/Firefox -&amp;gt; Zen Browser
	&lt;a class=&#34;hlink&#34; href=&#34;#chromefirefox---zen-browser&#34;&gt;&lt;i class=&#34;fa-solid fa-link&#34;&gt;&lt;/i&gt;&lt;/a&gt;
&lt;/h3&gt;&lt;p&gt;I had continued using Chrome long past when I should have stopped simply because I was using a Chromebook and didn&#39;t really have much choice&lt;sup id=&#34;fnref:11&#34;&gt;&lt;a href=&#34;https://runtimeterror.dev/tech-refresh-2025/#fn:11&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;11&lt;/a&gt;&lt;/sup&gt;. Well, now I do have a choice - and I chose to try out &lt;a href=&#34;https://zen-browser.app/&#34; rel=&#34;external&#34;&gt;Zen Browser↗&lt;/a&gt;. Zen is based on Firefox (which means excellent extension support), loaded with thoughtful features (and free of &amp;quot;AI&amp;quot;), and quite lovely to use. It does a great job of retreating into the background to let you focus on the content being rendered rather than the browser doing the rendering.&lt;/p&gt;
&lt;p&gt;I really appreciate the way it handles grouping and pinning tabs, opening external links in floating windows (which can be easily dismissed or maximized after previewing the linked content), and the thoughtful and intentionally unobtrusive design decisions throughout.&lt;/p&gt;
&lt;p&gt;Zen is appropriately chill.&lt;/p&gt;
&lt;h3 id=&#34;immich---ente&#34;&gt;
	Immich -&amp;gt; Ente
	&lt;a class=&#34;hlink&#34; href=&#34;#immich---ente&#34;&gt;&lt;i class=&#34;fa-solid fa-link&#34;&gt;&lt;/i&gt;&lt;/a&gt;
&lt;/h3&gt;&lt;p&gt;I haven&#39;t completely ditched Google Photos since it makes it easy to automatically share pictures of our boys&lt;sup id=&#34;fnref:12&#34;&gt;&lt;a href=&#34;https://runtimeterror.dev/tech-refresh-2025/#fn:12&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;12&lt;/a&gt;&lt;/sup&gt; with my spouse, but it hasn&#39;t been my primary photo management solution for several years. I had been backing up my photos and videos to a self-hosted &lt;a href=&#34;https:/immich.app&#34; rel=&#34;external&#34;&gt;Immich↗&lt;/a&gt; instance running on a virtual machine on the Proxmox cluster at my house. This was largely fine, but the updates often introduced breaking changes that I had to navigate, and the media took up a lot of storage space (something I don&#39;t have a ton of in my &lt;a href=&#34;/homelab/&#34;&gt;homelab&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;I switched to &lt;a href=&#34;https://ente.io/&#34; rel=&#34;external&#34;&gt;Ente↗&lt;/a&gt;, deployed on a virtual server I rent from Hetzner. Ente&#39;s development process seems to be a bit more deliberate so updates are far less scary. The biggest reason&lt;sup id=&#34;fnref:13&#34;&gt;&lt;a href=&#34;https://runtimeterror.dev/tech-refresh-2025/#fn:13&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;13&lt;/a&gt;&lt;/sup&gt; I made the switch though is that Ente supports storing media in remote S3-compatible object storage. This lets it maintain a much smaller footprint on the server itself while offloading the heavy media files to a cost-effective storage provider like Backblaze B2 or (in my case) Mega S4. And it gets my photo library out of my house, which is nice considering that I&#39;ve had to repair my Immich deployment multiple times due to storage-related problems.&lt;/p&gt;
&lt;p&gt;Ente does all the cool things that you&#39;d expect from a modern photo library tool, like grouping matching faces, searching in natural language, and providing easy album sharing. Ente also encrypts all the media files and metadata, both in transit and at rest, and does all of the ML-related processing solely on your local device.&lt;/p&gt;
&lt;p&gt;As a neat side effect, I&#39;ve also started using &lt;a href=&#34;https://ente.io/auth/&#34; rel=&#34;external&#34;&gt;Ente Auth↗&lt;/a&gt; for managing and syncing some of my MFA secrets. Ente Auth is essentially built in to the Ente server itself, leveraging the same encryption and storage. And it lets me securely keep track of my MFA secrets on multiple devices without relying on a third-party syncing service or servers outside of my control.&lt;/p&gt;
&lt;h3 id=&#34;neovim---helix&#34;&gt;
	Neovim -&amp;gt; Helix
	&lt;a class=&#34;hlink&#34; href=&#34;#neovim---helix&#34;&gt;&lt;i class=&#34;fa-solid fa-link&#34;&gt;&lt;/i&gt;&lt;/a&gt;
&lt;/h3&gt;&lt;p&gt;After years of using (and tinkering with) a rather complicated &lt;a href=&#34;https://neovim.io/&#34; rel=&#34;external&#34;&gt;Neovim↗&lt;/a&gt; setup as my primary text editor, I decided to try out a more modern editor with all the cool features already baked in. That editor is &lt;a href=&#34;https://helix-editor.com/&#34; rel=&#34;external&#34;&gt;Helix↗&lt;/a&gt;, and I quickly fell in love. I don&#39;t need to import (and configure) a dozen different plugins in order to get a full-featured terminal-based IDE -- Helix does it all right out of the box. It unburdens itself from Vi&#39;s legacy design decisions and implements a modal text editor in a more polished, more intuitive way.&lt;/p&gt;
&lt;p&gt;There was a little bit of a learning curve as I had to adjust to the Helix way of doing things and the Helix key mappings&lt;sup id=&#34;fnref:14&#34;&gt;&lt;a href=&#34;https://runtimeterror.dev/tech-refresh-2025/#fn:14&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;14&lt;/a&gt;&lt;/sup&gt;, but I&#39;m really happy with the move.&lt;/p&gt;
&lt;h2 id=&#34;services&#34;&gt;
	Services
	&lt;a class=&#34;hlink&#34; href=&#34;#services&#34;&gt;&lt;i class=&#34;fa-solid fa-link&#34;&gt;&lt;/i&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;h3 id=&#34;kagi-search---searxng&#34;&gt;
	Kagi Search -&amp;gt; SearXNG
	&lt;a class=&#34;hlink&#34; href=&#34;#kagi-search---searxng&#34;&gt;&lt;i class=&#34;fa-solid fa-link&#34;&gt;&lt;/i&gt;&lt;/a&gt;
&lt;/h3&gt;&lt;p&gt;I had been using Kagi as my primary search engine off and on for about two years. The quality of the search results really impressed me, but I was somewhat less excited about &lt;a href=&#34;https://d-shoot.net/kagi.html&#34; rel=&#34;external&#34;&gt;the founder↗&lt;/a&gt;. I stuck around longer than I should have just because the search results were that much better than what I was able to get on most other search providers.&lt;/p&gt;
&lt;p&gt;But wait. Kagi doesn&#39;t do its own crawling or indexing. It just fetches results from other engines (including Google, Bing, and Brave) and mashes them together (along with some magic for weighting the results).&lt;/p&gt;
&lt;p&gt;And it turns out that I can do that on my own, without paying a subscription which includes &amp;quot;AI&amp;quot; products I don&#39;t want or supporting yet another tech CEO who seems to be a bit of an asshole. So I did.&lt;/p&gt;
&lt;p&gt;I deployed a fresh&lt;sup id=&#34;fnref:15&#34;&gt;&lt;a href=&#34;https://runtimeterror.dev/tech-refresh-2025/#fn:15&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;15&lt;/a&gt;&lt;/sup&gt; instance of &lt;a href=&#34;https://docs.searxng.org/&#34; rel=&#34;external&#34;&gt;SearXNG↗&lt;/a&gt;, a self-hostable metasearch engine which, like Kagi, passes your search query on to other engines on the backend and then presents the aggregated results. As an instance administrator, I get a lot of control over which engines are used for what queries and how their responses will be weighted &lt;em&gt;by default&lt;/em&gt;, but any user can also set their own preferences&lt;sup id=&#34;fnref:16&#34;&gt;&lt;a href=&#34;https://runtimeterror.dev/tech-refresh-2025/#fn:16&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;16&lt;/a&gt;&lt;/sup&gt; to override most of those defaults.&lt;/p&gt;
&lt;p&gt;With a bit of fiddling I&#39;m getting pretty decent results from my personal metasearch engine - maybe not quite as good as what I got from Kagi but still much better than I&#39;ve gotten from any other single engine.&lt;/p&gt;
&lt;p&gt;And while I initially deployed SearXNG solely for my personal use, I eventually decided to submit it to the &lt;a href=&#34;https://searx.space/&#34; rel=&#34;external&#34;&gt;list of public instances↗&lt;/a&gt; so that users who aren&#39;t able to run their own can still benefit from it. You&#39;re welcome to check it out at &lt;strong&gt;&lt;a href=&#34;https://grep.vim.wtf&#34; rel=&#34;external&#34;&gt;grep.vim.wtf↗&lt;/a&gt;&lt;/strong&gt;,  but you&#39;ll probably want to jump into the &lt;a href=&#34;https://grep.vim.wtf/preferences&#34; rel=&#34;external&#34;&gt;preferences↗&lt;/a&gt; to select the engines you&#39;d like to handle your query; I opted to disable a few big ones by default to help avoid my engine getting blocked or rate limited&lt;sup id=&#34;fnref:17&#34;&gt;&lt;a href=&#34;https://runtimeterror.dev/tech-refresh-2025/#fn:17&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;17&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;
&lt;h3 id=&#34;cloaked---bitwarden--forward-email--fastmail--privacy&#34;&gt;
	Cloaked -&amp;gt; Bitwarden + Forward Email + Fastmail + Privacy
	&lt;a class=&#34;hlink&#34; href=&#34;#cloaked---bitwarden--forward-email--fastmail--privacy&#34;&gt;&lt;i class=&#34;fa-solid fa-link&#34;&gt;&lt;/i&gt;&lt;/a&gt;
&lt;/h3&gt;&lt;p&gt;Keeping on the trend of breaking up with big tech (and smaller tech that wants to be big), I also decided to cancel the &lt;a href=&#34;https://www.cloaked.com/&#34; rel=&#34;external&#34;&gt;Cloaked↗&lt;/a&gt; subscription that I&#39;d been using to generate unique identities for all of my online accounts. I liked how easy Cloaked made it to create fully functional email addresses, usernames, passwords, phone numbers, and credit card numbers and tightly associate them with the sites or retailers where they were used. I didn&#39;t like how Cloaked was still missing basic password manager features (like tying credentials to a specific subdomain or enabling login MFA options other than email or SMS), how clumsy it was to send and receive email from those identities, or how the virtual credit card feature often just wouldn&#39;t load&lt;sup id=&#34;fnref:18&#34;&gt;&lt;a href=&#34;https://runtimeterror.dev/tech-refresh-2025/#fn:18&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;18&lt;/a&gt;&lt;/sup&gt;. These are issues that I could overlook immediately after Cloaked&#39;s public launch, but they became gradually more frustrating as time went on. Add to that the increasingly unresponsive customer support, overall lack of focus on improving the core features, and my growing concerns about being so tightly dependent upon a single service and I decided it was time to part ways.&lt;/p&gt;
&lt;p&gt;I opted to switch back to &lt;a href=&#34;https://bitwarden.com&#34; rel=&#34;external&#34;&gt;Bitwardden↗&lt;/a&gt; for managing my credentials. I was able to export my data&lt;sup id=&#34;fnref:19&#34;&gt;&lt;a href=&#34;https://runtimeterror.dev/tech-refresh-2025/#fn:19&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;19&lt;/a&gt;&lt;/sup&gt; from Cloaked, but it did take some massaging to get the data formatted correctly to import into Bitwarden. A big task was handling the distinction between usernames and email addresses; many of my Cloaked records only had one or the other, while Bitwarden often expected the email address to &lt;em&gt;be&lt;/em&gt; the username. It was a rather tedious, largely manual process to get all the identities set up with the appropriate field mappings.&lt;/p&gt;
&lt;p&gt;I had been a heavy user of Cloaked&#39;s support for using your own custom domains for the generated email addresses so the first step of my migration was to simply repoint the mail records for those domains from Cloaked to &lt;a href=&#34;https://forwardemail.net/en&#34; rel=&#34;external&#34;&gt;Forward Email↗&lt;/a&gt; and enable &amp;quot;catch all&amp;quot; email forwarding to an address I have with &lt;a href=&#34;https://fastmail.com&#34; rel=&#34;external&#34;&gt;Fastmail↗&lt;/a&gt;. That would allow me to continue to receive new emails sent to those existing identities (and avoid me needing to change the email addresses I had registered with some 400ish websites).&lt;/p&gt;
&lt;p&gt;In addition to handling incoming mail, Forward Email also supports outbound messaging. It even allows you to configure an outbound catch-all address, which lets you send email from any handle on your domain without needing to first create a mailbox or anything. Fastmail also supports sending mail through such wildcard addresses, which means I can very easily reply to messages sent to my email aliases without having to jump through any hoops. That&#39;s already a much more convenient setup than I was getting with Cloaked.&lt;/p&gt;
&lt;p&gt;Bitwarden has a built-in username generator, and it can also be connected to external services to generate email aliases. So I set that up to talk to the Forward Email API and I can generate functional email aliases right from my password manager, just like I did with Cloaked. I can even change the domain used with the generator on a per-identity basis, allowing me to distribute my aliases across multiple domains (another improvement over Cloaked, which only supported changing domains on an account-wide basis).&lt;/p&gt;
&lt;p&gt;I couldn&#39;t find another cost-effective solution for generating a lot of functional phone numbers similar to what Cloaked provided me, but I didn&#39;t want to give all these random sites my actual phone number either. I compromised by getting a secondary eSIM line through &lt;a href=&#34;https://tello.com/buy/custom_plans&#34; rel=&#34;external&#34;&gt;Tello↗&lt;/a&gt; with no data and 100 minutes for $5 per month. I use that number for when I&#39;m required to give one but don&#39;t want to use my personal number, and I can periodically dump it for a new number with little impact as needed. Having one throw-away number isn&#39;t nearly as useful as generating dozens of unique ones on an as-needed basis but it still provides a little better privacy and control than I would get without such a solution.&lt;/p&gt;
&lt;p&gt;And, finally, for protecting my payment information I switched back to &lt;a href=&#34;https://privacy.com&#34; rel=&#34;external&#34;&gt;Privacy.com↗&lt;/a&gt;, another service I relied upon in the pre-Cloaked days. While it was handy to be able to generate and manage virtual cards alongside Cloaked identities, the payment service was perhaps the most unreliable of their offerings. I frequently had transactions decline for no apparent reason, cards would fail to generate when I needed them, and trying to search for existing cards or transactions was a frequently frustrating experience. By contrast, Privacy was rock solid for years before I tried Cloaked and  it has continued to be smooth and reliable in the months since I switched back. About the only negative about Privacy is that it doesn&#39;t support funding virtual cards with credit cards; you have to use a debit card or checking account connection.&lt;/p&gt;
&lt;p&gt;Ditching Cloaked wasn&#39;t easy, but I&#39;m glad to have done it and regained a bit more control in the process.&lt;/p&gt;
&lt;h2 id=&#34;conclusion&#34;&gt;
	Conclusion
	&lt;a class=&#34;hlink&#34; href=&#34;#conclusion&#34;&gt;&lt;i class=&#34;fa-solid fa-link&#34;&gt;&lt;/i&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;Looking back, I guess I&#39;m just continuing my recent trend of looking for ways to decrease my dependence on giant corporations . I want to avoid putting all my eggs in a single basket wherever I can, and to maintain the ability to switch between different solutions without having to lose anything significant in the process.&lt;/p&gt;
&lt;p&gt;I want to be interested in and excited by technology again, and these recent changes have helped me reignite that passion.&lt;/p&gt;
&lt;p&gt;I&#39;d like to eventually write up more details on some of these components (especially Chezmoi) on the blog... but it took me a month to write this post so we&#39;ll see if I follow through on that.&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;In the words of &lt;a href=&#34;https://www.wheresyoured.at/never-forgive-them/&#34; rel=&#34;external&#34;&gt;Ed Zitron↗&lt;/a&gt;, &amp;quot;I will never forgive these people for what they’ve done to the computer.&amp;quot;&amp;#160;&lt;a href=&#34;https://runtimeterror.dev/tech-refresh-2025/#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:2&#34;&gt;
&lt;p&gt;Maybe technology isn&#39;t &lt;em&gt;all&lt;/em&gt; going to shit.&amp;#160;&lt;a href=&#34;https://runtimeterror.dev/tech-refresh-2025/#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:3&#34;&gt;
&lt;p&gt;I KEEP ACTIVATING CAPS LOCK (Chromebooks don&#39;t believe in caps lock).&amp;#160;&lt;a href=&#34;https://runtimeterror.dev/tech-refresh-2025/#fnref:3&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:4&#34;&gt;
&lt;p&gt;And mess.&amp;#160;&lt;a href=&#34;https://runtimeterror.dev/tech-refresh-2025/#fnref:4&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:5&#34;&gt;
&lt;p&gt;For instance, you can change the keyboard backlighting by writing hex color values to &lt;code&gt;/dev/hidraw0&lt;/code&gt; - or use a &lt;a href=&#34;https://github.com/amospalla/reform/tree/main/mleds&#34; rel=&#34;external&#34;&gt;python script↗&lt;/a&gt; to enable a matrix-style animation that looks seriously crispy in the dark.&amp;#160;&lt;a href=&#34;https://runtimeterror.dev/tech-refresh-2025/#fnref:5&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:6&#34;&gt;
&lt;p&gt;And I even typed out substantial portions of this very post on the Pocket&#39;s compact keyboard.&amp;#160;&lt;a href=&#34;https://runtimeterror.dev/tech-refresh-2025/#fnref:6&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:7&#34;&gt;
&lt;p&gt;If rather opinionated.&amp;#160;&lt;a href=&#34;https://runtimeterror.dev/tech-refresh-2025/#fnref:7&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:8&#34;&gt;
&lt;p&gt;The config files and settings and whatnot that I use to tailor my workspace to me, so called because the names of these files (or the directories in which they live) are typically prefixed with a &lt;code&gt;.&lt;/code&gt; to mark them as &amp;quot;hidden&amp;quot; on a Linux system.&amp;#160;&lt;a href=&#34;https://runtimeterror.dev/tech-refresh-2025/#fnref:8&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:9&#34;&gt;
&lt;p&gt;Nix doesn&#39;t play nice with an immutable system, where it isn&#39;t able to write to the &lt;code&gt;/nix/&lt;/code&gt; directory path. I explored some hacks and workarounds for making it work (such as symlinking &lt;code&gt;/nix&lt;/code&gt; to &lt;code&gt;/var/nix/&lt;/code&gt;) but ultimately it was a hack that detracted from the elegance of Bluefin.&amp;#160;&lt;a href=&#34;https://runtimeterror.dev/tech-refresh-2025/#fnref:9&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:10&#34;&gt;
&lt;p&gt;Which I pronounce (&lt;em&gt;very&lt;/em&gt; incorrectly) like &amp;quot;sham-wow.&amp;quot;&amp;#160;&lt;a href=&#34;https://runtimeterror.dev/tech-refresh-2025/#fnref:10&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:11&#34;&gt;
&lt;p&gt;Okay, I could (and did) run various other browsers within the Linux environment, but those were hindered by a lack of system integration and a bit of a performance penalty.&amp;#160;&lt;a href=&#34;https://runtimeterror.dev/tech-refresh-2025/#fnref:11&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:12&#34;&gt;
&lt;p&gt;A rowdy pair of Boston terriers.&amp;#160;&lt;a href=&#34;https://runtimeterror.dev/tech-refresh-2025/#fnref:12&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:13&#34;&gt;
&lt;p&gt;Also Ente&#39;s mascot is a cute duck, and &amp;quot;Ente&amp;quot; is the German word for &amp;quot;duck&amp;quot;. So that&#39;s another pretty big reason.&amp;#160;&lt;a href=&#34;https://runtimeterror.dev/tech-refresh-2025/#fnref:13&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:14&#34;&gt;
&lt;p&gt;It is possible to remap the keys to make Helix more closely match (Neo)Vi(m) but that kind of defeats the purpose.&amp;#160;&lt;a href=&#34;https://runtimeterror.dev/tech-refresh-2025/#fnref:14&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:15&#34;&gt;
&lt;p&gt;Yes, dear astute reader, I did &lt;a href=&#34;/self-hosting-a-search-engine/&#34;&gt;experiment a bit with SearXNG back in 2024&lt;/a&gt;, too.&amp;#160;&lt;a href=&#34;https://runtimeterror.dev/tech-refresh-2025/#fnref:15&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:16&#34;&gt;
&lt;p&gt;Those preferences are only stored locally, in the user&#39;s browser. There are no accounts, logins, or other identifiers on the server side.&amp;#160;&lt;a href=&#34;https://runtimeterror.dev/tech-refresh-2025/#fnref:16&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:17&#34;&gt;
&lt;p&gt;I realized that maybe I goofed in adding mine to the public instances list when all of a sudden all of my configured engines started returning a middle finger instead of the results I sought. The sudden increase in traffic definitely seems to have stepped over the abuse detection thresholds. Switching to less-good engines by default and only enabling the better ones in my user preferences seems to have helped find a better balance.&amp;#160;&lt;a href=&#34;https://runtimeterror.dev/tech-refresh-2025/#fnref:17&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:18&#34;&gt;
&lt;p&gt;There was also that time when changing the funding source for the virtual cards caused a $1,000 pre-auth &lt;em&gt;for each card&lt;/em&gt; and wound up maxing out my credit line until the authorizations finally cleared several days later.&amp;#160;&lt;a href=&#34;https://runtimeterror.dev/tech-refresh-2025/#fnref:18&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:19&#34;&gt;
&lt;p&gt;Of course, the Cloaked export only included the username, email address, and password for each identity. MFA codes, phone numbers, notes, custom fields, email messages, text messages, call histories, or virtual credit card transaction records. Cloaked provides no way to take that data with you, which is a little insane. I was pretty bitter about having to leave behind two years of email receipts and order confirmations, but ultimately this just reaffirmed my decision to move to a solution where I had a bit more ownership of my data.&amp;#160;&lt;a href=&#34;https://runtimeterror.dev/tech-refresh-2025/#fnref:19&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</content>
    </entry>
    
    <entry>
        <title>Turning an Android Tablet Into a TRMNL Mirror</title>
        <link href="https://runtimeterror.dev/turning-an-android-tablet-into-a-trmnl-mirror/" rel="alternate"/>
        <id>https://runtimeterror.dev/turning-an-android-tablet-into-a-trmnl-mirror/</id>
        <published>2025-06-29T00:00:00+00:00</published>
        <updated>2025-06-29T00:00:00+00:00</updated>
        <author>
          <name>John Wq</name>
          <email>jwq@omg.lol</email>
        </author>
        <category term="Android"/><category term="Apps"/><category term="Tech"/><category term="Trmnl"/>
        <summary type="text">I turned an unused Android tablet into a pretty decent TRMNL impersonator.</summary>
        <content type="html">&lt;p&gt;I&#39;ve been really enjoying my TRMNL e-ink display, and have been thinking seriously about getting another one (or two!) to have those glanceable displays in more locations in my house. While I wait for my little referral link to get enough clicks to cover another TRMNL, I did find a way to turn an unused Android tablet into a pretty decent TRMNL impersonator.&lt;/p&gt;
&lt;p&gt;&lt;div class=&#34;image-container&#34;&gt;
	&lt;picture&gt;
		&lt;a href=&#34;trmnl-tablet1.webp&#34;
			target=&#34;_blank&#34;
			rel=&#34;noopener noreferrer&#34;&gt;

	
		
			
			
				
					
						
							
							
							
						
					
						
							
							
							
						
					
						
							
							
							
						
					
						
					
						
					
						
					
				

				
				
				
				&lt;noscript&gt;
					&lt;img 
						class=&#34;post-image&#34;
						srcset=&#34;/turning-an-android-tablet-into-a-trmnl-mirror/trmnl-tablet1_hu_e7a86a8a575f7802.webp 320w, /turning-an-android-tablet-into-a-trmnl-mirror/trmnl-tablet1_hu_2a4af3c8c2fe7581.webp 640w, /turning-an-android-tablet-into-a-trmnl-mirror/trmnl-tablet1_hu_17f375f35aac5b1a.webp 960w, /turning-an-android-tablet-into-a-trmnl-mirror/trmnl-tablet1_hu_83a0e6faa755024f.webp 1200w&#34;
						src=&#34;/turning-an-android-tablet-into-a-trmnl-mirror/trmnl-tablet1_hu_83a0e6faa755024f.webp&#34;alt=&#34;The Tempest Weather plugin for TRMNL displayed on an Android tablet.&#34; title=&#34;The Tempest Weather plugin for TRMNL displayed on an Android tablet.&#34; 
						loading=&#34;lazy&#34;
					/&gt;
				&lt;/noscript&gt;

				&lt;img
					class=&#34;post-image lazyload show-if-js&#34;
					data-srcset=&#34;/turning-an-android-tablet-into-a-trmnl-mirror/trmnl-tablet1_hu_e7a86a8a575f7802.webp 320w, /turning-an-android-tablet-into-a-trmnl-mirror/trmnl-tablet1_hu_2a4af3c8c2fe7581.webp 640w, /turning-an-android-tablet-into-a-trmnl-mirror/trmnl-tablet1_hu_17f375f35aac5b1a.webp 960w, /turning-an-android-tablet-into-a-trmnl-mirror/trmnl-tablet1_hu_83a0e6faa755024f.webp 1200w&#34;
					data-src=&#34;/turning-an-android-tablet-into-a-trmnl-mirror/trmnl-tablet1.webp&#34;
					src=&#34;data:image/webp;base64,UklGRqoDAABXRUJQVlA4IJ4DAABQGwCdASqAAGAAPok2jkQioY4uslwVhEJ6QDJwmDLtRiqlOixcpRhlZc3YnKAtkD3jy9qmAJbQxS2UWsesBhCNKeG8W6kMlnOgNX86KavpXFvGhwNOaf42tQCyj7prY6BpnrYaqEcuhtC64Md7ZyuEWkSWxQB5szSmTJ3AVDvKTimOm5l34E69efzXAUOiFfjfeBie1a2waj7ZGdBpxT64azL6d/HTXUnYhyzDNmoaj8V9pUFLwrpfXxs4QUWIlV1IVO50LZSJcUeuN1bGjFnczdmb4AW7d8PU1hH7XqRxNBn1AAD&amp;#43;rWP2P01QPGL2DW/EjsZXOVIg/6Nzfl23ucu&amp;#43;PI9dmhLRYWISHuuVTb5rBUL0YVwuoEZev6b6FBrfTE7H5zJab2RVrSWjC4FdWQ0Bjx9jEqJYYSIzKNwddF3EmvF&amp;#43;1Tb72oSmhVIQfYt5sMJifL55VtT15yDv56gTDk4L6zCMsS0OpnpAFXRaS36dAb6yXNV4mI4BL&amp;#43;SDhVqcVAtEwbnAzRzJD0Zr5U40seDsMv2ls5aSzSnLfe0V7V1fXhpnsNRiF8LMkM/iG/aMS/9/00gBeF&amp;#43;jEKe&amp;#43;/UUJHW4VF4inBUVijHvlVgCYVZdC9xJARakTzzv1&amp;#43;8ZJDig5LVTIHmrf/46eEfW6h2LxTac60LduZDf5U1RHG7JVZ&amp;#43;qMDrhUkZgLkcw2xURRnkqV18M6P27oVhg3aOSG4y7&amp;#43;bkkjM8b/L3XUjhKtLw0cDOiUNfIdiPUiNp1tX1eB1Wsfug461rFFi9fCXqsdlNBhWwjci1fW9ZKqVcEz7zV6DuT34V1dKNi8ypcH2mw/FzYjme4sMEtTlKsGqTGvmor1/u8DDRHel53YphFt0Gat5WdcDcjYvklbXOHIUn0TRVX&amp;#43;CRxQ180hw1yaoebDKSUKI5b6Yi6iDlNPEoIMBGIKLMkpwvGUE2ag6yidBL4OcM9vUH7KbcKdiF5O7h4UKhPXbLOma924T7t&amp;#43;EZXhMR/dGcrQCQ3BxAN8EhOHrXAaxvJpB86zePIen&amp;#43;vHjypY4rFES0iYkV0cM2sHdjcTyTcCdhfW6iaQW6suhs8lr4oCPDZg1WAdEl&amp;#43;NujKTxspNysSaHYa&amp;#43;qg714nglliqfFs212dXfs&amp;#43;7yYqQy7/hGnUGqSAkbJMimGwAcXrSdbbIGOusuCviHbNjjakjHwkg6xqCV5hAExHVJDkIC0PE27iF2vPe1q4lfFnLLPzVBIg222zNQAA==&#34;
					data-sizes=&#34;auto&#34;
					width=&#34;1200&#34;
					height=&#34;903&#34;alt=&#34;The Tempest Weather plugin for TRMNL displayed on an Android tablet.&#34; title=&#34;The Tempest Weather plugin for TRMNL displayed on an Android tablet.&#34; 
					loading=&#34;lazy&#34;
				/&gt;&lt;/a&gt;
	&lt;/picture&gt;
	
&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;A recent article in the &lt;a href=&#34;https://help.usetrmnl.com/en/articles/11647459-trmnl-for-ipad&#34; rel=&#34;external&#34;&gt;TRMNL Help Center↗&lt;/a&gt; described how to mirror a TRMNL display to an iPad, and I quickly realized that I could point &lt;em&gt;any&lt;/em&gt; browser to &lt;a href=&#34;https://usetrmnl.com/mirror/&#34; rel=&#34;external&#34;&gt;usetrmnl.com/mirror/↗&lt;/a&gt;, enter my TRMNL device&#39;s API token, and mirror the screen that way - though the tablet stubbornly refused to put the browser into a full-screen mode.&lt;/p&gt;
&lt;p&gt;I found a solution for that in the open-source &lt;a href=&#34;https://github.com/cylonid/NativeAlphaForAndroid&#34; rel=&#34;external&#34;&gt;Native Alpha↗&lt;/a&gt; app, which makes it easy to install any website as a progressive web app &lt;em&gt;and&lt;/em&gt; offers a number of other handy-for-this-purpose features like keeping the screen from going to sleep.&lt;/p&gt;
&lt;p&gt;&lt;div class=&#34;image-container&#34;&gt;
	&lt;picture&gt;
		&lt;a href=&#34;trmnl-tablet.webp&#34;
			target=&#34;_blank&#34;
			rel=&#34;noopener noreferrer&#34;&gt;

	
		
			
			
				
					
						
							
							
							
						
					
						
							
							
							
						
					
						
							
							
							
						
					
						
					
						
					
						
					
				

				
				
				
				&lt;noscript&gt;
					&lt;img 
						class=&#34;post-image&#34;
						srcset=&#34;/turning-an-android-tablet-into-a-trmnl-mirror/trmnl-tablet_hu_ad8af527b6f1a75c.webp 320w, /turning-an-android-tablet-into-a-trmnl-mirror/trmnl-tablet_hu_364892c444cd3aac.webp 640w, /turning-an-android-tablet-into-a-trmnl-mirror/trmnl-tablet_hu_36a11d3a6f084c3e.webp 960w, /turning-an-android-tablet-into-a-trmnl-mirror/trmnl-tablet_hu_d00c34f92adafa93.webp 1173w&#34;
						src=&#34;/turning-an-android-tablet-into-a-trmnl-mirror/trmnl-tablet_hu_d00c34f92adafa93.webp&#34;alt=&#34;The Android tablet displaying the Lumon Wellness plugin for TRMNL with a message that &amp;quot;Your Outie is kind.&amp;quot;&#34; title=&#34;The Android tablet displaying the Lumon Wellness plugin for TRMNL with a message that &amp;quot;Your Outie is kind.&amp;quot;&#34; 
						loading=&#34;lazy&#34;
					/&gt;
				&lt;/noscript&gt;

				&lt;img
					class=&#34;post-image lazyload show-if-js&#34;
					data-srcset=&#34;/turning-an-android-tablet-into-a-trmnl-mirror/trmnl-tablet_hu_ad8af527b6f1a75c.webp 320w, /turning-an-android-tablet-into-a-trmnl-mirror/trmnl-tablet_hu_364892c444cd3aac.webp 640w, /turning-an-android-tablet-into-a-trmnl-mirror/trmnl-tablet_hu_36a11d3a6f084c3e.webp 960w, /turning-an-android-tablet-into-a-trmnl-mirror/trmnl-tablet_hu_d00c34f92adafa93.webp 1173w&#34;
					data-src=&#34;/turning-an-android-tablet-into-a-trmnl-mirror/trmnl-tablet.webp&#34;
					src=&#34;data:image/webp;base64,UklGRsoCAABXRUJQVlA4IL4CAACwFwCdASqAAGAAPpE8jkQiog3V8k4VhIJ6QDMHu5Dz8mUBBXKC212LumE/FP5At5hGih89hRAWP0HH/c6YElqBjzT7EZJYn1hmMk3vL/nrg8uqL4VARMTBAw4WFd&amp;#43;q8WFEYzKXT1iDPF56mu1nUhWovI5teAhUL4V6vA&amp;#43;AiEsVWnGNoa4s&amp;#43;UN0VCaAiqJbFzvWHolaS7bFoOkPDWTdeWUAA0z&amp;#43;&amp;#43;KFnJHV9y3bGTqaitVwAF/JkLpAtqu7neNkLJyD2MBgnkAAA/swViN14TTycwpmfNjKzeYEvvZLrs1CpjrX4WIgKT4jU6/rUX52oI/PahhG8rGw6axP&amp;#43;f2qmARhzPEfDRWotSxbdYJoQel0bAh&amp;#43;9jY4SOjbRakinH7Gs1Hj62c/9o0G60BAT7rkRTHHfWpDyDgIxJU9vyiYfZKPVShSzVm2idF6sP/YcG&amp;#43;qrmBWZmFnV57UToSHUdfIJJ5FIZLWtLTAb9JYCrt1b6aut1eXbxwrG3w5q38TKY19oUFubXy7TCZSB/dd6MQrgCi49R/h8GXfp1SNjy9bacfDylJdxmazl4VwoNvVV65DrY9pzuTyjxnzzAVKl6CnfsHAXNvfq2UOU7/YO0ry215aA0wgvANssz4&amp;#43;YI7y1qh79U9bks8gfMcRGBJ2lxUXXIdU0Y2DZl5PfrwfW4jS/943vllRVDcJKkrjXmFrupnEhgbYuK8cTR5aMrf488b/t/CUwY1uRW6beOR2JeM2zMLTDMmRMEMIpLhhDwrTz42gG59KO/fKKYy2dOf&amp;#43;zKvTJmiWg9ahq5RE3XlUWokF&amp;#43;9xSndpSR6o&amp;#43;c24AAhAL&amp;#43;UFGnW9GtLe1&amp;#43;w4MCQQpmbtMgt3V&amp;#43;S2JnV64xjWoAtA/SWZe1arQLeiC2/Jnxy1Sr&amp;#43;UbpfT2HoWVMQOvMomFdfVWEH9zN4NEg&amp;#43;UVopSamojloAAA=&#34;
					data-sizes=&#34;auto&#34;
					width=&#34;1173&#34;
					height=&#34;882&#34;alt=&#34;The Android tablet displaying the Lumon Wellness plugin for TRMNL with a message that &amp;quot;Your Outie is kind.&amp;quot;&#34; title=&#34;The Android tablet displaying the Lumon Wellness plugin for TRMNL with a message that &amp;quot;Your Outie is kind.&amp;quot;&#34; 
					loading=&#34;lazy&#34;
				/&gt;&lt;/a&gt;
	&lt;/picture&gt;
	
&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;I&#39;m pretty pleased with how well it works, and getting to breathe new purpose into a discarded device is always a plus.&lt;/p&gt;
</content>
    </entry>
    
    <entry>
        <title>Forget GitHub, Git Forgejo</title>
        <link href="https://runtimeterror.dev/forget-github-git-forgejo/" rel="alternate"/>
        <id>https://runtimeterror.dev/forget-github-git-forgejo/</id>
        <published>2025-04-05T00:00:00+00:00</published>
        <updated>2025-04-05T00:00:00+00:00</updated>
        <author>
          <name>John Wq</name>
          <email>jwq@omg.lol</email>
        </author>
        <category term="Apps"/><category term="Selfhosting"/>
        <summary type="text">I've moved all of my personal code (and automated workflows) from GitHub to a new self-hosted Forgejo instance.</summary>
        <content type="html">&lt;p&gt;I&#39;ve been &lt;a href=&#34;/gitea-self-hosted-git-server/&#34;&gt;running my own personal git server&lt;/a&gt; for a few years now, starting with Gitea&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;https://runtimeterror.dev/forget-github-git-forgejo/#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; and then moving to &lt;a href=&#34;https://forgejo.org/&#34; rel=&#34;external&#34;&gt;Forgejo↗&lt;/a&gt; (&amp;quot;for-jay-oh&amp;quot;). Until recently, though, that was primarily a mirror of the code I was maintaining on GitHub. And then, well, &lt;em&gt;2025 happened&lt;/em&gt; and I had a sudden urge to reduce or remove my reliance on US-based companies and services while taking more ownership over my stuff.&lt;/p&gt;
&lt;p&gt;So I scrapped my old and barely-maintained instance in favor of a shiny new one,  hosted in Germany with &lt;a href=&#34;https://hetzner.com/&#34; rel=&#34;external&#34;&gt;Hetzner↗&lt;/a&gt; at &lt;a href=&#34;https://git.vim.wtf&#34; rel=&#34;external&#34;&gt;git.vim.wtf↗&lt;/a&gt;. It sits behind &lt;a href=&#34;https://anubis.techaro.lol/&#34; rel=&#34;external&#34;&gt;Anubis↗&lt;/a&gt; to shield it from unscrupulous AI crawlers&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;https://runtimeterror.dev/forget-github-git-forgejo/#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt; that want to suck up my code (and use up my limited resources&lt;sup id=&#34;fnref:3&#34;&gt;&lt;a href=&#34;https://runtimeterror.dev/forget-github-git-forgejo/#fn:3&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;3&lt;/a&gt;&lt;/sup&gt;). I (of course) have it connected to my &lt;a href=&#34;/secure-networking-made-simple-with-tailscale/&#34;&gt;tailscale&lt;/a&gt; network and use &lt;a href=&#34;/tailscale-ssh-serve-funnel/#tailscale-ssh&#34;&gt;Tailscale SSH&lt;/a&gt; for my SSH-based git interactions - which means I don&#39;t have to expose the server&#39;s SSH interface to the world. My setup also leverages &lt;a href=&#34;https://github.com/tailscale/tailscale/tree/main/cmd/tsidp&#34; rel=&#34;external&#34;&gt;Tailscale&#39;s handy OIDC provider, &lt;code&gt;tsidp&lt;/code&gt;↗&lt;/a&gt; for quick-and-easy authentication when accessed from my tailnet (while not exposing a standard login form for bots to hammer).&lt;/p&gt;
&lt;p&gt;I spent a few weeks living in the new environment, and I have now migrated all of my current projects over to the new spot (and archived the sources on GitHub). It took a little bit of fiddling to get all the GitHub Actions workflows converted to Forgejo Actions&lt;sup id=&#34;fnref:4&#34;&gt;&lt;a href=&#34;https://runtimeterror.dev/forget-github-git-forgejo/#fn:4&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;4&lt;/a&gt;&lt;/sup&gt; , but that&#39;s all sorted now.&lt;/p&gt;
&lt;p&gt;A few project highlights:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;https://git.vim.wtf/wq/runtimeterror&#34; rel=&#34;external&#34;&gt;runtimeterror↗&lt;/a&gt;&lt;/strong&gt;, which powers my &lt;a href=&#34;https://runtimeterror.dev&#34; rel=&#34;external&#34;&gt;other blog↗&lt;/a&gt;, including &lt;a href=&#34;/further-down-the-bunny-hole/&#34;&gt;deploying it to Bunny CDN&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;https://git.vim.wtf/wq/web&#34; rel=&#34;external&#34;&gt;lolz↗&lt;/a&gt;&lt;/strong&gt;, which manages my &lt;a href=&#34;https://home.omg.lol/referred-by/jwq&#34; rel=&#34;external&#34;&gt;omg.lol↗&lt;/a&gt; &lt;a href=&#34;https://jwq.lol/&#34; rel=&#34;external&#34;&gt;profile↗&lt;/a&gt; and &lt;a href=&#34;https://jwq.lol/now&#34; rel=&#34;external&#34;&gt;/now↗&lt;/a&gt; pages (and &lt;a href=&#34;/display-tempest-weather-static-site/&#34;&gt;fetches near-realtime weather data&lt;/a&gt; for the profile page).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;https://git.vim.wtf/wq/notes&#34; rel=&#34;external&#34;&gt;notes↗&lt;/a&gt;&lt;/strong&gt;, which &lt;a href=&#34;/publish-silverbullet-notes-quartz/&#34;&gt;publishes selected SilverBullet notes&lt;/a&gt; from a private repo to &lt;a href=&#34;https://notes.runtimeterror.dev&#34; rel=&#34;external&#34;&gt;notes.runtimeterror.dev↗&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;https://git.vim.wtf/wq/packer-proxmox-templates&#34; rel=&#34;external&#34;&gt;packer-proxmox-templates↗&lt;/a&gt;&lt;/strong&gt;, which &lt;a href=&#34;/automate-packer-builds-github-actions/&#34;&gt;builds fresh VM templates for my homelab&lt;/a&gt; each week.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;https://git.vim.wtf/compositions&#34; rel=&#34;external&#34;&gt;compositions↗&lt;/a&gt;&lt;/strong&gt;, where I track the Docker Compose configs for my container workloads.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I&#39;ll still hang on to my GitHub account for collaborating with other open source projects, but all of my personal work will be on &lt;a href=&#34;https://git.vim.wtf&#34; rel=&#34;external&#34;&gt;git.vim.wtf↗&lt;/a&gt; going forward.&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;Forgejo &lt;a href=&#34;https://forgejo.org/2022-12-15-hello-forgejo/&#34; rel=&#34;external&#34;&gt;forked from Gitea↗&lt;/a&gt; after the former project was taken over by a for-profit company. That seems to have been the right move, as that project is now &lt;a href=&#34;https://social.gitea.io/@gitea/114275472231870857&#34; rel=&#34;external&#34;&gt;leaning into AI bullshit↗&lt;/a&gt;.&amp;#160;&lt;a href=&#34;https://runtimeterror.dev/forget-github-git-forgejo/#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:2&#34;&gt;
&lt;p&gt;Are there &lt;em&gt;scrupulous&lt;/em&gt; AI crawlers? It sure doesn&#39;t seem like it.&amp;#160;&lt;a href=&#34;https://runtimeterror.dev/forget-github-git-forgejo/#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:3&#34;&gt;
&lt;p&gt;In addition to just consuming bandwidth, aggressive crawlers can quickly &lt;a href=&#34;https://blog.nytsoi.net/2025/03/01/obliterated-by-ai&#34; rel=&#34;external&#34;&gt;use up a smaller Forgejo server&#39;s disk space↗&lt;/a&gt; as archive downloads get created on access. That burned me a few times on the previous deployment.&amp;#160;&lt;a href=&#34;https://runtimeterror.dev/forget-github-git-forgejo/#fnref:3&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:4&#34;&gt;
&lt;p&gt;I&#39;m writing another post on those details for &lt;a href=&#34;https://runtimeterror.dev&#34; rel=&#34;external&#34;&gt;the other blog↗&lt;/a&gt;, hopefully I&#39;ll finish that up &lt;em&gt;soonish&lt;/em&gt;.&amp;#160;&lt;a href=&#34;https://runtimeterror.dev/forget-github-git-forgejo/#fnref:4&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</content>
    </entry>
    
    <entry>
        <title>Github Powered Feed Aggregator With Tinyfeed</title>
        <link href="https://runtimeterror.dev/github-powered-feed-aggregator-with-tinyfeed/" rel="alternate"/>
        <id>https://runtimeterror.dev/github-powered-feed-aggregator-with-tinyfeed/</id>
        <published>2025-01-15T00:00:00+00:00</published>
        <updated>2025-01-15T00:00:00+00:00</updated>
        <author>
          <name>John Wq</name>
          <email>jwq@omg.lol</email>
        </author>
        <category term="Apps"/><category term="Selfhosting"/>
        <summary type="text">A GitHub Actions workflow that uses tinyfeed to fetch a list of web feeds and serves the result with GitHub Pages.</summary>
        <content type="html">&lt;p&gt;I recently learned about &lt;a href=&#34;https://github.com/TheBigRoomXXL/tinyfeed&#34; rel=&#34;external&#34;&gt;tinyfeed↗&lt;/a&gt;, a command-line RSS/Atom/JSON feed fetcher written in Go. It&#39;s able to quickly fetch a list of feeds and display them on a single static HTML page. That&#39;s exactly the sort of feed aggregator I want - a simple and clean list of links to recent posts so I can read the ones I want in their original format and styling.&lt;/p&gt;
&lt;p&gt;I did some tinkering and set up a &lt;a href=&#34;https://github.com/vimwtf/feed-me&#34; rel=&#34;external&#34;&gt;GitHub repo↗&lt;/a&gt; with an Actions workflow to run &lt;code&gt;tinyfeed&lt;/code&gt; on a schedule and serve the resulting &lt;code&gt;index.html&lt;/code&gt; with GitHub Pages.&lt;/p&gt;
&lt;p&gt;&lt;div class=&#34;image-container&#34;&gt;
	&lt;picture&gt;
		&lt;a href=&#34;screenshot.webp&#34;
			target=&#34;_blank&#34;
			rel=&#34;noopener noreferrer&#34;&gt;

	
		
			
			
				
					
						
							
							
							
						
					
						
							
							
							
						
					
						
							
							
							
						
					
						
					
						
					
						
					
				

				
				
				
				&lt;noscript&gt;
					&lt;img 
						class=&#34;post-image&#34;
						srcset=&#34;/github-powered-feed-aggregator-with-tinyfeed/screenshot_hu_f50012710c6f17f2.webp 320w, /github-powered-feed-aggregator-with-tinyfeed/screenshot_hu_de0f203375e37daa.webp 640w, /github-powered-feed-aggregator-with-tinyfeed/screenshot_hu_8344732ab7893688.webp 960w, /github-powered-feed-aggregator-with-tinyfeed/screenshot_hu_eafc94d6eb9d08be.webp 1200w&#34;
						src=&#34;/github-powered-feed-aggregator-with-tinyfeed/screenshot_hu_eafc94d6eb9d08be.webp&#34;alt=&#34;A dark-themed feed aggregator displays a list of blog posts and articles with titles, publication dates, and sources. Examples include &amp;quot;Phishing False Alarm&amp;quot; (schneier.com, 2025-01-15) and &amp;quot;Microsoft: Happy 2025. Here’s 161 Security Updates&amp;quot; (krebsonsecurity.com, 2025-01-14).&#34; title=&#34;A dark-themed feed aggregator displays a list of blog posts and articles with titles, publication dates, and sources. Examples include &amp;quot;Phishing False Alarm&amp;quot; (schneier.com, 2025-01-15) and &amp;quot;Microsoft: Happy 2025. Here’s 161 Security Updates&amp;quot; (krebsonsecurity.com, 2025-01-14).&#34; 
						loading=&#34;lazy&#34;
					/&gt;
				&lt;/noscript&gt;

				&lt;img
					class=&#34;post-image lazyload show-if-js&#34;
					data-srcset=&#34;/github-powered-feed-aggregator-with-tinyfeed/screenshot_hu_f50012710c6f17f2.webp 320w, /github-powered-feed-aggregator-with-tinyfeed/screenshot_hu_de0f203375e37daa.webp 640w, /github-powered-feed-aggregator-with-tinyfeed/screenshot_hu_8344732ab7893688.webp 960w, /github-powered-feed-aggregator-with-tinyfeed/screenshot_hu_eafc94d6eb9d08be.webp 1200w&#34;
					data-src=&#34;/github-powered-feed-aggregator-with-tinyfeed/screenshot.webp&#34;
					src=&#34;data:image/webp;base64,UklGRrgBAABXRUJQVlA4IKwBAADwFACdASqAAHQAPqVKn0sjIagmIxK58QYUielt4F9JArg5AdU4GVN1iNWP6AshJrjO/hry5ze7m2PkS0T1xZECPc&amp;#43;JxYrAwPQlN2Y9D6GGSG6IkF/3GHhYLlyxHVaFNJWmhN5zApAlfZOWz9FmOePiYC&amp;#43;KBTfHA9O1jJu0raSdqs1sXg6Fjw1iBQ8f7LIwVIxQKo2n5jrbC&amp;#43;7tFDcr1z6w/SXFmo/7xkNkT2XgSfNIAAD&amp;#43;tFlKduWlykyeJVXFwRLiBGDybD5o8v2n&amp;#43;ga6iO1LxupzSVBmO/EXSrsYH0X5I2poyCrtZji0TeD5KA7rkfZtepVP&amp;#43;vQu1VwIEXpk75lEb09esBLmoVjLxEaUhaz1VKSbvcYAW2cge64PiMZqXgXESzX520Sm7Bw7ppJdPFuFoEwy3AGHHr5WsCYSlgnOSCMott9FEamU3yDDhY5xdXq8DT6xaoJIFgaheyG1VFlP4&amp;#43;QIimcry/&amp;#43;1VF0JGOG9EKaQtV1Uvb5DHY72fiocoGq8akNFjZNBjzwjVfho6Z0d4Suf4feoOhGsStDzMN9yU4Wu2zNiuiSBowAAAA==&#34;
					data-sizes=&#34;auto&#34;
					width=&#34;1200&#34;
					height=&#34;1087&#34;alt=&#34;A dark-themed feed aggregator displays a list of blog posts and articles with titles, publication dates, and sources. Examples include &amp;quot;Phishing False Alarm&amp;quot; (schneier.com, 2025-01-15) and &amp;quot;Microsoft: Happy 2025. Here’s 161 Security Updates&amp;quot; (krebsonsecurity.com, 2025-01-14).&#34; title=&#34;A dark-themed feed aggregator displays a list of blog posts and articles with titles, publication dates, and sources. Examples include &amp;quot;Phishing False Alarm&amp;quot; (schneier.com, 2025-01-15) and &amp;quot;Microsoft: Happy 2025. Here’s 161 Security Updates&amp;quot; (krebsonsecurity.com, 2025-01-14).&#34; 
					loading=&#34;lazy&#34;
				/&gt;&lt;/a&gt;
	&lt;/picture&gt;
	
&lt;/div&gt;&lt;/p&gt;
&lt;script src=&#34;https://gist.runtimeterror.dev/john/b5080d120f36465ca028643a82a5dc27.js?dark&#34;&gt;&lt;/script&gt;
&lt;p&gt;I&#39;m pretty happy with my new feed aggregator!&lt;/p&gt;
</content>
    </entry>
    
    <entry>
        <title>A Ghostty in My Machine</title>
        <link href="https://runtimeterror.dev/a-ghostty-in-my-machine/" rel="alternate"/>
        <id>https://runtimeterror.dev/a-ghostty-in-my-machine/</id>
        <published>2024-12-26T00:00:00+00:00</published>
        <updated>2024-12-26T00:00:00+00:00</updated>
        <author>
          <name>John Wq</name>
          <email>jwq@omg.lol</email>
        </author>
        <category term="Apps"/><category term="Tech"/>
        <summary type="text">Remember earlier this week when I excitedly shared about how I had changed what terminal emulator I was using? Well I just swapped to a different terminal emulator. Again.</summary>
        <content type="html">&lt;p&gt;Remember earlier this week when I &lt;a href=&#34;/a-software-stack-shakeup/&#34;&gt;excitedly shared&lt;/a&gt; about how I had changed changed what terminal emulator I was using?&lt;/p&gt;
&lt;p&gt;Right, well, I just swapped to a different terminal emulator, &lt;strong&gt;again&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;I&#39;m now using &lt;a href=&#34;https://ghostty.org/&#34; rel=&#34;external&#34;&gt;Ghostty↗&lt;/a&gt;, &lt;em&gt;&amp;quot;a fast, feature-rich, and cross-platform terminal emulator that uses platform-native UI and GPU acceleration&amp;quot;&lt;/em&gt; from &lt;a href=&#34;https://mitchellh.com/&#34; rel=&#34;external&#34;&gt;Mitchell Hashimoto↗&lt;/a&gt;. I&#39;ve followed his &lt;a href=&#34;https://mitchellh.com/ghostty&#34; rel=&#34;external&#34;&gt;sneak-peeks and updates↗&lt;/a&gt; over the last couple of years, and was thrilled to see the first public release went live earlier today.&lt;/p&gt;
&lt;p&gt;A few things really drew me to Ghostty:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;It&#39;s written in &lt;a href=&#34;https://ziglang.org/&#34; rel=&#34;external&#34;&gt;Zig↗&lt;/a&gt; which sounds pretty fancy.&lt;/li&gt;
&lt;li&gt;It uses platform-native GUI bits so it looks pretty (and fits in with other apps) on MacOS and Linux.&lt;/li&gt;
&lt;li&gt;It uses Nix for the build environment which is very up my alley.&lt;/li&gt;
&lt;li&gt;It was developed with a &lt;a href=&#34;https://ghostty.org/docs/config#zero-configuration-philosophy&#34; rel=&#34;external&#34;&gt;Zero Configuration Philosophy↗&lt;/a&gt;:&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;Ghostty is designed to work out of the box with no configuration for most users. Ghostty has sensible defaults, embeds a default font (JetBrains Mono), has built-in nerd fonts, and more. We are constantly challenging ourself as a project to eliminate any necessary configuration to use Ghostty.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I think that&#39;s a really cool approach,  particularly the bit about embedding nerd fonts so you don&#39;t actually have to be a nerd to get stylish icons and indicators in your shell.&lt;/p&gt;
&lt;p&gt;I&#39;ve spent a few hours with Ghostty now and I&#39;m quite happy with it. It&#39;s fast, responsive, and looks great. It doesn&#39;t &lt;em&gt;need&lt;/em&gt; to be configured but it&#39;s easy to configure, with a simple &lt;code&gt;key = value&lt;/code&gt; syntax.&lt;/p&gt;
&lt;p&gt;Right now, the only official Ghostty installer is for &lt;a href=&#34;https://ghostty.org/docs/install/binary#macos&#34; rel=&#34;external&#34;&gt;MacOS↗&lt;/a&gt;, but it was easy to install on my Nix-powered Linux system thanks to the &lt;a href=&#34;https://ghostty.org/docs/install/binary#nix-flake&#34; rel=&#34;external&#34;&gt;Nix Flake↗&lt;/a&gt;. And while there isn&#39;t direct Home Manager support for Ghostty (yet), I&#39;m able to manage its (minimal) config with the &lt;a href=&#34;https://nix-community.github.io/home-manager/options.xhtml#opt-xdg.configFile&#34; rel=&#34;external&#34;&gt;&lt;code&gt;xdg.configFile&lt;/code&gt; directive↗&lt;/a&gt;.&lt;/p&gt;
</content>
    </entry>
    
    <entry>
        <title>A Software Stack Shakeup</title>
        <link href="https://runtimeterror.dev/a-software-stack-shakeup/" rel="alternate"/>
        <id>https://runtimeterror.dev/a-software-stack-shakeup/</id>
        <published>2024-12-22T00:00:00+00:00</published>
        <updated>2024-12-22T00:00:00+00:00</updated>
        <author>
          <name>John Wq</name>
          <email>jwq@omg.lol</email>
        </author>
        <category term="Apps"/><category term="Linux"/>
        <summary type="text">Ditching VSCode for Neovim, ditching Tabby for Kitty, and catppuccining all the things</summary>
        <content type="html">&lt;p&gt;I&#39;ve been using &lt;a href=&#34;https://nixos.org/&#34; rel=&#34;external&#34;&gt;Nix↗&lt;/a&gt; and &lt;a href=&#34;https://nix-community.github.io/home-manager/&#34; rel=&#34;external&#34;&gt;Home Manager↗&lt;/a&gt; to manage (most of) the &lt;a href=&#34;/uses/#software&#34;&gt;software I use&lt;/a&gt; on my computers for about a year and a half now. Nix&#39;s declarative approach to package and configuration management lets me create a single base configuration and then selectively apply the relevant pieces to my different devices, whether it&#39;s my daily-driver Chromebook, the Pixelbook I converted to NixOS, a VM running in &lt;a href=&#34;/homelab/&#34;&gt;my homelab&lt;/a&gt; or &lt;em&gt;The Cloud&lt;/em&gt;, or the WSL environment of my work laptop (where I also overlay work-specific configurations).&lt;/p&gt;
&lt;p&gt;I track those configurations in my &lt;a href=&#34;https://git.vim.wtf/wq/nix-dotfiles&#34; rel=&#34;external&#34;&gt;public &#39;dotfiles&#39; repo↗&lt;/a&gt;, and I&#39;ve done a &lt;strong&gt;lot&lt;/strong&gt; of tinkering with these Nix-based configs in that time as I&#39;ve gotten more comfortable with the Nix language and discovered new useful utilities, but that tinkering really ramped up this month:&lt;/p&gt;
&lt;p&gt;&lt;div class=&#34;image-container&#34;&gt;
	&lt;picture&gt;
		&lt;a href=&#34;graph.webp&#34;
			target=&#34;_blank&#34;
			rel=&#34;noopener noreferrer&#34;&gt;

	
		
			
			
				
					
						
							
							
							
						
					
						
							
							
							
						
					
						
							
							
							
						
					
						
					
						
					
						
					
				

				
				
				
				&lt;noscript&gt;
					&lt;img 
						class=&#34;post-image&#34;
						srcset=&#34;/a-software-stack-shakeup/graph_hu_b32ade142e5518a4.webp 320w, /a-software-stack-shakeup/graph_hu_c418979a1e5d4ffd.webp 640w, /a-software-stack-shakeup/graph_hu_aa42cb8a471aea8d.webp 960w, /a-software-stack-shakeup/graph_hu_ac70f819ac58a6a.webp 1200w&#34;
						src=&#34;/a-software-stack-shakeup/graph_hu_ac70f819ac58a6a.webp&#34;alt=&#34;GitHub commits bar chart showing a flurry of activity around December 1&#34; title=&#34;GitHub commits bar chart showing a flurry of activity around December 1&#34; 
						loading=&#34;lazy&#34;
					/&gt;
				&lt;/noscript&gt;

				&lt;img
					class=&#34;post-image lazyload show-if-js&#34;
					data-srcset=&#34;/a-software-stack-shakeup/graph_hu_b32ade142e5518a4.webp 320w, /a-software-stack-shakeup/graph_hu_c418979a1e5d4ffd.webp 640w, /a-software-stack-shakeup/graph_hu_aa42cb8a471aea8d.webp 960w, /a-software-stack-shakeup/graph_hu_ac70f819ac58a6a.webp 1200w&#34;
					data-src=&#34;/a-software-stack-shakeup/graph.webp&#34;
					src=&#34;data:image/webp;base64,UklGRiABAABXRUJQVlA4IBQBAAAwCQCdASqAABsAPqVGnUijIaEUCgVUMwpE84BkhwfbJ/4BtAH6Ab2rdjYE4i9SkghWVoQ91cHWiVl0qrziujIjOKgSg/TAdKPBlCeepCC7ClhAAP7zZvwgZ4EweJylKJl0aA54GAlPC24PRqnOAmfOmWoq&amp;#43;tfPyo74E24khlSMZyrvyTLtFWp/IOEU4m4t8H1&amp;#43;f8mzX9tHjIeG523QMosZCAyke/fWbEM3GxvhLoOiRDmRtq3NIEukaZMlDVYL09Zcafw2HWPFIBY7&amp;#43;WB7bLI/wzfoPXjPHvfUI3lqM8SIsXKVAgmzTgXlL&amp;#43;rXiLAhINpIJryuvIgi2KRHZyMlJJHMbBvYXi0uAqjD5BXFqFxbVfYOoAA=&#34;
					data-sizes=&#34;auto&#34;
					width=&#34;1200&#34;
					height=&#34;250&#34;alt=&#34;GitHub commits bar chart showing a flurry of activity around December 1&#34; title=&#34;GitHub commits bar chart showing a flurry of activity around December 1&#34; 
					loading=&#34;lazy&#34;
				/&gt;&lt;/a&gt;
	&lt;/picture&gt;
	
&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;These updates included a lot of small tweaks and fixes, but there were some larger transitions included along the way.&lt;/p&gt;
&lt;h2 id=&#34;ditching-vscode-for-neovim&#34;&gt;
	Ditching VSCode for Neovim
	&lt;a class=&#34;hlink&#34; href=&#34;#ditching-vscode-for-neovim&#34;&gt;&lt;i class=&#34;fa-solid fa-link&#34;&gt;&lt;/i&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;VSCode has been my go-to text/code editor for years, and it&#39;s served me well. But I&#39;ve been frustrated that I couldn&#39;t use Nix to manage the configuration and plugins of the VSCode install on my Windows work laptop; trying to manually keep all those settings in sync with my Linux machines has been a bit of a fight.&lt;/p&gt;
&lt;p&gt;I started doing more and more of my text editing in Vim since I knew that experience &lt;em&gt;would&lt;/em&gt; be consistent. And then I tried out &lt;a href=&#34;https://github.com/neovim/neovim&#34; rel=&#34;external&#34;&gt;Neovim↗&lt;/a&gt; and realized I could use its extensive plugins to completely replace VSCode. The result is an editor that is lighter and more configurable while still providing all the IDE-esque niceties like syntax highlighting and validation and code completion suggestions with a more keyboard-oriented workflow. And my Nix setup ensures I&#39;ll have a familiar development environment on any of my systems.&lt;/p&gt;
&lt;h2 id=&#34;ditching-tabby-for-kitty&#34;&gt;
	Ditching Tabby for Kitty
	&lt;a class=&#34;hlink&#34; href=&#34;#ditching-tabby-for-kitty&#34;&gt;&lt;i class=&#34;fa-solid fa-link&#34;&gt;&lt;/i&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;I started using &lt;a href=&#34;https://tabby.sh/&#34; rel=&#34;external&#34;&gt;Tabby↗&lt;/a&gt; as my terminal emulator of choice &lt;a href=&#34;/trying-tabby-terminal/&#34;&gt;back in April&lt;/a&gt;. It&#39;s been pretty great, but it &lt;a href=&#34;https://github.com/NixOS/nixpkgs/issues/233509&#34; rel=&#34;external&#34;&gt;hasn&#39;t yet been packaged for Nix↗&lt;/a&gt;, which can make configuration management a little messy. I had seen a lot of other Nix configs referencing a different terminal app called &lt;a href=&#34;https://sw.kovidgoyal.net/kitty/&#34; rel=&#34;external&#34;&gt;Kitty↗&lt;/a&gt; so decided to give it a try.&lt;/p&gt;
&lt;p&gt;It took a bit of fiddling (and wrapping it with &lt;a href=&#34;https://github.com/nix-community/nixGL&#34; rel=&#34;external&#34;&gt;NixGL↗&lt;/a&gt; to get it running, but once I did I was able to completely manage the terminal&#39;s configuration with Home Manager (the dream!). Kitty is fast, configurable, and packed with features (many of which I&#39;ll never use because tmux).&lt;/p&gt;
&lt;h2 id=&#34;catppuccin-all-the-things&#34;&gt;
	&lt;em&gt;Catppuccin all the things!&lt;/em&gt;
	&lt;a class=&#34;hlink&#34; href=&#34;#catppuccin-all-the-things&#34;&gt;&lt;i class=&#34;fa-solid fa-link&#34;&gt;&lt;/i&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;Another recent discovery has been the lovely pastel-based &lt;a href=&#34;https://github.com/catppuccin/catppuccin&#34; rel=&#34;external&#34;&gt;catppuccin↗&lt;/a&gt; color scheme. I fell in love with the soothing colors and quickly set about applying it to Kitty, Neovim, and tmux.&lt;/p&gt;
&lt;p&gt;I think the result is pretty nice!&lt;/p&gt;
&lt;p&gt;&lt;div class=&#34;image-container&#34;&gt;
	&lt;picture&gt;
		&lt;a href=&#34;terminal.webp&#34;
			target=&#34;_blank&#34;
			rel=&#34;noopener noreferrer&#34;&gt;

	
		
			
			
				
					
						
							
							
							
						
					
						
							
							
							
						
					
						
							
							
							
						
					
						
					
						
					
						
					
				

				
				
				
				&lt;noscript&gt;
					&lt;img 
						class=&#34;post-image&#34;
						srcset=&#34;/a-software-stack-shakeup/terminal_hu_95047cf91aba7c7.webp 320w, /a-software-stack-shakeup/terminal_hu_53f40bf3bb9f0157.webp 640w, /a-software-stack-shakeup/terminal_hu_864f3719f22c014d.webp 960w, /a-software-stack-shakeup/terminal_hu_24bf4e26b691000.webp 1200w&#34;
						src=&#34;/a-software-stack-shakeup/terminal_hu_24bf4e26b691000.webp&#34;alt=&#34;A split terminal interface displays code and Git operations. The left pane shows a .nix configuration file for tmux, detailing settings and commands. The right pane contains a Git workflow log and an ASCII art tree.&#34; title=&#34;A split terminal interface displays code and Git operations. The left pane shows a .nix configuration file for tmux, detailing settings and commands. The right pane contains a Git workflow log and an ASCII art tree.&#34; 
						loading=&#34;lazy&#34;
					/&gt;
				&lt;/noscript&gt;

				&lt;img
					class=&#34;post-image lazyload show-if-js&#34;
					data-srcset=&#34;/a-software-stack-shakeup/terminal_hu_95047cf91aba7c7.webp 320w, /a-software-stack-shakeup/terminal_hu_53f40bf3bb9f0157.webp 640w, /a-software-stack-shakeup/terminal_hu_864f3719f22c014d.webp 960w, /a-software-stack-shakeup/terminal_hu_24bf4e26b691000.webp 1200w&#34;
					data-src=&#34;/a-software-stack-shakeup/terminal.webp&#34;
					src=&#34;data:image/webp;base64,UklGRswBAABXRUJQVlA4IMABAADQDgCdASqAAFUAPqVGmkkjOisTqXXVowpE9LaAvIIbGAlaZ8VQzXnyukwygxidRwrw0eJdpHMPrilmVO20zVTHfW1lXBZozRX9XJEWTuG4Apl&amp;#43;3aKBf58/&amp;#43;6XNOdum9ilBLSF9LouaKCeQUf3twGQBdM5ODs2j&amp;#43;oOmrH2EUaTwAP7vyJGw&amp;#43;MXB03X4pylx4TpfgKayc0AvCb6GwPE40BOgut7F/BTLINvPO9ltKgTCLhteKPKFKjeQdQfDApSwUTf4A6k&amp;#43;GfVXtXTUcwIGLoGCCrbFhohNBUegeYlexbSKPmexd/yvMgkPT3F3vvEUtCp75kjL&amp;#43;kIG0uEzEKC61REOoikEzmhd8Bl&amp;#43;yL9ny2&amp;#43;iYFp4LFdjiFOQcDKcdIS825W0oQt6GxeAW9JV9bkhjtbDu&amp;#43;8OZ6fSNdzkRyniNcifytLKzIA5KN8cE8&amp;#43;4F4N9Ya9&amp;#43;LEkrs8f/E9ofD7XTEJj0h5PvstFiwha1So3hdOFa1TGtGVIvtyhZYahZG85ewfFc63idnc3KsgaIAfXrO2DMD&amp;#43;xwg0CPFQ46QJ9bkEbudHdhfKQrEwKUZZRhj8DFvEPrVL9JpKSl/F5YxJq4AAAA&#34;
					data-sizes=&#34;auto&#34;
					width=&#34;1200&#34;
					height=&#34;800&#34;alt=&#34;A split terminal interface displays code and Git operations. The left pane shows a .nix configuration file for tmux, detailing settings and commands. The right pane contains a Git workflow log and an ASCII art tree.&#34; title=&#34;A split terminal interface displays code and Git operations. The left pane shows a .nix configuration file for tmux, detailing settings and commands. The right pane contains a Git workflow log and an ASCII art tree.&#34; 
					loading=&#34;lazy&#34;
				/&gt;&lt;/a&gt;
	&lt;/picture&gt;
	
&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;Now to see if I can get back to building things and writing about the things I build rather than just endlessly tinkering with my tools...&lt;/p&gt;
</content>
    </entry>
    
    <entry>
        <title>Opening Up Opengist</title>
        <link href="https://runtimeterror.dev/opening-up-opengist/" rel="alternate"/>
        <id>https://runtimeterror.dev/opening-up-opengist/</id>
        <published>2024-11-27T00:00:00+00:00</published>
        <updated>2024-11-27T00:00:00+00:00</updated>
        <author>
          <name>John Wq</name>
          <email>jwq@omg.lol</email>
        </author>
        <category term="Apps"/><category term="Selfhosting"/>
        <summary type="text">Deploying Opengist, a self-hosted open-source Gist-style pastebin.</summary>
        <content type="html">&lt;p&gt;A &lt;a href=&#34;https://dmv.community/@jcrabapple/113552372299474273&#34; rel=&#34;external&#34;&gt;recent toot from Jcrabapple↗&lt;/a&gt; introduced me to &lt;a href=&#34;https://opengist.io/&#34; rel=&#34;external&#34;&gt;Opengist↗&lt;/a&gt;, an open-source, self-hosted, git-powered pastebin alternative to GitHub Gist. I like all of those things and I thought &lt;a href=&#34;https://demo.opengist.io/&#34; rel=&#34;external&#34;&gt;the live demo↗&lt;/a&gt; looked neat so I decided to take it for a spin.&lt;/p&gt;
&lt;p&gt;I deployed Opengist on a Docker host in my homelab, and I was able to serve it publicly via my slick &lt;a href=&#34;/caddy-tailscale-alternative-cloudflare-tunnel/&#34;&gt;Caddy + Tailscale reverse proxy setup&lt;/a&gt;. This was really easy to set up and I&#39;m quite happy with the result - and how easy it is to embed the resulting gists.&lt;/p&gt;
&lt;p&gt;Like these files detailing the Docker Compose and Tailscale Serve configurations I&#39;m using for Opengist:&lt;/p&gt;
&lt;script src=&#34;https://gist.runtimeterror.dev/john/opengist.js?dark&#34;&gt;&lt;/script&gt;
&lt;p&gt;&lt;em&gt;I should tweak the styling a little bit but I&#39;m (1) lazy, (2) tired, and (3) kind of inept so that will have to wait for a bit.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I don&#39;t know for sure if/how I will use this long-term (or how the use case might compare with &lt;a href=&#34;https://notes.runtimeterror.dev&#34; rel=&#34;external&#34;&gt;notes.runtimeterror.dev↗&lt;/a&gt;) but for now I think it&#39;s pretty nifty.&lt;/p&gt;
</content>
    </entry>
    
</feed>

