diff --git a/docs/organization/structure.mdx b/docs/organization/structure.mdx
index a98bcd1..a4589f7 100644
--- a/docs/organization/structure.mdx
+++ b/docs/organization/structure.mdx
@@ -1,5 +1,6 @@
---
title: Structure
+pagination_next: structure/product
description: Eldorado’s organizational operating model, departments, teams and responsibilities.
---
@@ -26,90 +27,12 @@ Functional leaders translate company priorities into departmental plans. Team le
Product has **two teams** and Technology has **five teams**. Operations, Marketing, Finance & Accounting, and HR & Administration each have **one squad** covering their departmental workstreams. Each team belongs to one department, with its own leadership and responsibilities. The departments collaborate on delivery without sharing team ownership.
-### Product
-
-**Purpose:** improve the buyer and seller experience and turn marketplace opportunities into valuable product capabilities.
-
-| Team | Responsibilities |
-| --- | --- |
-| Product Management | Product strategy, roadmaps, priorities and outcome measurement across discovery, categories, orders, seller tools, payments and operational workflows. |
-| Product Design | User research, interaction design, design consistency and accessible buyer and seller experiences. |
-
-Product Management owns what to improve and why. Product Design shapes the experience. Both work with Technology teams while remaining within Product.
-
-### Technology
-
-**Purpose:** build and operate a secure, reliable marketplace and improve the effectiveness of engineering.
-
-| Team | Responsibilities |
-| --- | --- |
-| Product Engineering | Build and maintain marketplace capabilities, including search, orders, seller tools, checkout, wallet and operational tooling. |
-| Platform & IT | Platform services, delivery infrastructure, observability, reliability, performance, internal systems, employee devices and identity administration. |
-| Architecture & Security | Technical standards, system design, security architecture and secure engineering practices. |
-| Quality Engineering | Test strategy, automation, release quality and defect prevention. |
-| Data & AI | Analytics, experimentation, ranking, recommendations, marketplace ML and safe AI-assisted engineering workflows. |
-
-The CTO owns technology direction. The Head of Engineering leads engineering delivery through Group Engineering Managers and Engineering Managers. The AI Architect coordinates AI enablement within Data & AI, working with Architecture & Security and the other Technology teams. These are leadership roles within the five-team structure, not additional teams.
-
-### Operations
-
-**Purpose:** keep marketplace trading dependable and resolve customer issues fairly and efficiently.
-
-**Operations Squad** delivers the department’s responsibilities across the following workstreams.
-
-| Workstream | Responsibilities |
-| --- | --- |
-| Customer Support | Buyer and seller assistance, knowledge management, self-service and support workflow automation. |
-| Trust & Resolution | Disputes, appeals, refunds, warranties, chargebacks and complex customer cases. |
-| Risk & Fraud | Transaction and account risk, fraud prevention, investigations and operational controls. |
-| Operational Quality | Independent case reviews, quality standards, calibration, service accuracy and improvement tracking across operational teams. |
-
-The COO coordinates Operations. Team leads manage specialists and daily service delivery. Operational Quality reports directly to the COO and reviews quality across teams.
-
-### Marketing
-
-**Purpose:** attract and retain customers, build the Eldorado brand and grow marketplace demand.
-
-**Marketing Squad** delivers the department’s responsibilities across the following workstreams.
-
-| Workstream | Responsibilities |
-| --- | --- |
-| Brand & Community | Brand positioning, campaigns, organic social, community and brand partnerships. |
-| Creative | Campaign concepts, visual assets and performance creative. |
-| SEO | Organic discovery, search visibility and content performance. |
-| PPC & Affiliate | Paid acquisition, affiliate channels and return on marketing investment. |
-| Influencer | Creator relationships, influencer programs and campaign delivery. |
-| CRM | Customer lifecycle communication, retention, reactivation and campaign personalization. |
-
-The CMO coordinates Marketing. The Brand Team Lead owns Brand & Community, with shared support from Creative and the other marketing workstreams.
-
-### Finance & Accounting
-
-**Purpose:** maintain financial control, support business decisions and keep marketplace money flows dependable.
-
-**Finance & Accounting Squad** delivers the department’s responsibilities across the following workstreams.
-
-| Workstream | Responsibilities |
-| --- | --- |
-| Financial Planning & Analysis | Budgets, forecasts, profitability, management reporting and investment analysis. |
-| Accounting, Tax & Controls | Accounting, financial reporting, tax, audit coordination and internal controls. |
-| Treasury & Payment Operations | Cash management, reconciliation, payout oversight, payment-provider coordination and financial risk. |
-
-The CFO coordinates Finance & Accounting and works with executive leadership on business performance. Finance, Operations and Product share responsibility for effective payment and withdrawal processes, each within its own area of expertise.
-
-### HR & Administration
-
-**Purpose:** help teams attract, develop and retain people and provide an effective working environment.
-
-**People & Administration Squad** delivers the department’s responsibilities across the following workstreams.
-
-| Workstream | Responsibilities |
-| --- | --- |
-| Talent Acquisition | Recruitment, candidate experience, hiring coordination and workforce demand support. |
-| People Operations | Employee onboarding, development, performance processes, policies and employee experience. |
-| Office & Administration | Workplace services, office operations and administrative coordination. |
-
-HR partners with department leaders on team capacity and development. People Operations works with Platform & IT on employee onboarding, role changes and offboarding.
+- [Product](./structure/product.mdx)
+- [Technology](./structure/technology.mdx)
+- [Operations](./structure/operations.mdx)
+- [Marketing](./structure/marketing.mdx)
+- [Finance & Accounting](./structure/finance-accounting.mdx)
+- [HR & Administration](./structure/hr-administration.mdx)
## Related pages
diff --git a/docs/organization/structure/finance-accounting.mdx b/docs/organization/structure/finance-accounting.mdx
new file mode 100644
index 0000000..6684854
--- /dev/null
+++ b/docs/organization/structure/finance-accounting.mdx
@@ -0,0 +1,20 @@
+---
+title: Finance & Accounting
+pagination_prev: structure/marketing
+pagination_next: structure/hr-administration
+description: Finance & Accounting purpose, teams and responsibilities in Eldorado’s operating model.
+---
+
+**Purpose:** maintain financial control, support business decisions and keep marketplace money flows dependable.
+
+**Finance & Accounting Squad** delivers the department’s responsibilities across the following workstreams.
+
+| Workstream | Responsibilities |
+| --- | --- |
+| Financial Planning & Analysis | Budgets, forecasts, profitability, management reporting and investment analysis. |
+| Accounting, Tax & Controls | Accounting, financial reporting, tax, audit coordination and internal controls. |
+| Treasury & Payment Operations | Cash management, reconciliation, payout oversight, payment-provider coordination and financial risk. |
+
+The CFO coordinates Finance & Accounting and works with executive leadership on business performance. Finance, Operations and Product share responsibility for effective payment and withdrawal processes, each within its own area of expertise.
+
+[Return to Structure overview](../structure.mdx)
diff --git a/docs/organization/structure/hr-administration.mdx b/docs/organization/structure/hr-administration.mdx
new file mode 100644
index 0000000..d00d82f
--- /dev/null
+++ b/docs/organization/structure/hr-administration.mdx
@@ -0,0 +1,20 @@
+---
+title: HR & Administration
+pagination_prev: structure/finance-accounting
+pagination_next: collaboration
+description: HR & Administration purpose, teams and responsibilities in Eldorado’s operating model.
+---
+
+**Purpose:** help teams attract, develop and retain people and provide an effective working environment.
+
+**People & Administration Squad** delivers the department’s responsibilities across the following workstreams.
+
+| Workstream | Responsibilities |
+| --- | --- |
+| Talent Acquisition | Recruitment, candidate experience, hiring coordination and workforce demand support. |
+| People Operations | Employee onboarding, development, performance processes, policies and employee experience. |
+| Office & Administration | Workplace services, office operations and administrative coordination. |
+
+HR partners with department leaders on team capacity and development. People Operations works with Platform & IT on employee onboarding, role changes and offboarding.
+
+[Return to Structure overview](../structure.mdx)
diff --git a/docs/organization/structure/marketing.mdx b/docs/organization/structure/marketing.mdx
new file mode 100644
index 0000000..54f5595
--- /dev/null
+++ b/docs/organization/structure/marketing.mdx
@@ -0,0 +1,23 @@
+---
+title: Marketing
+pagination_prev: structure/operations
+pagination_next: structure/finance-accounting
+description: Marketing purpose, teams and responsibilities in Eldorado’s operating model.
+---
+
+**Purpose:** attract and retain customers, build the Eldorado brand and grow marketplace demand.
+
+**Marketing Squad** delivers the department’s responsibilities across the following workstreams.
+
+| Workstream | Responsibilities |
+| --- | --- |
+| Brand & Community | Brand positioning, campaigns, organic social, community and brand partnerships. |
+| Creative | Campaign concepts, visual assets and performance creative. |
+| SEO | Organic discovery, search visibility and content performance. |
+| PPC & Affiliate | Paid acquisition, affiliate channels and return on marketing investment. |
+| Influencer | Creator relationships, influencer programs and campaign delivery. |
+| CRM | Customer lifecycle communication, retention, reactivation and campaign personalization. |
+
+The CMO coordinates Marketing. The Brand Team Lead owns Brand & Community, with shared support from Creative and the other marketing workstreams.
+
+[Return to Structure overview](../structure.mdx)
diff --git a/docs/organization/structure/operations.mdx b/docs/organization/structure/operations.mdx
new file mode 100644
index 0000000..087edc5
--- /dev/null
+++ b/docs/organization/structure/operations.mdx
@@ -0,0 +1,21 @@
+---
+title: Operations
+pagination_prev: structure/technology
+pagination_next: structure/marketing
+description: Operations purpose, teams and responsibilities in Eldorado’s operating model.
+---
+
+**Purpose:** keep marketplace trading dependable and resolve customer issues fairly and efficiently.
+
+**Operations Squad** delivers the department’s responsibilities across the following workstreams.
+
+| Workstream | Responsibilities |
+| --- | --- |
+| Customer Support | Buyer and seller assistance, knowledge management, self-service and support workflow automation. |
+| Trust & Resolution | Disputes, appeals, refunds, warranties, chargebacks and complex customer cases. |
+| Risk & Fraud | Transaction and account risk, fraud prevention, investigations and operational controls. |
+| Operational Quality | Independent case reviews, quality standards, calibration, service accuracy and improvement tracking across operational teams. |
+
+The COO coordinates Operations. Team leads manage specialists and daily service delivery. Operational Quality reports directly to the COO and reviews quality across teams.
+
+[Return to Structure overview](../structure.mdx)
diff --git a/docs/organization/structure/product.mdx b/docs/organization/structure/product.mdx
new file mode 100644
index 0000000..b6c0716
--- /dev/null
+++ b/docs/organization/structure/product.mdx
@@ -0,0 +1,17 @@
+---
+title: Product
+pagination_prev: structure
+pagination_next: structure/technology
+description: Product purpose, teams and responsibilities in Eldorado’s operating model.
+---
+
+**Purpose:** improve the buyer and seller experience and turn marketplace opportunities into valuable product capabilities.
+
+| Team | Responsibilities |
+| --- | --- |
+| Product Management | Product strategy, roadmaps, priorities and outcome measurement across discovery, categories, orders, seller tools, payments and operational workflows. |
+| Product Design | User research, interaction design, design consistency and accessible buyer and seller experiences. |
+
+Product Management owns what to improve and why. Product Design shapes the experience. Both work with Technology teams while remaining within Product.
+
+[Return to Structure overview](../structure.mdx)
diff --git a/docs/organization/structure/technology.mdx b/docs/organization/structure/technology.mdx
new file mode 100644
index 0000000..83a8579
--- /dev/null
+++ b/docs/organization/structure/technology.mdx
@@ -0,0 +1,20 @@
+---
+title: Technology
+pagination_prev: structure/product
+pagination_next: structure/operations
+description: Technology purpose, teams and responsibilities in Eldorado’s operating model.
+---
+
+**Purpose:** build and operate a secure, reliable marketplace and improve the effectiveness of engineering.
+
+| Team | Responsibilities |
+| --- | --- |
+| Product Engineering | Build and maintain marketplace capabilities, including search, orders, seller tools, checkout, wallet and operational tooling. |
+| Platform & IT | Platform services, delivery infrastructure, observability, reliability, performance, internal systems, employee devices and identity administration. |
+| Architecture & Security | Technical standards, system design, security architecture and secure engineering practices. |
+| Quality Engineering | Test strategy, automation, release quality and defect prevention. |
+| Data & AI | Analytics, experimentation, ranking, recommendations, marketplace ML and safe AI-assisted engineering workflows. |
+
+The CTO owns technology direction. The Head of Engineering leads engineering delivery through Group Engineering Managers and Engineering Managers. The AI Architect coordinates AI enablement within Data & AI, working with Architecture & Security and the other Technology teams. These are leadership roles within the five-team structure, not additional teams.
+
+[Return to Structure overview](../structure.mdx)
diff --git a/research/organization/department-migration.json b/research/organization/department-migration.json
new file mode 100644
index 0000000..06f49da
--- /dev/null
+++ b/research/organization/department-migration.json
@@ -0,0 +1,41 @@
+{
+ "sourceCommit": "88a43757762114a506f57ed4b44484306cae1aaa",
+ "departments": [
+ {
+ "label": "Product",
+ "slug": "product",
+ "bodySha256": "b7fd948091dbd7b7c2f51d494a5e83241a53c5d1d9b751267102a6c97ad29bd9",
+ "rows": 2
+ },
+ {
+ "label": "Technology",
+ "slug": "technology",
+ "bodySha256": "a74405d41a58b43e4e8ffbb0e98f835d25d80c6ab2ef9f314925832280c038d3",
+ "rows": 5
+ },
+ {
+ "label": "Operations",
+ "slug": "operations",
+ "bodySha256": "03254f56a3ea8e353a5d9b65c0342954bf65edec59073d20fb1ceaaf31d683c7",
+ "rows": 4
+ },
+ {
+ "label": "Marketing",
+ "slug": "marketing",
+ "bodySha256": "424d7c1d147472ced3b73eb8041048a982ce10330a51246ca35bed0cd150e633",
+ "rows": 6
+ },
+ {
+ "label": "Finance & Accounting",
+ "slug": "finance-accounting",
+ "bodySha256": "ffdacb9930114a6caf25a475bb207dcb58f27c13e08fb04e098ef1e30ea538a9",
+ "rows": 3
+ },
+ {
+ "label": "HR & Administration",
+ "slug": "hr-administration",
+ "bodySha256": "e663ca1c7b7fe83cff70d6e33235591fa082304d201dc4538235cc1a341ffd3c",
+ "rows": 3
+ }
+ ]
+}
diff --git a/scripts/browser/department-pages.cjs b/scripts/browser/department-pages.cjs
new file mode 100644
index 0000000..9a0ac04
--- /dev/null
+++ b/scripts/browser/department-pages.cjs
@@ -0,0 +1,49 @@
+const {chromium}=require('playwright');
+const assert=require('node:assert/strict');
+const fs=require('node:fs');
+(async()=>{
+ const base=process.argv[2]||'http://127.0.0.1:4187';
+ const prefix='/eldorado-v1/documentation/organization/';
+ const departments=JSON.parse(fs.readFileSync('research/organization/department-migration.json')).departments;
+ const ids=['structure',...departments.map(d=>'structure/'+d.slug)];
+ const titles=['Structure',...departments.map(d=>d.label)];
+ const browser=await chromium.launch({headless:true,args:['--no-sandbox'],executablePath:process.env.PLAYWRIGHT_CHROMIUM_EXECUTABLE});
+ const results=[]; fs.mkdirSync('.cache/departments',{recursive:true});
+ try{
+ for(const width of [1440,390]){
+ const page=await browser.newPage({viewport:{width,height:900}}); const errors=[]; page.on('pageerror',e=>errors.push(e.message));
+ for(const [i,id] of ids.entries()){
+ assert.equal((await page.goto(base+prefix+id+'/',{waitUntil:'networkidle'})).status(),200);
+ assert.equal(await page.locator('h1').innerText(),titles[i]);
+ if(i){
+ assert.equal(await page.locator('.breadcrumbs a').filter({hasText:'Structure'}).getAttribute('href'),prefix+'structure/');
+ assert.equal(await page.locator('.pagination-nav__link--prev').getAttribute('href'),prefix+ids[i-1]+'/');
+ await page.getByRole('link',{name:'Return to Structure overview',exact:true}).click();
+ await page.waitForURL(base+prefix+'structure/');
+ await page.locator('article').getByRole('link',{name:titles[i],exact:true}).click();
+ await page.waitForURL(base+prefix+id+'/');
+ }
+ assert.equal(await page.locator('.pagination-nav__link--next').getAttribute('href'),prefix+(ids[i+1]||'collaboration')+'/');
+ assert(!await page.evaluate(()=>document.documentElement.scrollWidth>innerWidth));
+ await page.screenshot({path:`.cache/departments/${width}-${id.replaceAll('/','-')}.png`,fullPage:true});
+ if(width<997)await page.getByRole('button',{name:'Toggle navigation bar'}).click();
+ const menu=page.locator('.theme-doc-sidebar-menu').filter({visible:true});
+ await menu.getByRole('link',{name:'Structure',exact:true}).waitFor({state:'visible'});
+ const category=menu.locator('.theme-doc-sidebar-item-category');
+ await category.getByRole('link',{name:'Product',exact:true}).waitFor({state:'visible'});
+ assert.deepEqual(await category.locator(':scope > ul > li > a').allTextContents(),titles.slice(1));
+ assert.deepEqual(await menu.locator(':scope > li > a').allTextContents(),['Collaboration','SDLC']);
+ const caret=category.locator(':scope > .menu__list-item-collapsible > button');
+ await caret.click(); await category.getByRole('link',{name:'Product',exact:true}).waitFor({state:'hidden'});
+ await caret.click(); await category.getByRole('link',{name:'Product',exact:true}).waitFor({state:'visible'});
+ const next=(i+1)%ids.length;
+ await menu.getByRole('link',{name:titles[next],exact:true}).click(); await page.waitForURL(base+prefix+ids[next]+'/');
+ await page.locator('h1').filter({hasText:titles[next]}).waitFor();
+ results.push({width,id,navigation:true});
+ }
+ assert.deepEqual(errors,[]);await page.close();
+ }
+ fs.writeFileSync('.cache/departments/results.json',JSON.stringify(results,null,2));
+ console.log('PASS: '+results.length+' desktop/mobile department contexts, real sidebar/return/list navigation, breadcrumbs, pagination and overflow');
+ }finally{await browser.close();}
+})().catch(e=>{console.error(e);process.exit(1)});
diff --git a/scripts/department-pages.test.mjs b/scripts/department-pages.test.mjs
new file mode 100644
index 0000000..e4aece9
--- /dev/null
+++ b/scripts/department-pages.test.mjs
@@ -0,0 +1,26 @@
+import {test} from 'node:test';
+import assert from 'node:assert/strict';
+import {readFileSync} from 'node:fs';
+import {createHash} from 'node:crypto';
+const read=p=>readFileSync(p,'utf8');
+const slugs=['product','technology','operations','marketing','finance-accounting','hr-administration'];
+test('all six department bodies are preserved exactly and absent from overview',()=>{
+ const manifest=JSON.parse(read('research/organization/department-migration.json'));
+ assert.deepEqual(manifest.departments.map(d=>d.slug),slugs);
+ const overview=read('docs/organization/structure.mdx');
+ for(const d of manifest.departments){
+ const page=read(`docs/organization/structure/${d.slug}.mdx`);
+ const body=page.replace(/^---\n[\s\S]*?\n---\n/, '').split('[Return to Structure overview]')[0].trim();
+ assert.equal(createHash('sha256').update(body).digest('hex'),d.bodySha256,d.slug);
+ assert(!overview.includes(body));
+ assert(overview.includes(`./structure/${d.slug}.mdx`));
+ assert(page.includes('(../structure.mdx)'));
+ }
+ assert.deepEqual(manifest.departments.map(d=>d.rows),[2,5,4,6,3,3]);
+});
+test('Structure is a linked category with six direct children and preserved peers',()=>{
+ const sidebar=read('sidebars/organization.ts');
+ assert(sidebar.includes("link: {type: 'doc', id: 'structure'}"));
+ assert.deepEqual([...sidebar.matchAll(/'structure\/([^']+)'/g)].map(m=>m[1]),slugs);
+ assert(sidebar.includes("'collaboration', 'sdlc'"));
+});
diff --git a/scripts/portal.test.mjs b/scripts/portal.test.mjs
index 111b01c..5869cfd 100644
--- a/scripts/portal.test.mjs
+++ b/scripts/portal.test.mjs
@@ -43,7 +43,7 @@ test('three independent section menus and Structure first', () => {
for (const section of ['Organization', 'Strategy', 'Contribution']) assert(config.includes(`label: '${section}'`));
assert(!config.includes("label: 'Documentation'"));
assert(!config.includes("label: 'Maintainer guide'"));
- assert(read('sidebars/organization.ts').includes("organizationSidebar: ['structure', 'collaboration', 'sdlc']"));
+ assert(read('sidebars/organization.ts').includes("link: {type: 'doc', id: 'structure'}"));
for (const section of ['organization','strategy','contribution']) assert(config.includes(`id: '${section}'`));
});
test('Archify is pinned, licensed and rebuilt, not a remote embed', () => {
@@ -83,7 +83,7 @@ test('Product owns two teams and Technology owns five separate teams', () => {
for (const [dept, count, heading, next] of [['product',2,'Product','Technology'],['technology',5,'Technology','Operations']]) {
const teams = spec.components.filter(n => n.id.startsWith(`${dept}-team-`));
assert.equal(teams.length, count);
- const section = page.split(`### ${heading}\n`)[1].split(`### ${next}\n`)[0];
+ const section = read(`docs/organization/structure/${dept}.mdx`);
const rows = section.split('\n').filter(l => l.startsWith('| ')).slice(2);
assert.equal(rows.length, count);
for (const team of teams) {
@@ -112,7 +112,7 @@ test('departments share one row and each has delivery teams below it', () => {
assert.equal(edge.fromSide, 'bottom');
assert.equal(spec.connections.find(e => e.from === 'management' && e.to === id).toSide, 'top');
assert.deepEqual(spec.connections.filter(e => e.to === team.id).map(e => e.from), [id]);
- assert(page.includes(team.label));
+ assert(read(`docs/organization/structure/${({finance:'finance-accounting',people:'hr-administration'})[id] || id}.mdx`).includes(team.label));
}
}
for (const [i, a] of spec.components.entries()) for (const b of spec.components.slice(i + 1)) {
diff --git a/scripts/strategy.test.mjs b/scripts/strategy.test.mjs
index 2393b0c..b6ad52a 100644
--- a/scripts/strategy.test.mjs
+++ b/scripts/strategy.test.mjs
@@ -15,7 +15,7 @@ test('seven existing strategy pages and two stage overviews preserve canonical r
assert(read('sidebars/strategy.ts').includes(`'${id === 'measurement' ? 'measurement/index' : id}'`));
}
for (const teams of Object.values(model.organization)) for (const name of teams) {
- assert(read('docs/organization/structure.mdx').includes(name));
+ assert(readdirSync('docs/organization/structure').some(file => read(`docs/organization/structure/${file}`).includes(name)));
assert(read('docs/strategy/target-operating-model.mdx').includes(name));
}
});
diff --git a/sidebars/organization.ts b/sidebars/organization.ts
index 82f6909..9f8e51d 100644
--- a/sidebars/organization.ts
+++ b/sidebars/organization.ts
@@ -1,2 +1,7 @@
import type {SidebarsConfig} from '@docusaurus/plugin-content-docs';
-export default {organizationSidebar: ['structure', 'collaboration', 'sdlc']} satisfies SidebarsConfig;
+export default {organizationSidebar: [
+ {type: 'category', label: 'Structure', link: {type: 'doc', id: 'structure'},
+ items: ['structure/product', 'structure/technology', 'structure/operations',
+ 'structure/marketing', 'structure/finance-accounting', 'structure/hr-administration']},
+ 'collaboration', 'sdlc',
+]} satisfies SidebarsConfig;