From 5c5809d349070aaa71c676a9ca884f60fc5f2ce7 Mon Sep 17 00:00:00 2001 From: Jarvis Jr Hermes Date: Thu, 8 Oct 2026 17:29:09 +0000 Subject: [PATCH] docs: split Structure into six linked department pages --- docs/organization/structure.mdx | 91 ++----------------- .../structure/finance-accounting.mdx | 20 ++++ .../structure/hr-administration.mdx | 20 ++++ docs/organization/structure/marketing.mdx | 23 +++++ docs/organization/structure/operations.mdx | 21 +++++ docs/organization/structure/product.mdx | 17 ++++ docs/organization/structure/technology.mdx | 20 ++++ .../organization/department-migration.json | 41 +++++++++ scripts/browser/department-pages.cjs | 49 ++++++++++ scripts/department-pages.test.mjs | 26 ++++++ scripts/portal.test.mjs | 6 +- scripts/strategy.test.mjs | 2 +- sidebars/organization.ts | 7 +- 13 files changed, 254 insertions(+), 89 deletions(-) create mode 100644 docs/organization/structure/finance-accounting.mdx create mode 100644 docs/organization/structure/hr-administration.mdx create mode 100644 docs/organization/structure/marketing.mdx create mode 100644 docs/organization/structure/operations.mdx create mode 100644 docs/organization/structure/product.mdx create mode 100644 docs/organization/structure/technology.mdx create mode 100644 research/organization/department-migration.json create mode 100644 scripts/browser/department-pages.cjs create mode 100644 scripts/department-pages.test.mjs 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;