Skip to content

Commit 8f7777b

Browse files
committed
Merge branch 'develop'
2 parents 23d02a6 + 4f720aa commit 8f7777b

21 files changed

Lines changed: 529 additions & 63 deletions

CHANGELOG.md

Lines changed: 47 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,57 @@
33
Generated by `npm run set:version`.
44
The local changelog is rebuilt from the available `v*` release tags and the current `HEAD` range.
55
The script does not create tags locally.
6-
## v0.40.5 - 2026-04-16
6+
## v0.45.2 - 2026-04-19
77

88
- Release source: local versioning run
9+
- Base ref: `v0.40.5`
10+
- Range: `v0.40.5..HEAD`
11+
- Included commits: 11
12+
13+
### Features (5)
14+
15+
- [ai-llm] add local n8n service and bootstrap (`00aa7e5`)
16+
- [atlas-dashboard] show n8n bootstrap access (`9fac427`)
17+
- [core] add bookstack and hedgedoc services (`79dc737`)
18+
- [cli] bootstrap bookstack and expand core checks (`4c4ad31`)
19+
- [atlas-dashboard] surface bookstack and hedgedoc (`27f8a78`)
20+
21+
### Refactor (2)
22+
23+
- [core] remove nextcloud aio stack (`deebdff`)
24+
- [atlas-dashboard] remove nextcloud aio card (`18d59c3`)
25+
26+
### Documentation (3)
27+
28+
- document local n8n access (`0120f7a`)
29+
- remove nextcloud aio references (`13ce184`)
30+
- [readme] align core services and bootstrap flow (`8915674`)
31+
32+
### CI / Maintenance (1)
33+
34+
- [release] v0.45.1 (`2978688`)
35+
36+
## v0.40.5 - 2026-04-16
37+
38+
- Release tag: `v0.40.5`
39+
- Base ref: `v0.38.0`
40+
- Range: `v0.38.0..v0.40.5`
41+
- Included commits: 0
42+
43+
No relevant commits were detected for this release.
44+
45+
## v0.38.0 - 2026-04-16
46+
47+
- Release tag: `v0.38.0`
948
- Base ref: `v0.36.4`
10-
- Range: `v0.36.4..HEAD`
11-
- Included commits: 13
49+
- Range: `v0.36.4..v0.38.0`
50+
- Included commits: 14
1251

13-
### Features (2)
52+
### Features (4)
1453

1554
- [atlas-dashboard] rename AI layer and add n8n card (`619c080`)
55+
- [atlas-dashboard] add Plane Penpot and Nextcloud AIO core cards (`1f7e6be`)
56+
- [core] add Plane Penpot and Nextcloud AIO services (`d370dc7`)
1657
- [core] bootstrap Plane and Penpot default admins (`676a690`)
1758

1859
### Fix (6)
@@ -24,11 +65,12 @@ The script does not create tags locally.
2465
- [runtime] harden startup bootstrap and image preparation (`dea735b`)
2566
- [ai-llm] avoid duplicate Ollama model sync (`ca3492d`)
2667

27-
### CI / Maintenance (3)
68+
### CI / Maintenance (4)
2869

2970
- [ollama] expand configured runtime model catalog (`f4e184f`)
3071
- [release] v0.37.2 (`132e3d2`)
3172
- [release] v0.38.0 (`b909006`)
73+
- [release] v0.40.5 (`5d5df3d`)
3274

3375
## v0.36.4 - 2026-04-11
3476

README.md

Lines changed: 49 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Atlas Lab 🚀
22

3-
![Version](https://img.shields.io/badge/version-0.40.5-blue.svg)
3+
![Version](https://img.shields.io/badge/version-0.45.2-blue.svg)
44
![License](https://img.shields.io/badge/license-MIT-22c55e.svg)
55
![Docker Compose](https://img.shields.io/badge/Docker%20Compose-v2-2496ED?logo=docker&logoColor=white)
66
![Gateway](https://img.shields.io/badge/Gateway-Caddy-1F2937?logo=caddy&logoColor=white)
@@ -11,7 +11,7 @@
1111
![Persistence](https://img.shields.io/badge/Persistence-Docker%20Volumes-CA8A04)
1212

1313
> 🧭 **Atlas Lab** is a localhost-first self-hosted platform made of a Node.js/TypeScript CLI, a layered Docker Compose stack, and an operational React dashboard served by the gateway.
14-
> It is designed to provide Git hosting, optional local AI services with Open WebUI, Ollama, and n8n, browser-based development workbenches, and structured image/volume backup workflows on a single machine.
14+
> It is designed to provide Git hosting, project and design collaboration, internal documentation, collaborative markdown notes, optional local AI services with Open WebUI, Ollama, and n8n, browser-based development workbenches, and structured image/volume backup workflows on a single machine.
1515
1616
---
1717

@@ -21,7 +21,7 @@ Atlas Lab is built for a practical goal: run a repeatable local engineering plat
2121

2222
### What it gives you
2323

24-
- 🧱 An always-on **core layer** with Gitea, the gateway, and Atlas Dashboard
24+
- 🧱 An always-on **core layer** with Atlas Dashboard, Gitea, Plane, Penpot, BookStack, and HedgeDoc
2525
- 🧠 An optional **AI LLM layer** with Open WebUI, Ollama, and n8n
2626
- 🛠️ An optional **workbench layer** with browser-based Node and Python environments plus shared PostgreSQL
2727
- 🔐 HTTPS-only ingress on `localhost`
@@ -66,7 +66,7 @@ Atlas Lab is split into **three explicit layers**:
6666

6767
| Layer | Status | Includes | Purpose |
6868
| --- | --- | --- | --- |
69-
| `core` | always on | gateway, Atlas Dashboard, Gitea, Gitea DB | baseline platform |
69+
| `core` | always on | gateway, Atlas Dashboard, Gitea, Plane, Penpot, BookStack, HedgeDoc, and their backing data services | baseline platform |
7070
| `ai-llm` | optional | Open WebUI, Ollama, n8n, AI gateway | local AI workflows and automation |
7171
| `workbench` | optional | Node Forge, Python Grid, shared PostgreSQL, workbench gateway | browser-based development |
7272

@@ -95,9 +95,11 @@ The CLI:
9595
- runs host preflight checks
9696
- reconciles runtime state
9797
- bootstraps Gitea
98+
- bootstraps the initial BookStack admin
99+
- aligns the Plane instance admin
100+
- aligns the Penpot root profile
98101
- aligns the n8n owner bootstrap account when the AI LLM layer is enabled
99102
- reconciles Ollama only when the AI LLM layer is enabled
100-
- cleans up legacy runtime artifacts
101103

102104
---
103105

@@ -110,11 +112,15 @@ The only host-level TCP service exposed directly is PostgreSQL from the workbenc
110112
| --- | --- | --- | --- |
111113
| Atlas Dashboard | `core` | `https://localhost:8443/` | operational dashboard |
112114
| Gitea | `core` | `https://localhost:8444/` | Git forge, issues, reviews |
115+
| Plane | `core` | `https://localhost:8445/` | project planning and issue tracking |
113116
| Open WebUI | `ai-llm` | `https://localhost:8446/` | only with `--with-ai-llm` |
114117
| Ollama | `ai-llm` | `https://localhost:8447/` | HTTPS API |
115-
| n8n | `ai-llm` | `https://localhost:8453/` | workflow automation and agent orchestration |
118+
| Penpot | `core` | `https://localhost:8448/` | collaborative design workspace |
119+
| BookStack | `core` | `https://localhost:8449/` | internal wiki and knowledge base |
116120
| Node Forge | `workbench` | `https://localhost:8450/` | Node / TypeScript workspace |
117121
| Python Grid | `workbench` | `https://localhost:8451/` | Python workspace |
122+
| HedgeDoc | `core` | `https://localhost:8452/` | collaborative markdown notes |
123+
| n8n | `ai-llm` | `https://localhost:8453/` | workflow automation and agent orchestration |
118124
| PostgreSQL | `workbench` | `localhost:15432` | host-side desktop access |
119125

120126
### Operational rules
@@ -130,7 +136,7 @@ The only host-level TCP service exposed directly is PostgreSQL from the workbenc
130136
| Network | Type | Purpose |
131137
| --- | --- | --- |
132138
| `edge-net` | exposed | published ingress ports |
133-
| `apps-net` | internal | Gitea and shared browser-facing services |
139+
| `apps-net` | internal | Gitea, BookStack, HedgeDoc, and shared browser-facing core services |
134140
| `ai-llm-net` | internal | Open WebUI, Ollama, and n8n |
135141
| `data-net` | internal | data services and infrastructure databases |
136142
| `workbench-net` | internal | workbenches and PostgreSQL |
@@ -158,11 +164,15 @@ Key volumes include:
158164
- `gateway-data`
159165
- `gitea-data`
160166
- `gitea-db`
167+
- `bookstack-config`
168+
- `bookstack-db`
169+
- `hedgedoc-db`
170+
- `hedgedoc-uploads`
161171
- `ollama-data`
162172
- `n8n-data`
163173
- `open-webui-data`
164174
- `postgres-dev-data`
165-
- workbench home/workspace volumes for Node, Python, AI, and C++
175+
- workbench home/workspace volumes for Node and Python
166176

167177
Recreating containers does not wipe state. Removing the volumes does.
168178

@@ -195,11 +205,15 @@ The AI LLM layer requires:
195205

196206
- `8443`
197207
- `8444`
208+
- `8445`
198209
- `8446`
199210
- `8447`
200-
- `8453`
211+
- `8448`
212+
- `8449`
201213
- `8450`
202214
- `8451`
215+
- `8452`
216+
- `8453`
203217
- `15432` when `workbench` is enabled
204218

205219
### Windows PowerShell note
@@ -234,13 +248,16 @@ The main runtime configuration lives in:
234248
Key variables include:
235249

236250
- `APP_VERSION`
237-
- `LAB_HTTPS_PORT`, `GITEA_HTTPS_PORT`
238-
- `OPENWEBUI_HTTPS_PORT`, `OLLAMA_HTTPS_PORT`, `N8N_HTTPS_PORT`
251+
- `LAB_HTTPS_PORT`, `GITEA_HTTPS_PORT`, `PLANE_HTTPS_PORT`, `PENPOT_HTTPS_PORT`
252+
- `BOOKSTACK_HTTPS_PORT`, `OPENWEBUI_HTTPS_PORT`, `OLLAMA_HTTPS_PORT`, `HEDGEDOC_HTTPS_PORT`, `N8N_HTTPS_PORT`
239253
- `NODE_DEV_HTTPS_PORT`, `PYTHON_DEV_HTTPS_PORT`
240254
- `POSTGRES_DEV_HOST_PORT`
241255
- `OLLAMA_CHAT_MODEL`, `OLLAMA_EMBEDDING_MODEL`, `OLLAMA_RUNTIME_MODELS`
242256
- `GITEA_ROOT_USERNAME`, `GITEA_ROOT_PASSWORD`
257+
- `BOOKSTACK_ROOT_NAME`, `BOOKSTACK_ROOT_EMAIL`, `BOOKSTACK_ROOT_PASSWORD`
258+
- `PLANE_ROOT_EMAIL`, `PLANE_ROOT_PASSWORD`
243259
- `OPENWEBUI_ROOT_EMAIL`, `OPENWEBUI_ROOT_PASSWORD`
260+
- `PENPOT_ROOT_EMAIL`, `PENPOT_ROOT_PASSWORD`
244261
- `N8N_ROOT_EMAIL`, `N8N_ROOT_PASSWORD`
245262

246263
Rule of thumb:
@@ -424,7 +441,7 @@ npm run dev -- save-volumes --with-ai-llm --with-workbench
424441
npm run dev -- restore-volumes --input .\backups\volumes\atlas-lab-volumes.tar.gz
425442
```
426443

427-
Bootstrap is idempotent and reconciles Gitea, n8n, and Ollama when `ai-llm` is enabled.
444+
Bootstrap is idempotent and reconciles Gitea, BookStack, Plane, Penpot, and, when `ai-llm` is enabled, n8n and Ollama.
428445

429446
---
430447

@@ -436,8 +453,12 @@ Bootstrap is idempotent and reconciles Gitea, n8n, and Ollama when `ai-llm` is e
436453
| --- | --- | --- |
437454
| Atlas Dashboard | `https://localhost:8443/` | no dedicated login |
438455
| Gitea | `https://localhost:8444/` | `root / RootGitea!2026` |
456+
| Plane | `https://localhost:8445/` | `root@plane.local / RootPlane!2026` |
439457
| Open WebUI | `https://localhost:8446/` | `root@openwebui.local / RootOpenWebUI!2026` |
440458
| Ollama | `https://localhost:8447/` | gateway basic auth `root / RootOllama!2026` |
459+
| Penpot | `https://localhost:8448/` | `root@penpot.local / RootPenpot!2026` |
460+
| BookStack | `https://localhost:8449/` | `root@bookstack.local / RootBookStack!2026` |
461+
| HedgeDoc | `https://localhost:8452/` | local email accounts enabled; create the first account in-app |
441462
| n8n | `https://localhost:8453/` | owner bootstrap `root@n8n.local / RootN8NApp!2026` |
442463
| PostgreSQL host-side | `localhost:15432` | `postgres / RootPostgresDev!2026` |
443464

@@ -488,7 +509,7 @@ Expected behavior. The lab uses a self-signed certificate.
488509

489510
### `atlas-lab up` fails during port preflight
490511

491-
One of the configured lab ports (`8443-8447`, `8450-8451`, or `15432`) is occupied or excluded by the system.
512+
One of the configured lab ports (`8443-8449`, `8450-8453`, or `15432`) is occupied or excluded by the system.
492513

493514
```powershell
494515
atlas-lab status
@@ -573,6 +594,21 @@ This project is distributed under the **MIT** license.
573594
- Install with Docker: https://docs.gitea.com/installation/install-with-docker
574595
- Admin CLI: https://docs.gitea.com/administration/command-line
575596

597+
### n8n
598+
599+
- Self-hosted user management: https://docs.n8n.io/hosting/configuration/user-management-self-hosted/
600+
- Docker install: https://docs.n8n.io/hosting/installation/docker/
601+
602+
### BookStack
603+
604+
- Installation: https://www.bookstackapp.com/docs/admin/installation
605+
- Commands: https://www.bookstackapp.com/docs/admin/commands/
606+
607+
### HedgeDoc
608+
609+
- Docker image: https://docs.hedgedoc.org/setup/docker/
610+
- Configuration: https://docs.hedgedoc.org/configuration/
611+
576612
### Open WebUI
577613

578614
- Environment configuration: https://docs.openwebui.com/getting-started/env-configuration/

apps/atlas-dashboard/src/locales/en.json

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,10 +123,13 @@
123123
"directAppOnboarding": "direct app onboarding",
124124
"directAppLogin": "direct app login",
125125
"imageStudio": "image studio",
126+
"knowledgeBase": "knowledge base",
126127
"localInferenceApi": "local inference API",
127128
"password": "password",
128129
"projectHub": "project hub",
129130
"protectedApi": "protected API",
131+
"collaborativeMarkdown": "collaborative markdown",
132+
"collaborativeNotes": "collaborative notes",
130133
"sharedDatabase": "shared database",
131134
"videoStudio": "video studio",
132135
"workflowControl": "workflow control",
@@ -253,12 +256,23 @@
253256
"description": "Internal Git forge for repositories, issues, review, and the lab's technical collaboration flow.",
254257
"title": "Gitea Forge"
255258
},
259+
"bookStack": {
260+
"action": "Open BookStack",
261+
"description": "Self-hosted internal documentation and knowledge base with a deterministic initial admin aligned by the lab bootstrap.",
262+
"title": "BookStack"
263+
},
256264
"penpot": {
257265
"action": "Open Penpot",
258266
"description": "Self-hosted Penpot workspace for product design, shared libraries, and collaboration across design and code, with a bootstrap root profile aligned to the lab.",
259267
"title": "Penpot",
260268
"usage": "design and code collaboration"
261269
},
270+
"hedgeDoc": {
271+
"action": "Open HedgeDoc",
272+
"description": "Self-hosted collaborative markdown workspace for shared notes, meeting pads, and lightweight documentation flows.",
273+
"note": "Local email accounts are enabled and anonymous access is disabled. Create the first account directly in the app.",
274+
"title": "HedgeDoc"
275+
},
262276
"plane": {
263277
"action": "Open Plane",
264278
"description": "Self-hosted Plane workspace for issue tracking, planning, roadmaps, and internal project coordination, with a bootstrap instance admin aligned to the lab.",

apps/atlas-dashboard/src/locales/it.json

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,10 +123,13 @@
123123
"directAppOnboarding": "onboarding diretto in app",
124124
"directAppLogin": "login diretto applicazione",
125125
"imageStudio": "studio immagini",
126+
"knowledgeBase": "knowledge base",
126127
"localInferenceApi": "API di inference locale",
127128
"password": "password",
128129
"projectHub": "hub progetti",
129130
"protectedApi": "API protetta",
131+
"collaborativeMarkdown": "markdown collaborativo",
132+
"collaborativeNotes": "note collaborative",
130133
"sharedDatabase": "database condiviso",
131134
"videoStudio": "studio video",
132135
"workflowControl": "controllo workflow",
@@ -253,12 +256,23 @@
253256
"description": "Forge Git interna per repository, issue, review e flusso di collaborazione tecnica del lab.",
254257
"title": "Gitea Forge"
255258
},
259+
"bookStack": {
260+
"action": "Apri BookStack",
261+
"description": "Base di conoscenza e documentazione interna self-hosted, con admin iniziale deterministico allineato dal bootstrap del lab.",
262+
"title": "BookStack"
263+
},
256264
"penpot": {
257265
"action": "Apri Penpot",
258266
"description": "Workspace Penpot self-hosted per product design, librerie condivise e collaborazione tra design e codice, con profilo root allineato al bootstrap del lab.",
259267
"title": "Penpot",
260268
"usage": "design e code collaboration"
261269
},
270+
"hedgeDoc": {
271+
"action": "Apri HedgeDoc",
272+
"description": "Workspace self-hosted di markdown collaborativo per note condivise, meeting pad e documentazione leggera.",
273+
"note": "Gli account email locali sono abilitati e l accesso anonimo e disattivato. Crea il primo account direttamente nell app.",
274+
"title": "HedgeDoc"
275+
},
262276
"plane": {
263277
"action": "Apri Plane",
264278
"description": "Workspace Plane self-hosted per issue tracking, planning, roadmap e coordinamento interno dei progetti, con instance admin iniziale allineato al bootstrap del lab.",

0 commit comments

Comments
 (0)