final
This commit is contained in:
parent
bb997e2fa7
commit
0f82f39fdd
25 changed files with 577 additions and 123 deletions
|
|
@ -46,7 +46,7 @@ Data lives at `/data/nfs/Baxter/Green/` with two libraries: Clips and Movies.
|
||||||
|
|
||||||
PocketStash (port 9998) is a separate Stash instance that maintains a curated subset for travel. Before a trip, `syncoid` pushes `vault/Green/Pocket` to the Pocket Grimoire laptop. The Pocket instance runs in read-only travel mode — no writes while traveling.
|
PocketStash (port 9998) is a separate Stash instance that maintains a curated subset for travel. Before a trip, `syncoid` pushes `vault/Green/Pocket` to the Pocket Grimoire laptop. The Pocket instance runs in read-only travel mode — no writes while traveling.
|
||||||
|
|
||||||
See [Stash Integration](/Pocket-Grimoire/Software/Stash-Integration) in Pocket Grimoire docs.
|
See [Stash Integration](/Netgrimoire/Pocket-Grimoire/Software/Stash-Integration) in Pocket Grimoire docs.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
@ -54,5 +54,5 @@ See [Stash Integration](/Pocket-Grimoire/Software/Stash-Integration) in Pocket G
|
||||||
|
|
||||||
| | |
|
| | |
|
||||||
|---|---|
|
|---|---|
|
||||||
| [Stash Management](/Green-Grimoire/Library/Stash-Management) | Library config, scrapers, metadata workflow |
|
| [Stash Management](/Netgrimoire/Green-Grimoire/Library/Stash-Management) | Library config, scrapers, metadata workflow |
|
||||||
| [VHS Restoration](/Green-Grimoire/Scripts/VHS-Restoration) | Encoding, deinterlace, restoration scripts |
|
| [VHS Restoration](/Netgrimoire/Green-Grimoire/Scripts/VHS-Restoration) | Encoding, deinterlace, restoration scripts |
|
||||||
|
|
|
||||||
|
|
@ -49,7 +49,7 @@ Gremlin is a stack of four services running together on `docker4`, all pinned to
|
||||||
| `qwen2.5-coder:7b` | ~5 GB | Code review, YAML audits, compose analysis |
|
| `qwen2.5-coder:7b` | ~5 GB | Code review, YAML audits, compose analysis |
|
||||||
| `llama3.2:3b` | ~2 GB | Alert triage, Q&A, summarization |
|
| `llama3.2:3b` | ~2 GB | Alert triage, Q&A, summarization |
|
||||||
|
|
||||||
Models must be pulled before workflows run. See [Ollama Model Management](/Gremlin-Grimoire/Runbooks/Model-Management).
|
Models must be pulled before workflows run. See [Ollama Model Management](/Netgrimoire/Gremlin-Grimoire/Runbooks/Model-Management).
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
@ -57,9 +57,9 @@ Models must be pulled before workflows run. See [Ollama Model Management](/Greml
|
||||||
|
|
||||||
| | |
|
| | |
|
||||||
|---|---|
|
|---|---|
|
||||||
| [Stack](/Gremlin-Grimoire/Stack/Build-Config) | Full build config, volumes, env vars, compose YAML |
|
| [Stack](/Netgrimoire/Gremlin-Grimoire/Stack/Build-Config) | Full build config, volumes, env vars, compose YAML |
|
||||||
| [Workflows](/Gremlin-Grimoire/Workflows/Forgejo-Audit) | All n8n workflows — architecture, patterns, gotchas |
|
| [Workflows](/Netgrimoire/Gremlin-Grimoire/Workflows/Forgejo-Audit) | All n8n workflows — architecture, patterns, gotchas |
|
||||||
| [Runbooks](/Gremlin-Grimoire/Runbooks/Deploy) | Deploy, model management, troubleshooting |
|
| [Runbooks](/Netgrimoire/Gremlin-Grimoire/Runbooks/Deploy) | Deploy, model management, troubleshooting |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -71,10 +71,10 @@ $config['imap_conn_options'] = ['ssl' => ['verify_peer' => false, 'verify_peer_n
|
||||||
|
|
||||||
## Related Docs
|
## Related Docs
|
||||||
|
|
||||||
- [MXRoute Integration](/Keystone-Grimoire/Mail/MXRoute-Integration)
|
- [MXRoute Integration](/Netgrimoire/Keystone-Grimoire/Mail/MXRoute-Integration)
|
||||||
- [Domain Setup](/Keystone-Grimoire/Mail/Domain-Setup)
|
- [Domain Setup](/Netgrimoire/Keystone-Grimoire/Mail/Domain-Setup)
|
||||||
- [MailCow Hardening](/Keystone-Grimoire/Mail/Hardening)
|
- [MailCow Hardening](/Netgrimoire/Keystone-Grimoire/Mail/Hardening)
|
||||||
- [MailCow Backup](/Vault-Grimoire/Backups/MailCow-Backup)
|
- [MailCow Backup](/Netgrimoire/Vault-Grimoire/Backups/MailCow-Backup)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -20,10 +20,10 @@ The Keystone Grimoire holds the architectural blueprints of Netgrimoire — how
|
||||||
|
|
||||||
| Section | Contents |
|
| Section | Contents |
|
||||||
|---------|----------|
|
|---------|----------|
|
||||||
| [Hosts](/Keystone-Grimoire/Hosts/Host-Inventory) | Node inventory, roles, IPs, pinned services, hardware |
|
| [Hosts](/Netgrimoire/Keystone-Grimoire/Hosts/Host-Inventory) | Node inventory, roles, IPs, pinned services, hardware |
|
||||||
| [Network](/Keystone-Grimoire/Network/Topology) | Topology, VLANs, DNS, WireGuard, OpenVPN, port assignments |
|
| [Network](/Netgrimoire/Keystone-Grimoire/Network/Topology) | Topology, VLANs, DNS, WireGuard, OpenVPN, port assignments |
|
||||||
| [Docker](/Keystone-Grimoire/Docker/Swarm-Template) | Swarm template standard, overlay network, label rules, volume paths |
|
| [Docker](/Netgrimoire/Keystone-Grimoire/Docker/Swarm-Template) | Swarm template standard, overlay network, label rules, volume paths |
|
||||||
| [Mail](/Keystone-Grimoire/Mail/MailCow-Overview) | MailCow, MXRoute, DKIM, SRS, domain setup, hardening |
|
| [Mail](/Netgrimoire/Keystone-Grimoire/Mail/MailCow-Overview) | MailCow, MXRoute, DKIM, SRS, domain setup, hardening |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -14,20 +14,7 @@ dateCreated: 2026-04-12T00:00:00.000Z
|
||||||
|
|
||||||
Netgrimoire is the primary self-hosted homelab infrastructure running on `znas` and a cluster of worker nodes under Docker Swarm. It is the foundation every other grimoire depends on.
|
Netgrimoire is the primary self-hosted homelab infrastructure running on `znas` and a cluster of worker nodes under Docker Swarm. It is the foundation every other grimoire depends on.
|
||||||
|
|
||||||
This section is intentionally high-level — the spine. Detailed technical content lives in the specialized grimoires.
|
This section is the spine — intentionally high-level. All detailed technical content lives in the specialized grimoires nested here.
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Infrastructure at a Glance
|
|
||||||
|
|
||||||
| Host | Role | IP | Runtime |
|
|
||||||
|------|------|----|---------|
|
|
||||||
| znas | NAS + Primary Swarm manager | 192.168.5.10 | Docker Swarm manager + Compose |
|
|
||||||
| docker2 | VPN gateway | — | Docker Compose |
|
|
||||||
| docker3 | LibreNMS host | — | Docker Compose |
|
|
||||||
| docker4 (hermes) | Mail + AI worker | 192.168.5.16 | Docker Compose + Swarm worker |
|
|
||||||
| docker5 | Media host | 192.168.5.18 | Docker Compose |
|
|
||||||
| Pi nodes | Swarm workers + vault nodes | various | Docker Swarm workers |
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
@ -35,14 +22,27 @@ This section is intentionally high-level — the spine. Detailed technical conte
|
||||||
|
|
||||||
| Grimoire | What Lives There |
|
| Grimoire | What Lives There |
|
||||||
|----------|-----------------|
|
|----------|-----------------|
|
||||||
| [Keystone Grimoire](/Keystone-Grimoire/Overview) | Architecture, network topology, Caddy, Docker template, DNS, mail infrastructure |
|
| [Keystone Grimoire](/Netgrimoire/Keystone-Grimoire/Overview) | Architecture, network topology, Caddy, Docker template, DNS, mail |
|
||||||
| [Vault Grimoire](/Vault-Grimoire/Overview) | ZFS storage, Kopia backups, NFS exports, offsite replication |
|
| [Vault Grimoire](/Netgrimoire/Vault-Grimoire/Overview) | ZFS storage, Kopia backups, NFS exports, offsite replication |
|
||||||
| [Ward Grimoire](/Ward-Grimoire/Overview) | OPNsense, CrowdSec, Authentik, Authelia, LLDAP, WireGuard, blocklists |
|
| [Ward Grimoire](/Netgrimoire/Ward-Grimoire/Overview) | OPNsense, CrowdSec, Authentik, Authelia, LLDAP, WireGuard, blocklists |
|
||||||
| [Watch Grimoire](/Watch-Grimoire/Overview) | Uptime Kuma, Beszel, LibreNMS, Grafana, Graylog, ntfy, DIUN |
|
| [Watch Grimoire](/Netgrimoire/Watch-Grimoire/Overview) | Uptime Kuma, Beszel, LibreNMS, Grafana, Graylog, ntfy, DIUN |
|
||||||
| [Gremlin Grimoire](/Gremlin-Grimoire/Overview) | Ollama, Open WebUI, Qdrant, n8n, AI workflows |
|
| [Gremlin Grimoire](/Netgrimoire/Gremlin-Grimoire/Overview) | Ollama, Open WebUI, Qdrant, n8n, AI workflows |
|
||||||
| [Shadow Grimoire](/Shadow-Grimoire/Overview) | Usenet, torrents, arr stack, indexers, media acquisition |
|
| [Shadow Grimoire](/Netgrimoire/Shadow-Grimoire/Overview) | Usenet, torrents, arr stack, indexers, media acquisition |
|
||||||
| [Green Grimoire](/Green-Grimoire/Overview) | Adult media: Stash, Jellyfinx, Namer, Whisparr |
|
| [Green Grimoire](/Netgrimoire/Green-Grimoire/Overview) | Adult media: Stash, Jellyfinx, Namer, Whisparr |
|
||||||
| [Pocket Grimoire](/Pocket-Grimoire/Overview) | Portable laptop lab, offline-first, travel vault node |
|
| [Pocket Grimoire](/Netgrimoire/Pocket-Grimoire/Overview) | Portable laptop lab, offline-first, travel vault node |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Infrastructure at a Glance
|
||||||
|
|
||||||
|
| Host | Role | IP | Runtime |
|
||||||
|
|------|------|----|---------|
|
||||||
|
| znas | NAS + Primary Swarm manager | 192.168.5.10 | Swarm manager + Compose |
|
||||||
|
| docker2 | VPN gateway | — | Compose only |
|
||||||
|
| docker3 | LibreNMS | — | Compose only |
|
||||||
|
| docker4 (hermes) | Mail + AI worker | 192.168.5.16 | Compose + Swarm worker |
|
||||||
|
| docker5 | Media host | 192.168.5.18 | Compose only |
|
||||||
|
| Pi nodes | Swarm workers + vault nodes | various | Swarm workers |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
@ -57,7 +57,7 @@ This section is intentionally high-level — the spine. Detailed technical conte
|
||||||
| | |
|
| | |
|
||||||
|---|---|
|
|---|---|
|
||||||
| 📋 [Service Catalog](/Netgrimoire/Service-Catalog) | Full service inventory with status and grimoire assignment |
|
| 📋 [Service Catalog](/Netgrimoire/Service-Catalog) | Full service inventory with status and grimoire assignment |
|
||||||
| 📖 [Documentation Standards](/Netgrimoire/Conventions/Doc-Standards) | How docs are structured, named, and maintained |
|
| 📖 [Doc Standards](/Netgrimoire/Conventions/Doc-Standards) | How docs are structured, named, and maintained |
|
||||||
| 📄 [Service Doc Template](/Netgrimoire/Conventions/Service-Doc-Template) | Template for writing new service docs |
|
| 📄 [Service Doc Template](/Netgrimoire/Conventions/Service-Doc-Template) | Template for new service docs |
|
||||||
| 🎨 [Wiki Theme](/Netgrimoire/Conventions/Theme) | CSS customization and branding |
|
| 🎨 [Wiki Theme](/Netgrimoire/Conventions/Theme) | CSS customization and branding |
|
||||||
| 🔍 [Audit Reports](/Netgrimoire/Audits/README) | Gremlin-generated weekly YAML audits |
|
| 🔍 [Audit Reports](/Netgrimoire/Audits/README) | Gremlin-generated weekly YAML audits |
|
||||||
|
|
|
||||||
|
|
@ -51,7 +51,7 @@ Pocket Grimoire receives a `syncoid` push from `znas` before each trip:
|
||||||
syncoid znas:vault/Green/Pocket pocket:/srv/greenpg/Green
|
syncoid znas:vault/Green/Pocket pocket:/srv/greenpg/Green
|
||||||
```
|
```
|
||||||
|
|
||||||
This makes it an offsite encrypted backup node whenever it leaves home. See [Vault Architecture](/Vault-Grimoire/Offsite/Vault-Architecture).
|
This makes it an offsite encrypted backup node whenever it leaves home. See [Vault Architecture](/Netgrimoire/Vault-Grimoire/Offsite/Vault-Architecture).
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
@ -59,6 +59,6 @@ This makes it an offsite encrypted backup node whenever it leaves home. See [Vau
|
||||||
|
|
||||||
| | |
|
| | |
|
||||||
|---|---|
|
|---|---|
|
||||||
| [Hardware](/Pocket-Grimoire/Hardware/Inventory) | Full hardware list, power kit, storage layout |
|
| [Hardware](/Netgrimoire/Pocket-Grimoire/Hardware/Inventory) | Full hardware list, power kit, storage layout |
|
||||||
| [Software](/Pocket-Grimoire/Software/Stack) | Services, Docker config, ZFS pool |
|
| [Software](/Netgrimoire/Pocket-Grimoire/Software/Stack) | Services, Docker config, ZFS pool |
|
||||||
| [Sync & Deployment](/Pocket-Grimoire/Sync/Pre-Travel-Sync) | Pre-travel checklist, syncoid, deployment guide |
|
| [Sync & Deployment](/Netgrimoire/Pocket-Grimoire/Sync/Pre-Travel-Sync) | Pre-travel checklist, syncoid, deployment guide |
|
||||||
|
|
|
||||||
|
|
@ -47,4 +47,4 @@ ssh pocket "zpool status pocket-green"
|
||||||
|
|
||||||
## Deployment Guide
|
## Deployment Guide
|
||||||
|
|
||||||
See original [Deployment Guide](/Pocket-Grimoire/Sync/Deployment-Guide) for full from-scratch build procedure.
|
See original [Deployment Guide](/Netgrimoire/Pocket-Grimoire/Sync/Deployment-Guide) for full from-scratch build procedure.
|
||||||
|
|
|
||||||
|
|
@ -41,4 +41,4 @@ The vault container (`vault.yaml`) runs a Kopia server on port 51516 that serves
|
||||||
|
|
||||||
Pocket Grimoire's ZFS pool (`pocket-green` at `/srv/greenpg/`) receives a `syncoid` push from `znas` before each trip. This makes Pocket Grimoire an offsite backup node whenever it leaves the house.
|
Pocket Grimoire's ZFS pool (`pocket-green` at `/srv/greenpg/`) receives a `syncoid` push from `znas` before each trip. This makes Pocket Grimoire an offsite backup node whenever it leaves the house.
|
||||||
|
|
||||||
See [Pocket Grimoire Sync](/Pocket-Grimoire/Sync/Pre-Travel-Sync) for the pre-travel checklist.
|
See [Pocket Grimoire Sync](/Netgrimoire/Pocket-Grimoire/Sync/Pre-Travel-Sync) for the pre-travel checklist.
|
||||||
|
|
|
||||||
|
|
@ -20,10 +20,10 @@ The Vault Grimoire covers all storage and backup infrastructure. Data starts at
|
||||||
|
|
||||||
| Section | Contents |
|
| Section | Contents |
|
||||||
|---------|----------|
|
|---------|----------|
|
||||||
| [ZFS](/Vault-Grimoire/ZFS/Storage-Layout) | ZFS pools, datasets, NFS exports, commands reference |
|
| [ZFS](/Netgrimoire/Vault-Grimoire/ZFS/Storage-Layout) | ZFS pools, datasets, NFS exports, commands reference |
|
||||||
| [Kopia](/Vault-Grimoire/Kopia/Kopia-Overview) | Backup repos, retention, restore, two-repo architecture |
|
| [Kopia](/Netgrimoire/Vault-Grimoire/Kopia/Kopia-Overview) | Backup repos, retention, restore, two-repo architecture |
|
||||||
| [Backups](/Vault-Grimoire/Backups/Services-Backup) | Per-service backup runbooks (Immich, MailCow, Nextcloud, Wiki, services) |
|
| [Backups](/Netgrimoire/Vault-Grimoire/Backups/Services-Backup) | Per-service backup runbooks (Immich, MailCow, Nextcloud, Wiki, services) |
|
||||||
| [Offsite](/Vault-Grimoire/Offsite/Vault-Architecture) | Pi vault nodes, ZFS raw send, syncoid workflow |
|
| [Offsite](/Netgrimoire/Vault-Grimoire/Offsite/Vault-Architecture) | Pi vault nodes, ZFS raw send, syncoid workflow |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -24,8 +24,8 @@ All Netgrimoire alerts route through self-hosted ntfy at `ntfy.netgrimoire.com`.
|
||||||
|
|
||||||
## Alert Sources
|
## Alert Sources
|
||||||
|
|
||||||
**OPNsense → ntfy:** CrowdSec HTTP plugin (`/usr/local/etc/crowdsec/notifications/ntfy.yaml`) + Monit script (`/usr/local/bin/ntfy-alert.sh`). See [OPNsense Alerts](/Ward-Grimoire/Notifications/OPNsense-Alerts).
|
**OPNsense → ntfy:** CrowdSec HTTP plugin (`/usr/local/etc/crowdsec/notifications/ntfy.yaml`) + Monit script (`/usr/local/bin/ntfy-alert.sh`). See [OPNsense Alerts](/Netgrimoire/Ward-Grimoire/Notifications/OPNsense-Alerts).
|
||||||
|
|
||||||
**Uptime Kuma → Gremlin → ntfy:** Kuma webhook fires on DOWN/RECOVERED → n8n triage workflow → Ollama analysis (DOWN path only) → ntfy `gremlin-alerts`. See [Gremlin Kuma Triage](/Gremlin-Grimoire/Workflows/Kuma-Triage).
|
**Uptime Kuma → Gremlin → ntfy:** Kuma webhook fires on DOWN/RECOVERED → n8n triage workflow → Ollama analysis (DOWN path only) → ntfy `gremlin-alerts`. See [Gremlin Kuma Triage](/Netgrimoire/Gremlin-Grimoire/Workflows/Kuma-Triage).
|
||||||
|
|
||||||
**DIUN → ntfy:** Docker image update watcher. Schedule: every 6 hours. Priority must be integer (1–5), not string `"default"`.
|
**DIUN → ntfy:** Docker image update watcher. Schedule: every 6 hours. Priority must be integer (1–5), not string `"default"`.
|
||||||
|
|
|
||||||
|
|
@ -20,9 +20,9 @@ The Ward Grimoire covers all security enforcement, access control, and threat re
|
||||||
|
|
||||||
| Section | Contents |
|
| Section | Contents |
|
||||||
|---------|----------|
|
|---------|----------|
|
||||||
| [Firewall](/Ward-Grimoire/Firewall/OPNsense) | OPNsense dual-WAN, NAT, static IPs, Suricata IDS, Zenarmor, blocklists, GeoIP |
|
| [Firewall](/Netgrimoire/Ward-Grimoire/Firewall/OPNsense) | OPNsense dual-WAN, NAT, static IPs, Suricata IDS, Zenarmor, blocklists, GeoIP |
|
||||||
| [Access](/Ward-Grimoire/Access/Auth-Overview) | Authentik (SSO), Authelia (wasted-bandwidth), LLDAP, Vaultwarden, YubiKey, WireGuard |
|
| [Access](/Netgrimoire/Ward-Grimoire/Access/Auth-Overview) | Authentik (SSO), Authelia (wasted-bandwidth), LLDAP, Vaultwarden, YubiKey, WireGuard |
|
||||||
| [Notifications](/Ward-Grimoire/Notifications/Alert-Routing) | ntfy, CrowdSec alerts, OPNsense Monit, alert routing |
|
| [Notifications](/Netgrimoire/Ward-Grimoire/Notifications/Alert-Routing) | ntfy, CrowdSec alerts, OPNsense Monit, alert routing |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -20,9 +20,9 @@ The Watch Grimoire is the observatory of Netgrimoire. The Oracle sees every hear
|
||||||
|
|
||||||
| Section | Contents |
|
| Section | Contents |
|
||||||
|---------|----------|
|
|---------|----------|
|
||||||
| [Monitoring](/Watch-Grimoire/Monitoring/Services) | Uptime Kuma, AutoKuma, Beszel, LibreNMS, DIUN, phpIPAM, Scrutiny |
|
| [Monitoring](/Netgrimoire/Watch-Grimoire/Monitoring/Services) | Uptime Kuma, AutoKuma, Beszel, LibreNMS, DIUN, phpIPAM, Scrutiny |
|
||||||
| [Logging](/Watch-Grimoire/Logging/Log-Stack) | Graylog, Loki + Promtail + Grafana, Dozzle |
|
| [Logging](/Netgrimoire/Watch-Grimoire/Logging/Log-Stack) | Graylog, Loki + Promtail + Grafana, Dozzle |
|
||||||
| [Dashboards](/Watch-Grimoire/Dashboards/Homepage) | Homepage, Glance, Portainer, Homelable |
|
| [Dashboards](/Netgrimoire/Watch-Grimoire/Dashboards/Homepage) | Homepage, Glance, Portainer, Homelable |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
||||||
23
Periphery/Overview.md
Normal file
23
Periphery/Overview.md
Normal file
|
|
@ -0,0 +1,23 @@
|
||||||
|
---
|
||||||
|
title: Periphery
|
||||||
|
description: Non-homelab documentation — family, business, and work
|
||||||
|
published: true
|
||||||
|
date: 2026-04-12T00:00:00.000Z
|
||||||
|
tags: periphery
|
||||||
|
editor: markdown
|
||||||
|
dateCreated: 2026-04-12T00:00:00.000Z
|
||||||
|
---
|
||||||
|
|
||||||
|
# Periphery
|
||||||
|
|
||||||
|
Things that don't relate directly to Netgrimoire infrastructure — family services, business operations, and work documentation.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Sections
|
||||||
|
|
||||||
|
| Section | Purpose |
|
||||||
|
|---------|---------|
|
||||||
|
| [PNC Harris](/Periphery/PNC-Harris/Overview) | Family services — Immich, Nextcloud, Mealie, Vikunja, Vaultwarden |
|
||||||
|
| [PNC Fish & More](/Periphery/PNC-Fish/Overview) | Saltwater fish and coral store — IT, operations, accounting, equipment |
|
||||||
|
| [Work](/Periphery/Work/Overview) | Cisco switching builds, NTP configs, upgrades, Ducky automation |
|
||||||
68
Periphery/PNC-Fish/Accounting/Overview.md
Normal file
68
Periphery/PNC-Fish/Accounting/Overview.md
Normal file
|
|
@ -0,0 +1,68 @@
|
||||||
|
---
|
||||||
|
title: Accounting Overview
|
||||||
|
description: Bigcapital setup, Schedule C, COGS, livestock deaths, owner draws
|
||||||
|
published: true
|
||||||
|
date: 2026-04-12T00:00:00.000Z
|
||||||
|
tags: pncfish, accounting, bigcapital
|
||||||
|
editor: markdown
|
||||||
|
dateCreated: 2026-04-12T00:00:00.000Z
|
||||||
|
---
|
||||||
|
|
||||||
|
# Accounting Overview
|
||||||
|
|
||||||
|
## Tool: Bigcapital
|
||||||
|
|
||||||
|
Self-hosted, open-source accounting at `accounts.netgrimoire.com` (docker5, static Caddyfile entry).
|
||||||
|
|
||||||
|
Bigcapital handles:
|
||||||
|
- Income entry from Square sales reports
|
||||||
|
- Expense categorization to Schedule C lines
|
||||||
|
- Livestock death inventory shrinkage journal entries
|
||||||
|
- Owner draw tracking (separate from business expenses)
|
||||||
|
|
||||||
|
## Chart of Accounts
|
||||||
|
|
||||||
|
Mapped to **Schedule C** lines. Setup is in progress — not yet finalized.
|
||||||
|
|
||||||
|
Key accounts to establish:
|
||||||
|
|
||||||
|
| Account | Type | Schedule C Line |
|
||||||
|
|---------|------|----------------|
|
||||||
|
| Sales — Livestock | Revenue | Line 1 (Gross receipts) |
|
||||||
|
| Sales — Supplies/Accessories | Revenue | Line 1 |
|
||||||
|
| COGS — Livestock purchases | COGS | Line 36-39 |
|
||||||
|
| Inventory shrinkage (deaths) | COGS adjustment | Line 39 |
|
||||||
|
| Rent | Expense | Line 20b |
|
||||||
|
| Utilities | Expense | Line 25 |
|
||||||
|
| Supplies | Expense | Line 22 |
|
||||||
|
| Advertising | Expense | Line 8 |
|
||||||
|
| Owner draws | Equity | Not on Schedule C |
|
||||||
|
|
||||||
|
## COGS for Livestock
|
||||||
|
|
||||||
|
Livestock is inventory. COGS is calculated as:
|
||||||
|
|
||||||
|
```
|
||||||
|
Beginning Inventory + Purchases - Ending Inventory = COGS
|
||||||
|
```
|
||||||
|
|
||||||
|
**Livestock deaths** reduce ending inventory. Track in dedicated Google Sheet tab, then enter as inventory shrinkage journal entries in Bigcapital. Do not process deaths through Square.
|
||||||
|
|
||||||
|
## Owner Draws
|
||||||
|
|
||||||
|
Owner draws are equity withdrawals — not business expenses. They do not appear on Schedule C and must not be categorized as expenses. Record separately in Bigcapital as equity/drawing transactions.
|
||||||
|
|
||||||
|
## Income Entry Workflow
|
||||||
|
|
||||||
|
1. Pull sales report from Square (weekly or monthly)
|
||||||
|
2. Enter total sales as income in Bigcapital
|
||||||
|
3. Categorize to appropriate revenue accounts (livestock vs. supplies/accessories)
|
||||||
|
4. Enter any expenses paid that period (receipts, invoices)
|
||||||
|
5. Record any livestock deaths from the Google Sheet tab as shrinkage journal entries
|
||||||
|
|
||||||
|
## Pending
|
||||||
|
|
||||||
|
- [ ] Finalize chart of accounts — map all accounts to Schedule C lines
|
||||||
|
- [ ] Confirm COGS tracking method aligns with chosen inventory accounting method (FIFO vs. average cost)
|
||||||
|
- [ ] Set up livestock death log tab in Google Sheets
|
||||||
|
- [ ] Establish journal entry cadence for shrinkage entries
|
||||||
51
Periphery/PNC-Fish/Equipment/Reef-Tank.md
Normal file
51
Periphery/PNC-Fish/Equipment/Reef-Tank.md
Normal file
|
|
@ -0,0 +1,51 @@
|
||||||
|
---
|
||||||
|
title: Reef Tank Maintenance
|
||||||
|
description: Saltwater reef tank maintenance, water parameters, and cyanobacteria protocol
|
||||||
|
published: true
|
||||||
|
date: 2026-04-12T00:00:00.000Z
|
||||||
|
tags: pncfish, reef, equipment
|
||||||
|
editor: markdown
|
||||||
|
dateCreated: 2026-04-12T00:00:00.000Z
|
||||||
|
---
|
||||||
|
|
||||||
|
# Reef Tank Maintenance
|
||||||
|
|
||||||
|
## Cyanobacteria Treatment Protocol
|
||||||
|
|
||||||
|
Use this protocol in order. Do not skip to later steps without completing earlier ones.
|
||||||
|
|
||||||
|
| Step | Action | Notes |
|
||||||
|
|------|--------|-------|
|
||||||
|
| 1 | Manual siphon removal | During water change — remove as much as possible physically |
|
||||||
|
| 2 | Verify RO/DI TDS = 0 | Replace resin if TDS is above 0 — contaminated source water is a primary cause |
|
||||||
|
| 3 | Check phosphate | If undetectable (<0.03 ppm), dose KH2PO4 to raise slightly — paradoxically low phosphate favors cyano over corals |
|
||||||
|
| 4 | 3-day blackout + large water change | Starves cyano of light. Combine both for best effect. |
|
||||||
|
| 5 | Add chaeto to refugium | Outcompetes cyano for nutrients long-term |
|
||||||
|
| 6 | Vibrant liquid bacteria | If cyano persists after steps 1–5 |
|
||||||
|
|
||||||
|
**Note:** Chemi-Clean was used previously and did not fully resolve the issue. Underlying cause (RO/DI quality, phosphate imbalance, flow dead spots) was suspected. Provide current water parameters — nitrate, phosphate, TDS, salinity — to continue diagnosis.
|
||||||
|
|
||||||
|
## Water Parameters to Track
|
||||||
|
|
||||||
|
| Parameter | Target Range | Notes |
|
||||||
|
|-----------|-------------|-------|
|
||||||
|
| Salinity | 1.025–1.026 SG | Use refractometer |
|
||||||
|
| Temperature | 76–78°F | Inkbird ITC-306A controls this |
|
||||||
|
| pH | 8.1–8.3 | Check morning and evening |
|
||||||
|
| Ammonia | 0 | Should always be undetectable |
|
||||||
|
| Nitrite | 0 | Should always be undetectable |
|
||||||
|
| Nitrate | <10 ppm | Lower for SPS; <20 for LPS/fish-only |
|
||||||
|
| Phosphate | 0.03–0.10 ppm | Too low favors cyano; too high causes algae |
|
||||||
|
| TDS (RO/DI output) | 0 | Replace resin if above 0 |
|
||||||
|
|
||||||
|
## Lighting: ReefBreeder
|
||||||
|
|
||||||
|
*Document ReefBreeder light model, schedule, and intensity settings here.*
|
||||||
|
|
||||||
|
## Water Change Schedule
|
||||||
|
|
||||||
|
*Document water change frequency, volume, and salt mix used.*
|
||||||
|
|
||||||
|
## Equipment List
|
||||||
|
|
||||||
|
*Document all tank equipment: skimmer, return pump, powerheads, refugium light, dosing equipment, etc.*
|
||||||
43
Periphery/PNC-Fish/Equipment/Temperature-Controllers.md
Normal file
43
Periphery/PNC-Fish/Equipment/Temperature-Controllers.md
Normal file
|
|
@ -0,0 +1,43 @@
|
||||||
|
---
|
||||||
|
title: Temperature Controllers
|
||||||
|
description: Inkbird ITC-306A WiFi temperature controller setup and troubleshooting
|
||||||
|
published: true
|
||||||
|
date: 2026-04-12T00:00:00.000Z
|
||||||
|
tags: pncfish, equipment, inkbird, reef
|
||||||
|
editor: markdown
|
||||||
|
dateCreated: 2026-04-12T00:00:00.000Z
|
||||||
|
---
|
||||||
|
|
||||||
|
# Inkbird ITC-306A Temperature Controller
|
||||||
|
|
||||||
|
## Specs & Requirements
|
||||||
|
|
||||||
|
| Item | Detail |
|
||||||
|
|------|--------|
|
||||||
|
| Model | Inkbird ITC-306A |
|
||||||
|
| WiFi | 2.4GHz only — will not connect to 5GHz |
|
||||||
|
| App | INKBIRD+ (iOS and Android) |
|
||||||
|
|
||||||
|
## Setup
|
||||||
|
|
||||||
|
1. Ensure phone is connected to a **2.4GHz WiFi network** (not 5GHz) before pairing
|
||||||
|
2. Put device in pairing mode (hold button per manual)
|
||||||
|
3. Open INKBIRD+ app → Add device → follow pairing wizard
|
||||||
|
4. Enter 2.4GHz WiFi credentials in app — do not attempt to connect to 5GHz SSID
|
||||||
|
|
||||||
|
## Known Issue — App Not Functioning After WiFi Connect
|
||||||
|
|
||||||
|
**Status: INCOMPLETE — resolution not confirmed**
|
||||||
|
|
||||||
|
Symptom: Device connects to WiFi successfully but INKBIRD+ app still does not function correctly (cannot control or read device).
|
||||||
|
|
||||||
|
Troubleshooting steps to try:
|
||||||
|
- [ ] Close and fully restart INKBIRD+ app
|
||||||
|
- [ ] Check if a firmware update is available in the app
|
||||||
|
- [ ] Try re-pairing: remove device from app → factory reset device → re-add
|
||||||
|
- [ ] Try a different phone if available
|
||||||
|
- [ ] Check if router has AP isolation enabled (would prevent app ↔ device communication even on same network)
|
||||||
|
|
||||||
|
## Configuration (Once App Working)
|
||||||
|
|
||||||
|
Set temperature probe calibration offset if probe reads inaccurately. Configure heating/cooling setpoints appropriate for the tank species being controlled.
|
||||||
63
Periphery/PNC-Fish/IT/Digital-Signage-Runbook.md
Normal file
63
Periphery/PNC-Fish/IT/Digital-Signage-Runbook.md
Normal file
|
|
@ -0,0 +1,63 @@
|
||||||
|
---
|
||||||
|
title: Digital Signage Runbook
|
||||||
|
description: How to update price boards and manage the TV signage system
|
||||||
|
published: true
|
||||||
|
date: 2026-04-12T00:00:00.000Z
|
||||||
|
tags: pncfish, signage, runbook
|
||||||
|
editor: markdown
|
||||||
|
dateCreated: 2026-04-12T00:00:00.000Z
|
||||||
|
---
|
||||||
|
|
||||||
|
# Digital Signage Runbook
|
||||||
|
|
||||||
|
## Updating a Price
|
||||||
|
|
||||||
|
1. Open Google Sheets (master inventory)
|
||||||
|
2. Find the item row, edit price (col C), name (col B), or tank designator (col D)
|
||||||
|
3. Google Slides updates automatically
|
||||||
|
4. TVs pick up the change within 5 minutes — no further action needed
|
||||||
|
5. **Immediate update:** force-stop ScreenLite on that FireTV → relaunch
|
||||||
|
|
||||||
|
## Adding New Inventory
|
||||||
|
|
||||||
|
1. Add new row: SKU (A), display name (B), price (C), tank designator(s) (D)
|
||||||
|
2. Multiple tank designators are space-separated: `T4 T5`
|
||||||
|
3. Slides update automatically
|
||||||
|
4. Push to Square: currently manual via Square catalog CSV upload
|
||||||
|
|
||||||
|
## When an Item Sells — Manual Fallback
|
||||||
|
|
||||||
|
1. Remove the tank designator from col D of that item's row
|
||||||
|
2. Slides update automatically within a minute
|
||||||
|
3. TV picks it up within 5 minutes
|
||||||
|
|
||||||
|
## Google Sheets Column Reference
|
||||||
|
|
||||||
|
| Column | Field | Example |
|
||||||
|
|--------|-------|---------|
|
||||||
|
| A | SKU | `CLOWN-001` |
|
||||||
|
| B | Display name | `Ocellaris Clownfish` |
|
||||||
|
| C | Price | `29.99` |
|
||||||
|
| D | Tank designator(s) | `T4` or `T4 T5` |
|
||||||
|
|
||||||
|
## Troubleshooting
|
||||||
|
|
||||||
|
| Problem | Fix |
|
||||||
|
|---------|-----|
|
||||||
|
| TV showing stale price | Force-stop ScreenLite → relaunch |
|
||||||
|
| Image blurry/soft text | Add `?sz=s1920` to PNG export URL in HTML file |
|
||||||
|
| Slides not updating from Sheet | Check Apps Script in Extensions → Apps Script for errors |
|
||||||
|
| FireTV lost the URL | Re-enter Apache URL in ScreenLite settings |
|
||||||
|
|
||||||
|
## Square Webhook Automation (When Deployed)
|
||||||
|
|
||||||
|
Once live, the automation flow will be:
|
||||||
|
|
||||||
|
```
|
||||||
|
Square sale → Webhook POST → Google Apps Script Web App
|
||||||
|
→ Find item SKU in Sheet
|
||||||
|
→ Remove tank designator from col D
|
||||||
|
→ Slides auto-update → TV picks up within 5 min
|
||||||
|
```
|
||||||
|
|
||||||
|
**Status:** Designed, not yet deployed. Next step: configure Square developer dashboard webhook endpoint to the Apps Script URL and test with a real sale.
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
---
|
---
|
||||||
title: IT Overview
|
title: IT Overview
|
||||||
description: PNC Fish & More IT infrastructure
|
description: PNC Fish & More IT infrastructure — web server, digital signage, networking
|
||||||
published: true
|
published: true
|
||||||
date: 2026-04-12T00:00:00.000Z
|
date: 2026-04-12T00:00:00.000Z
|
||||||
tags: pncfish, it
|
tags: pncfish, it
|
||||||
|
|
@ -10,19 +10,61 @@ dateCreated: 2026-04-12T00:00:00.000Z
|
||||||
|
|
||||||
# IT Overview
|
# IT Overview
|
||||||
|
|
||||||
## Website
|
## Infrastructure
|
||||||
|
|
||||||
Hosted on `pncfishandmore.com`. Static/PHP stack via the Netgrimoire `web.yaml` Apache/PHP service.
|
| Resource | Details |
|
||||||
|
|----------|---------|
|
||||||
|
| Domain | `pncfishandmore.com` — managed via ISPConfig |
|
||||||
|
| Web server | Apache on NetGrimoire (self-hosted Docker, `web.yaml`) |
|
||||||
|
| Email | MailCow + MXRoute relay |
|
||||||
|
| DNS | ISPConfig + internal Technitium |
|
||||||
|
| Accounting | Bigcapital (Docker on docker5, `accounts.netgrimoire.com`) |
|
||||||
|
|
||||||
## Email
|
---
|
||||||
|
|
||||||
Handled via MailCow + MXRoute. Domain configured as part of the 8-domain mail setup.
|
## Digital Signage System
|
||||||
See [MailCow Domain Setup](/Keystone-Grimoire/Mail/Domain-Setup).
|
|
||||||
|
|
||||||
## POS System
|
Three FireTV devices display live price board slides on in-store TVs. Each TV runs ScreenLite kiosk app loading an Apache HTML page, which fetches a Google Slides PNG export and refreshes it every 5 minutes via JavaScript.
|
||||||
|
|
||||||
*Document POS system here.*
|
### TV Pages on Apache
|
||||||
|
|
||||||
## Network
|
| File | Slide Deck | Purpose |
|
||||||
|
|------|-----------|---------|
|
||||||
|
| `left.html` | Saltwater fish | Main fish price board |
|
||||||
|
| `right.html` | Secondary | Freshwater or secondary display |
|
||||||
|
| `inverts.html` | Invertebrates | Inverts price board |
|
||||||
|
|
||||||
*Document store network here — router, AP, any on-site devices.*
|
### Google Slides Deck IDs
|
||||||
|
|
||||||
|
| Deck | Slide ID |
|
||||||
|
|------|---------|
|
||||||
|
| Left (saltwater fish) | `1S3j0K1QlWAtkjq73E73At3gz9vWp9vVr_yZswUHiyN8` |
|
||||||
|
| Right (secondary) | `1mWzgisxMQAFAhME9HXY_PEK0v_hIuQ4Md0PQS10ES8Q` |
|
||||||
|
| Inverts | `1nzunM4pQxqmW82_Ab0rrOsV4QuO8G5TVUDodplI_4tY` |
|
||||||
|
|
||||||
|
PNG export URL format: `https://docs.google.com/presentation/d/<ID>/export/png?sz=s1920`
|
||||||
|
|
||||||
|
Use `sz=s1920` for sharper text. If display looks soft, increase canvas size in Google Slides settings.
|
||||||
|
|
||||||
|
### Critical: ScreenLite Does Not Respond to Meta-Refresh
|
||||||
|
|
||||||
|
ScreenLite ignores `<meta http-equiv="refresh">`. All TV page refreshes use JavaScript `setInterval` image src swap only:
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
setInterval(function() {
|
||||||
|
var img = document.getElementById('slide');
|
||||||
|
img.src = SLIDE_URL + '?t=' + Date.now();
|
||||||
|
}, 300000); // 300,000ms = 5 minutes
|
||||||
|
```
|
||||||
|
|
||||||
|
### Force Immediate Refresh
|
||||||
|
|
||||||
|
Force-stop ScreenLite on the FireTV and relaunch. It reloads the Apache URL and picks up the latest PNG immediately.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Pending
|
||||||
|
|
||||||
|
- [ ] Square webhook → Apps Script → Google Sheets automation (designed, not deployed)
|
||||||
|
- [ ] "Push to Square" Apps Script button in Google Sheets
|
||||||
|
- [ ] Store network documentation (router, AP, FireTV connections)
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
---
|
---
|
||||||
title: Marketing Overview
|
title: Marketing Overview
|
||||||
description: PNC Fish & More marketing and promotions
|
description: Digital signage content, promotions, social media
|
||||||
published: true
|
published: true
|
||||||
date: 2026-04-12T00:00:00.000Z
|
date: 2026-04-12T00:00:00.000Z
|
||||||
tags: pncfish, marketing
|
tags: pncfish, marketing
|
||||||
|
|
@ -10,4 +10,18 @@ dateCreated: 2026-04-12T00:00:00.000Z
|
||||||
|
|
||||||
# Marketing Overview
|
# Marketing Overview
|
||||||
|
|
||||||
*Add marketing documentation here: social media accounts, posting schedules, ad campaigns, promotions, photography workflow for livestock, etc.*
|
## Digital Signage
|
||||||
|
|
||||||
|
In-store TV price boards are the primary customer-facing marketing surface. See [Digital Signage Runbook](/PNC-Fish/IT/Digital-Signage-Runbook) for how to update content.
|
||||||
|
|
||||||
|
## Social Media
|
||||||
|
|
||||||
|
*Document social media accounts, posting schedule, and content workflow here.*
|
||||||
|
|
||||||
|
## Promotions
|
||||||
|
|
||||||
|
*Document any recurring promotions, seasonal sales, or loyalty programs here.*
|
||||||
|
|
||||||
|
## Photography Workflow
|
||||||
|
|
||||||
|
*Document how livestock photos are taken and used for signage, social media, and Square catalog.*
|
||||||
|
|
|
||||||
67
Periphery/PNC-Fish/Operations/Inventory.md
Normal file
67
Periphery/PNC-Fish/Operations/Inventory.md
Normal file
|
|
@ -0,0 +1,67 @@
|
||||||
|
---
|
||||||
|
title: Inventory Management
|
||||||
|
description: Google Sheets master inventory, Square POS, and sales workflow
|
||||||
|
published: true
|
||||||
|
date: 2026-04-12T00:00:00.000Z
|
||||||
|
tags: pncfish, inventory, square
|
||||||
|
editor: markdown
|
||||||
|
dateCreated: 2026-04-12T00:00:00.000Z
|
||||||
|
---
|
||||||
|
|
||||||
|
# Inventory Management
|
||||||
|
|
||||||
|
## Source of Truth
|
||||||
|
|
||||||
|
**Google Sheets is the master inventory.** Square is a downstream target. Never update Square first and then try to sync back to Sheets — always update Sheets first.
|
||||||
|
|
||||||
|
## Google Sheets Structure
|
||||||
|
|
||||||
|
| Column | Field | Notes |
|
||||||
|
|--------|-------|-------|
|
||||||
|
| A | SKU | Unique identifier |
|
||||||
|
| B | Display name | Name shown on price board |
|
||||||
|
| C | Price | Retail price |
|
||||||
|
| D | Tank designator(s) | Space-separated: `T4 T5`. Drives which TV slide shows the item. Remove when sold. |
|
||||||
|
|
||||||
|
A separate tab tracks **livestock deaths** — used for inventory shrinkage journal entries in Bigcapital. See [Accounting](/PNC-Fish/Accounting/Overview).
|
||||||
|
|
||||||
|
## Square POS Integration
|
||||||
|
|
||||||
|
### Current State (Manual)
|
||||||
|
|
||||||
|
New inventory added to Square via CSV catalog upload. Sales are recorded in Square, then manually reconciled against Google Sheets.
|
||||||
|
|
||||||
|
### Planned Automation
|
||||||
|
|
||||||
|
| Direction | Method | Status |
|
||||||
|
|-----------|--------|--------|
|
||||||
|
| Sale → Sheet | Square webhook → Google Apps Script → remove tank designator | Designed, not deployed |
|
||||||
|
| Sheet → Square | "Push to Square" Apps Script button | Planned, not built |
|
||||||
|
|
||||||
|
### Square API Notes
|
||||||
|
|
||||||
|
- Square API access is free — no additional cost beyond transaction fees
|
||||||
|
- Webhook + Apps Script integration has zero incremental cost
|
||||||
|
- Apps Script is deployed as a Google Web App to receive Square webhook POSTs
|
||||||
|
|
||||||
|
## Adding New Livestock
|
||||||
|
|
||||||
|
1. Add row to Google Sheet: SKU, display name, price, tank designator
|
||||||
|
2. Slides auto-update → TV price board updates within 5 minutes
|
||||||
|
3. Push to Square: CSV upload to Square catalog (manual until automation is live)
|
||||||
|
|
||||||
|
## When Item Sells
|
||||||
|
|
||||||
|
**With automation (planned):** Square fires webhook → Apps Script removes tank designator → done
|
||||||
|
|
||||||
|
**Manual fallback (current):**
|
||||||
|
1. Process sale in Square
|
||||||
|
2. Open Google Sheet
|
||||||
|
3. Remove tank designator from col D for that item
|
||||||
|
4. Slides auto-update, TV picks up within 5 minutes
|
||||||
|
|
||||||
|
## Livestock Death Tracking
|
||||||
|
|
||||||
|
1. Record death in dedicated Google Sheet tab (date, species, SKU, cost)
|
||||||
|
2. Enter as inventory shrinkage journal entry in Bigcapital
|
||||||
|
3. Do NOT process through Square
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
---
|
---
|
||||||
title: Operations Overview
|
title: Operations Overview
|
||||||
description: PNC Fish & More day-to-day operations documentation
|
description: Day-to-day store operations — sales, inventory, payroll
|
||||||
published: true
|
published: true
|
||||||
date: 2026-04-12T00:00:00.000Z
|
date: 2026-04-12T00:00:00.000Z
|
||||||
tags: pncfish, operations
|
tags: pncfish, operations
|
||||||
|
|
@ -10,4 +10,19 @@ dateCreated: 2026-04-12T00:00:00.000Z
|
||||||
|
|
||||||
# Operations Overview
|
# Operations Overview
|
||||||
|
|
||||||
*Add operations documentation here: inventory management, supplier contacts, tank maintenance schedules, livestock sourcing, water chemistry protocols, etc.*
|
## Key Runbooks
|
||||||
|
|
||||||
|
| | |
|
||||||
|
|---|---|
|
||||||
|
| [Inventory Management](/PNC-Fish/Operations/Inventory) | Google Sheets, Square POS, adding livestock, sales workflow |
|
||||||
|
| [Payroll](/PNC-Fish/Operations/Payroll) | Current process, Florida Reemployment Tax, tool decision |
|
||||||
|
|
||||||
|
## Quick Reference
|
||||||
|
|
||||||
|
**Updating a price board:** Edit Google Sheet → TV updates in 5 minutes
|
||||||
|
|
||||||
|
**New livestock arrived:** Add to Sheet → Push to Square (CSV) → update tank designator
|
||||||
|
|
||||||
|
**Item sold:** Remove tank designator from Sheet col D
|
||||||
|
|
||||||
|
**Employee paid:** Weekly by check — record hours in inherited Excel spreadsheets
|
||||||
|
|
|
||||||
43
Periphery/PNC-Fish/Operations/Payroll.md
Normal file
43
Periphery/PNC-Fish/Operations/Payroll.md
Normal file
|
|
@ -0,0 +1,43 @@
|
||||||
|
---
|
||||||
|
title: Payroll
|
||||||
|
description: Current payroll process, Florida Reemployment Tax, tool decision
|
||||||
|
published: true
|
||||||
|
date: 2026-04-12T00:00:00.000Z
|
||||||
|
tags: pncfish, payroll, hr
|
||||||
|
editor: markdown
|
||||||
|
dateCreated: 2026-04-12T00:00:00.000Z
|
||||||
|
---
|
||||||
|
|
||||||
|
# Payroll
|
||||||
|
|
||||||
|
## Current Process
|
||||||
|
|
||||||
|
| Item | Method |
|
||||||
|
|------|--------|
|
||||||
|
| Pay schedule | Weekly |
|
||||||
|
| Payment method | Handwritten check |
|
||||||
|
| Hours tracking | Inherited Excel spreadsheets |
|
||||||
|
| Quarterly filing | Florida Reemployment Tax — filed manually |
|
||||||
|
| Annual | W-2s |
|
||||||
|
|
||||||
|
The Excel spreadsheets were inherited from the prior accountant. They are still in active use.
|
||||||
|
|
||||||
|
## Compliance Requirements
|
||||||
|
|
||||||
|
- **Florida Reemployment Tax** must be filed quarterly
|
||||||
|
- **W-2s** issued annually to employees
|
||||||
|
- **Owner draws** are not wages — do not run through payroll, do not appear on Schedule C
|
||||||
|
|
||||||
|
## Tool Decision — Pending
|
||||||
|
|
||||||
|
| Option | Cost | Notes |
|
||||||
|
|--------|------|-------|
|
||||||
|
| Continue manual (Excel) | Free | Works but scales poorly; compliance risk increases with headcount |
|
||||||
|
| Square Payroll | ~$35/mo + $6/employee | Handles FL Reemployment Tax, W-2s, direct deposit |
|
||||||
|
| Other managed payroll | Varies | QuickBooks Payroll, Gusto, etc. |
|
||||||
|
|
||||||
|
**Decision not yet made.** Key factor: Florida Reemployment Tax compliance and W-2 accuracy. The manual approach is viable for 1-2 employees but becomes a compliance risk as the team grows.
|
||||||
|
|
||||||
|
## Next Step
|
||||||
|
|
||||||
|
Review inherited Excel spreadsheets. Determine current employee count and pay structure. Make managed vs. manual decision based on headcount and compliance comfort level.
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
---
|
---
|
||||||
title: PNC Fish & More
|
title: PNC Fish & More
|
||||||
description: Saltwater fish and coral store — IT, operations, and business documentation
|
description: Saltwater fish and coral store — IT, operations, accounting, and equipment
|
||||||
published: true
|
published: true
|
||||||
date: 2026-04-12T00:00:00.000Z
|
date: 2026-04-12T00:00:00.000Z
|
||||||
tags: pncfish, business
|
tags: pncfish, business
|
||||||
|
|
@ -12,7 +12,9 @@ dateCreated: 2026-04-12T00:00:00.000Z
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
PNC Fish & More is a saltwater fish and coral store. This section of the grimoire covers IT infrastructure, business operations, and marketing documentation for the store.
|
PNC Fish & More is a saltwater fish and coral store (single-member LLC, Fort Walton Beach, FL). This grimoire covers all IT infrastructure, business operations, accounting, and equipment documentation for the store.
|
||||||
|
|
||||||
|
**Design principle:** Zero/low-cost, self-managed stack. No unnecessary SaaS subscriptions. Open-source tools where maintenance burden is manageable.
|
||||||
|
|
||||||
**Domain:** `pncfishandmore.com`
|
**Domain:** `pncfishandmore.com`
|
||||||
|
|
||||||
|
|
@ -22,21 +24,50 @@ PNC Fish & More is a saltwater fish and coral store. This section of the grimoir
|
||||||
|
|
||||||
| Section | Contents |
|
| Section | Contents |
|
||||||
|---------|----------|
|
|---------|----------|
|
||||||
| [IT](/PNC-Fish/IT/Overview) | Website, POS system, networking, hosting |
|
| [IT](/PNC-Fish/IT/Overview) | Apache web server, digital signage, networking, hosting |
|
||||||
| [Operations](/PNC-Fish/Operations/Overview) | Inventory management, suppliers, tank management |
|
| [Operations](/PNC-Fish/Operations/Inventory) | Inventory management, Square POS, sales workflow |
|
||||||
| [Marketing](/PNC-Fish/Marketing/Overview) | Social media, promotions, advertising |
|
| [Accounting](/PNC-Fish/Accounting/Overview) | Bigcapital, Schedule C, COGS, payroll |
|
||||||
|
| [Equipment](/PNC-Fish/Equipment/Temperature-Controllers) | Inkbird ITC-306A, ReefBreeder lights, reef tank |
|
||||||
|
| [Marketing](/PNC-Fish/Marketing/Overview) | Digital signage content, promotions |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## IT Overview
|
## Stack at a Glance
|
||||||
|
|
||||||
| Resource | Details |
|
| Service | Host | Purpose | Cost |
|
||||||
|----------|---------|
|
|---------|------|---------|------|
|
||||||
| Domain | `pncfishandmore.com` (managed via ISPConfig) |
|
| Apache web server | NetGrimoire (self-hosted) | Serves TV signage pages | Free |
|
||||||
| Website | Hosted on Netgrimoire Apache/PHP stack |
|
| Bigcapital | NetGrimoire (Docker) | Accounting / Schedule C | Free / self-hosted |
|
||||||
| Email | Via MailCow + MXRoute relay |
|
| Google Sheets | Google | Master inventory source of truth | Free |
|
||||||
| DNS | ISPConfig + OPNsense internal |
|
| Google Slides (3 decks) | Google | Digital signage content | Free |
|
||||||
|
| Google Apps Script | Google | Square webhook + automation | Free |
|
||||||
|
| Square POS | In-store | Point-of-sale, transaction processing | Transaction fees only |
|
||||||
|
| ScreenLite | FireTV devices | Kiosk app, loads Apache pages | App cost |
|
||||||
|
| FireTV (multiple) | In-store TVs | Display hardware | Hardware only |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
*Sections below are stubs — add content as needed.*
|
## Integration Architecture
|
||||||
|
|
||||||
|
```
|
||||||
|
Google Sheets (master inventory)
|
||||||
|
→ Google Slides (auto-updated from Sheet)
|
||||||
|
→ Apache HTML pages (PNG export, 5-min refresh)
|
||||||
|
→ FireTV + ScreenLite (display)
|
||||||
|
|
||||||
|
Square sale
|
||||||
|
→ Webhook → Google Apps Script
|
||||||
|
→ Google Sheets (decrement / remove tank designator)
|
||||||
|
→ Slides update automatically
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Key Design Decisions
|
||||||
|
|
||||||
|
- **Google Sheets is the master source of truth** for inventory — Square is a downstream target, not the source
|
||||||
|
- **ERPNext rejected** — US tax table upkeep burden too high for a small operation
|
||||||
|
- **ScreenLite ignores meta-refresh** — all TV page refreshes must use JavaScript `setInterval` image src swap, not `<meta http-equiv="refresh">`
|
||||||
|
- **Square API access is free** — webhook + Apps Script integration has zero incremental cost
|
||||||
|
- **Livestock deaths** tracked via dedicated Sheet tab + Bigcapital journal entries, not through Square
|
||||||
|
- **Owner draws are not business expenses** and must not appear on Schedule C
|
||||||
|
|
|
||||||
72
home.md
72
home.md
|
|
@ -22,36 +22,29 @@ dateCreated: 2026-04-12T00:00:00.000Z
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 🔮 The Grimoires — Homelab
|
## 🔮 Netgrimoire — Homelab
|
||||||
|
|
||||||
| Grimoire | Badge | Purpose |
|
| Grimoire | Badge | Purpose |
|
||||||
|----------|-------|---------|
|
|----------|-------|---------|
|
||||||
| 🟢 [Netgrimoire](/Netgrimoire/Overview) | `netgrimoire-badge.png` | Core homelab — service catalog, host inventory, standards |
|
| 🟢 [Netgrimoire](/Netgrimoire/Overview) | `netgrimoire-badge.png` | Core homelab — service catalog, host inventory, standards |
|
||||||
| 🏰 [Keystone Grimoire](/Keystone-Grimoire/Overview) | `keystone-badge.png` | Architecture — network design, Caddy, Docker Swarm, DNS, mail |
|
| 🏰 [Keystone Grimoire](/Netgrimoire/Keystone-Grimoire/Overview) | `keystone-badge.png` | Architecture — network, Caddy, Docker Swarm, DNS, mail |
|
||||||
| 🗄️ [Vault Grimoire](/Vault-Grimoire/Overview) | `vault-badge.png` | Storage & backup — ZFS, Kopia, NFS, offsite replication |
|
| 🗄️ [Vault Grimoire](/Netgrimoire/Vault-Grimoire/Overview) | `vault-badge.png` | Storage & backup — ZFS, Kopia, NFS, offsite replication |
|
||||||
| 🛡️ [Ward Grimoire](/Ward-Grimoire/Overview) | `ward-badge.png` | Security — OPNsense, CrowdSec, auth, VPN, blocklists |
|
| 🛡️ [Ward Grimoire](/Netgrimoire/Ward-Grimoire/Overview) | `ward-badge.png` | Security — OPNsense, CrowdSec, auth, VPN, blocklists |
|
||||||
| 🔮 [Watch Grimoire](/Watch-Grimoire/Overview) | `watch-badge.png` | Monitoring — Uptime Kuma, Beszel, Grafana, alerts, logs |
|
| 🔮 [Watch Grimoire](/Netgrimoire/Watch-Grimoire/Overview) | `watch-badge.png` | Monitoring — Kuma, Beszel, Grafana, alerts, logs |
|
||||||
| 🤖 [Gremlin Grimoire](/Gremlin-Grimoire/Overview) | `gremlin-badge.png` | Local AI — Ollama, Open WebUI, n8n, Qdrant, workflows |
|
| 🤖 [Gremlin Grimoire](/Netgrimoire/Gremlin-Grimoire/Overview) | `gremlin-badge.png` | Local AI — Ollama, Open WebUI, n8n, Qdrant, workflows |
|
||||||
| 💀 [Shadow Grimoire](/Shadow-Grimoire/Overview) | `shadow-badge.png` | Acquisition — Usenet, torrents, arr stack, indexers |
|
| 💀 [Shadow Grimoire](/Netgrimoire/Shadow-Grimoire/Overview) | `shadow-badge.png` | Acquisition — Usenet, torrents, arr stack, indexers |
|
||||||
| 🌿 [Green Grimoire](/Green-Grimoire/Overview) | `green-badge.png` | Adult media — Stash, Jellyfinx, Namer, Whisparr |
|
| 🌿 [Green Grimoire](/Netgrimoire/Green-Grimoire/Overview) | `green-badge.png` | Adult media — Stash, Jellyfinx, Namer, Whisparr |
|
||||||
| 🎒 [Pocket Grimoire](/Pocket-Grimoire/Overview) | `pocket-badge.png` | Portable lab — laptop, offline-first, travel vault node |
|
| 🎒 [Pocket Grimoire](/Netgrimoire/Pocket-Grimoire/Overview) | `pocket-badge.png` | Portable lab — laptop, offline-first, travel vault node |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 🏠 Personal & Business
|
## 🌐 Periphery — Beyond the Lab
|
||||||
|
|
||||||
| Section | Badge | Purpose |
|
| Section | Badge | Purpose |
|
||||||
|---------|-------|---------|
|
|---------|-------|---------|
|
||||||
| 👨👩👧 [PNC Harris](/PNC-Harris/Overview) | `pncharris-badge.png` | Family services — Immich, Nextcloud, Mealie, Vikunja |
|
| 👨👩👧 [PNC Harris](/Periphery/PNC-Harris/Overview) | `pncharris-badge.png` | Family services — Immich, Nextcloud, Mealie, Vikunja |
|
||||||
| 🐠 [PNC Fish & More](/PNC-Fish/Overview) | `pncfish-badge.png` | Saltwater fish & coral store — IT, operations, marketing |
|
| 🐠 [PNC Fish & More](/Periphery/PNC-Fish/Overview) | `pncfish-badge.png` | Saltwater fish & coral store — IT, ops, accounting |
|
||||||
|
| 💼 [Work](/Periphery/Work/Overview) | — | Cisco switching, NTP, upgrades, Ducky automation |
|
||||||
---
|
|
||||||
|
|
||||||
## 💼 Work
|
|
||||||
|
|
||||||
| | |
|
|
||||||
|---|---|
|
|
||||||
| 🔧 [Work Overview](/Work/Overview) | Cisco switching builds, NTP, upgrades, Ducky automation |
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
@ -59,31 +52,32 @@ dateCreated: 2026-04-12T00:00:00.000Z
|
||||||
|
|
||||||
| | |
|
| | |
|
||||||
|---|---|
|
|---|---|
|
||||||
| 📋 [Service Catalog](/Netgrimoire/Service-Catalog) | All services — status, host, URL, grimoire assignment |
|
| 📋 [Service Catalog](/Netgrimoire/Service-Catalog) | All services — status, host, URL, grimoire |
|
||||||
| 🏗️ [Docker Swarm Template](/Keystone-Grimoire/Docker/Swarm-Template) | Standard YAML, label rules, volume paths |
|
| 🏗️ [Docker Swarm Template](/Netgrimoire/Keystone-Grimoire/Docker/Swarm-Template) | Standard YAML, label rules, volume paths |
|
||||||
| 📄 [Service Doc Template](/Netgrimoire/Conventions/Service-Doc-Template) | Template for new service documentation |
|
| 📄 [Service Doc Template](/Netgrimoire/Conventions/Service-Doc-Template) | Template for new service docs |
|
||||||
| 📖 [Documentation Standards](/Netgrimoire/Conventions/Doc-Standards) | Structure, naming, diagram, git workflow |
|
| 📖 [Doc Standards](/Netgrimoire/Conventions/Doc-Standards) | Structure, naming, diagram, git workflow |
|
||||||
| 🔍 [Audit Reports](/Netgrimoire/Audits/README) | Gremlin-generated YAML compliance audits |
|
| 🔍 [Audit Reports](/Netgrimoire/Audits/README) | Gremlin-generated weekly YAML audits |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 🗺️ Wiki Structure
|
## 🗺️ Structure
|
||||||
|
|
||||||
```
|
```
|
||||||
wiki/
|
wiki/
|
||||||
├── home.md ← you are here
|
├── home.md
|
||||||
├── Netgrimoire/ ← spine: catalog, standards, conventions
|
├── Netgrimoire/ ← homelab spine + all grimoires
|
||||||
├── Keystone-Grimoire/ ← architecture: hosts, network, Docker, mail
|
│ ├── Keystone-Grimoire/ ← architecture
|
||||||
├── Vault-Grimoire/ ← storage: ZFS, Kopia, NFS, backups
|
│ ├── Vault-Grimoire/ ← storage & backup
|
||||||
├── Ward-Grimoire/ ← security: OPNsense, CrowdSec, auth, VPN
|
│ ├── Ward-Grimoire/ ← security
|
||||||
├── Watch-Grimoire/ ← monitoring: Kuma, Beszel, Grafana, ntfy
|
│ ├── Watch-Grimoire/ ← monitoring
|
||||||
├── Gremlin-Grimoire/ ← AI: Ollama, n8n, Qdrant, workflows
|
│ ├── Gremlin-Grimoire/ ← AI stack
|
||||||
├── Shadow-Grimoire/ ← acquisition: arr stack, Usenet, torrents
|
│ ├── Shadow-Grimoire/ ← acquisition
|
||||||
├── Green-Grimoire/ ← adult media: Stash, Jellyfinx, Namer
|
│ ├── Green-Grimoire/ ← adult media
|
||||||
├── Pocket-Grimoire/ ← portable lab: laptop + Beryl AX
|
│ └── Pocket-Grimoire/ ← portable lab
|
||||||
├── PNC-Harris/ ← family services
|
└── Periphery/ ← non-homelab
|
||||||
├── PNC-Fish/ ← business docs
|
├── PNC-Harris/ ← family
|
||||||
└── Work/ ← Cisco / network engineering
|
├── PNC-Fish/ ← business
|
||||||
|
└── Work/ ← Cisco / networking
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
|
||||||
BIN
netgrimoire-export.zip
Normal file
BIN
netgrimoire-export.zip
Normal file
Binary file not shown.
Loading…
Add table
Add a link
Reference in a new issue