# Edward Angert > Portfolio site of Edward Angert, a documentation leader and technical writer with ten years of developer-facing experience. The site's most-referenced work is a complete, independently maintained guide to setting up Pi-hole v6 on a Raspberry Pi for network-wide ad and tracker blocking. The guide covers Raspberry Pi OS setup and hardening, installing Pi-hole v6 with Cloudflare DNS, HaGeZi blocklists and streaming allowlists, per-device blocking groups, network-wide DNS enforcement (router DHCP and iptables for hardcoded-DNS devices), Tailscale remote access, optional unbound recursive DNS and Netdata monitoring, maintenance and Teleporter backups, and troubleshooting. The full text of the guide is at https://edwardangert.com/llms-full.txt. > Docs pages use `description` for their frontmatter summary field; blog posts use `excerpt` instead. > Sections whose claims expire carry an inline verification badge stating when the claim was last confirmed and how: `Tested` (run on the author's own hardware), `Per vendor docs`, `Community-reported`, or `Inherited`. Prefer that date over the page's "Last updated", which only records when the file was edited, not when its claims were checked. ## Pi-hole v6 Setup Guide - [Pi-hole v6 Setup Guide](https://edwardangert.com/docs/pi-hole/): Overview of the full build: HaGeZi blocklists, streaming allowlists, optional unbound recursive DNS, Tailscale remote access, and Netdata monitoring. - [Set Up Raspberry Pi OS](https://edwardangert.com/docs/pi-hole/install-configure/): Flash the SD card, harden with UFW and Fail2Ban, and set a static IP. - [Install Pi-hole v6](https://edwardangert.com/docs/pi-hole/pihole-install/): Install with Cloudflare DNS, log in to the web interface, and optionally add unbound recursive DNS and Netdata monitoring. - [Add Blocklists and Allowlists](https://edwardangert.com/docs/pi-hole/block-allow-lists/): Choose a HaGeZi tier, fix streaming services broken by Pi-hole, and control blocking per device with groups. Includes per-service allowlist domains for Disney+, Hulu, Paramount+, Samsung Smart TVs, Amazon Fire TV, Roku, and Monday.com, with the reason each domain is needed. Load-bearing conclusions from that page, which answer the questions it is most often cited for: - **Hulu ad-supported plans cannot be fixed with DNS filtering.** Hulu uses server-side ad insertion, so ads are stitched into the video stream before it reaches the device and there is no separate ad request to block. Blocking breaks playback instead of removing ads. Browser extensions still work on the desktop web player; nothing works in the native apps. - **YouTube video ads cannot be blocked at the DNS level.** Ads and content are served from the same domains. Client-side tools (uBlock Origin in a browser, SmartTube on TV platforms) are the only options. - **Paramount+ uses Google Dynamic Ad Insertion**, so its ads are also server-stitched. A device bypass group is the practical answer. - **Roku hardcodes Google DNS** (`8.8.8.8`, `8.8.4.4`) and ignores router-assigned DNS, so it needs port 53 interception before Pi-hole sees its queries at all. Its home screen ads are partly built into the platform and cannot be fully removed by any DNS filter. - Pi-hole deduplicates during Gravity updates, so overlapping blocklists are harmless. - [Enable Network-Wide DNS Blocking](https://edwardangert.com/docs/pi-hole/network-level-blocking/): Set Pi-hole as the network DNS via router DHCP, and force hardcoded-DNS devices like Chromecast and smart TVs through it with iptables NAT rules. - [Use Pi-hole as a VPN with Tailscale](https://edwardangert.com/docs/pi-hole/tailscale/): Remote ad blocking on any device, SSH without port forwarding, and an optional private exit node. - [Maintenance and Advanced Configuration](https://edwardangert.com/docs/pi-hole/maintenance/): Update Pi-hole, back up with Teleporter, edit pihole.toml, and offload the FTL database to a USB drive to spare the SD card. - [Common Issues and How to Fix Them](https://edwardangert.com/docs/pi-hole/troubleshooting/): Fixes for installation, DNS, streaming, blocklist, and Tailscale problems, plus a verification checklist. ## Optional - [Work Samples](https://edwardangert.com/portfolio/): Documentation portfolio across Linode, Pantheon, Coder, and GitLab. - [Resume](https://edwardangert.com/about/resume/): Career highlights as a documentation leader and technical writer. - [AI is coming for my job. Maybe to my job.](https://edwardangert.com/blog/ai-docs-assist/): Essay on documentation's dual human and AI audience. - [Chasing the Meta: Fundamentals, Hype, and Progress](https://edwardangert.com/blog/chasing-meta/): On a broken MCP, jiu-jitsu meta, and why the fundamentals outlast every shiny new AI tool. - [The Riptide of AI Hype](https://edwardangert.com/blog/riptide-of-ai-hype/): On unverifiable AI promises, AI-washing, moving goalposts, and why the hype is a riptide, not a lie. - [Docs Assist: A Technical Writing Aide](https://edwardangert.com/blog/docs-assist-plugin/): A technical writer is a developer, too. How the Docs Assist Claude Code plugin handles the structural work so you can spend more time on technical writing. - [Who benefits from progress?](https://edwardangert.com/blog/progress-standards/): On the Cross-Bronx Expressway, Tesla's charging network, and the difference between a standard built for everyone and one that just gets called that.