Skip to content

Project workspace app decommissioned 2026 07 04


name: workspace.justinsforge app: built, frozen, then fully shut down (2026-07-04) description: Full arc for the canonical name change from "LifeOS" to workspace.justinsforge.com, the 2026-06-15 build decision, the 2026-07-01 freeze when capture repointed to CreatorTrack, and the 2026-07-04 full decommission. Postgres spine itself was KEPT (now called core, serves CreatorTrack). type: project


2026-06-15: build decision (superseded, kept for context)

Justin decided to build a custom multi-workspace app, workspace.justinsforge.com (name chosen over "LifeOS" because the app spans personal AND business), rather than adopt Directus/NocoDB/Notion. Architecture: one physical Postgres DB named lifeos on a new forge-data LXC, logical separation via workspace_id + row-level security; workspaces Personal/Nova/JustinWieb (Justin only) + Gus Outdoor/Gus The Bass/Sip N Serve (multi-user: Michael scoped to Gus workspaces, Kristine scoped to Sip); Cloudflare Access as the front door, RLS enforcing walls at the DB level; ERPNext kept as the books/tax engine (outside-authority exception to the build-vs-adopt rule; everything else gets built, not adopted).

2026-07-01: frozen orphan

Capture was repointed to CreatorTrack (forge-suite). The workspace app's systemd service kept running, but per the 2026-07-01 canon update in reference_forge_data_lifeos_spine.md it was no longer canonical; its Phase 2 domain tables and interim app.* tables were marked "FROZEN ORPHANS, do not extend them." The name "lifeos" was retired for the Postgres DB itself; it became just core, serving as CreatorTrack's data layer rather than a standalone product. Lesson from this transition: a running systemd process is not evidence of canonical status; check the dated canon file, not systemctl status.

2026-07-04: fully decommissioned

forge-workspace.service was disabled and stopped, its unit file removed, DNS record workspace.justinsforge.com deleted, and its VR Alliance ingress rule removed. Stale disabled habit units (forge-habits-instantiate/streaks/alias-backfill) were also deleted. The Postgres DB spine and forge-workspace-backup.timer were deliberately KEPT despite the name: the timer backs up the core Postgres that CreatorTrack depends on, so do not remove it when cleaning up workspace remnants.

Separately, finances.justinsforge (:8096, old Flask app) was NOT part of this decommission at the time (2026-07-04); it was still live and canonical for writes/SimpleFIN ingest/icon rules. Update 2026-07-09: finances has since been fully retired too (Postgres cutover shipped 2026-07-05, commit a54215c); see reference_finances_app.md for current status.

Why: A decommission audit was checking only system systemd units and missed that workspace and finances run as user units, so it wrongly reported both as already off. Investigation found workspace was an orphaned view feeding stale legacy app.meal_entries data (new food logs go to CreatorTrack's app.nodes), so it was safe to fully retire.

How to apply: Don't reference workspace.justinsforge as a live surface anymore, and don't re-pitch Directus/NocoDB/"LifeOS" naming; the decision is closed and superseded by CreatorTrack. New app features belong in CreatorTrack (forge-suite), storing data either as app.nodes collection rows or dedicated typed tables in the core DB. When auditing systemd services for what's live/dead, always check user units (systemctl --user) in addition to system units.

[merged 2026-07-09 from 6 duplicate/sequential auto-memory writes: project_forge_workspace_app.md, project_forge_workspace_app_frozen.md, project_workspace_justinsforge.md, project_workspace_lifeos_spine_architecture.md, project_lifeos_workspace_architecture.md (all session e6a507d7-a10a-468c-812b-333c77bb093a for the 06-15 decision, or 461b1ad7-a331-4bac-a340-58ef4cd3ee7e for the freeze), and this file's own original content (session 3b33d49c-33e7-46b9-baad-43faccfe23af, confidence 0.80, mode staged)]