Portal matrix
loca.zone serves as the generated project directory for the zone. Its header hosts an unboxed gem link resolving to the hub wiki, while authentication remains operational but excluded from discovery.
Manifesto
The landing header preserves the exact text and typographical error within a Brutalist 4px white frame:
Private Project Portal. A mix of half-baked local environments & experiments. Do NOT enter! xD - Safty is NOT guaranteed.
UI Invariants
Seven strict constraints govern the presentation and interaction of the portal grid:
- NO FLUFF: Absolutely zero footers, no JS Epoch clocks, no “PORTAL_OS” text, and no repetitive
<p>Autonomic Node</p>labels. - Top Bar Layout: Keep the LOCA.ZONE wordmark and manifesto inside the Brutalist 4px white frame on
#000000. The header link must be an unboxed icon-only Gem link resolving tohttps://wiki.loca.zonewith an accessible label. - The Manifesto: Preserve this text exactly (including the typo) in the header block.
- Portal Membership: Auth is intentionally omitted from portal discovery; its Nginx site and authentication service remain unchanged. Quartz is a project card. The Loca apex is not in the grid. The wiki is header-only. Carefully curated brand names (e.g., RocketChat, KnowledgeTree, PuterOS, OhMyPi, OpenNotebook) must have no spaces in compounds.
- Project Front: Cards use centered legacy-style composition and 4px frames. The front displays a centered brand title hero; the full card opens the project.
- Project Back: The back reveals the brand, full domain, version, authentication badge, and a centered in-flow Info icon (no corner square, no hover fill box) functioning as a back-only link to the wiki. Quartz Info links to
https://wiki.loca.zone; others link tohttps://wiki.<subdomain>.loca.zone. - Interaction Contract: Pointer hover immediately flips a centered card to its back; leaving returns the front, using CSS
:hover/:focus-within. Minimal JS is used for accessibility fallbacks: keyboard focus reveals, Escape returns to front, hoverless touch uses first tap to reveal/second tap to open, and outside reset. Reduced motion gets an immediate state change. There is no flip button.
Architecture and Satellites
| Feature | Design specification | Implementation |
|---|---|---|
| Satellite links | Nested subdomains attach as back-face satellite icons | Rendered via split_satellites in render_project_card |
| Security badge | Visual padlock indicator reflecting ingress protection | Displayed on card back for Authelia or native login |
| Info link | Navigates directly to project documentation | Center-aligned SVG icon linking to service wiki |
| Discovery boundary | Apex domain and authentication gateways omitted | Filtered during vhost discovery |
Generator and Hook Pipeline
The landing page at /var/www/loca-zone-root/index.html is dynamically generated. Direct edits to HTML are overwritten on reload.
| Stage | Component | Command or Path |
|---|---|---|
| Source script | Generator code | /opt/loca-zone/generate_portal.py |
| Verification | Unit test suite | cd /opt/loca-zone && python3 -m unittest -v test_generate_portal.py |
| File watcher | systemd path unit | /etc/systemd/system/nginx-reload-hook.path |
| Trigger hook | systemd service unit | sudo systemctl start nginx-reload-hook.service |
| Backups | Dated rollback copy | /opt/loca-zone/generate_portal.py.bak-<stamp> |
Recovery Protocol
- Edit
/opt/loca-zone/generate_portal.pyto restore invariant compliance. - Execute the unit suite via
cd /opt/loca-zone && python3 -m unittest -v test_generate_portal.py. - Rebuild static output using
sudo systemctl start nginx-reload-hook.service.
Sources
/opt/loca-zone/generate_portal.py:42-53,438-440,527-577,699-787/opt/loca-zone/test_generate_portal.py:1-120/etc/systemd/system/nginx-reload-hook.path:1-15/etc/systemd/system/nginx-reload-hook.service:1-15