<feed xmlns='http://www.w3.org/2005/Atom'>
<title>hetzner-infra/caddy, branch master</title>
<subtitle>Unnamed repository; edit this file 'description' to name the repository.
</subtitle>
<id>http://git.yyamashita.com/hetzner-infra/atom/caddy?h=master</id>
<link rel='self' href='http://git.yyamashita.com/hetzner-infra/atom/caddy?h=master'/>
<link rel='alternate' type='text/html' href='http://git.yyamashita.com/hetzner-infra/'/>
<updated>2026-11-01T00:26:42Z</updated>
<entry>
<title>studio: /healthz を認証なしにして status から監視する</title>
<updated>2026-11-01T00:26:42Z</updated>
<author>
<name>yyamashita</name>
<email>yyamashita@hetzner.yyamashita.com</email>
</author>
<published>2026-11-01T00:26:42Z</published>
<link rel='alternate' type='text/html' href='http://git.yyamashita.com/hetzner-infra/commit/?id=1ea99f191a8662e9aeb1c3e9a6fd0d6696f0338e'/>
<id>urn:sha1:1ea99f191a8662e9aeb1c3e9a6fd0d6696f0338e</id>
<content type='text'>
Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>studio.yyamashita.com に Basic 認証を付ける</title>
<updated>2026-11-01T00:22:13Z</updated>
<author>
<name>yyamashita</name>
<email>yyamashita@hetzner.yyamashita.com</email>
</author>
<published>2026-11-01T00:22:13Z</published>
<link rel='alternate' type='text/html' href='http://git.yyamashita.com/hetzner-infra/commit/?id=c6903d50f8c68359732858a141e8fab12cde6636'/>
<id>urn:sha1:c6903d50f8c68359732858a141e8fab12cde6636</id>
<content type='text'>
Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>studio.yyamashita.com を公開</title>
<updated>2026-11-01T00:12:32Z</updated>
<author>
<name>yyamashita</name>
<email>yyamashita@hetzner.yyamashita.com</email>
</author>
<published>2026-11-01T00:12:32Z</published>
<link rel='alternate' type='text/html' href='http://git.yyamashita.com/hetzner-infra/commit/?id=f7cfad7883556def4f1c277704a13620642c7dbc'/>
<id>urn:sha1:f7cfad7883556def4f1c277704a13620642c7dbc</id>
<content type='text'>
Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>caddy: reload config on deploy so Caddyfile changes take effect</title>
<updated>2026-10-31T10:30:08Z</updated>
<author>
<name>yyamashita</name>
<email>yyamashita@hetzner.yyamashita.com</email>
</author>
<published>2026-10-31T10:30:08Z</published>
<link rel='alternate' type='text/html' href='http://git.yyamashita.com/hetzner-infra/commit/?id=4d9c72a724b46c8b9204cbc8d3d710de769b72ba'/>
<id>urn:sha1:4d9c72a724b46c8b9204cbc8d3d710de769b72ba</id>
<content type='text'>
Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Consolidate status pages into status.yyamashita.com</title>
<updated>2026-10-31T10:28:45Z</updated>
<author>
<name>yyamashita</name>
<email>yyamashita@hetzner.yyamashita.com</email>
</author>
<published>2026-10-31T10:28:45Z</published>
<link rel='alternate' type='text/html' href='http://git.yyamashita.com/hetzner-infra/commit/?id=ff39e864a0b7e9a98340bf564a7a4bf566958a77'/>
<id>urn:sha1:ff39e864a0b7e9a98340bf564a7a4bf566958a77</id>
<content type='text'>
Drop Uptime Kuma (uptime.yyamashita.com) and the hetzner-admin /status
page; status-app + ntfy alerts is the single status site. hetzner-admin
now just links to it.

Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Add status pages, ntfy alerts, and license-slot-checker repo</title>
<updated>2026-10-31T04:20:27Z</updated>
<author>
<name>yyamashita</name>
<email>yyamashita@hetzner.yyamashita.com</email>
</author>
<published>2026-10-31T04:20:27Z</published>
<link rel='alternate' type='text/html' href='http://git.yyamashita.com/hetzner-infra/commit/?id=b4ecef96fae14a92d12279927986e69c2e223180'/>
<id>urn:sha1:b4ecef96fae14a92d12279927986e69c2e223180</id>
<content type='text'>
- status/: lightweight status checker (status.yyamashita.com, /api/status)
  with ntfy DOWN/recovered alerts after consecutive failures
- uptime-kuma/: Uptime Kuma at uptime.yyamashita.com
- hetzner-admin: authenticated /status page (status-app results + docker ps -a)
- ntfy/: self-hosted ntfy at ntfy.yyamashita.com (deny-all auth, install.sh
  creates admin user and status-app token)
- Caddyfile, DNS, post-receive hook, tests/check.sh, docs updated
- license-slot-checker: add to repos.txt, hook, and Claude sessions

Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Add todo service: Caddyfile, repos.txt, hook, DNS entry</title>
<updated>2026-08-22T10:21:18Z</updated>
<author>
<name>yyamashita</name>
<email>yyamashita@hetzner.yyamashita.com</email>
</author>
<published>2026-08-22T10:21:18Z</published>
<link rel='alternate' type='text/html' href='http://git.yyamashita.com/hetzner-infra/commit/?id=5a55c7893615c5a64856ecca681325a609d1fac0'/>
<id>urn:sha1:5a55c7893615c5a64856ecca681325a609d1fac0</id>
<content type='text'>
Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Dedupe Caddyfile with snippets, sync docs with reality, add tests/check.sh</title>
<updated>2026-07-11T11:35:09Z</updated>
<author>
<name>yyamashita</name>
<email>yyamashita@hetzner.yyamashita.com</email>
</author>
<published>2026-07-11T11:35:09Z</published>
<link rel='alternate' type='text/html' href='http://git.yyamashita.com/hetzner-infra/commit/?id=5b4aee69b4c6bf295bc44aad6171e17a0d80e63c'/>
<id>urn:sha1:5b4aee69b4c6bf295bc44aad6171e17a0d80e63c</id>
<content type='text'>
- Caddyfile: extract repeated header blocks into (noindex)/(crawler_bypass)
  snippets (adapted JSON verified byte-identical to previous config)
- CLAUDE.md: add mosquitone-admin/microblog to repos table; document that
  proxy auth is disabled (PROXY_NO_AUTH=1) with JP-only IP filter instead
- Deploy.md/caddy/README.md: reflect all-service deploy and forward proxy
- tests/check.sh: shell/python syntax, repos.txt&lt;-&gt;hooks&lt;-&gt;sessions.txt
  consistency, app.py COMMANDS vs run-command.sh whitelist, secrets check

Co-Authored-By: Claude Opus 4.7 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Restrict proxy to Japan IPs using ipdeny.com CIDR list</title>
<updated>2026-07-02T15:45:51Z</updated>
<author>
<name>yyamashita</name>
<email>yyamashita@hetzner.yyamashita.com</email>
</author>
<published>2026-07-02T15:45:51Z</published>
<link rel='alternate' type='text/html' href='http://git.yyamashita.com/hetzner-infra/commit/?id=e14f9edcb95875e2519461690915ab3e25740e96'/>
<id>urn:sha1:e14f9edcb95875e2519461690915ab3e25740e96</id>
<content type='text'>
Downloads jp-aggregated.zone from ipdeny.com at container startup (no
account required). Falls back to open access if download fails.
Removed caddy-maxmind-geoip module (no longer needed).

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Add GeoIP Japan-only filter to forward proxy</title>
<updated>2026-07-02T15:40:17Z</updated>
<author>
<name>yyamashita</name>
<email>yyamashita@hetzner.yyamashita.com</email>
</author>
<published>2026-07-02T15:40:17Z</published>
<link rel='alternate' type='text/html' href='http://git.yyamashita.com/hetzner-infra/commit/?id=c39ec05968656aaa893ed7e4b20b7d5f5ccbe5b5'/>
<id>urn:sha1:c39ec05968656aaa893ed7e4b20b7d5f5ccbe5b5</id>
<content type='text'>
Uses caddy-maxmind-geoip module to restrict proxy access to JP IPs.
DB file (GeoLite2-Country.mmdb) must be placed manually on the server.
Filter is inactive when DB file is absent, allowing safe rollout.

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
</entry>
</feed>
