feat: launch 3d architecture documentation portal
Build and publish 3D Architecture Wizzard documentation / build (push) Failing after 4s

This commit is contained in:
2026-08-31 10:24:07 +00:00
commit c84a10cc47
35 changed files with 12624 additions and 0 deletions
+65
View File
@@ -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"
+4
View File
@@ -0,0 +1,4 @@
node_modules/
build/
.docusaurus/
.cache-loader/
+19
View File
@@ -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)
+11
View File
@@ -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.
+13
View File
@@ -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.
+12
View File
@@ -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.
+17
View File
@@ -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).
+62
View File
@@ -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;
+10
View File
@@ -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`.
+11
View File
@@ -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.
+10
View File
@@ -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.
+14
View File
@@ -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. |
+11
View File
@@ -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.
+12
View File
@@ -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.
+33
View File
@@ -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"}
}
+12159
View File
File diff suppressed because it is too large Load Diff
+2
View File
@@ -0,0 +1,2 @@
packages:
- '.'
+19
View File
@@ -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.
+11
View File
@@ -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.
+3
View File
@@ -0,0 +1,3 @@
import type {SidebarsConfig} from '@docusaurus/plugin-content-docs';
const sidebars: SidebarsConfig = {tutorialSidebar: ['start-here', 'navigate-the-model']};
export default sidebars;
+3
View File
@@ -0,0 +1,3 @@
import type {SidebarsConfig} from '@docusaurus/plugin-content-docs';
const sidebars: SidebarsConfig = {architectureSidebar: ['overview', 'poc-shape']};
export default sidebars;
+3
View File
@@ -0,0 +1,3 @@
import type {SidebarsConfig} from '@docusaurus/plugin-content-docs';
const sidebars: SidebarsConfig = {engineeringSidebar: ['overview', 'development-setup']};
export default sidebars;
+3
View File
@@ -0,0 +1,3 @@
import type {SidebarsConfig} from '@docusaurus/plugin-content-docs';
const sidebars: SidebarsConfig = {glossarySidebar: ['terms', 'project-language']};
export default sidebars;
+3
View File
@@ -0,0 +1,3 @@
import type {SidebarsConfig} from '@docusaurus/plugin-content-docs';
const sidebars: SidebarsConfig = {kanbanSidebar: ['board', 'focus']};
export default sidebars;
+3
View File
@@ -0,0 +1,3 @@
import type {SidebarsConfig} from '@docusaurus/plugin-content-docs';
const sidebars: SidebarsConfig = {scopeSidebar: ['overview', 'initial-deliverable']};
export default sidebars;
+3
View File
@@ -0,0 +1,3 @@
import type {SidebarsConfig} from '@docusaurus/plugin-content-docs';
const sidebars: SidebarsConfig = {waysOfWorkingSidebar: ['team', 'delivery']};
export default sidebars;
+1
View File
@@ -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}}
+1
View File
@@ -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}}
+52
View File
@@ -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>;
}
+1
View File
@@ -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

+1
View File
@@ -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

+27
View File
@@ -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'\]/);
});
+5
View File
@@ -0,0 +1,5 @@
{
"extends": "@docusaurus/tsconfig",
"compilerOptions": {"baseUrl": "."},
"exclude": ["build", "node_modules"]
}
+8
View File
@@ -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.
+12
View File
@@ -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.