feat: launch 3d architecture documentation portal
Build and publish 3D Architecture Wizzard documentation / build (push) Failing after 4s
Build and publish 3D Architecture Wizzard documentation / build (push) Failing after 4s
This commit is contained in:
@@ -0,0 +1,65 @@
|
|||||||
|
name: Build and publish 3D Architecture Wizzard documentation
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [test]
|
||||||
|
pull_request:
|
||||||
|
branches: [test]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
container: node:20-bookworm
|
||||||
|
steps:
|
||||||
|
- name: Checkout exact revision
|
||||||
|
shell: bash
|
||||||
|
env:
|
||||||
|
GIT_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
REVISION: ${{ gitea.event.pull_request.head.sha || gitea.sha }}
|
||||||
|
run: |
|
||||||
|
set -euo pipefail
|
||||||
|
test -n "$GIT_AUTH_TOKEN"
|
||||||
|
test -n "$REVISION"
|
||||||
|
git init .
|
||||||
|
git remote add origin '${{ gitea.server_url }}/${{ gitea.repository }}.git'
|
||||||
|
git -c http.extraheader="Authorization: token ***" fetch --depth=1 origin "$REVISION"
|
||||||
|
git checkout --detach FETCH_HEAD
|
||||||
|
test "$(git rev-parse HEAD)" = "$REVISION"
|
||||||
|
- name: Install pnpm
|
||||||
|
run: npm install --global pnpm@10.15.1
|
||||||
|
- name: Install dependencies
|
||||||
|
run: pnpm install --frozen-lockfile
|
||||||
|
- name: Validate and build
|
||||||
|
run: pnpm validate
|
||||||
|
- name: Verify publication contract
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
set -euo pipefail
|
||||||
|
test -f build/index.html
|
||||||
|
grep -Fq '3DARCH-PORTAL-KICKOFF-2026-08-31' build/index.html
|
||||||
|
find build -maxdepth 1 -type f -name 'search-index*.json' -size +0c | grep -q .
|
||||||
|
- name: Publish to Gondor Pages
|
||||||
|
if: gitea.event_name == 'push' && gitea.ref == 'refs/heads/test'
|
||||||
|
shell: bash
|
||||||
|
env:
|
||||||
|
REVISION: ${{ gitea.sha }}
|
||||||
|
run: |
|
||||||
|
set -euo pipefail
|
||||||
|
ORG_REPO='${{ gitea.repository }}'
|
||||||
|
case "$ORG_REPO" in */*) ;; *) echo "invalid repository slug: $ORG_REPO" >&2; exit 1;; esac
|
||||||
|
case "$ORG_REPO" in *..*|/*|*/|*//* ) echo "unsafe repository slug: $ORG_REPO" >&2; exit 1;; esac
|
||||||
|
test -f build/index.html
|
||||||
|
pages_root='/gondor-v1-gitea-pages'
|
||||||
|
mountpoint -q "$pages_root" || { echo "$pages_root is not the persistent Pages mount" >&2; exit 1; }
|
||||||
|
destination="$pages_root/$ORG_REPO"
|
||||||
|
destination_parent="${destination%/*}"
|
||||||
|
repository_name="${destination##*/}"
|
||||||
|
staging="$destination_parent/.${repository_name}.staging-$REVISION"
|
||||||
|
previous="$destination_parent/.${repository_name}.previous-$REVISION"
|
||||||
|
rm -rf -- "$staging" "$previous"
|
||||||
|
mkdir -p "$staging"
|
||||||
|
cp -a build/. "$staging/"
|
||||||
|
grep -Fq '3DARCH-PORTAL-KICKOFF-2026-08-31' "$staging/index.html"
|
||||||
|
if test -e "$destination"; then mv -- "$destination" "$previous"; fi
|
||||||
|
mv -- "$staging" "$destination"
|
||||||
|
rm -rf -- "$previous"
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
node_modules/
|
||||||
|
build/
|
||||||
|
.docusaurus/
|
||||||
|
.cache-loader/
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
# 3D Architecture Wizzard documentation
|
||||||
|
|
||||||
|
Docusaurus 3 documentation portal for **3D Architecture Wizzard** (`3darch`). The product is an interactive 3D application for exploring, designing, and communicating software and system architecture.
|
||||||
|
|
||||||
|
## Work locally
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pnpm install --frozen-lockfile
|
||||||
|
pnpm validate
|
||||||
|
```
|
||||||
|
|
||||||
|
The site is published from `test` to [LEGO Cloud Pages](https://pages.apps.lego-cloud.eu/corp-v1-3darch/corp-v1-3darch-documentation/).
|
||||||
|
|
||||||
|
## Project links
|
||||||
|
|
||||||
|
- [Application repository](https://gitea.lego-cloud.eu/corp-v1-3darch/corp-v1-3darch)
|
||||||
|
- [Board record](https://pages.apps.lego-cloud.eu/corp-v1/portal/projects/3darch/)
|
||||||
|
- [Project-adopted Docusaurus skill](https://gitea.lego-cloud.eu/corp-v1-3darch-skills-code-agent/documentation-docusaurus--3darch)
|
||||||
|
- [Central Docusaurus guidance](https://gitea.lego-cloud.eu/vssa-v1-skills-code-agent/documentation-docusaurus)
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
---
|
||||||
|
title: "Architecture Overview"
|
||||||
|
description: "Understand the browser POC responsibilities and boundaries."
|
||||||
|
slug: /
|
||||||
|
---
|
||||||
|
|
||||||
|
# Shape the browser POC
|
||||||
|
|
||||||
|
The POC separates model data, scene composition, interaction, and presentation so each concern can change as the product learns.
|
||||||
|
|
||||||
|
The first architecture decision is to keep the model representation independent from the 3D renderer.
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
---
|
||||||
|
title: "POC Shape"
|
||||||
|
description: "Trace one model from source data to an interactive 3D scene."
|
||||||
|
---
|
||||||
|
|
||||||
|
# Trace the rendering path
|
||||||
|
|
||||||
|
1. A local model fixture describes architecture elements and relationships.
|
||||||
|
2. A scene adapter maps records to spatial objects.
|
||||||
|
3. The renderer presents the scene in a browser.
|
||||||
|
4. Interaction state connects selection to readable details.
|
||||||
|
|
||||||
|
This shape supports a focused experiment without committing to a production authoring format.
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
---
|
||||||
|
title: "Navigate the Model"
|
||||||
|
description: "Move through the POC model and inspect architecture elements."
|
||||||
|
---
|
||||||
|
|
||||||
|
# Navigate the model
|
||||||
|
|
||||||
|
Use pointer or keyboard controls exposed by the POC to orbit, pan, zoom, and select. The interaction contract will be refined with the browser prototype.
|
||||||
|
|
||||||
|
## Visible result
|
||||||
|
|
||||||
|
The selected element exposes its name and architecture responsibility.
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
---
|
||||||
|
title: "Start Here"
|
||||||
|
description: "Open the first architecture model and establish the navigation path."
|
||||||
|
slug: /
|
||||||
|
---
|
||||||
|
|
||||||
|
# Start with the browser POC
|
||||||
|
|
||||||
|
The first project deliverable is one architecture model rendered in a navigable 3D scene. Use this path to enter the model, orient the camera, and select an architecture element.
|
||||||
|
|
||||||
|
## Outcome
|
||||||
|
|
||||||
|
You can identify the model boundary and move between its major elements.
|
||||||
|
|
||||||
|
## Next step
|
||||||
|
|
||||||
|
Continue to [Navigate the Model](./navigate-the-model.md).
|
||||||
@@ -0,0 +1,62 @@
|
|||||||
|
import {themes as prismThemes} from 'prism-react-renderer';
|
||||||
|
import type {Config} from '@docusaurus/types';
|
||||||
|
import type * as Preset from '@docusaurus/preset-classic';
|
||||||
|
|
||||||
|
const editUrl = 'https://gitea.lego-cloud.eu/corp-v1-3darch/corp-v1-3darch-documentation/src/branch/test/';
|
||||||
|
const config: Config = {
|
||||||
|
title: '3D Architecture Wizzard',
|
||||||
|
tagline: 'Explore, design, and communicate software and system architecture in navigable 3D',
|
||||||
|
favicon: 'img/favicon.svg',
|
||||||
|
url: 'https://pages.apps.lego-cloud.eu',
|
||||||
|
baseUrl: '/corp-v1-3darch/corp-v1-3darch-documentation/',
|
||||||
|
organizationName: 'corp-v1-3darch',
|
||||||
|
projectName: 'corp-v1-3darch-documentation',
|
||||||
|
trailingSlash: true,
|
||||||
|
onBrokenLinks: 'throw',
|
||||||
|
onBrokenAnchors: 'throw',
|
||||||
|
markdown: {hooks: {onBrokenMarkdownLinks: 'throw'}},
|
||||||
|
i18n: {defaultLocale: 'en', locales: ['en']},
|
||||||
|
plugins: [
|
||||||
|
['@docusaurus/plugin-content-docs', {id: 'scope', path: 'scope', routeBasePath: 'scope', sidebarPath: './sidebarsScope.ts', editUrl}],
|
||||||
|
['@docusaurus/plugin-content-docs', {id: 'architecture', path: 'architecture', routeBasePath: 'architecture', sidebarPath: './sidebarsArchitecture.ts', editUrl}],
|
||||||
|
['@docusaurus/plugin-content-docs', {id: 'kanban', path: 'kanban', routeBasePath: 'kanban', sidebarPath: './sidebarsKanban.ts', editUrl}],
|
||||||
|
['@docusaurus/plugin-content-docs', {id: 'ways-of-working', path: 'ways-of-working', routeBasePath: 'ways-of-working', sidebarPath: './sidebarsWaysOfWorking.ts', editUrl}],
|
||||||
|
['@docusaurus/plugin-content-docs', {id: 'engineering', path: 'engineering', routeBasePath: 'engineering', sidebarPath: './sidebarsEngineering.ts', editUrl}],
|
||||||
|
['@docusaurus/plugin-content-docs', {id: 'glossary', path: 'glossary', routeBasePath: 'glossary', sidebarPath: './sidebarsGlossary.ts', editUrl}],
|
||||||
|
],
|
||||||
|
themes: [[require.resolve('@easyops-cn/docusaurus-search-local'), {
|
||||||
|
hashed: 'filename', indexDocs: true, indexBlog: false, indexPages: true,
|
||||||
|
docsRouteBasePath: ['/tutorial', '/scope', '/architecture', '/kanban', '/ways-of-working', '/engineering', '/glossary'],
|
||||||
|
language: ['en'], highlightSearchTermsOnTargetPage: true, explicitSearchResultPath: true,
|
||||||
|
searchResultLimits: 12, searchResultContextMaxLength: 120,
|
||||||
|
}]],
|
||||||
|
presets: [['classic', {
|
||||||
|
docs: {path: 'docs/user-tutorial', routeBasePath: 'tutorial', sidebarPath: './sidebars.ts', editUrl},
|
||||||
|
blog: false,
|
||||||
|
theme: {customCss: './src/css/custom.css'},
|
||||||
|
} satisfies Preset.Options]],
|
||||||
|
themeConfig: {
|
||||||
|
colorMode: {defaultMode: 'light', disableSwitch: false, respectPrefersColorScheme: true},
|
||||||
|
navbar: {title: '3D Architecture Wizzard', logo: {alt: '3D Architecture Wizzard mark', src: 'img/logo.svg'}, items: [
|
||||||
|
{type: 'docSidebar', sidebarId: 'tutorialSidebar', label: 'User Tutorial', position: 'left'},
|
||||||
|
{type: 'docSidebar', docsPluginId: 'scope', sidebarId: 'scopeSidebar', label: 'Scope', position: 'left'},
|
||||||
|
{type: 'docSidebar', docsPluginId: 'architecture', sidebarId: 'architectureSidebar', label: 'Architecture', position: 'left'},
|
||||||
|
{type: 'docSidebar', docsPluginId: 'kanban', sidebarId: 'kanbanSidebar', label: 'Kanban', position: 'left'},
|
||||||
|
{type: 'docSidebar', docsPluginId: 'ways-of-working', sidebarId: 'waysOfWorkingSidebar', label: 'Ways Of Working', position: 'left'},
|
||||||
|
{type: 'docSidebar', docsPluginId: 'engineering', sidebarId: 'engineeringSidebar', label: 'Engineering', position: 'left'},
|
||||||
|
{type: 'docSidebar', docsPluginId: 'glossary', sidebarId: 'glossarySidebar', label: 'Glossary', position: 'left'},
|
||||||
|
{href: 'https://gitea.lego-cloud.eu/corp-v1-3darch/corp-v1-3darch', label: 'Application ↗', position: 'right'},
|
||||||
|
]},
|
||||||
|
footer: {style: 'dark', links: [
|
||||||
|
{title: 'Explore', items: [{label: 'User Tutorial', to: '/tutorial/'}, {label: 'Architecture', to: '/architecture/'}, {label: 'Glossary', to: '/glossary/'}]},
|
||||||
|
{title: 'Project', items: [
|
||||||
|
{label: 'Application repository', href: 'https://gitea.lego-cloud.eu/corp-v1-3darch/corp-v1-3darch'},
|
||||||
|
{label: 'Board record', href: 'https://pages.apps.lego-cloud.eu/corp-v1/portal/projects/3darch/'},
|
||||||
|
{label: 'Project skill', href: 'https://gitea.lego-cloud.eu/corp-v1-3darch-skills-code-agent/documentation-docusaurus--3darch'},
|
||||||
|
]},
|
||||||
|
], copyright: `Copyright © ${new Date().getFullYear()} 3D Architecture Wizzard`},
|
||||||
|
prism: {theme: prismThemes.github, darkTheme: prismThemes.dracula},
|
||||||
|
docs: {sidebar: {hideable: true, autoCollapseCategories: true}},
|
||||||
|
} satisfies Preset.ThemeConfig,
|
||||||
|
};
|
||||||
|
export default config;
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
---
|
||||||
|
title: "Development Setup"
|
||||||
|
description: "Prepare a contributor environment when application code becomes available."
|
||||||
|
---
|
||||||
|
|
||||||
|
# Set up the project
|
||||||
|
|
||||||
|
Clone the application repository with the approved SSH identity, inspect its project scripts, and use the committed pnpm version. Do not infer commands that are not yet present.
|
||||||
|
|
||||||
|
For this documentation portal, run `pnpm install --frozen-lockfile` followed by `pnpm validate`.
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
---
|
||||||
|
title: "Engineering Overview"
|
||||||
|
description: "Use the engineering boundary to prepare implementation work."
|
||||||
|
slug: /
|
||||||
|
---
|
||||||
|
|
||||||
|
# Prepare implementation
|
||||||
|
|
||||||
|
The application repository is [corp-v1-3darch](https://gitea.lego-cloud.eu/corp-v1-3darch/corp-v1-3darch). This portal documents product and engineering direction while implementation lives with the application.
|
||||||
|
|
||||||
|
Prefer TypeScript, pnpm, testable model adapters, and browser-level behavior checks for the POC.
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
---
|
||||||
|
title: "Project Language"
|
||||||
|
description: "Apply product-specific language consistently."
|
||||||
|
---
|
||||||
|
|
||||||
|
# Project language
|
||||||
|
|
||||||
|
Use **3D Architecture Wizzard** for the project name and preserve its intentional spelling. Use **3darch** for repository, namespace, and concise technical references.
|
||||||
|
|
||||||
|
Use **element** for a selectable architecture object and **relationship** for a modeled connection between elements.
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
---
|
||||||
|
title: "Terms"
|
||||||
|
description: "Use the shared terms that anchor project communication."
|
||||||
|
slug: /
|
||||||
|
---
|
||||||
|
|
||||||
|
# Terms
|
||||||
|
|
||||||
|
| Term | Meaning |
|
||||||
|
|---|---|
|
||||||
|
| **3darch** | Short project code for 3D Architecture Wizzard. |
|
||||||
|
| **Architecture model** | Structured representation of architecture elements and relationships. |
|
||||||
|
| **Browser POC** | Initial proof of concept delivered in a web browser. |
|
||||||
|
| **Navigable 3D** | A spatial view that supports camera movement and element inspection. |
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
---
|
||||||
|
title: "Board"
|
||||||
|
description: "Use the canonical project Board to inspect delivery state."
|
||||||
|
slug: /
|
||||||
|
---
|
||||||
|
|
||||||
|
# Open the Board
|
||||||
|
|
||||||
|
The canonical steering record is the [3darch Board record](https://pages.apps.lego-cloud.eu/corp-v1/portal/projects/3darch/). Use it for governed status and portfolio navigation.
|
||||||
|
|
||||||
|
This documentation area explains the project view; it does not duplicate canonical Board records.
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
---
|
||||||
|
title: "Focus"
|
||||||
|
description: "Identify the current delivery focus after reviewing the Board."
|
||||||
|
---
|
||||||
|
|
||||||
|
# Current focus
|
||||||
|
|
||||||
|
The team is establishing the documentation foundation and defining the browser POC that visualizes one architecture model in navigable 3D.
|
||||||
|
|
||||||
|
## Exit evidence
|
||||||
|
|
||||||
|
A stakeholder can open the POC, navigate the model, select an element, and explain what the view communicates.
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
{
|
||||||
|
"name": "corp-v1-3darch-documentation",
|
||||||
|
"version": "0.1.0",
|
||||||
|
"private": true,
|
||||||
|
"packageManager": "pnpm@10.15.1",
|
||||||
|
"scripts": {
|
||||||
|
"start": "docusaurus start",
|
||||||
|
"build": "docusaurus build",
|
||||||
|
"serve": "docusaurus serve",
|
||||||
|
"clear": "docusaurus clear",
|
||||||
|
"typecheck": "tsc --noEmit",
|
||||||
|
"test": "node --test tests/*.test.mjs",
|
||||||
|
"validate": "pnpm test && pnpm typecheck && pnpm build"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"@docusaurus/core": "3.10.2",
|
||||||
|
"@docusaurus/preset-classic": "3.10.2",
|
||||||
|
"@easyops-cn/docusaurus-search-local": "0.51.1",
|
||||||
|
"@mdx-js/react": "^3.0.0",
|
||||||
|
"clsx": "^2.1.1",
|
||||||
|
"prism-react-renderer": "^2.3.1",
|
||||||
|
"react": "^19.0.0",
|
||||||
|
"react-dom": "^19.0.0"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@docusaurus/module-type-aliases": "3.10.2",
|
||||||
|
"@docusaurus/tsconfig": "3.10.2",
|
||||||
|
"@docusaurus/types": "3.10.2",
|
||||||
|
"@types/react": "^19.0.0",
|
||||||
|
"typescript": "~5.6.3"
|
||||||
|
},
|
||||||
|
"engines": {"node": ">=20.0"}
|
||||||
|
}
|
||||||
Generated
+12159
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,2 @@
|
|||||||
|
packages:
|
||||||
|
- '.'
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
---
|
||||||
|
title: "Initial Deliverable"
|
||||||
|
description: "Apply the browser POC boundary to kickoff decisions."
|
||||||
|
---
|
||||||
|
|
||||||
|
# Deliver one navigable model
|
||||||
|
|
||||||
|
The initial deliverable is a browser proof of concept that visualizes **one architecture model in navigable 3D**.
|
||||||
|
|
||||||
|
## Included
|
||||||
|
|
||||||
|
- One architecture model
|
||||||
|
- Browser-based rendering
|
||||||
|
- Camera navigation
|
||||||
|
- Element selection and readable identity
|
||||||
|
|
||||||
|
## Deferred
|
||||||
|
|
||||||
|
Editing, collaboration, import pipelines, and production hardening follow validated POC learning.
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
---
|
||||||
|
title: "Product Scope"
|
||||||
|
description: "Use the product purpose to evaluate proposed work."
|
||||||
|
slug: /
|
||||||
|
---
|
||||||
|
|
||||||
|
# Frame product scope
|
||||||
|
|
||||||
|
3D Architecture Wizzard is an interactive 3D application for exploring, designing, and communicating software and system architecture.
|
||||||
|
|
||||||
|
The product serves architecture authors, reviewers, and stakeholders who need a shared spatial view of a model.
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
import type {SidebarsConfig} from '@docusaurus/plugin-content-docs';
|
||||||
|
const sidebars: SidebarsConfig = {tutorialSidebar: ['start-here', 'navigate-the-model']};
|
||||||
|
export default sidebars;
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
import type {SidebarsConfig} from '@docusaurus/plugin-content-docs';
|
||||||
|
const sidebars: SidebarsConfig = {architectureSidebar: ['overview', 'poc-shape']};
|
||||||
|
export default sidebars;
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
import type {SidebarsConfig} from '@docusaurus/plugin-content-docs';
|
||||||
|
const sidebars: SidebarsConfig = {engineeringSidebar: ['overview', 'development-setup']};
|
||||||
|
export default sidebars;
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
import type {SidebarsConfig} from '@docusaurus/plugin-content-docs';
|
||||||
|
const sidebars: SidebarsConfig = {glossarySidebar: ['terms', 'project-language']};
|
||||||
|
export default sidebars;
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
import type {SidebarsConfig} from '@docusaurus/plugin-content-docs';
|
||||||
|
const sidebars: SidebarsConfig = {kanbanSidebar: ['board', 'focus']};
|
||||||
|
export default sidebars;
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
import type {SidebarsConfig} from '@docusaurus/plugin-content-docs';
|
||||||
|
const sidebars: SidebarsConfig = {scopeSidebar: ['overview', 'initial-deliverable']};
|
||||||
|
export default sidebars;
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
import type {SidebarsConfig} from '@docusaurus/plugin-content-docs';
|
||||||
|
const sidebars: SidebarsConfig = {waysOfWorkingSidebar: ['team', 'delivery']};
|
||||||
|
export default sidebars;
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
:root{--ifm-color-primary:#176b87;--ifm-color-primary-dark:#155f79;--ifm-color-primary-darker:#135970;--ifm-color-primary-darkest:#10495c;--ifm-color-primary-light:#197797;--ifm-color-primary-lighter:#1b7d9e;--ifm-color-primary-lightest:#1f8db2;--ifm-global-radius:0;--ifm-code-border-radius:0;--ifm-button-border-radius:0;--ifm-font-family-base:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;--ifm-font-family-monospace:"IBM Plex Mono",ui-monospace,SFMono-Regular,Consolas,monospace}[data-theme='dark']{--ifm-color-primary:#5eead4;--ifm-background-color:#090d17;--ifm-background-surface-color:#111827;--ifm-color-content:#e5edf7;--ifm-color-content-secondary:#aebdd0}.navbar{box-shadow:none;border-bottom:1px solid var(--ifm-color-emphasis-300)}*,*::before,*::after{border-radius:0!important}.button{font-weight:700}.footer{border-top:4px solid #4fd1c5}.theme-doc-sidebar-container{border-right-color:var(--ifm-color-emphasis-300)!important}.navbar__items{gap:.1rem}.navbar__link{font-size:.82rem}@media(max-width:1200px){.navbar__title{display:none}.navbar__link{font-size:.76rem;padding:.25rem}}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
.hero{padding:7rem 0 6rem;background:linear-gradient(125deg,#0b1020 0%,#101c39 58%,#16365c 100%);color:#fff;border-bottom:4px solid #4fd1c5}.eyebrow{font:700 .75rem/1.4 var(--ifm-font-family-monospace);letter-spacing:.11em;color:#6ee7dc}.hero h1{max-width:780px;font-size:clamp(3rem,7vw,6.3rem);line-height:.92;letter-spacing:-.055em;margin:1rem 0 1.5rem;color:#fff}.lede{max-width:760px;font-size:1.25rem;line-height:1.65;color:#dbeafe}.actions{display:flex;gap:.75rem;flex-wrap:wrap;margin-top:2rem}.snapshot,.areas,.links{padding:4rem 0}.snapshot{background:var(--ifm-background-surface-color);border-bottom:1px solid var(--ifm-color-emphasis-300)}.snapshot h2,.areas h2,.links h2{font-size:2rem;margin-bottom:1.5rem}.facts{display:grid;grid-template-columns:repeat(3,1fr);border:1px solid var(--ifm-color-emphasis-300)}.facts article{padding:1.5rem;border-right:1px solid var(--ifm-color-emphasis-300)}.facts article:last-child{border-right:0}.facts span,.card>span{display:block;font:700 .72rem/1.4 var(--ifm-font-family-monospace);text-transform:uppercase;letter-spacing:.09em;color:var(--ifm-color-primary)}.facts strong{display:block;font-size:1.25rem;margin:.5rem 0}.facts p{margin:0;color:var(--ifm-color-content-secondary)}.grid{display:grid;grid-template-columns:repeat(3,1fr);gap:1px;background:var(--ifm-color-emphasis-300);border:1px solid var(--ifm-color-emphasis-300)}.card{padding:1.5rem;background:var(--ifm-background-color);color:var(--ifm-font-color-base);min-height:210px;text-decoration:none!important}.card:hover{background:var(--ifm-color-emphasis-100);color:var(--ifm-font-color-base)}.card h3{margin:.6rem 0}.card p{color:var(--ifm-color-content-secondary)}.card b{color:var(--ifm-color-primary)}.links{background:#0b1020;color:#fff}.links h2{color:#fff}.linkRow{display:flex;flex-wrap:wrap;border:1px solid #334155}.linkRow a{padding:1rem 1.25rem;color:#dbeafe;border-right:1px solid #334155;text-decoration:none}.linkRow a:hover{background:#172033;color:#6ee7dc}@media(max-width:996px){.hero{padding:5rem 0}.facts,.grid{grid-template-columns:1fr}.facts article{border-right:0;border-bottom:1px solid var(--ifm-color-emphasis-300)}.facts article:last-child{border-bottom:0}}
|
||||||
@@ -0,0 +1,52 @@
|
|||||||
|
import type {ReactNode} from 'react';
|
||||||
|
import Layout from '@theme/Layout';
|
||||||
|
import Link from '@docusaurus/Link';
|
||||||
|
import Heading from '@theme/Heading';
|
||||||
|
import styles from './index.module.css';
|
||||||
|
|
||||||
|
const areas = [
|
||||||
|
['User Tutorial', '/tutorial/', 'Navigate the first 3D architecture model.'],
|
||||||
|
['Scope', '/scope/', 'Understand product intent and the POC boundary.'],
|
||||||
|
['Architecture', '/architecture/', 'See the browser POC shape and responsibilities.'],
|
||||||
|
['Kanban', '/kanban/', 'Open the Board, then review current Focus.'],
|
||||||
|
['Ways Of Working', '/ways-of-working/', 'Follow team and delivery practices.'],
|
||||||
|
['Engineering', '/engineering/', 'Prepare the implementation path.'],
|
||||||
|
['Glossary', '/glossary/', 'Start with shared Terms and project language.'],
|
||||||
|
] as const;
|
||||||
|
const marker = '3DARCH-PORTAL-KICKOFF-2026-08-31';
|
||||||
|
|
||||||
|
export default function Home(): ReactNode {
|
||||||
|
return <Layout title="Home" description="3D Architecture Wizzard project documentation portal">
|
||||||
|
<main data-deployment-marker={marker}>
|
||||||
|
<section className={styles.hero}>
|
||||||
|
<div className="container">
|
||||||
|
<p className={styles.eyebrow}>KICKOFF · {marker}</p>
|
||||||
|
<Heading as="h1">Architecture you can walk through.</Heading>
|
||||||
|
<p className={styles.lede}>3D Architecture Wizzard is an interactive 3D application for exploring, designing, and communicating software and system architecture.</p>
|
||||||
|
<div className={styles.actions}><Link className="button button--primary button--lg" to="/tutorial/">Start the tutorial</Link><Link className="button button--secondary button--lg" to="/architecture/">Explore architecture</Link></div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
<section className={styles.snapshot} aria-labelledby="delivery-heading"><div className="container">
|
||||||
|
<Heading as="h2" id="delivery-heading">Initial delivery snapshot</Heading>
|
||||||
|
<div className={styles.facts}>
|
||||||
|
<article><span>Status</span><strong>Kickoff</strong><p>Foundation portal and browser POC definition.</p></article>
|
||||||
|
<article><span>Initial deliverable</span><strong>Navigable browser POC</strong><p>Visualize one architecture model in interactive 3D.</p></article>
|
||||||
|
<article><span>Lead / team</span><strong>Linas · 3darch team</strong><p>Product direction, architecture, and delivery.</p></article>
|
||||||
|
</div>
|
||||||
|
</div></section>
|
||||||
|
<section className={styles.areas} aria-labelledby="areas-heading"><div className="container">
|
||||||
|
<Heading as="h2" id="areas-heading">Project documentation</Heading>
|
||||||
|
<div className={styles.grid}>{areas.map(([label,to,description], index)=><Link className={styles.card} to={to} key={to}><span>{String(index+1).padStart(2,'0')}</span><Heading as="h3">{label}</Heading><p>{description}</p><b>Open area →</b></Link>)}</div>
|
||||||
|
</div></section>
|
||||||
|
<section className={styles.links} aria-labelledby="links-heading"><div className="container">
|
||||||
|
<Heading as="h2" id="links-heading">Work with the project</Heading>
|
||||||
|
<div className={styles.linkRow}>
|
||||||
|
<a href="https://gitea.lego-cloud.eu/corp-v1-3darch/corp-v1-3darch">Application repository ↗</a>
|
||||||
|
<a href="https://pages.apps.lego-cloud.eu/corp-v1/portal/projects/3darch/">Board record ↗</a>
|
||||||
|
<a href="https://gitea.lego-cloud.eu/corp-v1-3darch/corp-v1-3darch-documentation/src/branch/test/README.md">README ↗</a>
|
||||||
|
<a href="https://gitea.lego-cloud.eu/corp-v1-3darch-skills-code-agent/documentation-docusaurus--3darch">Project skill ↗</a>
|
||||||
|
</div>
|
||||||
|
</div></section>
|
||||||
|
</main>
|
||||||
|
</Layout>;
|
||||||
|
}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"><rect width="64" height="64" fill="#0b1020"/><path fill="#5eead4" d="M32 7 55 20v24L32 57 9 44V20zm0 9L17 24v16l15 8 15-8V24z"/></svg>
|
||||||
|
After Width: | Height: | Size: 194 B |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"><path fill="#4fd1c5" d="M32 3 58 18v28L32 61 6 46V18zm0 7L13 21v22l19 11 19-11V21z"/><path fill="#176b87" d="m32 18 13 7.5v15L32 48l-13-7.5v-15zm0 7-6 3.5v8l6 3.5 6-3.5v-8z"/></svg>
|
||||||
|
After Width: | Height: | Size: 241 B |
@@ -0,0 +1,27 @@
|
|||||||
|
import test from 'node:test';
|
||||||
|
import assert from 'node:assert/strict';
|
||||||
|
import {readFileSync, existsSync} from 'node:fs';
|
||||||
|
|
||||||
|
const read = (path) => readFileSync(path, 'utf8');
|
||||||
|
test('portal identity and exact navigation contract', () => {
|
||||||
|
const config = read('docusaurus.config.ts');
|
||||||
|
assert.match(config, /title: '3D Architecture Wizzard'/);
|
||||||
|
assert.match(config, /baseUrl: '\/corp-v1-3darch\/corp-v1-3darch-documentation\/'/);
|
||||||
|
const labels = [...config.matchAll(/label: '(User Tutorial|Scope|Architecture|Kanban|Ways Of Working|Engineering|Glossary)'/g)].map(m=>m[1]);
|
||||||
|
assert.deepEqual(labels.slice(0,7), ['User Tutorial','Scope','Architecture','Kanban','Ways Of Working','Engineering','Glossary']);
|
||||||
|
assert.ok(config.includes("hashed: 'filename'"));
|
||||||
|
});
|
||||||
|
test('each area has a dedicated sidebar and required ordering', () => {
|
||||||
|
for (const file of ['sidebars.ts','sidebarsScope.ts','sidebarsArchitecture.ts','sidebarsKanban.ts','sidebarsWaysOfWorking.ts','sidebarsEngineering.ts','sidebarsGlossary.ts']) assert.ok(existsSync(file), file);
|
||||||
|
assert.ok(read('sidebarsKanban.ts').indexOf("'board'") < read('sidebarsKanban.ts').indexOf("'focus'"));
|
||||||
|
assert.ok(read('sidebarsGlossary.ts').indexOf("'terms'") < read('sidebarsGlossary.ts').indexOf("'project-language'"));
|
||||||
|
});
|
||||||
|
test('homepage publishes the required delivery record', () => {
|
||||||
|
const home = read('src/pages/index.tsx');
|
||||||
|
for (const marker of ['3DARCH-PORTAL-KICKOFF-2026-08-31','interactive 3D application','Navigable browser POC','Linas · 3darch team','Application repository','Board record','README','Project skill']) assert.ok(home.includes(marker), marker);
|
||||||
|
});
|
||||||
|
test('sharp light and dark UI contract is explicit', () => {
|
||||||
|
const css = read('src/css/custom.css');
|
||||||
|
assert.match(css, /\*,\*::before,\*::after\{border-radius:0!important\}/);
|
||||||
|
assert.match(css, /\[data-theme='dark'\]/);
|
||||||
|
});
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"extends": "@docusaurus/tsconfig",
|
||||||
|
"compilerOptions": {"baseUrl": "."},
|
||||||
|
"exclude": ["build", "node_modules"]
|
||||||
|
}
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
---
|
||||||
|
title: "Delivery Practices"
|
||||||
|
description: "Deliver small, verifiable increments toward the browser POC."
|
||||||
|
---
|
||||||
|
|
||||||
|
# Deliver with evidence
|
||||||
|
|
||||||
|
Each increment should connect one user-visible outcome to source, validation, exact-head CI, and deployed readback. Keep project records in their canonical location and link rather than copy them.
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
---
|
||||||
|
title: "Team"
|
||||||
|
description: "Understand ownership and collaboration expectations."
|
||||||
|
slug: /
|
||||||
|
---
|
||||||
|
|
||||||
|
# Work with the team
|
||||||
|
|
||||||
|
- **Lead:** Linas
|
||||||
|
- **Team:** 3darch project team
|
||||||
|
|
||||||
|
The lead owns product direction and coordinates scope decisions. Contributors preserve reviewable changes, link evidence, and surface uncertainty early.
|
||||||
Reference in New Issue
Block a user