<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">

  <channel>
    <title>Self Host on </title>
    <link>https://priyatham.in/en/categories/self-host/</link>
    <description>Recent Posts in Self Host on </description>
    <generator>Hugo 0.161.1</generator>
    <language>en-GB</language>
    <managingEditor>Priyatham</managingEditor>
    
      <webMaster>Priyatham</webMaster>
    <lastBuildDate>Sat, 30 May 2026 18:49:16 -0700</lastBuildDate>
    <atom:link href="https://priyatham.in/en/categories/self-host/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Code Deployment: The self-hosted way</title>
      <link>https://priyatham.in/en/post/deploy-websites/</link>
      <pubDate>Sun, 12 Apr 2026 00:00:00 +0000</pubDate>
      <author>Priyatham</author>
      <guid>https://priyatham.in/en/post/deploy-websites/</guid>
      <description>Code, as-it-is takes a lot of time to write, but also to host, build and deploy. I use a different set of tools for my usage. Most of them the conventional ones are free, they came with a catch. It always needs permission to your code, it could be used to train AI or would be limited to certain domains, certain number of runs or available for a limited trial period.
</description><content:encoded>&lt;p&gt;Code, as-it-is takes a lot of time to write, but also to host, build and deploy. I use a different set of tools for my usage. Most of them the conventional ones are free, they came with a catch. It always needs permission to your code, it could be used to train AI or would be limited to certain domains, certain number of runs or available for a limited trial period.&lt;/p&gt;

&lt;figure &gt;
			&lt;input id=&#34;fig-4abeeb16265112c3a8670a7eb658c16b-0&#34; class=&#34;marginpar-ctrl&#34; type=&#34;checkbox&#34; aria-controls=&#34;the-fig-4abeeb16265112c3a8670a7eb658c16b-0&#34; hidden&gt;&lt;/input&gt;
    &lt;label for=&#34;fig-4abeeb16265112c3a8670a7eb658c16b-0&#34;&gt;&lt;/label&gt;
        &lt;span id=&#34;the-fig-4abeeb16265112c3a8670a7eb658c16b-0&#34; class=&#34;marginpar abs&#34;&gt;
    
    A small section of my homepage of services
    
    &lt;/span&gt;
    

&lt;img src=&#34;https://priyatham.in/images/homepage-code-dep.png&#34;
  aria-describedby=&#34;fig-4abeeb16265112c3a8670a7eb658c16b-0&#34;
  loading=&#34;lazy&#34; /&gt;
    &lt;/figure&gt;

&lt;p&gt;I don&#39;t like what has become of GitHub, with unnecessary settings and bloat, it lost its simplicity. Gitea was a good option, but Forgejo was even better (I will not get into their fued) but any will work flawlessly. I wanted to host the code I wrote, instead of keeping it somewhere else. Coolify was a really cool and wonderful software that has almost everything I needed to deploy web applications.&lt;/p&gt;
&lt;h2 id=&#34;port-forward-for-forgejo-ssh&#34;&gt;Port Forward for Forgejo SSH&lt;/h2&gt;
&lt;p&gt;I can&#39;t rely on HTTPS for cloning and handling the git repos. I need a ssh way of doing things. But 22 is already for my own server from my public IP. So, a new port is in order to handle all of the git requests.&lt;/p&gt;
&lt;p&gt;My SDN needs to be able to forward all of them from the local network to the SDN through iptables. I wasn&#39;t really sure how to do but, I tried it. It worked flawlessly. Once I got it working, I was able to do it for DNS and FTP and many others which was awesome.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# forgejo ssh port: 2222
post-up iptables -t nat -A PREROUTING -i vmbr0 -p tcp --dport 2222 -j DNAT --to-destination 10.10.10.116:2222
post-down iptables -t nat -D PREROUTING -i vmbr0 -p tcp --dport 2222 -j DNAT --to-destination 10.10.10.116:2222

post-up iptables -t nat -A POSTROUTING -o vnt1 -p tcp --dport 2222 -d 10.10.10.116 -j MASQUERADE
post-down iptables -t nat -D POSTROUTING -o vnt1 -p tcp --dport 2222 -d 10.10.10.116 -j MASQUERADE

post-up iptables -A FORWARD -p tcp -d 10.10.10.116 --dport 2222 -j ACCEPT
post-down iptables -D FORWARD -p tcp -d 10.10.10.116 --dport 2222 -j ACCEPT
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;First section of post-up rules to forward incoming SSH traffic to the LXC container 116 on IP 10.10.10.116. The second one, post-down for outgoing with local networks in other interfaces and the last set of forward rules for external connection to be forward to the container.&lt;/p&gt;
&lt;p&gt;Once that was done, I wanted to be able to deploy it where I wanted, I could build it and server using nginx, but that would be a hassle for every single typo and commit I saw myself making and correcting. Running them in different ports, giving subdomains. Which I had something like Vercel or heruko when I used as an undergrad, something similar that I could self-host. After a good look, I found Coolify to be a good way to build and deploy prototypes.&lt;/p&gt;
&lt;p&gt;
&lt;figure &gt;
			&lt;input id=&#34;fig-4abeeb16265112c3a8670a7eb658c16b-1&#34; class=&#34;marginpar-ctrl&#34; type=&#34;checkbox&#34; aria-controls=&#34;the-fig-4abeeb16265112c3a8670a7eb658c16b-1&#34; hidden&gt;&lt;/input&gt;
    &lt;label for=&#34;fig-4abeeb16265112c3a8670a7eb658c16b-1&#34;&gt;&lt;/label&gt;
        &lt;span id=&#34;the-fig-4abeeb16265112c3a8670a7eb658c16b-1&#34; class=&#34;marginpar abs&#34;&gt;
    
    The Forgejo server config has variables that can check standard ssh port to something like 2222
    
    &lt;/span&gt;
    

&lt;img src=&#34;https://priyatham.in/images/forgejo-ssh-server-config.png&#34;
  aria-describedby=&#34;fig-4abeeb16265112c3a8670a7eb658c16b-1&#34;
  loading=&#34;lazy&#34; /&gt;
    &lt;/figure&gt;


&lt;figure &gt;
			&lt;input id=&#34;fig-4abeeb16265112c3a8670a7eb658c16b-2&#34; class=&#34;marginpar-ctrl&#34; type=&#34;checkbox&#34; aria-controls=&#34;the-fig-4abeeb16265112c3a8670a7eb658c16b-2&#34; hidden&gt;&lt;/input&gt;
    &lt;label for=&#34;fig-4abeeb16265112c3a8670a7eb658c16b-2&#34;&gt;&lt;/label&gt;
        &lt;span id=&#34;the-fig-4abeeb16265112c3a8670a7eb658c16b-2&#34; class=&#34;marginpar abs&#34;&gt;
    
    How the unconventional port number is shown for cloning my git repo
    
    &lt;/span&gt;
    

&lt;img src=&#34;https://priyatham.in/images/forgejo-ssh-repo.png&#34;
  aria-describedby=&#34;fig-4abeeb16265112c3a8670a7eb658c16b-2&#34;
  loading=&#34;lazy&#34; /&gt;
    &lt;/figure&gt;
&lt;/p&gt;
&lt;h2 id=&#34;subdomains-for-coolify&#34;&gt;Subdomains for Coolify&lt;/h2&gt;
&lt;p&gt;Thinking and designing the whole system. The straight forward approach was to have subdomains like *.priyatham.in. But wait, I have many other services (I think close to 25, &lt;a href=&#34;https://home.priyatham.in&#34; target=&#34;_blank&#34; rel=&#34;external noopener noreferrer nofollow&#34;&gt;All of them&lt;/a&gt;). Conflicts can occur. I didn&#39;t want to deal with them or think about it. So a multi-level subdomain ( I call it sub subdomain) could be the solution. *.deploy.priyatham.in would work giving it a way for me to differentiate between my regular services and test sites.&lt;/p&gt;
&lt;p&gt;What about the UI of Coolify ? That can&#39;t be inside. So I reverse proxied it with deploy-ui.priyatham.in.&lt;/p&gt;
&lt;p&gt;I couldn&#39;t get the name of the repo to be the sub subdomain automatically once I create the project in the UI. I have to manually go and edit it as I deploy it out.&lt;/p&gt;
&lt;h3 id=&#34;certbot-for-sub-subdomain&#34;&gt;Certbot for sub-subdomain&lt;/h3&gt;
&lt;p&gt;I had the Certbot plugins to do the renewels and creation of certificates for regular subdomains, this one needs a new one. Since I wanted a wildcard domain with deploy it should *.deploy.priyatham.in hence have to create the certs for the same. I use the porkbun plugin because that&#39;s where I have my nameservers and the domain management. But the command is (for me to copy paste later on):&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;~# certbot certonly \                                
--dns-porkbun-credentials .../credentials.ini \
-d &amp;quot;*.deploy.priyatham.in&amp;quot; \
-d priyatham.in
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&#34;deploy-keys-with-forgejo-and-coolify&#34;&gt;Deploy keys with Forgejo and Coolify&lt;/h2&gt;
&lt;p&gt;Deploy keys are used for exactly what they say they are. To deploy private git repos with ssh safely and properly.&lt;/p&gt;
&lt;p&gt;Coolify has a weird of doing it (or I don&#39;t know the right way), there&#39;s a back and forth of doing it,&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Create the Deploy keys&lt;/li&gt;
&lt;li&gt;add it to authorized keys&lt;/li&gt;
&lt;li&gt;add it to your Forgejo repo&lt;/li&gt;
&lt;li&gt;create the project and add the git repo selecting the same deploy key.&lt;/li&gt;
&lt;/ol&gt;

&lt;figure &gt;
			&lt;input id=&#34;fig-4abeeb16265112c3a8670a7eb658c16b-3&#34; class=&#34;marginpar-ctrl&#34; type=&#34;checkbox&#34; aria-controls=&#34;the-fig-4abeeb16265112c3a8670a7eb658c16b-3&#34; hidden&gt;&lt;/input&gt;
    &lt;label for=&#34;fig-4abeeb16265112c3a8670a7eb658c16b-3&#34;&gt;&lt;/label&gt;
        &lt;span id=&#34;the-fig-4abeeb16265112c3a8670a7eb658c16b-3&#34; class=&#34;marginpar abs&#34;&gt;
    
    Dialog box to create one, the action required in bold is what I missed for hours.
    
    &lt;/span&gt;
    

&lt;img src=&#34;https://priyatham.in/images/deploy-key-coolify.png&#34;
  aria-describedby=&#34;fig-4abeeb16265112c3a8670a7eb658c16b-3&#34;
  loading=&#34;lazy&#34; /&gt;
    &lt;/figure&gt;


&lt;figure &gt;
			&lt;input id=&#34;fig-4abeeb16265112c3a8670a7eb658c16b-4&#34; class=&#34;marginpar-ctrl&#34; type=&#34;checkbox&#34; aria-controls=&#34;the-fig-4abeeb16265112c3a8670a7eb658c16b-4&#34; hidden&gt;&lt;/input&gt;
    &lt;label for=&#34;fig-4abeeb16265112c3a8670a7eb658c16b-4&#34;&gt;&lt;/label&gt;
        &lt;span id=&#34;the-fig-4abeeb16265112c3a8670a7eb658c16b-4&#34; class=&#34;marginpar abs&#34;&gt;
    
    The place where to add the created deploy key of Forgejo side
    
    &lt;/span&gt;
    

&lt;img src=&#34;https://priyatham.in/images/forgejo-deploy-key.png&#34;
  aria-describedby=&#34;fig-4abeeb16265112c3a8670a7eb658c16b-4&#34;
  loading=&#34;lazy&#34; /&gt;
    &lt;/figure&gt;

&lt;p&gt;I wasted a lot of time by forgetting to add authorized_keys to the server that runs my deployed application. It never gave me a clear warning after creating it, so it disabled the keys with no response.&lt;/p&gt;
&lt;h2 id=&#34;auto-builds-and-webhooks&#34;&gt;Auto builds and Webhooks&lt;/h2&gt;
&lt;p&gt;Wouldn&#39;t be cool if I don&#39;t have to manually deploy every change ? Webhooks are just for that. They follow similar steps. Creating the webhook with a secret. Adding it into Forgejo webhook, there&#39;s no clear webhook integration for coolify so I just used the forgejo one, with the targer url, secret and branch filters.&lt;/p&gt;
&lt;p&gt;So let&#39;s say I only want to trigger when a commit is done to the main branch and not any other ones, I can create the filter to only include main instead of &#39;*&#39;.&lt;/p&gt;

&lt;figure &gt;
			&lt;input id=&#34;fig-4abeeb16265112c3a8670a7eb658c16b-5&#34; class=&#34;marginpar-ctrl&#34; type=&#34;checkbox&#34; aria-controls=&#34;the-fig-4abeeb16265112c3a8670a7eb658c16b-5&#34; hidden&gt;&lt;/input&gt;
    &lt;label for=&#34;fig-4abeeb16265112c3a8670a7eb658c16b-5&#34;&gt;&lt;/label&gt;
        &lt;span id=&#34;the-fig-4abeeb16265112c3a8670a7eb658c16b-5&#34; class=&#34;marginpar abs&#34;&gt;
    
    Gitea webhook works with Forgejo, for now.
    
    &lt;/span&gt;
    

&lt;img src=&#34;https://priyatham.in/images/coolify-webhook.png&#34;
  aria-describedby=&#34;fig-4abeeb16265112c3a8670a7eb658c16b-5&#34;
  loading=&#34;lazy&#34; /&gt;
    &lt;/figure&gt;


&lt;figure &gt;
			&lt;input id=&#34;fig-4abeeb16265112c3a8670a7eb658c16b-6&#34; class=&#34;marginpar-ctrl&#34; type=&#34;checkbox&#34; aria-controls=&#34;the-fig-4abeeb16265112c3a8670a7eb658c16b-6&#34; hidden&gt;&lt;/input&gt;
    &lt;label for=&#34;fig-4abeeb16265112c3a8670a7eb658c16b-6&#34;&gt;&lt;/label&gt;
        &lt;span id=&#34;the-fig-4abeeb16265112c3a8670a7eb658c16b-6&#34; class=&#34;marginpar abs&#34;&gt;
    
    Add webhook integration with forgejo, the events and branch filters are the key.
    
    &lt;/span&gt;
    

&lt;img src=&#34;https://priyatham.in/images/forgejo-webhook.png&#34;
  aria-describedby=&#34;fig-4abeeb16265112c3a8670a7eb658c16b-6&#34;
  loading=&#34;lazy&#34; /&gt;
    &lt;/figure&gt;

&lt;h2 id=&#34;future&#34;&gt;Future&lt;/h2&gt;
&lt;p&gt;Forgejo runner is what I am looking at currently, trying to include that, but with all the other things I have to do (The never ending OIDC connections, or the 5 pending articles) I decided to try it out later.&lt;/p&gt;
</content:encoded>
      <enclosure url="/images/code-deployment-cover-1.png" length="0" type="image/jpeg" />
    </item>
    <item>
      <title>Website with a DMCA takedown</title>
      <link>https://priyatham.in/en/post/hosting-dmca/</link>
      <pubDate>Wed, 31 Dec 2025 00:00:00 +0000</pubDate>
      <author>Priyatham</author>
      <guid>https://priyatham.in/en/post/hosting-dmca/</guid>
      <description>This is the second article of work horror stories on dealing with clients and workplaces. You can find the first one here
This article revolves around Digital Millennium Copyright Act. I am not fully sure what it entails, but you should read up some info on its position and criticisms.
Some time ago, I was on track in working with a client on their old PHP website. Someone developed it, but it wasn&amp;amp;rsquo;t fully polished. There were a few forms, a few issues with it and some text changes, I was brought on to finish the work and hand it over to an offshore SEO company in India.
</description><content:encoded>&lt;p&gt;This is the second article of work horror stories on dealing with clients and workplaces. You can find the first one &lt;a href=&#34;https://priyatham.in/en/post/linkedin-horror/&#34;&gt;here&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This article revolves around &lt;a href=&#34;https://en.wikipedia.org/wiki/Digital_Millennium_Copyright_Act#Legislative_reform&#34; target=&#34;_blank&#34; rel=&#34;external noopener noreferrer nofollow&#34;&gt;Digital Millennium Copyright Act&lt;/a&gt;. I am not fully sure what it entails, but you should read up some info on its position and criticisms.&lt;/p&gt;
&lt;p&gt;Some time ago, I was on track in working with a client on their old PHP website. Someone developed it, but it wasn&#39;t fully polished. There were a few forms, a few issues with it and some text changes, I was brought on to finish the work and hand it over to an offshore SEO company in India.&lt;/p&gt;
&lt;p&gt;Easy enough! I got a grip on the requirements, discussed it with clients, they never mentioned anything about who developed or how. It was hosted on name.com. I started one night, woke up next day to a call from the client, saying the website is down, and they got an email. Well, it wasn&#39;t my fault, I didn&#39;t do any drastic changes to break production.&lt;/p&gt;
&lt;p&gt;That&#39;s where it all begin, they got a notice for a DMCA takedown and only the nameserver is disabled as the hosting service investigate the issue. Hosting and domain access are still present. They wanted the site up and running as soon as possible.&lt;/p&gt;

&lt;figure &gt;
			&lt;input id=&#34;fig-c34a0299112c6c9f318a9dbc660a6719-1&#34; class=&#34;marginpar-ctrl&#34; type=&#34;checkbox&#34; aria-controls=&#34;the-fig-c34a0299112c6c9f318a9dbc660a6719-1&#34; hidden&gt;&lt;/input&gt;
    &lt;label for=&#34;fig-c34a0299112c6c9f318a9dbc660a6719-1&#34;&gt;&lt;/label&gt;
        &lt;span id=&#34;the-fig-c34a0299112c6c9f318a9dbc660a6719-1&#34; class=&#34;marginpar abs&#34;&gt;
    
    A grey animated person who is the angry actual dev who sent the DMCA takedown to the hosting
    
    &lt;/span&gt;
    

&lt;img src=&#34;https://priyatham.in/images/dmca-grey-animated.png&#34;
  aria-describedby=&#34;fig-c34a0299112c6c9f318a9dbc660a6719-1&#34;
  loading=&#34;lazy&#34; /&gt;
    &lt;/figure&gt;

&lt;p&gt;So, I moved the nameserver to Cloudflare free tier temporarily and pointed it to the hosting IP address. We were back on !&lt;/p&gt;
&lt;p&gt;The client was happy but came around with a new problem. The developer who actually created the website was the one who gave the notice of DMCA saying he was owed more money but was not given the final payment. The client claims he paid them in full and asked for more money they agreed upon. I haven&#39;t heard from the actual dev, so was wary.&lt;/p&gt;
&lt;p&gt;That was not the end of the story tho, the actual dev found out and sent the same notice to Cloudflare which forwarded it to the hosting service. The client explained that the dev was alright and professional, but as end came closer, he would go out of contact, say his girlfriend has some problems. Yada Yada…&lt;/p&gt;
&lt;p&gt;The client asked my advice, should I pay the dev for what he is asking to get out of the trouble ? or let it be and submit proofs to name.com. What if it takes so long to resolve with name.com ? They don&#39;t have a support phone number to reach in our tier. How long is the email conversation going to take place?&lt;/p&gt;
&lt;p&gt;I responded saying, What&#39;s the guarantee the dev is going to withdraw the notice, who&#39;s to say he won&#39;t try this again after spending all his money ? I suggested stand firm but also change the hosting to someone better slowly and one who won&#39;t bend to these takedowns or are much more resistant to these.&lt;/p&gt;
&lt;p&gt;The client was relieved from their stress and tension. Thanked me for my advice and cut the call that night.&lt;/p&gt;
&lt;p&gt;Next morning rolls around, and I hear back saying he paid the dev again and all of it is resolved. There shouldn&#39;t be problems anymore with this. That wasn&#39;t my advice, but anything that solves the issues for me is welcomed. The developer also replied to the original complaint that it was resolved, and the DMCA notice be suspended.&lt;/p&gt;
&lt;p&gt;I sat down and after a few hours of debugging and changing text. The website is down. Again. Something with the IP of the hosting maybe, my login and the hosting section is empty no options, or anything. I was shocked with that sight. I called the client to try it on their end, or they received any emails. Well, there it was. With the complaint, they went ahead and cancelled the hosting and will refund the client money and only left us with the domain rights and access.&lt;/p&gt;

&lt;figure &gt;
			&lt;input id=&#34;fig-c34a0299112c6c9f318a9dbc660a6719-2&#34; class=&#34;marginpar-ctrl&#34; type=&#34;checkbox&#34; aria-controls=&#34;the-fig-c34a0299112c6c9f318a9dbc660a6719-2&#34; hidden&gt;&lt;/input&gt;
    &lt;label for=&#34;fig-c34a0299112c6c9f318a9dbc660a6719-2&#34;&gt;&lt;/label&gt;
        &lt;span id=&#34;the-fig-c34a0299112c6c9f318a9dbc660a6719-2&#34; class=&#34;marginpar abs&#34;&gt;
    
    The one on the left with a shocked face is my expression as I look at the client over the phone. With the whole deployment burning down
    
    &lt;/span&gt;
    

&lt;img src=&#34;https://priyatham.in/images/dmca-two-clients.png&#34;
  aria-describedby=&#34;fig-c34a0299112c6c9f318a9dbc660a6719-2&#34;
  loading=&#34;lazy&#34; /&gt;
    &lt;/figure&gt;

&lt;p&gt;Turns out, the actual dev DMCA takedown got escalated since it happened twice but not the reply saying it&#39;s cancelled, explaining to them via email didn&#39;t go anywhere. With the client being frustrated more than ever, we decided to move the hosting. I gave a list of hosting services that may not be that well known but won&#39;t take DMCA seriously. The client thanked me and chose BlueHost(thankfully they couldn&#39;t see my expression). Which is not the best either and will take down the whole site if a takedown was issued what can I say. (Reddit is filled with issues calling out BlueHost)&lt;/p&gt;
&lt;p&gt;I can only advise the clients, their choices are something I can&#39;t control. I helped them set it up again, migrating the whole website and called it a final done. They wanted me to be a translator for the Indian SEO workers who couldn&#39;t speak English well. But that&#39;s a story for another time.&lt;/p&gt;
</content:encoded>
      <enclosure url="/images/dmca-grey-animated.png" length="0" type="image/jpeg" />
    </item>
    <item>
      <title>Getting Fired over LinkedIn account</title>
      <link>https://priyatham.in/en/post/linkedin-horror/</link>
      <pubDate>Fri, 12 Sep 2025 00:00:00 +0000</pubDate>
      <author>Priyatham</author>
      <guid>https://priyatham.in/en/post/linkedin-horror/</guid>
      <description>This is the first article of work horror stories on dealing with clients and workplaces. Give it a read.
Why in the first place ? Working in a startup is a different feeling. Engineering takes a back seat when revenue is not proper for the company. When they are pursuing clients and leads, they wanted me to know the process and the difficulties they are trying to automate. They were also low on leads to pursue and wanted me to reach out to some.
</description><content:encoded>&lt;p&gt;This is the first article of work horror stories on dealing with clients and workplaces. Give it a read.&lt;/p&gt;
&lt;h2 id=&#34;why-in-the-first-place-&#34;&gt;Why in the first place ?&lt;/h2&gt;
&lt;p&gt;Working in a startup is a different feeling. Engineering takes a back seat when revenue is not proper for the company. When they are pursuing clients and leads, they wanted me to know the process and the difficulties they are trying to automate. They were also low on leads to pursue and wanted me to reach out to some.&lt;/p&gt;
&lt;p&gt;The CEO and the COO sent me a list of 100 contacts and to reach out to them via LinkedIn and calling them in a day and do it everyday till they told me to stop. When it came time to ask questions, I answered with wanting two things. A phone number to make the calls to their calls and I would create a new LinkedIn with the company email and to reach out to the people. Both of the asks, were fair as you will see later.&lt;/p&gt;
&lt;p&gt;This is exactly what I had in mind, but as soon as my asks hit, the CEO was listening but writing down something hard on his book and got furious, &#34;Don&#39;t you trust the company to use your own LinkedIn?&#34; Why do you have to use a separate LinkedIn ? Don&#39;t you want to be associated the company mission ? Are you ashamed to be doing this ? If you don&#39;t use your personal LinkedIn, you are FIRED. The COO had some cool, told the CEO to go for a walk and talked to me.&lt;/p&gt;

&lt;figure &gt;
			&lt;input id=&#34;fig-fa687c001fea3062e6962f2eeb6fb972-0&#34; class=&#34;marginpar-ctrl&#34; type=&#34;checkbox&#34; aria-controls=&#34;the-fig-fa687c001fea3062e6962f2eeb6fb972-0&#34; hidden&gt;&lt;/input&gt;
    &lt;label for=&#34;fig-fa687c001fea3062e6962f2eeb6fb972-0&#34;&gt;&lt;/label&gt;
        &lt;span id=&#34;the-fig-fa687c001fea3062e6962f2eeb6fb972-0&#34; class=&#34;marginpar abs&#34;&gt;
    
    A guy shocked over a linkedin account (It&amp;#39;s made with my self-hosted AI, the misspelled linkedin makes it even better)
    
    &lt;/span&gt;
    

&lt;img src=&#34;https://priyatham.in/images/getting-fired-linkedin.png&#34;
  aria-describedby=&#34;fig-fa687c001fea3062e6962f2eeb6fb972-0&#34;
  loading=&#34;lazy&#34; /&gt;
    &lt;/figure&gt;

&lt;p&gt;I explained the COO my reasons. I don&#39;t want to be answering client calls after work hours and calling them with a personal phone number will be greeted with &#34;Hello&#34; not &#34;This is xyz company&#34;. I am not experienced about loans to answer anything anyways. The LinkedIn also had reasons, The people who clicks on contact with find my personal email associated with my account not the company email, they will find my personal experience not the company&#39;s. If I wanted LinkedIn premium or gold or any of the paid tiers they offer (They apparently have different tiers for sales people on top of gold) would the company pay for my personal LinkedIn ? should I add the company credit card to my LinkedIn account ?&lt;/p&gt;
&lt;p&gt;We have a different email for work, is having different LinkedIn done for all the other sales people ? I asked.&lt;/p&gt;
&lt;p&gt;He was frustrated but calmly explained, it&#39;s not the case and you doing it will send bad signals to the team (Not sure what&#39;s bad here) and everyone uses their personal LinkedIn because it is more authentic, having a blank new account doesn&#39;t give a good impression to clients. No one in sales, does it he mentioned.&lt;/p&gt;
&lt;p&gt;I replied, Well, I have never worked in sales, how am I supposed to know ?&lt;/p&gt;
&lt;p&gt;Okay, he asked a co-worker if had access to the company phone, maybe he could call one lead, and I could listen after that he could lend it to me. The person agreed.&lt;/p&gt;
&lt;p&gt;The CEO returned a little cooled off but still angry. The COO explained it was a misunderstanding and I just didn&#39;t know how sales worked, it&#39;s nothing about not believing in the company mission.&lt;/p&gt;
&lt;p&gt;I went back to typing on my laptop. He kept scribbling. The tension in the room was still present throughout the time, he left. I left a big sigh after feeling way better.&lt;/p&gt;
&lt;p&gt;I worked for a few hours and went around the couch to go for a walk, I saw the journal wide open, I peeked inside, and in big letters tightly pressed it was written &#34;FIRE PRI&#34; large in bold on the page.&lt;/p&gt;

&lt;figure &gt;
			&lt;input id=&#34;fig-fa687c001fea3062e6962f2eeb6fb972-1&#34; class=&#34;marginpar-ctrl&#34; type=&#34;checkbox&#34; aria-controls=&#34;the-fig-fa687c001fea3062e6962f2eeb6fb972-1&#34; hidden&gt;&lt;/input&gt;
    &lt;label for=&#34;fig-fa687c001fea3062e6962f2eeb6fb972-1&#34;&gt;&lt;/label&gt;
        &lt;span id=&#34;the-fig-fa687c001fea3062e6962f2eeb6fb972-1&#34; class=&#34;marginpar abs&#34;&gt;
    
    Not that big, but it was large and looked bolded from overwriting on top of it again and again
    
    &lt;/span&gt;
    

&lt;img src=&#34;https://priyatham.in/images/fire-pri.png&#34;
  aria-describedby=&#34;fig-fa687c001fea3062e6962f2eeb6fb972-1&#34;
  loading=&#34;lazy&#34; /&gt;
    &lt;/figure&gt;

&lt;p&gt;Shocked out of my mind, how can someone be like that? I blinked twice to make sure what I saw was real and not my mind making it up. I left for the walk, very much shocked by what&#39;s written. Will they let me go at the end of the day? Part of me was concerned about my future, my visa, I just moved, The lease. I calmed myself whatever happens will happen, If it&#39;s made up already, there&#39;s nothing I can do. I won&#39;t say anything or resign. Let them fire me.&lt;/p&gt;
&lt;p&gt;To my surprise, I asked if there&#39;s anything else to do or any meetings left for the day and promptly left after 5. Didn&#39;t get fired. I thought maybe he changed his mind.&lt;/p&gt;
&lt;p&gt;The next day, I started the LinkedIn connects with my personal LinkedIn having no other option other than get fired, started finding people, some were easy, some I couldn&#39;t find. Send custom connection messages, they expired after 15 connections and prompting me for gold. See this is why, I wanted a company account I thought, upon asking the CEO, he told to just connect with them, forget the gold. I mindlessly connected around 50. After which it got harder to find people, some were in construction. The list only had 65, rest were duplicate and some people with multiple businesses. I finished the list but couldn&#39;t find some.&lt;/p&gt;
&lt;p&gt;No one was assigning or asking for any help with HubSpot or any other tech related questions. Is today the day ? I was waiting to leave after 5, and the CEO wanted to discuss the list of 100 people he gave me, I told I did reach out to 65 people. Some were duplicate and some I couldn&#39;t find.&lt;/p&gt;
&lt;p&gt;So the data is the problem ? He raised his eyebrow.&lt;/p&gt;
&lt;p&gt;I shrugged and said for duplicates, yes. People are willing to pay hundreds of dollars for that, you think that&#39;s the problem?&lt;/p&gt;
&lt;p&gt;I saw he was getting ready, for his reasons to terminate. After yesterday, I wasn&#39;t afraid, why bend when they are going to fire me. I can do a better job than you, he exclaimed.&lt;/p&gt;
&lt;p&gt;How long were you doing this ? 20 years he said. It&#39;s only been 2 days how can I be at the same level as you, I said. Then maybe you shouldn&#39;t work with us. He told. Saying he pays me 5 thousand dollars but is not able to make money on the amount he is spending on me. Maybe there is something we can do here he asked me.&lt;/p&gt;
&lt;p&gt;Okay, I won&#39;t work for you then. Oh! You want to do it ? Yes, I told. (I didn&#39;t want to work for free just to learn sales) I am tech lead, not a sales person. Moreover, it&#39;s unlawful for me to work on anything other than what I studied as part of my visa.&lt;/p&gt;
&lt;p&gt;He wanted to me to explain where it didn&#39;t work, I told him my work is to take business problems, find and execute technical projects. Not make sales for the company, that&#39;s not part what I was trained or what I am willing to do. He didn&#39;t agree but nodded as I was fired regardless. I knew it wouldn&#39;t matter what I said nor would they change. Just wanted to say it out loud.&lt;/p&gt;
&lt;p&gt;And that&#39;s how asking for a separate LinkedIn account got me fired.&lt;/p&gt;
</content:encoded>
      <enclosure url="/images/getting-fired-linkedin.png" length="0" type="image/jpeg" />
    </item>
    <item>
      <title>DDC MQTT</title>
      <link>https://priyatham.in/en/post/ddc-mqtt/</link>
      <pubDate>Tue, 02 Sep 2025 00:00:00 +0000</pubDate>
      <author>Priyatham</author>
      <guid>https://priyatham.in/en/post/ddc-mqtt/</guid>
      <description>What is DDC ? I always wanted a way to switch between the display but couldn&amp;amp;rsquo;t find any easier way to switch. It was sad that I only looked into this in much deeper after buying a Samsung Odyssey g8 monitor. The monitor doesn&amp;amp;rsquo;t have an inbuilt KVM. Then I thought maybe an IR sensor on the TV can be used to control it. With the understanding of DDC, I researched, and it only works with the HDMI output and not the DisplayPorts.
</description><content:encoded>&lt;h2 id=&#34;what-is-ddc-&#34;&gt;What is DDC ?&lt;/h2&gt;
&lt;p&gt;I always wanted a way to switch between the display but couldn&#39;t find any easier way to switch. It was sad that I only looked into this in much deeper after buying a Samsung Odyssey g8 monitor. The monitor doesn&#39;t have an inbuilt KVM. Then I thought maybe an IR sensor on the TV can be used to control it. With the understanding of DDC, I researched, and it only works with the HDMI output and not the DisplayPorts.&lt;/p&gt;

&lt;figure &gt;
			&lt;input id=&#34;fig-0e5080d3b436ba1cd6d8911bbca8e262-0&#34; class=&#34;marginpar-ctrl&#34; type=&#34;checkbox&#34; aria-controls=&#34;the-fig-0e5080d3b436ba1cd6d8911bbca8e262-0&#34; hidden&gt;&lt;/input&gt;
    &lt;label for=&#34;fig-0e5080d3b436ba1cd6d8911bbca8e262-0&#34;&gt;&lt;/label&gt;
        &lt;span id=&#34;the-fig-0e5080d3b436ba1cd6d8911bbca8e262-0&#34; class=&#34;marginpar abs&#34;&gt;
    
    Home assistant widget with three different inputs
    
    &lt;/span&gt;
    

&lt;img src=&#34;https://priyatham.in/images/ddc-mqtt-1.png&#34;
  aria-describedby=&#34;fig-0e5080d3b436ba1cd6d8911bbca8e262-0&#34;
  loading=&#34;lazy&#34; /&gt;
    &lt;/figure&gt;

&lt;p&gt;This uses simpleddc library with python. MQTT is implemented on top of it. There are different endpoints giving out the status, and one queue for each of the inputs. All of which were determined using a software.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://code.priyatham.in/priyatham/ddc-mqtt&#34; target=&#34;_blank&#34; rel=&#34;external noopener noreferrer nofollow&#34;&gt;Code&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;How I made this lxc container inside my self hosted server is in this &lt;a href=&#34;https://priyatham.in/en/post/self-host/&#34;&gt;self host&lt;/a&gt;.&lt;/p&gt;
</content:encoded>
      <enclosure url="/images/ddc-mqtt-1.png" length="0" type="image/jpeg" />
    </item>
    <item>
      <title>Shucking for ZFS in proxmox</title>
      <link>https://priyatham.in/en/post/seagate-zfs/</link>
      <pubDate>Tue, 02 Sep 2025 00:00:00 +0000</pubDate>
      <author>Priyatham</author>
      <guid>https://priyatham.in/en/post/seagate-zfs/</guid>
      <description>Why not SSD ? SSDs are coming down in price but still not at the level to get something with 20&#43; TB in my budget yet. I wish they would.
I always like to compare cost per TB of memory and see If I can make do. Used hard drives are a good option but with current prices of Seagate external drives coming down to $10/TB it was no-brainer to just shuck it and then connect to my server. I found a 26 TB one for $250 which was great. So I promptly shucked it and connected it to the power supply and the SATA cable.
</description><content:encoded>&lt;h3 id=&#34;why-not-ssd-&#34;&gt;Why not SSD ?&lt;/h3&gt;
&lt;p&gt;SSDs are coming down in price but still not at the level to get something with 20&#43; TB in my budget yet. I wish they would.&lt;/p&gt;
&lt;p&gt;I always like to compare cost per TB of memory and see If I can make do. Used hard drives are a good option but with current prices of Seagate external drives coming down to $10/TB it was no-brainer to just shuck it and then connect to my server. I found a 26 TB one for $250 which was great. So I promptly shucked it and connected it to the power supply and the SATA cable.&lt;/p&gt;

&lt;figure &gt;
			&lt;input id=&#34;fig-38b6433803bade3f9f5543b897116825-0&#34; class=&#34;marginpar-ctrl&#34; type=&#34;checkbox&#34; aria-controls=&#34;the-fig-38b6433803bade3f9f5543b897116825-0&#34; hidden&gt;&lt;/input&gt;
    &lt;label for=&#34;fig-38b6433803bade3f9f5543b897116825-0&#34;&gt;&lt;/label&gt;
        &lt;span id=&#34;the-fig-38b6433803bade3f9f5543b897116825-0&#34; class=&#34;marginpar abs&#34;&gt;
    
    Unopened HDD connected for testing
    
    &lt;/span&gt;
    

&lt;img src=&#34;https://priyatham.in/images/seagate-hdd.jpeg&#34;
  aria-describedby=&#34;fig-38b6433803bade3f9f5543b897116825-0&#34;
  loading=&#34;lazy&#34; /&gt;
    &lt;/figure&gt;

&lt;h3 id=&#34;file-system-to-expand&#34;&gt;File system to expand&lt;/h3&gt;
&lt;p&gt;I wanted something I can grow without backing it up all again, I wish to keep hoarding more data drives so having a flexible file format that I can connect and easily expand on rather than copy all of it over was the requirement. ZFS was extensively available and supported well in Proxmox which was the easier choice to go to.&lt;/p&gt;
&lt;p&gt;The inner workings of ZFS are not that known to me, nothing a YouTube video can&#39;t explain. But I wanted to select a data format that support this as well. So upon more digging, I found datasets to be flexible and utilized it.&lt;/p&gt;

&lt;figure &gt;
			&lt;input id=&#34;fig-38b6433803bade3f9f5543b897116825-1&#34; class=&#34;marginpar-ctrl&#34; type=&#34;checkbox&#34; aria-controls=&#34;the-fig-38b6433803bade3f9f5543b897116825-1&#34; hidden&gt;&lt;/input&gt;
    &lt;label for=&#34;fig-38b6433803bade3f9f5543b897116825-1&#34;&gt;&lt;/label&gt;
        &lt;span id=&#34;the-fig-38b6433803bade3f9f5543b897116825-1&#34; class=&#34;marginpar abs&#34;&gt;
    
    Opened HDD connected with adapter
    
    &lt;/span&gt;
    

&lt;img src=&#34;https://priyatham.in/images/seagate-hdd-stripped.jpg&#34;
  aria-describedby=&#34;fig-38b6433803bade3f9f5543b897116825-1&#34;
  loading=&#34;lazy&#34; /&gt;
    &lt;/figure&gt;

&lt;h3 id=&#34;dataset&#34;&gt;Dataset&lt;/h3&gt;
&lt;p&gt;I needed to do a lot of research on ZFS, this article here gave me&lt;/p&gt;
&lt;h3 id=&#34;ssd-as-a-cache-to-hdd&#34;&gt;SSD as a cache to HDD&lt;/h3&gt;
&lt;p&gt;I had 1 TB SSD that was my previous data storage and backup, since I got the new one, I wanted to use it as a cache for the big boy. It was extremely easy to add it as a cache, and it worked tirelessly to stream my Jellyfin media and Immich libraries.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;~# zpool status

  pool: seagate-media
 state: ONLINE
status: Some supported and requested features are not enabled on the pool.
        The pool can still be used, but some features are unavailable.
action: Enable all features using &#39;zpool upgrade&#39;. Once this is done,
        the pool may no longer be accessible by software that does not support
        the features. See zpool-features(7) for details.
  scan: scrub repaired 0B in 00:40:50 with 0 errors on Sun Oct 12 01:04:51 2025
config:

    NAME                                  STATE     READ WRITE CKSUM
    seagate-media                         ONLINE       0     0     0
      ata-ST26000DM000-3Y8103_ZXA0RPP4    ONLINE       0     0     0
    cache
      ata-Inland_SSD_1TB_IBMC20110011843  ONLINE       0     0     0

errors: No known data errors
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&#34;arc-memory-limit&#34;&gt;Arc memory limit&lt;/h3&gt;
&lt;p&gt;As everyone realizes that ZFS needs lot of memory, I went into the config file to reduce it later on.&lt;/p&gt;
</content:encoded>
      <enclosure url="/images/seagate-hdd-stripped.jpg" length="0" type="image/jpeg" />
    </item>
    <item>
      <title>Why a Self Hosting Server</title>
      <link>https://priyatham.in/en/post/self-host/</link>
      <pubDate>Tue, 02 Sep 2025 00:00:00 +0000</pubDate>
      <author>Priyatham</author>
      <guid>https://priyatham.in/en/post/self-host/</guid>
      <description>Cheap solution This is the easiest way to do it, I used my old laptop after moving it to Debian from windows made it so much faster, I did not expect it to survive after the keyboard is not working properly.
RSS is the king I didn&amp;amp;rsquo;t want any social media on my phone as much as possible. Although I wasn&amp;amp;rsquo;t part of the Google reader era. I liked the Flipboard app which wasn&amp;amp;rsquo;t RSS I think but subscribing to things I only wanted rather than recommendations that would keep me glued to the screen. That got me into researching into FreshRSS. The demo itself was fantastic and I liked how it was. But self-hosting it would be huge thing. I needed a domain yada-yada.
</description><content:encoded>&lt;h2 id=&#34;cheap-solution&#34;&gt;Cheap solution&lt;/h2&gt;
&lt;p&gt;This is the easiest way to do it, I used my old laptop after moving it to Debian from windows made it so much faster, I did not expect it to survive after the keyboard is not working properly.&lt;/p&gt;
&lt;h3 id=&#34;rss-is-the-king&#34;&gt;RSS is the king&lt;/h3&gt;
&lt;p&gt;I didn&#39;t want any social media on my phone as much as possible. Although I wasn&#39;t part of the Google reader era. I liked the Flipboard app which wasn&#39;t RSS I think but subscribing to things I only wanted rather than recommendations that would keep me glued to the screen. That got me into researching into FreshRSS. The demo itself was fantastic and I liked how it was. But self-hosting it would be huge thing. I needed a domain yada-yada.&lt;/p&gt;

&lt;figure &gt;
			&lt;input id=&#34;fig-d27539b30cac02676ce9ef3346dcbf2e-0&#34; class=&#34;marginpar-ctrl&#34; type=&#34;checkbox&#34; aria-controls=&#34;the-fig-d27539b30cac02676ce9ef3346dcbf2e-0&#34; hidden&gt;&lt;/input&gt;
    &lt;label for=&#34;fig-d27539b30cac02676ce9ef3346dcbf2e-0&#34;&gt;&lt;/label&gt;
        &lt;span id=&#34;the-fig-d27539b30cac02676ce9ef3346dcbf2e-0&#34; class=&#34;marginpar abs&#34;&gt;
    
    The laptop server itself on a stand
    
    &lt;/span&gt;
    

&lt;img src=&#34;https://priyatham.in/images/hp-laptop-server.jpg&#34;
  aria-describedby=&#34;fig-d27539b30cac02676ce9ef3346dcbf2e-0&#34;
  loading=&#34;lazy&#34; /&gt;
    &lt;/figure&gt;

&lt;h3 id=&#34;a-way-to-host-my-portfolio&#34;&gt;A way to host my portfolio&lt;/h3&gt;
&lt;p&gt;I wanted a portfolio, my piece of the internet. Being part of the community with the least amount of money i.e. a graduate student. I wanted something absolutely free. That got me into GitHub pages to start. The restrictions on github pages got me out of it, and the privacy element of giving it all away wasn&#39;t sitting right with me.&lt;/p&gt;

&lt;figure &gt;
			&lt;input id=&#34;fig-d27539b30cac02676ce9ef3346dcbf2e-1&#34; class=&#34;marginpar-ctrl&#34; type=&#34;checkbox&#34; aria-controls=&#34;the-fig-d27539b30cac02676ce9ef3346dcbf2e-1&#34; hidden&gt;&lt;/input&gt;
    &lt;label for=&#34;fig-d27539b30cac02676ce9ef3346dcbf2e-1&#34;&gt;&lt;/label&gt;
        &lt;span id=&#34;the-fig-d27539b30cac02676ce9ef3346dcbf2e-1&#34; class=&#34;marginpar abs&#34;&gt;
    
    That&amp;#39;s my beloved first server, a HP laptop on a stand, The power bricks are for a display and another laptop. The switch is a treat, it was flashed with an open source tasmota that connects to my home-assistant vm on proxmox. 
    
    &lt;/span&gt;
    

&lt;img src=&#34;https://priyatham.in/images/self-host-laptop.jpeg&#34;
  aria-describedby=&#34;fig-d27539b30cac02676ce9ef3346dcbf2e-1&#34;
  loading=&#34;lazy&#34; /&gt;
    &lt;/figure&gt;

&lt;p&gt;With my server needing a lot of power and needing a general PC for myself, I found a fairly modern gaming pc from a high school kid moving to college and got it for 600 bucks. It has as an AM5 decent board with 12 GB VRAM. Sufficient and6 cores good enough for me, Threadripper would have been nicer but I couldn&#39;t resist this offer.&lt;/p&gt;
&lt;p&gt;What to install on the PC was a huge mystery, I needed a Windows machine for some games and a little stability but also Linux to work and enjoy the ease. After a lot of search, landed on Proxmox, to easily migrate services if I got a better server. Having a windows vm was also nice. I already had a SSD with windows and plenty of games, plugged it right in and used it to create the VM with no other configurations needed which was nice.&lt;/p&gt;

&lt;figure &gt;
			&lt;input id=&#34;fig-d27539b30cac02676ce9ef3346dcbf2e-2&#34; class=&#34;marginpar-ctrl&#34; type=&#34;checkbox&#34; aria-controls=&#34;the-fig-d27539b30cac02676ce9ef3346dcbf2e-2&#34; hidden&gt;&lt;/input&gt;
    &lt;label for=&#34;fig-d27539b30cac02676ce9ef3346dcbf2e-2&#34;&gt;&lt;/label&gt;
        &lt;span id=&#34;the-fig-d27539b30cac02676ce9ef3346dcbf2e-2&#34; class=&#34;marginpar abs&#34;&gt;
    
    Inside a gaming pc with LED lights showing the cooler fan and GPU
    
    &lt;/span&gt;
    

&lt;img src=&#34;https://priyatham.in/images/new-pc-selfhost.jpg&#34;
  aria-describedby=&#34;fig-d27539b30cac02676ce9ef3346dcbf2e-2&#34;
  loading=&#34;lazy&#34; /&gt;
    &lt;/figure&gt;

&lt;p&gt;For my data backups and how I used ZFS, look into this &lt;a href=&#34;https://priyatham.in/en/post/seagate-zfs/&#34;&gt;(shucking Seagate for ZFS)&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This is still in making, I will talk about Proxmox pretty soon.&lt;/p&gt;
</content:encoded>
      <enclosure url="/images/new-pc-selfhost.jpg" length="0" type="image/jpeg" />
    </item>
  </channel>
</rss>
