# Posts on Harsh Shandilya

Posts by Harsh Shandilya

This is one page of public article previews, not the complete archive. Follow Next page to continue. Summaries are not the original full articles.

## Rewriting Claw's HTML parser for over-the-air updates

DevFeed: [Rewriting Claw's HTML parser for over-the-air updates](<https://devfeed.tech/articles/rewriting-claw-s-html-parser-for-over-the-air-updates-38555.md>)

Original publisher: [Read original article](<https://msfjarvis.dev/posts/rewriting-claw-html-parser-for-over-the-air-updates/>)

Author: Harsh Shandilya

Published: 2026-07-17T13:34:00Z

Content type: opinion

Language: en

Sources: [Posts on Harsh Shandilya](<https://devfeed.tech/sources/posts-on-harsh-shandilya.md>)

Topics: [HTML](<https://devfeed.tech/topics/html.md>), [Android](<https://devfeed.tech/topics/android.md>), [API](<https://devfeed.tech/topics/api.md>), [CSS](<https://devfeed.tech/topics/css.md>), [Rails](<https://devfeed.tech/topics/rails.md>), [JavaScript](<https://devfeed.tech/topics/javascript.md>), [Gradle](<https://devfeed.tech/topics/gradle.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [api](<https://devfeed.tech/tags/api.md>), [css](<https://devfeed.tech/tags/css.md>), [debugging](<https://devfeed.tech/tags/debugging.md>), [firefox](<https://devfeed.tech/tags/firefox.md>), [gradle](<https://devfeed.tech/tags/gradle.md>), [html](<https://devfeed.tech/tags/html.md>), [javascript](<https://devfeed.tech/tags/javascript.md>), [kotlin-multiplatform](<https://devfeed.tech/tags/kotlin-multiplatform.md>), [llms](<https://devfeed.tech/tags/llms.md>)

### AI overview

The article describes rewriting the HTML parser in the Android app Claw, which browses Lobsters, after concerns about relying on the site's unsupported JSON API. It explains the parsing work, the breakage caused by markup changes, and the search for faster over-the-air deployment using approaches such as Expo EAS Update and Cash App's Zipline.

### Source excerpt

Struggling through a brand new framework so I can hotfix my app faster

## Duplicate RSS posts were caused by an incorrect deployment

DevFeed: [Duplicate RSS posts were caused by an incorrect deployment](<https://devfeed.tech/articles/apologies-for-the-rss-mishap-38524.md>)

Original publisher: [Read original article](<https://msfjarvis.dev/posts/apologies-for-the-rss-mishap/>)

Author: Harsh Shandilya

Published: 2026-07-10T19:34:00Z

Content type: opinion

Language: en

Sources: [Posts on Harsh Shandilya](<https://devfeed.tech/sources/posts-on-harsh-shandilya.md>)

Topics: [RSS Feed](<https://devfeed.tech/topics/rss-feed.md>), [Deployment](<https://devfeed.tech/topics/deployment.md>)

Tags: [deployment](<https://devfeed.tech/tags/deployment.md>), [meta](<https://devfeed.tech/tags/meta.md>), [rss](<https://devfeed.tech/tags/rss.md>)

### AI overview

The author apologizes for sending subscribers duplicate, incomplete, and draft posts after deploying the wrong site configuration. They recommend deleting and re-adding the affected RSS feeds.

### Source excerpt

Defeated yet again by an entirely too complicated build pipeline

## JulyReply - Re: Stuck in draft

DevFeed: [JulyReply - Re: Stuck in draft](<https://devfeed.tech/articles/julyreply-re-stuck-in-draft-38539.md>)

Original publisher: [Read original article](<https://msfjarvis.dev/posts/julyreply-re-stuck-in-draft/>)

Author: Harsh Shandilya

Published: 2026-07-09T18:52:00Z

Content type: opinion

Language: en

Sources: [Posts on Harsh Shandilya](<https://devfeed.tech/sources/posts-on-harsh-shandilya.md>)

Topics: [Learning](<https://devfeed.tech/topics/learning.md>), [Parser](<https://devfeed.tech/topics/parser.md>), [REST API](<https://devfeed.tech/topics/rest-api.md>), [Containers](<https://devfeed.tech/topics/containers.md>), [Git](<https://devfeed.tech/topics/git.md>), [Cloudflare](<https://devfeed.tech/topics/cloudflare.md>), [Compose](<https://devfeed.tech/topics/compose.md>), [LLMs](<https://devfeed.tech/topics/llms.md>), [Command-line interface](<https://devfeed.tech/topics/cli.md>)

Tags: [blog](<https://devfeed.tech/tags/blog.md>), [blog-posts](<https://devfeed.tech/tags/blog-posts.md>), [blogging](<https://devfeed.tech/tags/blogging.md>), [cli](<https://devfeed.tech/tags/cli.md>), [cloudflare](<https://devfeed.tech/tags/cloudflare.md>), [compose](<https://devfeed.tech/tags/compose.md>), [containers](<https://devfeed.tech/tags/containers.md>), [git](<https://devfeed.tech/tags/git.md>), [julyreply](<https://devfeed.tech/tags/julyreply.md>), [llms](<https://devfeed.tech/tags/llms.md>), [rest-api](<https://devfeed.tech/tags/rest-api.md>), [technical-writing](<https://devfeed.tech/tags/technical-writing.md>)

### AI overview

The author reflects on managing unfinished blog drafts, explaining that feedback, public interest, curiosity, and motivation sometimes lead to completion while many drafts are abandoned. They invite readers to vote on several proposed technical topics, including Retrofit, an HTML parser, Git, Docker containers in NixOS, Cloudflare, Compose UI, and LLM-assisted development.

### Source excerpt

On drafts and being okay with them

## My first spam Webmention

DevFeed: [My first spam Webmention](<https://devfeed.tech/articles/my-first-spam-webmention-38553.md>)

Original publisher: [Read original article](<https://msfjarvis.dev/posts/my-first-spam-webmention/>)

Author: Harsh Shandilya

Published: 2026-07-07T10:39:00Z

Content type: article

Language: en

Sources: [Posts on Harsh Shandilya](<https://devfeed.tech/sources/posts-on-harsh-shandilya.md>)

Topics: [Website](<https://devfeed.tech/topics/website.md>), [Cloudflare Access](<https://devfeed.tech/topics/cloudflare-access.md>), [Cloudflare](<https://devfeed.tech/topics/cloudflare.md>), [dashboards](<https://devfeed.tech/topics/dashboards.md>), [SQL](<https://devfeed.tech/topics/sql.md>), [ui](<https://devfeed.tech/topics/ui.md>), [web design](<https://devfeed.tech/topics/web-design.md>)

Tags: [bluesky](<https://devfeed.tech/tags/bluesky.md>), [cloudflare](<https://devfeed.tech/tags/cloudflare.md>), [cloudflare-access](<https://devfeed.tech/tags/cloudflare-access.md>), [code](<https://devfeed.tech/tags/code.md>), [dashboard](<https://devfeed.tech/tags/dashboard.md>), [spam](<https://devfeed.tech/tags/spam.md>), [sql](<https://devfeed.tech/tags/sql.md>), [ui](<https://devfeed.tech/tags/ui.md>), [web-design](<https://devfeed.tech/tags/web-design.md>), [webmentions](<https://devfeed.tech/tags/webmentions.md>)

### AI overview

The author describes receiving a spam Webmention and building a basic moderation dashboard for a Webmentions server. The dashboard lists pages that received Webmentions and provides links to moderation controls, with access protected by Cloudflare Access rather than application-level authentication.

### Source excerpt

Finally being forced to build moderation capabilities into my Webmentions server

## Keeping AI crawlers off my Forgejo server

DevFeed: [Keeping AI crawlers off my Forgejo server](<https://devfeed.tech/articles/keeping-ai-crawlers-off-my-forgejo-server-38540.md>)

Original publisher: [Read original article](<https://msfjarvis.dev/posts/keeping-ai-crawlers-off-my-forgejo-server/>)

Author: Harsh Shandilya

Published: 2026-06-29T04:53:18Z

Content type: article

Language: en

Sources: [Posts on Harsh Shandilya](<https://devfeed.tech/sources/posts-on-harsh-shandilya.md>)

Topics: [forgejo](<https://devfeed.tech/topics/forgejo.md>), [AI Bots](<https://devfeed.tech/topics/ai-bots.md>), [Cloudflare](<https://devfeed.tech/topics/cloudflare.md>), [Security](<https://devfeed.tech/topics/security.md>), [Fail2ban](<https://devfeed.tech/topics/fail2ban.md>), [Server](<https://devfeed.tech/topics/server.md>)

Tags: [ai](<https://devfeed.tech/tags/ai.md>), [ai-crawlers](<https://devfeed.tech/tags/ai-crawlers.md>), [cloudflare](<https://devfeed.tech/tags/cloudflare.md>), [crawlers](<https://devfeed.tech/tags/crawlers.md>), [fail2ban](<https://devfeed.tech/tags/fail2ban.md>), [forgejo](<https://devfeed.tech/tags/forgejo.md>), [security](<https://devfeed.tech/tags/security.md>), [server](<https://devfeed.tech/tags/server.md>)

### AI overview

A developer describes mitigating AI crawler traffic against a Forgejo instance using fail2ban, Caddy configuration, and Cloudflare rules. The measures reduced some traffic but also exposed client-IP handling and availability issues, while IP bans approached Cloudflare's access-rule limit.

### Source excerpt

The short and bumbling journey to finally giving my tiny VPS some respite

## Taming my intimidating RSS reader queue

DevFeed: [Taming my intimidating RSS reader queue](<https://devfeed.tech/articles/taming-my-intimidating-rss-reader-queue-38557.md>)

Original publisher: [Read original article](<https://msfjarvis.dev/posts/taming-my-intimidating-rss-reader-queue/>)

Author: Harsh Shandilya

Published: 2026-06-18T07:22:00Z

Content type: opinion

Language: en

Sources: [Posts on Harsh Shandilya](<https://devfeed.tech/sources/posts-on-harsh-shandilya.md>)

Topics: [Miniflux](<https://devfeed.tech/topics/miniflux.md>), [RSS](<https://devfeed.tech/topics/rss.md>)

Tags: [analysis](<https://devfeed.tech/tags/analysis.md>), [habits](<https://devfeed.tech/tags/habits.md>), [miniflux](<https://devfeed.tech/tags/miniflux.md>), [queue](<https://devfeed.tech/tags/queue.md>), [reading](<https://devfeed.tech/tags/reading.md>), [rss](<https://devfeed.tech/tags/rss.md>)

### AI overview

The author explains how changes to Miniflux improved their RSS reading experience. They found that perception of an overwhelming unread queue, rather than individual feeds alone, was the main problem, and reduced the pressure by hiding high-volume or low-signal feeds from the global unread list.

### Source excerpt

How I regained control of my reading habits

## Setting up forward auth with Caddy and Pocket ID

DevFeed: [Setting up forward auth with Caddy and Pocket ID](<https://devfeed.tech/articles/setting-up-forward-auth-with-caddy-and-pocket-id-38556.md>)

Original publisher: [Read original article](<https://msfjarvis.dev/posts/setting-up-forward-auth-with-caddy-and-pocket-id/>)

Author: Harsh Shandilya

Published: 2026-03-21T10:03:00Z

Content type: tutorial

Language: en

Sources: [Posts on Harsh Shandilya](<https://devfeed.tech/sources/posts-on-harsh-shandilya.md>)

Topics: [Authentication](<https://devfeed.tech/topics/authentication.md>), [OpenID connect (OIDC)](<https://devfeed.tech/topics/oidc.md>), [Single sign-on (SSO)](<https://devfeed.tech/topics/sso.md>), [configuration](<https://devfeed.tech/topics/configuration.md>), [Security](<https://devfeed.tech/topics/security.md>), [Routing (disambiguation)](<https://devfeed.tech/topics/routing.md>), [Deployment](<https://devfeed.tech/topics/deployment.md>)

Tags: [auth](<https://devfeed.tech/tags/auth.md>), [authentication](<https://devfeed.tech/tags/authentication.md>), [caddy](<https://devfeed.tech/tags/caddy.md>), [configuration](<https://devfeed.tech/tags/configuration.md>), [deployment](<https://devfeed.tech/tags/deployment.md>), [forward-auth](<https://devfeed.tech/tags/forward-auth.md>), [nixos](<https://devfeed.tech/tags/nixos.md>), [oidc](<https://devfeed.tech/tags/oidc.md>), [pocket-id](<https://devfeed.tech/tags/pocket-id.md>), [reverse-proxy](<https://devfeed.tech/tags/reverse-proxy.md>), [routing](<https://devfeed.tech/tags/routing.md>), [security](<https://devfeed.tech/tags/security.md>), [sso](<https://devfeed.tech/tags/sso.md>)

### AI overview

A practical guide to configuring forward authentication with Caddy, Pocket ID, and OIDC, including service-specific authentication portals and deployment details for NixOS. It also notes regressions in caddy-security and the author's planned move to Authelia and LLDAP.

### Source excerpt

Using Pocket ID to secure services being proxied by Caddy

## AI agents, layoffs, and the value of human work in technology

DevFeed: [AI agents, layoffs, and the value of human work in technology](<https://devfeed.tech/articles/you-are-worth-more-than-your-work-38562.md>)

Original publisher: [Read original article](<https://msfjarvis.dev/posts/you-are-worth-more-than-your-work/>)

Author: Harsh Shandilya

Published: 2026-03-07T11:02:00Z

Content type: opinion

Language: en

Sources: [Posts on Harsh Shandilya](<https://devfeed.tech/sources/posts-on-harsh-shandilya.md>)

Topics: [AI Agent](<https://devfeed.tech/topics/ai-agent.md>), [Large Language Model](<https://devfeed.tech/topics/llm.md>), [Artificial Intelligence](<https://devfeed.tech/topics/ai.md>)

Tags: [agents](<https://devfeed.tech/tags/agents.md>), [ai](<https://devfeed.tech/tags/ai.md>), [ai-agent](<https://devfeed.tech/tags/ai-agent.md>), [ai-agents](<https://devfeed.tech/tags/ai-agents.md>), [llm](<https://devfeed.tech/tags/llm.md>), [llms](<https://devfeed.tech/tags/llms.md>), [tech-industry](<https://devfeed.tech/tags/tech-industry.md>)

### AI overview

This opinion article reflects on human value and job security as LLMs and AI agents automate programming work. It argues that programmers should not define their worth solely by productivity or shareholder value, while acknowledging that AI-driven layoffs and the possibility of reduced demand for programmers are reasonable concerns.

### Source excerpt

Disjointed thoughts on human value in the face of LLM-attributed layoffs

## Migrating my website's analytics from Plausible to Umami

DevFeed: [Migrating my website's analytics from Plausible to Umami](<https://devfeed.tech/articles/migrating-my-website-s-analytics-from-plausible-to-umami-38550.md>)

Original publisher: [Read original article](<https://msfjarvis.dev/posts/migrating-my-website-s-analytics-from-plausible-to-umami/>)

Author: Harsh Shandilya

Published: 2026-01-09T19:10:00Z

Content type: tutorial

Language: en

Sources: [Posts on Harsh Shandilya](<https://devfeed.tech/sources/posts-on-harsh-shandilya.md>)

Topics: [Website](<https://devfeed.tech/topics/website.md>), [migration](<https://devfeed.tech/topics/migration.md>), [clickhouse](<https://devfeed.tech/topics/clickhouse.md>), [SQL](<https://devfeed.tech/topics/sql.md>), [Python](<https://devfeed.tech/topics/python.md>), [Databases](<https://devfeed.tech/topics/databases.md>)

Tags: [analytics](<https://devfeed.tech/tags/analytics.md>), [clickhouse](<https://devfeed.tech/tags/clickhouse.md>), [data](<https://devfeed.tech/tags/data.md>), [database](<https://devfeed.tech/tags/database.md>), [forgejo](<https://devfeed.tech/tags/forgejo.md>), [migration](<https://devfeed.tech/tags/migration.md>), [plausible](<https://devfeed.tech/tags/plausible.md>), [python](<https://devfeed.tech/tags/python.md>), [selfhosting](<https://devfeed.tech/tags/selfhosting.md>), [sql](<https://devfeed.tech/tags/sql.md>), [umami](<https://devfeed.tech/tags/umami.md>), [website](<https://devfeed.tech/tags/website.md>)

### AI overview

A personal guide to migrating website analytics from Plausible to Umami. It describes setting up Umami, exporting Plausible data, converting the export with a third-party Python script, importing the resulting SQL file, updating the website configuration, and reclaiming disk space after removing ClickHouse data.

### Source excerpt

Frustrated by ClickHouse's high disk usage, I ditched Plausible for Umami

## OpenCode Made LLMs Useful for This Developer

DevFeed: [OpenCode Made LLMs Useful for This Developer](<https://devfeed.tech/articles/coming-around-on-the-utility-of-llms-38531.md>)

Original publisher: [Read original article](<https://msfjarvis.dev/posts/coming-around-on-the-utility-of-llms/>)

Author: Harsh Shandilya

Published: 2026-01-02T16:53:00Z

Content type: opinion

Language: en

Sources: [Posts on Harsh Shandilya](<https://devfeed.tech/sources/posts-on-harsh-shandilya.md>)

Topics: [Large Language Model](<https://devfeed.tech/topics/llm.md>)

Tags: [ai](<https://devfeed.tech/tags/ai.md>), [llm](<https://devfeed.tech/tags/llm.md>), [llms](<https://devfeed.tech/tags/llms.md>), [opencode](<https://devfeed.tech/tags/opencode.md>)

### AI overview

A developer describes finding earlier LLM tools underwhelming but says OpenCode, used with oh-my-opencode, made LLM-assisted programming useful for their work on Claw.

### Source excerpt

Having unsuccessfully tried to use Windsurf and GitHub Copilot over the years, OpenCode finally made LLMs useful to me

## My experience at droidcon India 2025

DevFeed: [My experience at droidcon India 2025](<https://devfeed.tech/articles/my-experience-at-droidcon-india-2025-38552.md>)

Original publisher: [Read original article](<https://msfjarvis.dev/posts/my-experience-at-droidcon-india-2025/>)

Author: Harsh Shandilya

Published: 2025-12-14T06:47:00Z

Content type: opinion

Language: en

Sources: [Posts on Harsh Shandilya](<https://devfeed.tech/sources/posts-on-harsh-shandilya.md>)

Topics: [Android](<https://devfeed.tech/topics/android.md>), [Kotlin Multiplatform](<https://devfeed.tech/topics/kotlin-multiplatform.md>), [perfetto](<https://devfeed.tech/topics/perfetto.md>), [tracing](<https://devfeed.tech/topics/tracing.md>)

Tags: [2025](<https://devfeed.tech/tags/2025.md>), [dcin25](<https://devfeed.tech/tags/dcin25.md>), [droidcon](<https://devfeed.tech/tags/droidcon.md>), [india](<https://devfeed.tech/tags/india.md>)

### AI overview

A personal report from droidcon India 2025, covering conversations and talks on passkeys, Kotlin Multiplatform, Perfetto, and the in-development Tracing 2.0 library.

### Source excerpt

I finally stepped out of my house! And met people! So cool!

## Creating private services on NixOS using Tailscale and Caddy

DevFeed: [Creating private services on NixOS using Tailscale and Caddy](<https://devfeed.tech/articles/creating-private-services-on-nixos-using-tailscale-and-caddy-38533.md>)

Original publisher: [Read original article](<https://msfjarvis.dev/posts/creating-private-services-on-nixos-using-tailscale-and-caddy/>)

Author: Harsh Shandilya

Published: 2025-09-13T15:48:00Z

Content type: tutorial

Language: en

Sources: [Posts on Harsh Shandilya](<https://devfeed.tech/sources/posts-on-harsh-shandilya.md>)

Topics: [tailscale](<https://devfeed.tech/topics/tailscale.md>), [Authentication](<https://devfeed.tech/topics/authentication.md>), [proxy](<https://devfeed.tech/topics/proxy.md>), [Grafana](<https://devfeed.tech/topics/grafana.md>), [Server](<https://devfeed.tech/topics/server.md>)

Tags: [authentication](<https://devfeed.tech/tags/authentication.md>), [caddy](<https://devfeed.tech/tags/caddy.md>), [integration](<https://devfeed.tech/tags/integration.md>), [nixos](<https://devfeed.tech/tags/nixos.md>), [release](<https://devfeed.tech/tags/release.md>), [tailscale](<https://devfeed.tech/tags/tailscale.md>)

### AI overview

A guide to configuring private services on NixOS with Tailscale and Caddy. It explains the experimental Caddy integration, installation of the caddy-tailscale plugin, authentication-key configuration, and a Grafana setup that uses Tailscale identity for access. The article also notes device-limit and duplicate-dashboard-entry caveats.

### Source excerpt

A simple guide to setting up private services on NixOS using Tailscale and Caddy with authentication.

## Migrating from Gitea to Forgejo the long way

DevFeed: [Migrating from Gitea to Forgejo the long way](<https://devfeed.tech/articles/migrating-from-gitea-to-forgejo-the-long-way-38547.md>)

Original publisher: [Read original article](<https://msfjarvis.dev/posts/migrating-from-gitea-to-forgejo-the-long-way/>)

Author: Harsh Shandilya

Published: 2025-09-01T14:02:00Z

Content type: tutorial

Language: en

Sources: [Posts on Harsh Shandilya](<https://devfeed.tech/sources/posts-on-harsh-shandilya.md>)

Topics: [forgejo](<https://devfeed.tech/topics/forgejo.md>), [Gitea](<https://devfeed.tech/topics/gitea.md>), [migration](<https://devfeed.tech/topics/migration.md>), [PostgreSQL](<https://devfeed.tech/topics/postgresql.md>), [SQLite](<https://devfeed.tech/topics/sqlite.md>), [Zip](<https://devfeed.tech/topics/zip.md>)

Tags: [forgejo](<https://devfeed.tech/tags/forgejo.md>), [forgejo-migration](<https://devfeed.tech/tags/forgejo-migration.md>), [gitea](<https://devfeed.tech/tags/gitea.md>), [github](<https://devfeed.tech/tags/github.md>), [github-alternative](<https://devfeed.tech/tags/github-alternative.md>), [github-copilot](<https://devfeed.tech/tags/github-copilot.md>), [migration](<https://devfeed.tech/tags/migration.md>), [postgresql](<https://devfeed.tech/tags/postgresql.md>), [sqlite](<https://devfeed.tech/tags/sqlite.md>)

### AI overview

A firsthand account of migrating a Git server from Gitea to Forgejo. The author describes why a direct instance migration no longer worked, the risks of an attempted upgrade, and later approaches involving account-by-account migration and database dumps.

### Source excerpt

With the renewed interest in Forgejo I decided to finally pull the plug on moving out of Gitea, and this is how it went.

## Mildly overengineering my Glance configuration

DevFeed: [Mildly overengineering my Glance configuration](<https://devfeed.tech/articles/mildly-overengineering-my-glance-configuration-38551.md>)

Original publisher: [Read original article](<https://msfjarvis.dev/posts/mildly-overengineering-my-glance-configuration/>)

Author: Harsh Shandilya

Published: 2025-05-07T17:35:00Z

Content type: article

Language: en

Sources: [Posts on Harsh Shandilya](<https://devfeed.tech/sources/posts-on-harsh-shandilya.md>)

Topics: [configuration](<https://devfeed.tech/topics/configuration.md>), [dashboards](<https://devfeed.tech/topics/dashboards.md>), [Nix](<https://devfeed.tech/topics/nix.md>), [YAML](<https://devfeed.tech/topics/yaml.md>), [Bash](<https://devfeed.tech/topics/bash.md>), [iteration](<https://devfeed.tech/topics/iteration.md>), [browser](<https://devfeed.tech/topics/browser.md>)

Tags: [bash](<https://devfeed.tech/tags/bash.md>), [configuration](<https://devfeed.tech/tags/configuration.md>), [dashboard](<https://devfeed.tech/tags/dashboard.md>), [iteration](<https://devfeed.tech/tags/iteration.md>), [nix](<https://devfeed.tech/tags/nix.md>), [script](<https://devfeed.tech/tags/script.md>), [terminal](<https://devfeed.tech/tags/terminal.md>)

### AI overview

A personal account of configuring a Glance dashboard with NixOS. The author converts Nix configuration into YAML, uses automatic regeneration and reloads, and combines watchexec with a small Bash script to streamline iteration in an editor and browser.

### Source excerpt

The story of setting up a live environment for configuring my Glance dashboard

## Migrating from Simple Analytics to self-hosted Plausible

DevFeed: [Migrating from Simple Analytics to self-hosted Plausible](<https://devfeed.tech/articles/migrating-from-simple-analytics-to-self-hosted-plausible-38549.md>)

Original publisher: [Read original article](<https://msfjarvis.dev/posts/migrating-from-simple-analytics-to-self-hosted-plausible/>)

Author: Harsh Shandilya

Published: 2025-04-22T11:13:00Z

Content type: article

Language: en

Sources: [Posts on Harsh Shandilya](<https://devfeed.tech/sources/posts-on-harsh-shandilya.md>)

Topics: [migration](<https://devfeed.tech/topics/migration.md>), [Self-hosted](<https://devfeed.tech/topics/self-hosted.md>), [Netlify](<https://devfeed.tech/topics/netlify.md>), [clickhouse](<https://devfeed.tech/topics/clickhouse.md>), [CSV](<https://devfeed.tech/topics/csv.md>), [data](<https://devfeed.tech/topics/data.md>), [Website](<https://devfeed.tech/topics/website.md>), [MySQL](<https://devfeed.tech/topics/mysql.md>), [PHP](<https://devfeed.tech/topics/php.md>)

Tags: [analytics](<https://devfeed.tech/tags/analytics.md>), [clickhouse](<https://devfeed.tech/tags/clickhouse.md>), [csv](<https://devfeed.tech/tags/csv.md>), [data](<https://devfeed.tech/tags/data.md>), [elixir](<https://devfeed.tech/tags/elixir.md>), [github](<https://devfeed.tech/tags/github.md>), [hosting](<https://devfeed.tech/tags/hosting.md>), [migration](<https://devfeed.tech/tags/migration.md>), [mysql](<https://devfeed.tech/tags/mysql.md>), [netlify](<https://devfeed.tech/tags/netlify.md>), [nixos](<https://devfeed.tech/tags/nixos.md>), [php](<https://devfeed.tech/tags/php.md>), [plausible](<https://devfeed.tech/tags/plausible.md>), [postgres](<https://devfeed.tech/tags/postgres.md>), [privacy](<https://devfeed.tech/tags/privacy.md>), [self-hosted](<https://devfeed.tech/tags/self-hosted.md>), [selfhosting](<https://devfeed.tech/tags/selfhosting.md>), [simpleanalytics](<https://devfeed.tech/tags/simpleanalytics.md>)

### AI overview

A personal account of migrating a blog from Simple Analytics to self-hosted Plausible on a netcup server running NixOS. The article covers choosing Plausible over Matomo, configuring the service, replacing the website's analytics snippet, improving privacy for visitors who disable JavaScript, and beginning the migration of exported historical data.

### Source excerpt

Documenting the misadventures of self-hosting my site analytics

## Overengineering an Obsidian dashboard to get better at Marvel Snap

DevFeed: [Overengineering an Obsidian dashboard to get better at Marvel Snap](<https://devfeed.tech/articles/overengineering-an-obsidian-dashboard-to-get-better-at-marvel-snap-38554.md>)

Original publisher: [Read original article](<https://msfjarvis.dev/posts/overengineering-an-obsidian-dashboard-to-get-better-at-marvel-snap/>)

Author: Harsh Shandilya

Published: 2025-04-01T05:16:52Z

Content type: article

Language: en

Sources: [Posts on Harsh Shandilya](<https://devfeed.tech/sources/posts-on-harsh-shandilya.md>)

Topics: [Obsidian](<https://devfeed.tech/topics/obsidian-md.md>), [dashboards](<https://devfeed.tech/topics/dashboards.md>), [data](<https://devfeed.tech/topics/data.md>), [Statistics](<https://devfeed.tech/topics/statistics.md>)

Tags: [dashboard](<https://devfeed.tech/tags/dashboard.md>), [data](<https://devfeed.tech/tags/data.md>), [games](<https://devfeed.tech/tags/games.md>), [markdown](<https://devfeed.tech/tags/markdown.md>), [obsidian](<https://devfeed.tech/tags/obsidian.md>), [plugin](<https://devfeed.tech/tags/plugin.md>), [statistics](<https://devfeed.tech/tags/statistics.md>), [visualization](<https://devfeed.tech/tags/visualization.md>), [yaml](<https://devfeed.tech/tags/yaml.md>)

### AI overview

The author describes building an Obsidian-based system to track and visualize Marvel Snap game statistics. The system uses YAML frontmatter, Markdown notes, templates, and the Obsidian DataView plugin to analyze data such as decks, locations, outcomes, and cubes.

### Source excerpt

Using data to answer the ultimate gamer question - why am I so bad?

## The Obsidian Migration - One Week Later

DevFeed: [The Obsidian Migration - One Week Later](<https://devfeed.tech/articles/the-obsidian-migration-one-week-later-38558.md>)

Original publisher: [Read original article](<https://msfjarvis.dev/posts/the-obsidian-migration--one-week-later/>)

Author: Harsh Shandilya

Published: 2025-03-17T05:38:37Z

Content type: article

Language: en

Sources: [Posts on Harsh Shandilya](<https://devfeed.tech/sources/posts-on-harsh-shandilya.md>)

Topics: [Obsidian](<https://devfeed.tech/topics/obsidian-md.md>), [migration](<https://devfeed.tech/topics/migration.md>), [GitHub Copilot](<https://devfeed.tech/topics/github-copilot.md>), [Code](<https://devfeed.tech/topics/code.md>), [Python](<https://devfeed.tech/topics/python.md>), [Mobile](<https://devfeed.tech/topics/mobile.md>)

Tags: [code](<https://devfeed.tech/tags/code.md>), [experience-report](<https://devfeed.tech/tags/experience-report.md>), [github-copilot](<https://devfeed.tech/tags/github-copilot.md>), [logseq](<https://devfeed.tech/tags/logseq.md>), [migration](<https://devfeed.tech/tags/migration.md>), [mobile](<https://devfeed.tech/tags/mobile.md>), [notes](<https://devfeed.tech/tags/notes.md>), [obsidian](<https://devfeed.tech/tags/obsidian.md>), [python](<https://devfeed.tech/tags/python.md>)

### AI overview

An experience report about moving from Logseq to Obsidian after a week. The author describes using a Python script, developed iteratively with GitHub Copilot, to migrate dates and tags, and notes that Obsidian plugins also work on mobile.

### Source excerpt

An experience report of using Obsidian for a week, coming from a year of Logseq

## Migrating from Logseq to Obsidian

DevFeed: [Migrating from Logseq to Obsidian](<https://devfeed.tech/articles/migrating-from-logseq-to-obsidian-38548.md>)

Original publisher: [Read original article](<https://msfjarvis.dev/posts/migrating-from-logseq-to-obsidian/>)

Author: Harsh Shandilya

Published: 2025-03-09T10:29:00Z

Content type: tutorial

Language: en

Sources: [Posts on Harsh Shandilya](<https://devfeed.tech/sources/posts-on-harsh-shandilya.md>)

Topics: [Obsidian](<https://devfeed.tech/topics/obsidian-md.md>), [migration](<https://devfeed.tech/topics/migration.md>), [task management](<https://devfeed.tech/topics/task-management.md>), [configuration](<https://devfeed.tech/topics/configuration.md>)

Tags: [configuration](<https://devfeed.tech/tags/configuration.md>), [daily](<https://devfeed.tech/tags/daily.md>), [git](<https://devfeed.tech/tags/git.md>), [logseq](<https://devfeed.tech/tags/logseq.md>), [migrate](<https://devfeed.tech/tags/migrate.md>), [notes](<https://devfeed.tech/tags/notes.md>), [obsidian](<https://devfeed.tech/tags/obsidian.md>), [plugins](<https://devfeed.tech/tags/plugins.md>)

### AI overview

The author describes migrating a daily journaling workflow from Logseq to Obsidian after Logseq's Electron version became end-of-life and was removed from Nixpkgs on security grounds. The article covers file changes, enabled plugins, configuration settings, and unresolved migration issues.

### Source excerpt

Logseq's clunky apps and glacial development pace finally motivated me to migrate my journaling to Obsidian, here's how I did it.

## Assorted NixOS things

DevFeed: [Assorted NixOS things](<https://devfeed.tech/articles/assorted-nixos-things-38528.md>)

Original publisher: [Read original article](<https://msfjarvis.dev/posts/assorted-nixos-things/>)

Author: Harsh Shandilya

Published: 2024-12-07T20:19:00Z

Content type: article

Language: en

Sources: [Posts on Harsh Shandilya](<https://devfeed.tech/sources/posts-on-harsh-shandilya.md>)

Topics: [Nix](<https://devfeed.tech/topics/nix.md>), [Command-line interface](<https://devfeed.tech/topics/cli.md>), [systems](<https://devfeed.tech/topics/systems.md>), [tailscale](<https://devfeed.tech/topics/tailscale.md>), [Virtual Private Network](<https://devfeed.tech/topics/vpn.md>), [Text-based user interface](<https://devfeed.tech/topics/tui.md>)

Tags: [cli](<https://devfeed.tech/tags/cli.md>), [commands](<https://devfeed.tech/tags/commands.md>), [configuration](<https://devfeed.tech/tags/configuration.md>), [dependencies](<https://devfeed.tech/tags/dependencies.md>), [errors](<https://devfeed.tech/tags/errors.md>), [git](<https://devfeed.tech/tags/git.md>), [module](<https://devfeed.tech/tags/module.md>), [nix](<https://devfeed.tech/tags/nix.md>), [nixos](<https://devfeed.tech/tags/nixos.md>), [nixpkgs](<https://devfeed.tech/tags/nixpkgs.md>), [packages](<https://devfeed.tech/tags/packages.md>), [repl](<https://devfeed.tech/tags/repl.md>), [tailscale](<https://devfeed.tech/tags/tailscale.md>)

### AI overview

A running log of practical NixOS, Nix, and Nixpkgs notes covering flake metadata, the module system, package updates, the Nix language, REPL builds, fixed-output derivations, and Tailscale exit nodes.

### Source excerpt

Running log of random things I've learned about Nix/NixOS/Nixpkgs

## Deploying applications to Fly.io without Docker

DevFeed: [Deploying applications to Fly.io without Docker](<https://devfeed.tech/articles/deploying-applications-to-fly-io-without-docker-38534.md>)

Original publisher: [Read original article](<https://msfjarvis.dev/posts/deploying-applications-to-flyio-without-docker/>)

Author: Harsh Shandilya

Published: 2024-10-05T06:30:00Z

Content type: tutorial

Language: en

Sources: [Posts on Harsh Shandilya](<https://devfeed.tech/sources/posts-on-harsh-shandilya.md>)

Topics: [fly.io](<https://devfeed.tech/topics/fly-io.md>), [fly](<https://devfeed.tech/topics/fly.md>), [Skopeo](<https://devfeed.tech/topics/skopeo.md>), [Docker Image](<https://devfeed.tech/topics/docker-image.md>), [docker registry](<https://devfeed.tech/topics/docker-registry.md>), [Nix](<https://devfeed.tech/topics/nix.md>), [Command-line interface](<https://devfeed.tech/topics/cli.md>), [Deployment](<https://devfeed.tech/topics/deployment.md>)

Tags: [cli](<https://devfeed.tech/tags/cli.md>), [deployment](<https://devfeed.tech/tags/deployment.md>), [docker](<https://devfeed.tech/tags/docker.md>), [docker-image](<https://devfeed.tech/tags/docker-image.md>), [docker-registry](<https://devfeed.tech/tags/docker-registry.md>), [fly](<https://devfeed.tech/tags/fly.md>), [fly-io](<https://devfeed.tech/tags/fly-io.md>), [nix](<https://devfeed.tech/tags/nix.md>), [oci-registry](<https://devfeed.tech/tags/oci-registry.md>), [skopeo](<https://devfeed.tech/tags/skopeo.md>)

### AI overview

A guide to deploying applications on Fly.io without installing Docker locally. It explains how to use Nix to build an OCI image and Skopeo to copy the image archive to Fly.io's registry before deployment.

### Source excerpt

A quick guide to deploying apps to Fly.io without a local Docker installation

## Assorted Git things

DevFeed: [Assorted Git things](<https://devfeed.tech/articles/assorted-git-things-38527.md>)

Original publisher: [Read original article](<https://msfjarvis.dev/posts/assorted-git-things/>)

Author: Harsh Shandilya

Published: 2024-10-01T08:27:00Z

Content type: article

Language: en

Sources: [Posts on Harsh Shandilya](<https://devfeed.tech/sources/posts-on-harsh-shandilya.md>)

Topics: [Git](<https://devfeed.tech/topics/git.md>), [Submodules](<https://devfeed.tech/topics/submodules.md>), [ide](<https://devfeed.tech/topics/ide.md>), [passwords](<https://devfeed.tech/topics/passwords.md>)

Tags: [concepts](<https://devfeed.tech/tags/concepts.md>), [git](<https://devfeed.tech/tags/git.md>), [ide](<https://devfeed.tech/tags/ide.md>), [password](<https://devfeed.tech/tags/password.md>), [submodules](<https://devfeed.tech/tags/submodules.md>), [til](<https://devfeed.tech/tags/til.md>)

### AI overview

A running collection of Git tips covering editor configuration, staging behavior, removing submodules, credential-helper interaction, and maintaining a fork.

### Source excerpt

A running log of Git concepts I've learned since I started journaling

## Improving dependency sync speeds for your Gradle project

DevFeed: [Improving dependency sync speeds for your Gradle project](<https://devfeed.tech/articles/improving-dependency-sync-speeds-for-your-gradle-project-38538.md>)

Original publisher: [Read original article](<https://msfjarvis.dev/posts/improving-dependency-sync-speeds-for-your-gradle-project/>)

Author: Harsh Shandilya

Published: 2024-03-30T21:43:07Z

Content type: tutorial

Language: en

Sources: [Posts on Harsh Shandilya](<https://devfeed.tech/sources/posts-on-harsh-shandilya.md>)

Topics: [Gradle](<https://devfeed.tech/topics/gradle.md>), [Android Studio](<https://devfeed.tech/topics/android-studio.md>), [Caching](<https://devfeed.tech/topics/caching.md>)

Tags: [android-studio](<https://devfeed.tech/tags/android-studio.md>), [benchmarks](<https://devfeed.tech/tags/benchmarks.md>), [build](<https://devfeed.tech/tags/build.md>), [cache](<https://devfeed.tech/tags/cache.md>), [caching](<https://devfeed.tech/tags/caching.md>), [dependency](<https://devfeed.tech/tags/dependency.md>), [gradle](<https://devfeed.tech/tags/gradle.md>), [kotlin-multiplatform](<https://devfeed.tech/tags/kotlin-multiplatform.md>), [network](<https://devfeed.tech/tags/network.md>), [perf](<https://devfeed.tech/tags/perf.md>)

### AI overview

This tutorial explains how to measure and improve Gradle dependency synchronization times for Android projects. It covers establishing a baseline with Android Studio's Downloads Info view, forcing consistent dependency downloads, and reducing network requests through repository and dependency-resolution considerations.

### Source excerpt

Waiting for Gradle to download dependencies is so 2023

## Tips and tricks for using Renovate

DevFeed: [Tips and tricks for using Renovate](<https://devfeed.tech/articles/tips-and-tricks-for-using-renovate-38559.md>)

Original publisher: [Read original article](<https://msfjarvis.dev/posts/tips-and-tricks-for-using-renovate/>)

Author: Harsh Shandilya

Published: 2023-01-17T19:32:18Z

Content type: tutorial

Language: en

Sources: [Posts on Harsh Shandilya](<https://devfeed.tech/sources/posts-on-harsh-shandilya.md>)

Topics: [renovate](<https://devfeed.tech/topics/renovate.md>), [configuration](<https://devfeed.tech/topics/configuration.md>), [Dependabot](<https://devfeed.tech/topics/dependabot.md>), [ci](<https://devfeed.tech/topics/ci.md>), [GitHub Actions](<https://devfeed.tech/topics/github-actions.md>), [Regular expression](<https://devfeed.tech/topics/regular-expression.md>), [Hugo](<https://devfeed.tech/topics/hugo.md>), [JavaScript](<https://devfeed.tech/topics/javascript.md>), [Netlify](<https://devfeed.tech/topics/netlify.md>)

Tags: [config](<https://devfeed.tech/tags/config.md>), [configuration](<https://devfeed.tech/tags/configuration.md>), [dependabot](<https://devfeed.tech/tags/dependabot.md>), [dependencies](<https://devfeed.tech/tags/dependencies.md>), [dependency-management](<https://devfeed.tech/tags/dependency-management.md>), [github](<https://devfeed.tech/tags/github.md>), [github-actions](<https://devfeed.tech/tags/github-actions.md>), [hugo](<https://devfeed.tech/tags/hugo.md>), [netlify](<https://devfeed.tech/tags/netlify.md>), [regex](<https://devfeed.tech/tags/regex.md>), [renovate](<https://devfeed.tech/tags/renovate.md>), [tips](<https://devfeed.tech/tags/tips.md>)

### AI overview

A practical guide to using Renovate for dependency management. It covers disabling updates for selected packages, grouping related updates, setting semver bounds, detecting dependencies in non-standard declarations with regular expressions, securing GitHub Actions with exact commit SHAs, and automatically merging compatible updates.

### Source excerpt

Renovate is an extremely powerful tool for keeping your dependencies up-to-date, and its flexibility is often left unexplored. I'm hoping to change that

## Writing your own Nix Flake checks

DevFeed: [Writing your own Nix Flake checks](<https://devfeed.tech/articles/writing-your-own-nix-flake-checks-38561.md>)

Original publisher: [Read original article](<https://msfjarvis.dev/posts/writing-your-own-nix-flake-checks/>)

Author: Harsh Shandilya

Published: 2022-12-18T06:30:00Z

Content type: tutorial

Language: en

Sources: [Posts on Harsh Shandilya](<https://devfeed.tech/sources/posts-on-harsh-shandilya.md>)

Topics: [Nix](<https://devfeed.tech/topics/nix.md>), [Shell](<https://devfeed.tech/topics/shell.md>)

Tags: [flake-checks](<https://devfeed.tech/tags/flake-checks.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [lint](<https://devfeed.tech/tags/lint.md>), [nix](<https://devfeed.tech/tags/nix.md>), [nix-flakes](<https://devfeed.tech/tags/nix-flakes.md>), [shell-script](<https://devfeed.tech/tags/shell-script.md>)

### AI overview

A practical guide to writing custom checks for Nix flakes. It explains how to define checks as derivations, run formatters and linters, satisfy Nix's output requirement, and reduce build overhead with a smaller stdenv.

### Source excerpt

Quick how-to for writing ad-hoc checks for your own Nix Flakes

[Next page](<https://devfeed.tech/sources/posts-on-harsh-shandilya.md?cursor=WyIyMDIyLTEyLTE4VDA2OjMwOjAwKzAwOjAwIiwgIjlhZTVlZTZiLTk2N2MtNDEwZi04ODQ1LTBiNjJjOTMwNDkzOCJd>)