## Summary - Rename `date-modified` -> `modified` in all 80 docs and the `docs-check-frontmatter` task Quartz's `CreatedModifiedDate` plugin recognizes `modified`, `lastmod`, `updated`, and `last-modified` — but not `date-modified`. The wrong field name caused Quartz to ignore frontmatter dates entirely and fall through to filesystem timestamps (UTC inside Dagger), showing Feb 12 on pages built late on Feb 11 PST. ## Test plan - [x] `mise run docs-check-frontmatter` passes - [ ] Kick off docs release after merge — verify rendered dates match frontmatter values Reviewed-on: https://forge.ops.eblu.me/eblume/blumeops/pulls/158
78 lines
2.5 KiB
Markdown
78 lines
2.5 KiB
Markdown
---
|
|
title: UniFi
|
|
modified: 2026-02-10
|
|
tags:
|
|
- infrastructure
|
|
- networking
|
|
---
|
|
|
|
# UniFi
|
|
|
|
Home WiFi router and network controller, managed via Pulumi IaC.
|
|
|
|
## Quick Reference
|
|
|
|
| Property | Value |
|
|
|----------|-------|
|
|
| **Model** | UniFi Express 7 (UX7) |
|
|
| **LAN IP** | `192.168.1.1` |
|
|
| **Management URL** | `https://192.168.1.1` |
|
|
| **IaC** | `pulumi/unifi/` (planned) |
|
|
| **Stack** | `home-network` (planned) |
|
|
| **Power** | Battery-backed via UPS (see [[power]]) |
|
|
|
|
## What It Does
|
|
|
|
The UX7 is the home WiFi access point and network gateway. It provides:
|
|
|
|
- WiFi (main, guest, IoT networks)
|
|
- DHCP for `192.168.1.0/24`
|
|
- Built-in UniFi controller for managing adopted devices (switches, APs)
|
|
- Firewall and traffic management
|
|
|
|
## Network Topology
|
|
|
|
```
|
|
ISP Modem
|
|
└── UniFi Express 7 [WAN]
|
|
└── [LAN port] ──→ Switch A (by router/sifaka)
|
|
├── sifaka (Synology NAS)
|
|
└── ~12ft Cat6 ──→ Switch B (on desk)
|
|
├── indri (Mac Mini, primary server)
|
|
├── ringtail (Raspberry Pi)
|
|
└── (gilbert via USB-C adapter, optional)
|
|
```
|
|
|
|
All wired devices share the `192.168.1.0/24` subnet. The two daisy-chained UniFi Switch Flex Minis provide enough ports for all devices while using the UX7's single LAN port.
|
|
|
|
## Pulumi Configuration (Planned)
|
|
|
|
The Pulumi program will live in `pulumi/unifi/`:
|
|
|
|
- `__main__.py` — declares networks, WLANs, and firewall zones
|
|
- `Pulumi.home-network.yaml` — stack config (router URL, site)
|
|
- `sdks/unifi/` — generated Python SDK from `pulumi package add terraform-provider filipowm/unifi`
|
|
|
|
Provider: [filipowm/terraform-provider-unifi](https://github.com/filipowm/terraform-provider-unifi) v1.0.0, consumed via `pulumi package add terraform-provider`.
|
|
|
|
See [[add-unifi-pulumi-stack]] for the full implementation plan.
|
|
|
|
## Operations
|
|
|
|
| Task | Command |
|
|
|------|---------|
|
|
| Preview changes | `mise run unifi-preview` (planned) |
|
|
| Apply changes | `mise run unifi-up` (planned) |
|
|
| Web management | `https://192.168.1.1` |
|
|
|
|
## Authentication
|
|
|
|
The provider uses an API key created in the UX7 control plane (Settings → Control Plane → API). The key is stored in 1Password (`op://blumeops/unifi - blumeops/api_key`) and injected via mise task environment variables.
|
|
|
|
## Related
|
|
|
|
- [[add-unifi-pulumi-stack]] - Implementation plan
|
|
- [[hosts]] - Device inventory
|
|
- [[power]] - UPS power chain
|
|
- [[indri]] - Primary server (wired connection required for management)
|
|
- [[tailscale]] - Tailnet networking
|