Skip to content

Commit 7928451

Browse files
committed
Merge branch 'develop'
2 parents cb7a899 + 7340aa4 commit 7928451

22 files changed

Lines changed: 141 additions & 23 deletions

File tree

CHANGELOG.md

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,23 @@
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-
## v1.0.1 - 2026-04-30
6+
## v1.1.0 - 2026-05-02
77

88
- Release source: local versioning run
9+
- Base ref: `v1.0.1`
10+
- Range: `v1.0.1..HEAD`
11+
- Included commits: 1
12+
13+
### Features (1)
14+
15+
- [core] add drawDB service (`64690b5`)
16+
17+
## v1.0.1 - 2026-05-01
18+
19+
- Release tag: `v1.0.1`
920
- Base ref: `v0.51.0`
10-
- Range: `v0.51.0..HEAD`
11-
- Included commits: 4
21+
- Range: `v0.51.0..v1.0.1`
22+
- Included commits: 5
1223

1324
### Features (1)
1425

@@ -22,9 +33,10 @@ The script does not create tags locally.
2233

2334
- [readme] add index and service tags (`5dc5132`)
2435

25-
### CI / Maintenance (1)
36+
### CI / Maintenance (2)
2637

2738
- [release] v0.52.0 (`ee2ffa1`)
39+
- [release] v1.0.1 (`fd0b161`)
2840

2941
## v0.51.0 - 2026-04-29
3042

README.md

Lines changed: 14 additions & 7 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-1.0.1-blue.svg)
3+
![Version](https://img.shields.io/badge/version-1.1.0-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)
@@ -12,7 +12,7 @@
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 Caddy.
1414

15-
It provides a core collaboration layer with GitLab CE, BookStack, and Penpot, plus optional AI and development layers. Everything is reachable through dedicated HTTPS ports on `localhost`, with persistent state stored in Docker volumes.
15+
It provides a core collaboration layer with GitLab CE, drawDB, BookStack, and Penpot, plus optional AI and development layers. Everything is reachable through dedicated HTTPS ports on `localhost`, with persistent state stored in Docker volumes.
1616

1717
---
1818

@@ -43,7 +43,7 @@ It provides a core collaboration layer with GitLab CE, BookStack, and Penpot, pl
4343

4444
### What It Gives You
4545

46-
- Always-on core layer with Atlas Dashboard, GitLab CE, BookStack, and Penpot.
46+
- Always-on core layer with Atlas Dashboard, GitLab CE, drawDB, BookStack, and Penpot.
4747
- Optional AI LLM layer with Open WebUI, Ollama, and n8n.
4848
- Optional workbench layer with browser-based Node and Python environments plus shared PostgreSQL.
4949
- HTTPS-only browser 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, GitLab CE, BookStack, Penpot, and backing data services | baseline self-hosted platform |
69+
| `core` | always on | gateway, Atlas Dashboard, GitLab CE, drawDB, BookStack, Penpot, and backing data services | baseline self-hosted 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

@@ -98,6 +98,7 @@ All browser entry points are exposed over HTTPS on `localhost`.
9898
| --- | --- | --- | --- |
9999
| Atlas Dashboard | `core` | `https://localhost:8443/` | operational dashboard |
100100
| GitLab CE | `core` | `https://localhost:8444/` | repositories, issues, merge requests |
101+
| drawDB | `core` | `https://localhost:8445/` | database diagrams and SQL generation |
101102
| Open WebUI | `ai-llm` | `https://localhost:8446/` | only with `--with-ai-llm` |
102103
| Ollama | `ai-llm` | `https://localhost:8447/` | HTTPS API with gateway auth |
103104
| Penpot | `core` | `https://localhost:8448/` | collaborative design workspace |
@@ -120,7 +121,7 @@ Operational rules:
120121
| Network | Type | Purpose |
121122
| --- | --- | --- |
122123
| `edge-net` | exposed | published ingress ports |
123-
| `apps-net` | internal | GitLab CE, BookStack, and gateway-routed browser services |
124+
| `apps-net` | internal | GitLab CE, drawDB, BookStack, and gateway-routed browser services |
124125
| `bookstack-net` | internal | BookStack and its MariaDB database |
125126
| `penpot-net` | internal | Penpot application services |
126127
| `ai-llm-net` | internal | Open WebUI, Ollama, and n8n |
@@ -196,6 +197,7 @@ Ports that should be free:
196197

197198
- `8443`
198199
- `8444`
200+
- `8445`
199201
- `8446`
200202
- `8447`
201203
- `8448`
@@ -215,10 +217,10 @@ The main runtime configuration lives in:
215217

216218
Key variables include:
217219

218-
- `LAB_HTTPS_PORT`, `GITLAB_HTTPS_PORT`, `PENPOT_HTTPS_PORT`, `BOOKSTACK_HTTPS_PORT`
220+
- `LAB_HTTPS_PORT`, `GITLAB_HTTPS_PORT`, `DRAWDB_HTTPS_PORT`, `PENPOT_HTTPS_PORT`, `BOOKSTACK_HTTPS_PORT`
219221
- `OPENWEBUI_HTTPS_PORT`, `OLLAMA_HTTPS_PORT`, `N8N_HTTPS_PORT`
220222
- `NODE_DEV_HTTPS_PORT`, `PYTHON_DEV_HTTPS_PORT`, `POSTGRES_DEV_HOST_PORT`
221-
- `GITLAB_EXTERNAL_URL`, `GITLAB_URL`
223+
- `GITLAB_EXTERNAL_URL`, `GITLAB_URL`, `DRAWDB_URL`
222224
- `GITLAB_ROOT_USERNAME`, `GITLAB_ROOT_PASSWORD`, `GITLAB_ROOT_EMAIL`
223225
- `BOOKSTACK_URL`, `BOOKSTACK_ROOT_EMAIL`, `BOOKSTACK_ROOT_PASSWORD`
224226
- `PENPOT_ROOT_EMAIL`, `PENPOT_ROOT_PASSWORD`
@@ -371,6 +373,7 @@ These credentials are intended for trusted local environments and are configurab
371373
| --- | --- | --- |
372374
| Atlas Dashboard | `https://localhost:8443/` | no dedicated login |
373375
| GitLab CE | `https://localhost:8444/` | `root / Qv7N4pL9xT2rB6Z8` |
376+
| drawDB | `https://localhost:8445/` | no dedicated login |
374377
| Open WebUI | `https://localhost:8446/` | `root@openwebui.local / RootOpenWebUI!2026` |
375378
| Ollama | `https://localhost:8447/` | gateway basic auth `root / RootOllama!2026` |
376379
| Penpot | `https://localhost:8448/` | `root@penpot.local / RootPenpot!2026` |
@@ -554,6 +557,10 @@ For stronger hardening:
554557
- Self-hosted user management: https://docs.n8n.io/hosting/configuration/user-management-self-hosted/
555558
- Docker install: https://docs.n8n.io/hosting/installation/docker/
556559

560+
### drawDB
561+
562+
- GitHub project and Docker build: https://github.com/drawdb-io/drawdb
563+
557564
### BookStack
558565

559566
- Official documentation: https://www.bookstackapp.com/docs/

apps/atlas-dashboard/src/entities/dashboard/lib/dashboard-icon-map.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ export const dashboardIconMap: Record<DashboardIconKey, DashboardIconComponent>
2525
ai: ApiOutlined,
2626
book: ReadOutlined,
2727
certificate: SafetyCertificateOutlined,
28+
schema: NodeIndexOutlined,
2829
forge: BranchesOutlined,
2930
host: GlobalOutlined,
3031
network: NodeIndexOutlined,

apps/atlas-dashboard/src/entities/dashboard/model/builders/dashboard-core.builder.ts

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,29 @@ export function createCoreServices(
5555
title: t('dashboard.services.gitLab.title'),
5656
tone: 'core'
5757
},
58+
{
59+
action: {
60+
href: config.services.drawDb.url,
61+
label: t('dashboard.services.drawDb.action')
62+
},
63+
credentials: [
64+
{
65+
label: labels.endpoint,
66+
value: config.services.drawDb.url
67+
},
68+
{
69+
label: labels.accessMode,
70+
value: t('values.directAppOnboarding')
71+
}
72+
],
73+
description: t('dashboard.services.drawDb.description'),
74+
icon: 'schema',
75+
id: 'drawdb',
76+
note: t('dashboard.services.drawDb.note'),
77+
status: t('values.schemaEditor'),
78+
title: t('dashboard.services.drawDb.title'),
79+
tone: 'core'
80+
},
5881
{
5982
action: {
6083
href: config.services.bookStack.url,

apps/atlas-dashboard/src/entities/dashboard/model/dashboard-view-model.types.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ export type DashboardIconKey =
44
| 'ai'
55
| 'book'
66
| 'certificate'
7+
| 'schema'
78
| 'forge'
89
| 'host'
910
| 'network'

apps/atlas-dashboard/src/entities/network-map/model/create-network-graph-view-model.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,20 @@ export function createNetworkGraphViewModel(
9090
title: t('dashboard.services.bookStack.title'),
9191
tone: 'core'
9292
}),
93+
createNode({
94+
active: true,
95+
description: t('dashboard.services.drawDb.description'),
96+
id: 'drawdb',
97+
kind: 'service',
98+
labels: [
99+
config.services.drawDb.url,
100+
t('values.schemaEditor'),
101+
t('networkMapDialog.labels.browser')
102+
],
103+
position: [-62, -6, -18],
104+
title: t('dashboard.services.drawDb.title'),
105+
tone: 'core'
106+
}),
93107
createNode({
94108
active: true,
95109
description: t('dashboard.services.penpot.description'),
@@ -240,6 +254,7 @@ export function createNetworkGraphViewModel(
240254
createLink('gateway', 'core-layer', 'core', true),
241255
createLink('core-layer', 'gitlab', 'core', true),
242256
createLink('core-layer', 'bookstack', 'core', true),
257+
createLink('core-layer', 'drawdb', 'core', true),
243258
createLink('core-layer', 'penpot', 'core', true),
244259
createLink('gateway', 'ai-layer', 'ai', aiActive),
245260
createLink('ai-layer', 'open-webui', 'ai', aiActive),

apps/atlas-dashboard/src/entities/runtime-config/model/lab-runtime-config.schema.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,9 @@ export const labRuntimeConfigSchema = z.object({
2828
}),
2929
services: z.object({
3030
bookStack: namedAccountSchema,
31+
drawDb: z.object({
32+
url: nonEmptyString
33+
}),
3134
gitLab: z.object({
3235
externalUrl: nonEmptyString,
3336
rootEmail: nonEmptyString,

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

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@
118118
"gatewayBody": "Single localhost ingress that publishes the dashboard and browser-facing services over HTTPS.",
119119
"deckTitle": "Atlas Deck",
120120
"deckBody": "Local command deck served through the same edge posture as the rest of the lab.",
121-
"coreLayerBody": "Always-on operating layer for repository work, documentation, knowledge base publishing, and design collaboration.",
121+
"coreLayerBody": "Always-on operating layer for repository work, schema modeling, documentation, knowledge base publishing, and design collaboration.",
122122
"aiLayerBody": "Optional AI layer with dedicated published routes for conversational UI, inference, and automation flows.",
123123
"workbenchLayerBody": "Optional workbench layer for browser workspaces and shared data access.",
124124
"hostAccessTitle": "Host Access",
@@ -198,13 +198,14 @@
198198
"protectedApi": "protected API",
199199
"collaborativeMarkdown": "collaborative markdown",
200200
"collaborativeNotes": "collaborative notes",
201+
"schemaEditor": "database schema editor",
201202
"sharedDatabase": "shared database",
202203
"videoStudio": "video studio",
203204
"workflowControl": "workflow control",
204205
"alwaysOnForge": "always-on forge"
205206
},
206207
"dashboard": {
207-
"coreLayerSummary": "GitLab CE, BookStack, and Penpot form the always-on core layer of the lab.",
208+
"coreLayerSummary": "GitLab CE, drawDB, BookStack, and Penpot form the always-on core layer of the lab.",
208209
"accessNotes": {
209210
"aiDisabled": "The AI layer no longer starts by default: the deck marks it as optional instead of pretending that it is online.",
210211
"aiEnabled": "Open WebUI, Ollama, and n8n are online and reachable on the dedicated AI gateway ports.",
@@ -256,7 +257,7 @@
256257
"label": "segmentation"
257258
},
258259
"usage": {
259-
"body": "GitLab CE, BookStack, and Penpot stay on as the core layer; the AI and workbench layers are enabled only when they are actually needed.",
260+
"body": "GitLab CE, drawDB, BookStack, and Penpot stay on as the core layer; the AI and workbench layers are enabled only when they are actually needed.",
260261
"label": "usage"
261262
}
262263
},
@@ -315,6 +316,7 @@
315316
},
316317
"operatingCharter": {
317318
"ai": "The AI section groups Open WebUI, Ollama, and n8n into an optional dashboard layer.",
319+
"drawDb": "drawDB stays in core for browser-based relational schema modeling and SQL generation.",
318320
"gitLab": "GitLab CE governs repositories, merge requests, issues, and Git collaboration for the project.",
319321
"workbench": "Code-server and Postgres stay in a workbench layer separated from the core."
320322
},
@@ -324,6 +326,12 @@
324326
"description": "Self-hosted GitLab CE for repositories, issues, merge requests, CI-ready project governance, and the lab's technical collaboration flow.",
325327
"title": "GitLab CE"
326328
},
329+
"drawDb": {
330+
"action": "Open drawDB",
331+
"description": "Browser-based ERD editor for designing database schemas, importing or exporting SQL, and preparing migrations without a required account.",
332+
"note": "drawDB stores projects in the browser through IndexedDB; the container serves the static app from the core gateway.",
333+
"title": "drawDB"
334+
},
327335
"bookStack": {
328336
"action": "Open BookStack",
329337
"description": "Self-hosted documentation library for structured books, chapters, pages, and internal knowledge publishing, with an initial admin aligned by the lab bootstrap.",

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

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@
118118
"gatewayBody": "Singolo ingresso localhost che pubblica dashboard e servizi browser tramite HTTPS.",
119119
"deckTitle": "Atlas Deck",
120120
"deckBody": "Control deck locale servito con la stessa postura edge del resto del lab.",
121-
"coreLayerBody": "Layer operativo sempre attivo per repository, documentazione, pubblicazione knowledge base e collaborazione design.",
121+
"coreLayerBody": "Layer operativo sempre attivo per repository, modellazione schema, documentazione, pubblicazione knowledge base e collaborazione design.",
122122
"aiLayerBody": "Layer AI opzionale con route dedicate per UI conversazionale, inference e flussi di automazione.",
123123
"workbenchLayerBody": "Layer workbench opzionale per workspace browser-based e accesso dati condivisi.",
124124
"hostAccessTitle": "Host Access",
@@ -198,13 +198,14 @@
198198
"protectedApi": "API protetta",
199199
"collaborativeMarkdown": "markdown collaborativo",
200200
"collaborativeNotes": "note collaborative",
201+
"schemaEditor": "editor schema DB",
201202
"sharedDatabase": "database condiviso",
202203
"videoStudio": "studio video",
203204
"workflowControl": "controllo workflow",
204205
"alwaysOnForge": "forge sempre accesa"
205206
},
206207
"dashboard": {
207-
"coreLayerSummary": "GitLab CE, BookStack e Penpot formano il layer core sempre acceso del lab.",
208+
"coreLayerSummary": "GitLab CE, drawDB, BookStack e Penpot formano il layer core sempre acceso del lab.",
208209
"accessNotes": {
209210
"aiDisabled": "Il layer AI non viene piu acceso di default: il deck lo marca come opzionale invece di fingere che sia online.",
210211
"aiEnabled": "Open WebUI, Ollama e n8n sono online e raggiungibili sulle porte dedicate del gateway AI.",
@@ -256,7 +257,7 @@
256257
"label": "segmentazione"
257258
},
258259
"usage": {
259-
"body": "GitLab CE, BookStack e Penpot restano sempre attivi nel layer core; i layer AI e workbench vengono abilitati solo quando servono davvero.",
260+
"body": "GitLab CE, drawDB, BookStack e Penpot restano sempre attivi nel layer core; i layer AI e workbench vengono abilitati solo quando servono davvero.",
260261
"label": "uso"
261262
}
262263
},
@@ -316,6 +317,7 @@
316317
"operatingCharter": {
317318
"ai": "La sezione AI raccoglie Open WebUI, Ollama e n8n in un layer opzionale del dashboard.",
318319
"gitLab": "GitLab CE governa repository, merge request, issue e collaborazione Git del progetto.",
320+
"drawDb": "drawDB resta nel core per modellare schema relazionali e generare SQL direttamente dal browser.",
319321
"workbench": "Code-server e Postgres restano in un layer workbench separato dal core."
320322
},
321323
"services": {
@@ -324,6 +326,12 @@
324326
"description": "GitLab CE self-hosted per repository, issue, merge request, governance progetto pronta per CI e collaborazione tecnica del lab.",
325327
"title": "GitLab CE"
326328
},
329+
"drawDb": {
330+
"action": "Apri drawDB",
331+
"description": "Editor ERD browser-based per disegnare schemi database, importare o esportare SQL e preparare migrazioni senza account obbligatorio.",
332+
"note": "drawDB conserva i progetti nel browser tramite IndexedDB; il container serve l applicazione statica dal gateway core.",
333+
"title": "drawDB"
334+
},
327335
"bookStack": {
328336
"action": "Apri BookStack",
329337
"description": "Libreria documentale self-hosted per libri, capitoli, pagine e pubblicazione interna della conoscenza, con admin iniziale allineato dal bootstrap del lab.",

config/gateway/templates/Caddyfile.template

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,10 @@ https://${LAB_PUBLIC_HOST}:${GITLAB_HTTPS_PORT}, https://${LAB_GATEWAY_IP}:${GIT
5858
import gitlab_proxy
5959
}
6060

61+
https://${LAB_PUBLIC_HOST}:${DRAWDB_HTTPS_PORT}, https://${LAB_GATEWAY_IP}:${DRAWDB_HTTPS_PORT} {
62+
import service_proxy drawdb:80
63+
}
64+
6165
https://${LAB_PUBLIC_HOST}:${PENPOT_HTTPS_PORT}, https://${LAB_GATEWAY_IP}:${PENPOT_HTTPS_PORT} {
6266
import service_proxy penpot-frontend:8080
6367
}

0 commit comments

Comments
 (0)