Skip to content

Commit 5e13df2

Browse files
feat!: release v0.2.0
Major expansion of the platform: reworked authentication, overhauled frontend-app and frontend-web, Raspberry Pi camera live streaming, observability, and a substantially hardened CI/CD pipeline. See CHANGELOG.md for the full list.
1 parent 2aeb2c1 commit 5e13df2

1,187 files changed

Lines changed: 202300 additions & 103659 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.cspell.yml

Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,120 @@
1+
version: "0.2"
2+
dictionaries:
3+
- coding-terms
4+
- cpp-compound-words
5+
- data-science
6+
- docker
7+
- en-gb
8+
- en-us
9+
- filetypes
10+
- fullstack
11+
- npm
12+
- python
13+
- python-common
14+
- software-tools
15+
enabled: true
16+
enabledFileTypes:
17+
"*": true
18+
dot: true
19+
useGitignore: true
20+
cache:
21+
useCache: true
22+
cacheStrategy: content
23+
ignorePaths:
24+
- .cspell.yml
25+
- .cspellcache
26+
- .devcontainer
27+
- .dockerignore
28+
- .git
29+
- .gitignore
30+
- .trivyignore
31+
- .vscode
32+
- package-lock.json
33+
- pnpm-lock.yaml
34+
- uv.lock
35+
- backend/app/api/auth/resources/disposable_email_domains.txt
36+
- frontend-app/src/assets/data/**
37+
- frontend-app/src/types/api.generated.ts
38+
39+
language: en_us
40+
words:
41+
# Proper nouns
42+
- Donati
43+
- Lierde
44+
- RELab
45+
46+
# Font names
47+
- grotesk
48+
49+
# Technical terms
50+
- linkinator
51+
- LogQL
52+
- mpegurl
53+
- nosniff
54+
- OTLP
55+
- shellcheck
56+
- subrepo
57+
- subrepos
58+
- trivyignores
59+
- trixie
60+
- tsvector
61+
62+
# Miscellaneous
63+
- orcid
64+
- refurbishers
65+
- remanufacturability
66+
- remanufacturable
67+
- repairability
68+
- zenodo
69+
70+
ignoreWords:
71+
- USEPOLLING
72+
73+
overrides:
74+
- filename: "{backend,docs}/**"
75+
words:
76+
# Model terms
77+
- categorymateriallink
78+
- categoryproducttypelink
79+
- circularityproperties
80+
- fileparenttype
81+
- imageparenttype
82+
- materialproductlink
83+
- newslettersubscriber
84+
- organizationrole
85+
- oauthaccount
86+
- physicalproperties
87+
- producttype
88+
- subcomponent
89+
- subcomponents
90+
- supercategory
91+
- taxonomydomain
92+
93+
- filename: "backend/**"
94+
words:
95+
# Technical terms
96+
- instrumentor
97+
- instrumentors
98+
- piexif
99+
- PYTHONDONTWRITEBYTECODE
100+
- PYTHONUNBUFFERED
101+
- primaryjoin
102+
- selectinload
103+
- tsquery
104+
- uninstrument
105+
- xdist
106+
- zxcvbn
107+
108+
- filename: "docs/**"
109+
words:
110+
- RTMP
111+
- HIBP
112+
113+
- filename: "frontend-app/**"
114+
words:
115+
# Technical terms
116+
- ellipsize
117+
- pressable
118+
- pressables
119+
- refetches
120+
- worklets

.devcontainer/backend/devcontainer.json

Lines changed: 11 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,26 @@
11
{
22
"name": "relab-backend",
3-
"dockerComposeFile": ["../../compose.yml", "../../compose.override.yml"],
4-
"service": "backend",
5-
"runServices": ["backend"],
3+
"dockerComposeFile": ["../../compose.yml", "../../compose.dev.yml"],
4+
"service": "api",
5+
"runServices": ["api", "redis", "postgres"],
66
"workspaceFolder": "/opt/relab/backend",
7-
// The local workspace is mounted in /opt/relab for git integration
87
"mounts": ["source=${localWorkspaceFolder},target=/opt/relab,type=bind,consistency=cached"],
98
"overrideCommand": true,
10-
"postCreateCommand": "",
11-
"postAttachCommand": "echo '🚀 Backend dev container ready!\\n💡 To start the FastAPI dev server, run: fastapi dev\\n🔄 If that fails, try: uv run fastapi dev\\n🌐 The server will be available at http://localhost:8011 (forwarded port)'",
9+
"postAttachCommand": "echo 'RELab backend devcontainer ready.\\nUse this for focused backend work; the root full-stack container is the default onboarding path.\\nRun just install if needed, then just dev or just check.\\nAPI: http://localhost:8011'",
1210
"features": {
1311
"ghcr.io/devcontainers/features/git:1": {}
1412
},
1513
"customizations": {
1614
"vscode": {
17-
"extensions": ["charliermarsh.ruff", "ms-python.python", "wholroyd.jinja"],
1815
"settings": {
19-
"[python][notebook]": {
20-
"editor.codeActionsOnSave": {
21-
"source.fixAll": "explicit",
22-
"source.organizeImports": "explicit"
23-
},
24-
"editor.defaultFormatter": "charliermarsh.ruff"
16+
"python.defaultInterpreterPath": "${containerWorkspaceFolder}/.venv/bin/python",
17+
"ty.configuration": {
18+
"environment": {
19+
"root": ["${containerWorkspaceFolder}"],
20+
"python": "${containerWorkspaceFolder}/.venv/"
21+
}
2522
},
26-
"editor.formatOnSave": true,
27-
"python-envs.terminal.showActivateButton": true,
28-
"python.analysis.autoFormatStrings": true,
29-
"python.analysis.typeCheckingMode": "standard",
30-
"python.linting.enabled": true,
31-
"python.linting.ruffEnabled": true,
32-
"python.terminal.activateEnvInCurrentTerminal": true,
33-
"python.terminal.activateEnvironment": true,
34-
"python.testing.pytestEnabled": true
23+
"ty.interpreter": ["${containerWorkspaceFolder}/.venv/bin/python"]
3524
}
3625
}
3726
}

.devcontainer/devcontainer.json

Lines changed: 4 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -1,74 +1,14 @@
11
{
22
"name": "relab-fullstack",
3-
"dockerComposeFile": ["../compose.yml", "../compose.override.yml"],
4-
"service": "frontend-web",
3+
"dockerComposeFile": ["../compose.yml", "../compose.dev.yml"],
4+
"service": "app-site",
5+
"runServices": ["api", "redis", "postgres", "docs-site", "web-site", "app-site"],
56
"workspaceFolder": "/opt/relab",
67
"mounts": ["source=${localWorkspaceFolder},target=/opt/relab,type=bind,consistency=cached"],
78
"features": {
89
"ghcr.io/devcontainers/features/git:1": {},
910
"ghcr.io/devcontainers-extra/features/expo-cli:1": {},
1011
"ghcr.io/jsburckhardt/devcontainer-features/uv:1": {}
1112
},
12-
"postAttachCommand": "echo '🚀 Fullstack dev container ready!\\n💡 Frontend: http://localhost:8010\\n💡 Backend: http://localhost:8011\\n💡 Docs: http://localhost:8012 (all forwarded ports)'",
13-
"customizations": {
14-
"vscode": {
15-
"extensions": [
16-
// Frontend
17-
"msjsdiag.vscode-react-native",
18-
"christian-kohler.npm-intellisense",
19-
"esbenp.prettier-vscode",
20-
"dbaeumer.vscode-eslint",
21-
"expo.vscode-expo-tools",
22-
// Backend
23-
"charliermarsh.ruff",
24-
"ms-python.python",
25-
"wholroyd.jinja",
26-
// Docs
27-
"bierner.markdown-mermaid",
28-
"bierner.markdown-preview-github-styles",
29-
"DavidAnson.vscode-markdownlint",
30-
"shd101wyy.markdown-preview-enhanced",
31-
"yzhang.markdown-all-in-one"
32-
],
33-
"settings": {
34-
// Frontend
35-
"[javascript][typescript][javascriptreact][typescriptreact]": {
36-
"editor.codeActionsOnSave": {
37-
"source.fixAll.eslint": "always",
38-
"source.organizeImports": "explicit"
39-
},
40-
"editor.defaultFormatter": "esbenp.prettier-vscode"
41-
},
42-
"eslint.format.enable": true,
43-
"eslint.lintTask.enable": true,
44-
"eslint.run": "onSave",
45-
// Backend
46-
"[python][notebook]": {
47-
"editor.codeActionsOnSave": {
48-
"source.fixAll": "explicit",
49-
"source.organizeImports": "explicit"
50-
},
51-
"editor.defaultFormatter": "charliermarsh.ruff"
52-
},
53-
"python.analysis.typeCheckingMode": "standard",
54-
"python.linting.enabled": true,
55-
"python.linting.ruffEnabled": true,
56-
"python.terminal.activateEnvInCurrentTerminal": true,
57-
"python.terminal.activateEnvironment": true,
58-
"python.testing.pytestEnabled": true,
59-
// Docs
60-
"[markdown]": {
61-
"editor.defaultFormatter": "DavidAnson.vscode-markdownlint"
62-
},
63-
"editor.formatOnSave": true,
64-
"github.copilot.enable": {
65-
"markdown": true
66-
},
67-
"markdown.extension.completion.enabled": true,
68-
"markdown.extension.orderedList.marker": "one",
69-
"markdown.extension.tableFormatter.normalizeIndentation": true,
70-
"markdown.extension.theming.decoration.renderTrailingSpace": true
71-
}
72-
}
73-
}
13+
"postAttachCommand": "echo 'RELab full-stack devcontainer ready.\\nPrimary workflow: run just install once, then use just dev / just ci from the repo root.\\nPlatform: http://localhost:8010\\nAPI: http://localhost:8011\\nDocs: http://localhost:8012\\nApp: http://localhost:8013'"
7414
}
Lines changed: 4 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,44 +1,13 @@
11
{
22
"name": "relab-docs",
3-
"dockerComposeFile": ["../../compose.yml", "../../compose.override.yml"],
4-
"service": "docs",
5-
"runServices": ["docs"],
3+
"dockerComposeFile": ["../../compose.yml", "../../compose.dev.yml"],
4+
"service": "docs-site",
5+
"runServices": ["docs-site"],
66
"workspaceFolder": "/opt/relab/docs",
7-
/*
8-
NOTE: The non-trivial mount setup to allow live reload and git:
9-
10-
[Devcontainer: /opt/relab/docs] ⇄ [Local ./docs] ⇄ [Devcontainer: /docs]
11-
12-
- Edit in git-integrated /opt/relab/docs (devcontainer) → updates local ./docs
13-
- MkDocs in the devcontainer live reloads /docs (synced from local ./docs)
14-
*/
157
"mounts": ["source=${localWorkspaceFolder},target=/opt/relab,type=bind,consistency=cached"],
8+
"postAttachCommand": "echo 'RELab docs devcontainer ready.\\nUse this for focused docs work; the root full-stack container is the default onboarding path.\\nRun just install if needed, then just dev or just check.\\nDocs: http://localhost:8012'",
169
"features": {
1710
"ghcr.io/cirolosapio/devcontainers-features/alpine-bash:0": {},
1811
"ghcr.io/devcontainers/features/git:1": {}
19-
},
20-
"customizations": {
21-
"vscode": {
22-
"extensions": [
23-
"bierner.markdown-mermaid",
24-
"bierner.markdown-preview-github-styles",
25-
"DavidAnson.vscode-markdownlint",
26-
"shd101wyy.markdown-preview-enhanced",
27-
"yzhang.markdown-all-in-one"
28-
]
29-
},
30-
"settings": {
31-
"[markdown]": {
32-
"editor.defaultFormatter": "DavidAnson.vscode-markdownlint"
33-
},
34-
"editor.formatOnSave": true,
35-
"github.copilot.enable": {
36-
"markdown": true
37-
},
38-
"markdown.extension.completion.enabled": true,
39-
"markdown.extension.orderedList.marker": "one",
40-
"markdown.extension.tableFormatter.normalizeIndentation": true,
41-
"markdown.extension.theming.decoration.renderTrailingSpace": true
42-
}
4312
}
4413
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
{
2+
"name": "relab-frontend-app",
3+
"dockerComposeFile": ["../../compose.yml", "../../compose.dev.yml"],
4+
"service": "app-site",
5+
"runServices": ["app-site"],
6+
"workspaceFolder": "/opt/relab/frontend-app",
7+
"mounts": ["source=${localWorkspaceFolder},target=/opt/relab,type=bind,consistency=cached"],
8+
"overrideCommand": true,
9+
"postAttachCommand": "echo 'RELab app devcontainer ready.\\nUse this for focused app work; the root full-stack container is the default onboarding path.\\nRun just install if needed, then just dev or just check.\\nApp: http://localhost:8013'",
10+
"features": {
11+
"ghcr.io/devcontainers/features/git:1": {},
12+
"ghcr.io/devcontainers-extra/features/expo-cli:1": {}
13+
}
14+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
{
2+
"name": "relab-frontend-web",
3+
"dockerComposeFile": ["../../compose.yml", "../../compose.dev.yml"],
4+
"service": "web-site",
5+
"runServices": ["web-site"],
6+
"workspaceFolder": "/opt/relab/frontend-web",
7+
"mounts": ["source=${localWorkspaceFolder},target=/opt/relab,type=bind,consistency=cached"],
8+
"overrideCommand": true,
9+
"postAttachCommand": "echo 'RELab web devcontainer ready.\\nUse this for focused web work; the root full-stack container is the default onboarding path.\\nRun just install if needed, then just dev or just check.\\nWeb: http://localhost:8010'",
10+
"features": {
11+
"ghcr.io/devcontainers/features/git:1": {}
12+
}
13+
}

.devcontainer/frontend/devcontainer.json

Lines changed: 0 additions & 42 deletions
This file was deleted.

0 commit comments

Comments
 (0)