Document Scope
The service uses a modular multi-repository workspace instead of one monolithic Git repository.
This document defines the higher-level organization of the local development workspace. It explains what the workspace root is, how to refer to that root in a way that can survive a later move from Windows to Linux, what each major top-level folder is for, which folders are separate Git repositories, how those repositories relate to one another, how humans and AI agents should decide which repository to work in, and which assumptions must not be made when working across the workspace.
This document is written for human operators, employees, ChatGPT sessions, Codex sessions, AI-assisted development tools, automation workers, and future MCP/RAG workflows. Its purpose is to provide enough context that a future session can understand the workspace structure without requiring the user to re-explain the project layout.
This document does not define a repository rename task, a product rename, a public website copy standard, a backend refactor, a deployment process, a Cloudflare resource naming standard, or a database naming standard. It is limited to the organization of the local SaaS workspace and the rules for working safely inside a modular multi-repository project.
Standard
Document Type: Workspace Infrastructure Standards Document Applies To: Local development, repository navigation, AI-agent onboarding, Codex sessions, ChatGPT handoffs, Git workflows, internal documentation, workspace-level reasoning, and future MCP/RAG context use. Status: Authoritative project standard unless later superseded by a newer dated standards document. Primary Purpose: Define how the local SaaS project workspace is organized so humans and AI agents understand that the project is made of multiple separate Git repositories under one workspace root, not one monolithic repository.
1. Workspace Root
The workspace root is the top-level folder that contains the separate repositories and support folders that make up the broader SaaS project.
For this document, the workspace root is represented as:
<workspace-root>
The current workspace root on the Windows Server machine is:
C:\dev
This Windows path is the current machine-specific value of <workspace-root>. It is not intended to be a permanent hard-coded standard for all future machines.
The workspace may later move to a Linux computer or Linux VPS. When that happens, <workspace-root> will point to whatever top-level directory is chosen on that Linux system. The folder names and repository relationships should remain conceptually the same even though the absolute path and operating-system path separators may change.
Examples:
Current Windows machine:
<workspace-root> = C:\dev
Possible future Linux machine:
<workspace-root> = /srv/app-workspace
The exact future Linux path is not defined by this document. The important rule is that the top-level workspace should be discussed and documented as <workspace-root> unless a task specifically requires the current machine's literal path.
Use <workspace-root> throughout durable documentation, AI-agent handoffs, project standards, and repository-boundary explanations.
Use the current literal path only when writing a machine-specific command, a machine-specific setup instruction, or a diagnostic note that must be run on the current Windows Server machine.
Do not assume that <workspace-root>/app is the entire project. It is the core application repository, but it is only one repository inside the larger workspace.
The broader project includes multiple repositories with separate purposes, including the core backend application, the public website, the internal admin site, server/environment configuration, and local context/documentation repositories.
2. Path Notation Standard
Durable documentation should use this placeholder form:
<workspace-root>/repository-or-folder
Examples:
<workspace-root>/app
<workspace-root>/admin
<workspace-root>/site
<workspace-root>/server
<workspace-root>/ctx-cloudflare
This notation is intentionally operating-system neutral. It explains the logical location of a folder relative to the workspace root without locking the document to a Windows-only absolute path.
When a human operator or AI agent needs to run an actual command, convert the placeholder to the correct local path for the current machine.
Current Windows examples:
<workspace-root>/app means C:\dev\app
<workspace-root>/admin means C:\dev\admin
<workspace-root>/site means C:\dev\site
<workspace-root>/server means C:\dev\server
Possible Linux examples:
<workspace-root>/app could mean /srv/app-workspace/app
<workspace-root>/admin could mean /srv/app-workspace/admin
<workspace-root>/site could mean /srv/app-workspace/site
<workspace-root>/server could mean /srv/app-workspace/server
Do not edit durable documentation merely to replace one absolute workspace path with another. Define <workspace-root> once for the current machine, then refer to repository locations relative to <workspace-root>.
If a command must be written for a specific operating system, make that clear in the text immediately before the command.
3. Workspace Model
Many developers put an entire application into one large Git repository. This project does not use that model.
Instead, the project uses several smaller Git repositories that are cloned into the same local parent folder.
Each major repository has its own role. The repositories are designed to work together, but they should not be collapsed into one folder, casually merged, or treated as interchangeable.
The working model is:
<workspace-root>
├── app core SaaS application/backend repository
├── admin internal admin/operator repository
├── site public customer-facing website repository
├── server machine/server/environment repository
├── ctx-* read-only vendor/tool context repositories
└── tmp global scratch folder
When working in this environment, always identify which repository you are in before editing files, running commands, creating commits, or interpreting documentation.
This rule matters because a command that is correct in one repository may be wrong in another. A clean Git status in one repository does not mean the whole workspace is clean. A branch name in one repository does not imply that another repository is on the same branch. A file path under one repository does not automatically belong in another repository just because both repositories support the same larger service.
4. Current Top-Level Workspace Layout
The current top-level layout is:
<workspace-root>
├── .wrangler
├── admin
├── app
├── ctx-authentik
├── ctx-better-auth
├── ctx-brevo
├── ctx-cloudflare
├── ctx-obsidian
├── ctx-resend
├── server
├── site
├── tmp
└── backup.lnk
Each folder has a distinct purpose. Do not assume that a file belongs in app merely because it relates to the SaaS project.
Some folders are active Git repositories. Some folders are local tooling state. Some folders are scratch or shortcut material. A future assistant must inspect the folder purpose before deciding whether it is safe to modify anything inside it.
The layout above is the current Windows Server layout expressed in workspace-root notation. If the workspace later moves to Linux, the top-level folder names may remain the same while the absolute root path changes.
5. Repository and Folder Purposes
app
This is the core SaaS application/backend repository.
Purpose: backend application code, processors, workers, databases, ingestion, Telegram logic, subscription logic, monitoring, and related operational code.
This repository is central to the project, but it is not the whole project. Other repositories may refer to it, support it, display information from it, or provide infrastructure around it.
When a task concerns backend processing, application runtime behavior, database workflows, monitoring scripts, ingestion logic, Telegram posting, operations workers, or application-level automation, app is usually the first repository to inspect.
The app repository should not be treated as the public website repository. It should not be treated as the internal admin repository. It should not be treated as the machine/server-environment repository. It owns the core application behavior, not every file or document related to the broader project.
Logical location:
<workspace-root>/app
admin
This is a separate Git repository.
Purpose: internal company/admin website for operator, employee, and AI-agent workflows.
This repository may contain internal dashboards, company documentation, report links, report outputs, non-public operational UI, and internal workflow tools. It is expected to sit behind access controls.
Do not confuse admin with the public customer website. It is for internal operations, not ordinary customer-facing marketing.
Be careful with any public folder in admin. A public folder may still contain content that should not be casually rewritten unless the task specifically calls for it.
When a task concerns internal documents, internal dashboards, operator pages, internal report access, private work surfaces, internal navigation, AI-agent work pages, or protected administrative tooling, admin is usually the relevant repository.
Logical location:
<workspace-root>/admin
site
This is a separate Git repository.
Purpose: public customer-facing website.
This repository is where customers can learn about services, log in, view dashboards, sign up, cancel, and make payments.
When a task concerns customer-facing pages, public website copy, pricing display, account pages, subscription pages, checkout flows, cancellation flows, or public service descriptions, site is usually the relevant repository.
Do not casually change product wording in site. Public-facing wording should be handled deliberately.
This repository should not receive internal admin tools merely because they are web pages. If a page is meant for operator or employee use, it likely belongs in admin, not site.
Logical location:
<workspace-root>/site
server
This is a separate Git repository.
Purpose: machine/server-environment configuration and supporting operational material.
This repository may include current Windows setup, future Linux VPS setup, startup scripts, scheduled-task exports, Cloudflare tunnel configuration, bootstrap scripts, machine notes, environment documentation, and operational support files.
This repository is not the core application runtime, but it may contain active or future operational references used to run the project.
Use server when a task concerns machine setup, local development environment setup, server migration, scheduled tasks, startup behavior, tunnel configuration, or environment-level automation.
Do not treat server as a dumping ground for application code. It is for environment and machine operations material.
Logical location:
<workspace-root>/server
ctx-* repositories
Each folder beginning with ctx- is a separate context/reference repository.
Known context repositories include:
ctx-authentik
ctx-better-auth
ctx-brevo
ctx-cloudflare
ctx-obsidian
ctx-resend
Purpose: local documentation mirrors for third-party vendors, tools, or services used in the project.
These repositories exist so an assistant or coding agent can consult local documentation without relying only on memory or internet search.
Treat these repositories as read-only reference material unless the user explicitly asks to update them.
Do not modify ctx-* repositories during ordinary application, website, admin, or server work.
A normal task involving a vendor or tool may require reading the matching ctx-* repository. Reading is not the same thing as modifying. The default rule is to inspect these repositories as local reference material, not to patch them.
Logical locations:
<workspace-root>/ctx-authentik
<workspace-root>/ctx-better-auth
<workspace-root>/ctx-brevo
<workspace-root>/ctx-cloudflare
<workspace-root>/ctx-obsidian
<workspace-root>/ctx-resend
.wrangler
This is Cloudflare/Wrangler local cache and tooling state.
Do not modify this folder unless the user specifically gives a Cloudflare/Wrangler maintenance task that requires it.
Logical location:
<workspace-root>/.wrangler
tmp
This is a global scratch folder under <workspace-root>.
Do not use it for repo-specific temporary files when working inside a repository.
For repo-specific work, use that repository's own lowercase tmp folder.
Examples:
<workspace-root>/app/tmp
<workspace-root>/admin/tmp
<workspace-root>/site/tmp
<workspace-root>/server/tmp
Use repo-local tmp folders for helper scripts, verification output, inventories, temporary reports, generated patch files, and other task-specific scratch material.
backup.lnk
This is a Windows shortcut to the user's backup program.
Do not modify it.
Because backup.lnk is Windows-specific, do not assume it will exist in the same form after a future Linux move.
Logical current location:
<workspace-root>/backup.lnk
6. Review and Archive Material
Some older folders that used to sit directly under <workspace-root> have been moved into:
<workspace-root>/server/_review_required
Those folders include:
_news-doc_revamp
_news_image_capture
_news_roadmap_removed
_reusables
Treat these as inactive review/archive material.
Do not patch, reorganize, or rely on them as active application folders unless the user specifically instructs you to inspect them.
The presence of a folder under _review_required does not mean it is part of the current active runtime, current documentation source, current website, or current application layout. It means the material has been retained for review.
7. GitLab Repository Model
The GitLab namespace is:
sudostac
Relevant repositories include:
sudostac/admin
sudostac/app
sudostac/ctx-authentik
sudostac/ctx-better-auth
sudostac/ctx-brevo
sudostac/ctx-cloudflare
sudostac/ctx-obsidian
sudostac/ctx-resend
sudostac/echo
sudostac/server
sudostac/site
Each repository has its own Git history and should be handled separately.
Before giving Git commands, making commits, or interpreting git status, confirm which repository is being used.
Do not assume that a branch, commit, remote, or working-tree status in one repository applies to any other repository.
This is especially important for multi-repository work. A future assistant must not prepare a commit message that mixes unrelated changes from separate repositories unless the user explicitly asked for a coordinated multi-repository change plan.
8. echo Backup Repository
There is also a GitLab repository named:
echo
Purpose: backup program repository.
Its working code is not currently under <workspace-root>. Only backup.lnk appears under <workspace-root> on the current Windows Server machine.
Do not modify echo unless the user specifically asks for backup-program work.
Do not infer that backup.lnk means the backup program source is present in the current workspace. It is only a shortcut.
9. Product Naming and Repository Naming
The project includes a customer-facing product/service called News.
The repository named app is the broader core application repository. It does not mean that the News product has been renamed.
Keep these concepts separate:
app = technical core application repository
News = customer-facing product/service concept
Do not globally rename product wording.
Do not change customer-facing News language merely because a folder or repository is called app.
Do not rename Cloudflare resources, database names, service names, or public product wording unless the user explicitly asks.
Protected examples include:
News product
news feed
news headline
news service
news database
news DB
News subscription service
jh-news-stage
jh-news-prod
jh-news-* Cloudflare/D1 resources
database names containing jh-news
customer-facing News wording
public website News wording
admin/public product wording
This distinction is permanent. Repository names and product names are not the same thing. A technical repository may be named for its architectural role while the product retains its own public name.
10. How to Decide Which Repository to Work In
Use the task type to choose the repository.
For backend runtime, processors, workers, monitoring, databases, ingestion, Telegram delivery, subscription logic, or application automation, start with:
<workspace-root>/app
For public website pages, pricing pages, checkout/customer flows, public documentation, and customer-facing service descriptions, start with:
<workspace-root>/site
For internal dashboards, admin tools, internal reports, operator workflows, and non-public UI, start with:
<workspace-root>/admin
For machine setup, server migration, scheduled tasks, startup scripts, Cloudflare tunnel configuration, and environment notes, start with:
<workspace-root>/server
For vendor or tool documentation, inspect the relevant ctx-* repository as read-only reference material.
If a task crosses repository boundaries, handle each repository separately. Do not make a single combined commit across multiple repositories unless the user explicitly approves that workflow.
A future assistant should pause before touching more than one repository. Cross-repository changes may be valid, but they require deliberate handling because each repository has a separate Git history and separate operational purpose.
11. Repository Boundary Rules
The workspace boundary is <workspace-root>.
The repository boundary is each top-level Git repository inside <workspace-root>.
A task may involve the whole workspace conceptually, but actual file changes still happen inside one repository at a time.
Use these rules:
- Do not treat
<workspace-root>itself as one Git repository unless the user explicitly says it is. - Do not assume a top-level folder is safe to modify merely because it is under
<workspace-root>. - Do not move files between repositories unless the user explicitly asks.
- Do not merge repositories.
- Do not create cross-repository commits.
- Do not interpret
git statusfrom one repository as applying to the whole workspace. - Do not assume a branch name in one repository exists in another.
- Do not assume remotes use the same URL pattern without checking.
- Do not run a broad destructive command from
<workspace-root>. - Do not use a global search-and-replace across
<workspace-root>unless the user has expressly approved that exact scope.
These rules exist because the modular workspace gives the project cleaner separation, but it also requires more discipline. An agent that ignores repository boundaries can accidentally mix public website changes, internal admin changes, backend runtime changes, and server configuration changes into the same task.
12. No Guessing Rule
Do not guess the user’s intent.
Do not infer that product wording should change.
Do not infer that repository boundaries should be changed.
Do not infer that a file should move from one repository to another.
Do not infer that Cloudflare resource names should change.
Do not infer that database names should change.
Do not infer that public website copy should change.
Do not infer that backend application work should also include website, admin, server, or documentation changes.
Do not take leaps of faith.
When in doubt, stop and ask before changing files.
The no-guessing rule is especially important in this workspace because the same general concept may appear in multiple repositories. A phrase may appear in public website copy, internal admin documentation, backend code, server configuration, and context repositories for different reasons. Similar text does not mean the same change should be made everywhere.
13. Stop-and-Ask Triggers
Stop and ask the user before proceeding if you find:
1. A reference that could be either product wording or technical repository/path wording.
2. A Cloudflare resource, D1 database, Worker, R2 bucket, tunnel, or domain name that includes product-specific wording.
3. A public/customer-facing file where product wording appears.
4. An admin public-facing file where product wording appears.
5. A scheduled-task XML/export file that appears stale or machine-specific.
6. Any need to rename, move, or reorganize a folder outside the repository being worked on.
7. Any proposed change outside the scope of the current task.
8. Any failing test that is not clearly explained.
9. Any uncertainty about whether to patch a file or leave it alone.
10. Any situation where multiple repositories appear to need coordinated changes.
11. Any instruction or file that uses a literal machine path where a durable `<workspace-root>` path should be used instead.
Stopping to ask is not a failure. In this workspace, stopping is the correct behavior when a change may cross repository, product, public/private, infrastructure, runtime, or machine-specific path boundaries.
14. Working Style for Agents
Work incrementally.
Make small, reviewable changes.
Do not batch unrelated edits together.
Do not modify another repository simply because something looks outdated.
Do not perform broad search-and-replace operations across the whole <workspace-root> workspace.
Do not collapse repositories or assume the project should be reorganized into a monorepo.
Before making changes, identify:
1. Which repository is relevant.
2. Whether the task affects one repository or several.
3. Whether the file is active, public-facing, internal, reference-only, or archived.
4. Whether the change is clearly inside the user’s requested scope.
5. Whether a path should be written as a durable `<workspace-root>` reference or as a current-machine command path.
If a task requires investigation, start with read-only inspection. Do not edit while still discovering the boundaries of the task.
If a task affects multiple repositories, separate the work by repository in the explanation, validation, and commit guidance.
15. Temporary Output Rule
Use repo-local temporary folders for repo-specific work.
Examples:
<workspace-root>/app/tmp
<workspace-root>/admin/tmp
<workspace-root>/site/tmp
<workspace-root>/server/tmp
Do not write repo-specific helper files, generated reports, scans, inventories, or patch files to:
%TEMP%
Downloads
<workspace-root>/tmp
unless the user explicitly instructs it.
<workspace-root>/tmp is only a global scratch folder. It should not replace repo-local tmp folders for repository-specific work.
This rule matters because temporary files are often used for inventories, patch helpers, verification outputs, and migration reports. Those files need to stay near the repository they apply to so a later human or AI session can understand their context.
When writing durable documentation, use <workspace-root>/repository/tmp notation. When giving a machine-specific command, convert the placeholder to the correct path for the current operating system.
16. Git and Commit Rules
Each top-level project repository has its own Git status, branch, history, and remote.
Before suggesting a commit, confirm:
1. The exact repository path.
2. The current branch.
3. The files changed in that repository.
4. Whether other repositories were also touched.
Do not mix unrelated repository changes into one commit message.
Do not assume that because one repository is clean, the whole workspace is clean.
Do not push unless the user explicitly instructs it and the environment has the required access.
When preparing commit guidance, keep the repository boundary clear.
For this workspace, commit messages should be detailed enough to explain the scope of the work, the repository affected, the changed areas, validation performed, and intentional exclusions. Do not use a one-line commit message for meaningful project work unless the user specifically asks for one.
If multiple repositories were changed, prepare separate commit guidance for each repository unless the user asks for a coordinated release procedure.
17. Public, Internal, Backend, and Infrastructure Separation
The workspace separates different kinds of project work by repository.
Use this conceptual separation:
site = public customer-facing website
admin = private internal/operator/admin surface
app = core SaaS application/backend
server = machine, environment, startup, tunnel, and operational setup
ctx-* = local vendor/tool documentation reference
This separation should guide file placement and review.
Customer-facing content belongs in site unless the user says otherwise.
Internal operator content belongs in admin.
Backend runtime code belongs in app.
Machine and environment setup belongs in server.
Vendor/tool reference material belongs in the matching ctx-* repository.
Do not move content across these boundaries casually. If a file appears misplaced, flag it and ask before moving it.
18. Active Material Versus Reference or Archive Material
Not every file under <workspace-root> is active runtime material.
Before editing, determine whether the file is:
active code
active documentation
active operational instruction
public-facing content
internal-only content
reference-only material
generated output
temporary output
archived/review material
machine-specific export
This distinction matters because old documentation, archived review folders, generated files, and machine-specific exports may contain outdated references that should not be patched automatically.
A stale reference inside inactive material is not automatically a current project problem.
A current operational instruction inside active material is more important and should be handled carefully.
19. AI-Agent Use of Context Repositories
The ctx-* repositories are intended to help AI agents and AI-assisted tools answer implementation questions with better source material.
When a task involves a vendor or tool that has a matching context repository, an agent should usually inspect the local context repository first.
Examples:
Cloudflare task → <workspace-root>/ctx-cloudflare
Better Auth task → <workspace-root>/ctx-better-auth
Authentik task → <workspace-root>/ctx-authentik
Brevo task → <workspace-root>/ctx-brevo
Resend task → <workspace-root>/ctx-resend
Obsidian task → <workspace-root>/ctx-obsidian
The local context repository is a reference source. It does not own the production implementation.
For example, ctx-cloudflare may contain Cloudflare documentation, but the actual tunnel configuration or application integration may belong in server, admin, site, or app, depending on the task.
Do not confuse documentation context with implementation ownership.
20. Examples of Correct Repository Selection
If the task is:
Update the public pricing page.
Start with:
<workspace-root>/site
If the task is:
Add an internal report link to the operator dashboard.
Start with:
<workspace-root>/admin
If the task is:
Fix a feed processor runtime error.
Start with:
<workspace-root>/app
If the task is:
Update the Windows scheduled task wrapper.
Start with:
<workspace-root>/server
If the task is:
Check current Cloudflare Tunnel documentation before changing tunnel configuration.
Read:
<workspace-root>/ctx-cloudflare
Then modify the implementation repository that actually owns the tunnel configuration, if a change is required and within scope.
If a command must be run on the current Windows Server machine, convert the placeholder to the current Windows path before running the command.
21. Examples of Incorrect Assumptions
Do not assume:
The app repository is the whole project.
Do not assume:
A public website page belongs in app because it mentions the service.
Do not assume:
An internal admin dashboard belongs in site because it is a web page.
Do not assume:
A Cloudflare documentation repository owns the actual Cloudflare configuration.
Do not assume:
A search result under _review_required is active.
Do not assume:
The same branch exists in every repository.
Do not assume:
A clean git status in app means admin, site, and server are also clean.
Do not assume:
A product term should be renamed because a repository has a different technical name.
Do not assume:
A durable document should use C:\dev everywhere because that is the current Windows path.
22. Validation Expectations
When completing work in this workspace, validation should match the repository and task.
For most repository work, at minimum check:
git status --short
git branch --show-current
For code changes, use the relevant syntax, compile, test, import, or runtime checks for that repository.
For documentation changes, check that the Markdown or generated HTML still follows the document-library conventions and that frontmatter remains valid.
For website/admin changes, check the relevant local preview or build process when applicable.
For server/environment changes, check the specific script, config, scheduled-task wrapper, or tunnel reference affected by the task.
Do not run expensive live operations without asking.
Do not run broad monitoring, audit, or long-running application processes unless the user has approved that level of verification for the current task.
If validation output includes absolute paths, interpret them according to the current machine. Do not automatically rewrite durable documentation to match machine-specific validation output unless the document is intended to be machine-specific.
23. How Future Sessions Should Use This Document
A future human, ChatGPT session, Codex session, AI-assisted development tool, automation worker, or MCP/RAG workflow should use this document before making assumptions about the workspace.
The document should answer these initial questions:
1. What is <workspace-root>?
2. What is the current Windows value of <workspace-root>?
3. Is this project one Git repository or several?
4. Which repository owns backend application work?
5. Which repository owns public website work?
6. Which repository owns internal admin work?
7. Which repository owns server/environment work?
8. Which repositories are context/reference material?
9. What should not be renamed or modified without asking?
10. When should the agent stop and ask?
11. How should temporary files and Git commits be handled?
12. How should durable documentation avoid hard-coding current machine paths?
If this document does not answer a repository-boundary question clearly, the correct next step is to ask the user rather than guess.
24. Summary for Future Chat Sessions
This project is a modular SaaS workspace under one workspace root.
In this document, that root is written as:
<workspace-root>
The current Windows Server value is:
C:\dev
It is made of multiple separate Git repositories, not one monolithic repository.
The core application backend is:
<workspace-root>/app
But the full project also includes separate repositories for:
<workspace-root>/admin
<workspace-root>/site
<workspace-root>/server
<workspace-root>/ctx-*
Treat each repository as separate. Inspect and modify only the repository or repositories that are actually relevant to the task.
Do not rename product concepts, Cloudflare resources, database names, or public wording without explicit instruction.
Use <workspace-root> in durable documentation so the document does not need to be rewritten when the workspace later moves from Windows to Linux.
When uncertain, stop and ask.
25. Related Repositories
This document concerns the organization of the local SaaS workspace and the relationship among its top-level repositories.
Primary local workspace:
<workspace-root>
Current Windows Server value:
C:\dev
Core application/backend repository:
<workspace-root>/app
Internal admin/operator repository:
<workspace-root>/admin
Public customer-facing website repository:
<workspace-root>/site
Server/environment repository:
<workspace-root>/server
Context/reference repositories:
<workspace-root>/ctx-authentik
<workspace-root>/ctx-better-auth
<workspace-root>/ctx-brevo
<workspace-root>/ctx-cloudflare
<workspace-root>/ctx-obsidian
<workspace-root>/ctx-resend
Backup program repository:
sudostac/echo
The backup program repository is not currently present as working source code under <workspace-root>; only backup.lnk appears in the local workspace on the current Windows Server machine.
26. Maintenance Notes
This document should be updated when a top-level repository is added, removed, renamed, or assigned a new durable purpose.
Every substantive update should revise lastUpdated in the frontmatter.
Generated HTML, navigation, and search files should be treated as build artifacts if this Markdown file is published through the internal document library.
Do not treat status, searchable, or frontmatter metadata as access control. Access control belongs at the deployment, hosting, tunnel, authentication, or document-library protection layer.
This document should remain focused on workspace organization and repository boundaries. Do not turn it into a backend architecture guide, public website guide, server setup guide, Cloudflare tunnel guide, or product naming guide. Those topics may have their own documents.
This document should also remain portable. Do not reintroduce machine-specific absolute paths throughout the document. Define the current value of <workspace-root> once, then use <workspace-root> for durable references.