Compare commits

..
Author SHA1 Message Date
jarvis-at-skic d760c14dab docs: split organization pages and simplify diagram controls
Build and publish Eldorado documentation / build (pull_request) Successful in 33s
2026-10-04 10:22:49 +00:00
jarvis-at-skic db427f99da Merge pull request 'docs: refine organization connector entry and squad alignment' (#11) from docs/refine-organization-connectors into main
Build and publish Eldorado documentation / build (push) Successful in 32s
2026-10-04 02:29:10 -07:00
jarvis-at-skic 033d9bf8fd docs: refine organization connector entry and squad alignment
Build and publish Eldorado documentation / build (pull_request) Successful in 30s
2026-10-04 09:28:34 +00:00
jarvis-at-skic 353a04588c Merge pull request 'docs: align departments and add departmental squads' (#10) from docs/align-departments-add-squads into main
Build and publish Eldorado documentation / build (push) Successful in 33s
2026-10-04 01:51:06 -07:00
jarvis-at-skic 01e2b4df39 docs: align departments and add departmental squads
Build and publish Eldorado documentation / build (pull_request) Successful in 31s
2026-10-04 08:50:28 +00:00
jarvis-at-skic 5bc1263be0 Merge pull request 'docs: separate Product and Technology teams' (#9) from docs/separate-product-technology-teams into main
Build and publish Eldorado documentation / build (push) Successful in 31s
2026-10-02 23:42:00 -07:00
jarvis-at-skic ecc234234e docs: separate two Product and five Technology teams
Build and publish Eldorado documentation / build (pull_request) Successful in 32s
2026-10-03 06:41:10 +00:00
jarvis-at-skic 59b4075113 Merge pull request 'docs: shared Product and Technology squads' (#8) from docs/product-technology-squads into main
Build and publish Eldorado documentation / build (push) Successful in 30s
2026-10-02 10:19:50 -07:00
12 changed files with 382 additions and 236 deletions

No files matched your search

@@ -77,7 +77,7 @@
"id": "engineers",
"type": "frontend",
"label": "Software engineers",
"sublabel": "Product Engineering teams",
"sublabel": "Product Engineering team",
"pos": [
1480,
40
@@ -220,10 +220,10 @@
},
{
"dot": "amber",
"title": "Cross-functional execution",
"title": "Interdepartmental collaboration",
"items": [
"Product Owners, Designers and Tech Leads align on product outcomes.",
"AI Enablement works across engineering teams."
"Data & AI enables AI adoption across Technology."
]
}
]
+222 -153
View File
@@ -23,7 +23,7 @@
"label": "Management",
"sublabel": "CEO / COO",
"pos": [
680,
820,
40
],
"size": [
@@ -37,11 +37,11 @@
"label": "Product",
"sublabel": "Experience and product outcomes",
"pos": [
600,
40,
280
],
"size": [
240,
280,
80
]
},
@@ -51,11 +51,11 @@
"label": "Technology",
"sublabel": "Engineering and platform",
"pos": [
880,
360,
280
],
"size": [
240,
280,
80
]
},
@@ -65,11 +65,11 @@
"label": "Operations",
"sublabel": "Service, resolution and trust",
"pos": [
40,
680,
280
],
"size": [
240,
280,
80
]
},
@@ -79,11 +79,11 @@
"label": "Marketing",
"sublabel": "Brand and customer growth",
"pos": [
320,
1000,
280
],
"size": [
240,
280,
80
]
},
@@ -93,11 +93,11 @@
"label": "Finance & Accounting",
"sublabel": "Financial performance and controls",
"pos": [
1160,
1320,
280
],
"size": [
240,
280,
80
]
},
@@ -107,123 +107,165 @@
"label": "HR & Administration",
"sublabel": "People and workplace",
"pos": [
1440,
1640,
280
],
"size": [
240,
80
]
},
{
"id": "shared-delivery",
"type": "frontend",
"label": "Product & Technology Squads",
"sublabel": "Up to seven cross-functional squads",
"pos": [
660,
520
],
"size": [
360,
80
]
},
{
"id": "squad-discovery",
"type": "frontend",
"label": "Discovery & Categories",
"sublabel": "Browse, search and conversion",
"pos": [
40,
760
],
"size": [
200,
80
]
},
{
"id": "squad-orders",
"type": "frontend",
"label": "Orders & Delivery",
"sublabel": "Purchase and post-purchase",
"pos": [
280,
760
],
"size": [
200,
80
]
},
{
"id": "squad-seller",
"id": "product-team-1",
"type": "frontend",
"label": "Seller Platform",
"sublabel": "Seller tools and integrations",
"label": "Product Management",
"sublabel": "Strategy, priorities and outcomes",
"pos": [
520,
760
100,
480
],
"size": [
200,
220,
80
]
},
{
"id": "squad-payments",
"id": "product-team-2",
"type": "frontend",
"label": "Payments & Wallet",
"sublabel": "Checkout, balances and payouts",
"label": "Product Design",
"sublabel": "Research and experience design",
"pos": [
760,
760
100,
620
],
"size": [
200,
220,
80
]
},
{
"id": "squad-trust",
"id": "technology-team-1",
"type": "frontend",
"label": "Trust & Safety",
"sublabel": "Risk and resolution tooling",
"label": "Product Engineering",
"sublabel": "Marketplace software delivery",
"pos": [
1000,
760
420,
480
],
"size": [
200,
220,
80
]
},
{
"id": "squad-data",
"id": "technology-team-2",
"type": "frontend",
"label": "Data & Intelligence",
"sublabel": "Ranking, analytics and ML",
"label": "Platform & IT",
"sublabel": "Reliability and internal systems",
"pos": [
1240,
760
420,
620
],
"size": [
200,
220,
80
]
},
{
"id": "squad-platform",
"id": "technology-team-3",
"type": "frontend",
"label": "Platform & AI",
"sublabel": "Reliability and engineering AI",
"label": "Architecture & Security",
"sublabel": "Technical standards and protection",
"pos": [
1480,
420,
760
],
"size": [
200,
220,
80
]
},
{
"id": "technology-team-4",
"type": "frontend",
"label": "Quality Engineering",
"sublabel": "Testing and release quality",
"pos": [
420,
900
],
"size": [
220,
80
]
},
{
"id": "technology-team-5",
"type": "frontend",
"label": "Data & AI",
"sublabel": "Analytics, ML and AI enablement",
"pos": [
420,
1040
],
"size": [
220,
80
]
},
{
"id": "operations-team-1",
"type": "frontend",
"label": "Operations Squad",
"sublabel": "Service, resolution, risk and quality",
"pos": [
740,
480
],
"size": [
220,
80
]
},
{
"id": "marketing-team-1",
"type": "frontend",
"label": "Marketing Squad",
"sublabel": "Brand, acquisition and retention",
"pos": [
1060,
480
],
"size": [
220,
80
]
},
{
"id": "finance-team-1",
"type": "frontend",
"label": "Finance & Accounting Squad",
"sublabel": "Planning, controls and payments",
"pos": [
1380,
480
],
"size": [
220,
80
]
},
{
"id": "people-team-1",
"type": "frontend",
"label": "People & Administration Squad",
"sublabel": "Talent, people and workplace",
"pos": [
1700,
480
],
"size": [
220,
80
]
}
@@ -233,140 +275,164 @@
"id": "management-product",
"from": "management",
"to": "product",
"label": "Coordinates",
"variant": "default"
"variant": "default",
"fromSide": "bottom",
"toSide": "top"
},
{
"id": "management-technology",
"from": "management",
"to": "technology",
"label": "Coordinates",
"variant": "default"
"variant": "default",
"fromSide": "bottom",
"toSide": "top"
},
{
"id": "management-operations",
"from": "management",
"to": "operations",
"label": "Coordinates",
"variant": "default"
"variant": "default",
"fromSide": "bottom",
"toSide": "top"
},
{
"id": "management-marketing",
"from": "management",
"to": "marketing",
"label": "Coordinates",
"variant": "default"
"variant": "default",
"fromSide": "bottom",
"toSide": "top"
},
{
"id": "management-finance",
"from": "management",
"to": "finance",
"label": "Coordinates",
"variant": "default"
"variant": "default",
"fromSide": "bottom",
"toSide": "top"
},
{
"id": "management-people",
"from": "management",
"to": "people",
"label": "Coordinates",
"variant": "default"
"variant": "default",
"fromSide": "bottom",
"toSide": "top"
},
{
"id": "product-squads",
"id": "product-1",
"from": "product",
"to": "shared-delivery",
"label": "Shared delivery",
"variant": "default"
"to": "product-team-1",
"variant": "default",
"fromSide": "bottom",
"toSide": "left"
},
{
"id": "technology-squads",
"id": "product-2",
"from": "product",
"to": "product-team-2",
"variant": "default",
"fromSide": "bottom",
"toSide": "left"
},
{
"id": "technology-1",
"from": "technology",
"to": "shared-delivery",
"label": "Shared delivery",
"variant": "default"
"to": "technology-team-1",
"variant": "default",
"fromSide": "bottom",
"toSide": "left"
},
{
"id": "delivery-discovery",
"from": "shared-delivery",
"to": "squad-discovery",
"label": "Squad",
"variant": "default"
"id": "technology-2",
"from": "technology",
"to": "technology-team-2",
"variant": "default",
"fromSide": "bottom",
"toSide": "left"
},
{
"id": "delivery-orders",
"from": "shared-delivery",
"to": "squad-orders",
"label": "Squad",
"variant": "default"
"id": "technology-3",
"from": "technology",
"to": "technology-team-3",
"variant": "default",
"fromSide": "bottom",
"toSide": "left"
},
{
"id": "delivery-seller",
"from": "shared-delivery",
"to": "squad-seller",
"label": "Squad",
"variant": "default"
"id": "technology-4",
"from": "technology",
"to": "technology-team-4",
"variant": "default",
"fromSide": "bottom",
"toSide": "left"
},
{
"id": "delivery-payments",
"from": "shared-delivery",
"to": "squad-payments",
"label": "Squad",
"variant": "default"
"id": "technology-5",
"from": "technology",
"to": "technology-team-5",
"variant": "default",
"fromSide": "bottom",
"toSide": "left"
},
{
"id": "delivery-trust",
"from": "shared-delivery",
"to": "squad-trust",
"label": "Squad",
"variant": "default"
"id": "operations-1",
"from": "operations",
"to": "operations-team-1",
"variant": "default",
"fromSide": "bottom",
"toSide": "left"
},
{
"id": "delivery-data",
"from": "shared-delivery",
"to": "squad-data",
"label": "Squad",
"variant": "default"
"id": "marketing-1",
"from": "marketing",
"to": "marketing-team-1",
"variant": "default",
"fromSide": "bottom",
"toSide": "left"
},
{
"id": "delivery-platform",
"from": "shared-delivery",
"to": "squad-platform",
"label": "Squad",
"variant": "default"
"id": "finance-1",
"from": "finance",
"to": "finance-team-1",
"variant": "default",
"fromSide": "bottom",
"toSide": "left"
},
{
"id": "people-1",
"from": "people",
"to": "people-team-1",
"variant": "default",
"fromSide": "bottom",
"toSide": "left"
}
],
"cards": [
{
"dot": "cyan",
"title": "Shared delivery squads",
"items": [
"Product owns priorities and outcomes; Technology owns engineering capability.",
"Each squad combines product ownership, engineering, design, QA and data skills.",
"Functional teams support squads; they are not extra delivery squads."
]
},
{
"dot": "cyan",
"title": "Product",
"items": [
"Orders; Categories",
"Sellers & Operations",
"Data & Intelligence; Product Design"
"Product Management",
"Product Design"
]
},
{
"dot": "amber",
"title": "Technology",
"items": [
"Product Engineering; Quality Engineering",
"Platform & Reliability; Architecture & Security",
"AI Enablement; Internal IT"
"Product Engineering",
"Platform & IT",
"Architecture & Security",
"Quality Engineering",
"Data & AI"
]
},
{
"dot": "cyan",
"title": "Operations",
"items": [
"Operations Squad",
"Customer Support; Trust & Resolution",
"Risk & Fraud",
"Operational Quality"
@@ -376,6 +442,7 @@
"dot": "amber",
"title": "Marketing",
"items": [
"Marketing Squad",
"Brand & Community; Creative; SEO",
"PPC & Affiliate; Influencer",
"CRM"
@@ -385,6 +452,7 @@
"dot": "cyan",
"title": "Finance & Accounting",
"items": [
"Finance & Accounting Squad",
"Financial Planning & Analysis",
"Accounting, Tax & Controls",
"Treasury & Payment Operations"
@@ -394,6 +462,7 @@
"dot": "amber",
"title": "HR & Administration",
"items": [
"People & Administration Squad",
"Talent Acquisition",
"People Operations",
"Office & Administration"
+2 -2
View File
@@ -21,7 +21,7 @@ The standalone viewer provides pan/zoom, node inspection, search/focus, relation
Create `diagrams/<name>.<type>.json` using the matching schema and authoring guidance in `vendor/archify/schemas/` and `vendor/archify/references/`. Use stable IDs, explicit relationships, and honest evidence labels. Do not include private information merely because the source repository is private: Pages access is a separate platform policy.
Set `meta.output` to `static/diagrams/<name>/index.html`. The build validates the typed source with the upstream showcase profile, renders locally, checks the artifact, and publishes the standalone HTML and a downloadable JSON source.
Set `meta.output` to `static/diagrams/<name>/index.html`. The build validates the typed source with the upstream showcase profile, renders locally, checks the artifact, and publishes the standalone HTML. Editable JSON stays in the repository; the portal does not publish source-download files.
```sh
pnpm diagrams:build
@@ -37,7 +37,7 @@ import ArchifyDiagram from '@site/src/components/ArchifyDiagram';
<ArchifyDiagram name="organization-structure" title="Eldorado organization structure" />
```
Supply a text alternative below each diagram. The wrapper uses a local, base-path-aware iframe with a descriptive title, scripts and downloads enabled, and no same-origin or parent-navigation permissions. The Open full viewer button expands the diagram in a full-screen modal on the current page, with the same iframe sandbox. Close it with the Close button or Escape; focus returns to the opener. It does not open a new tab. The separate standalone HTML asset remains directly addressable and is not itself iframe-sandboxed, so publish only reviewed, trusted diagrams. Generated output is ignored by Git and rebuilt in CI.
Supply a text alternative below each diagram. The wrapper uses a local, base-path-aware iframe with a descriptive title, scripts and downloads enabled, and no same-origin or parent-navigation permissions. The top-right expand icon expands the diagram in a full-screen modal on the current page, with the same iframe sandbox. Close it with the Close button or Escape; focus returns to the opener. It does not open a new tab. The separate standalone HTML asset remains directly addressable and is not itself iframe-sandboxed, so publish only reviewed, trusted diagrams. Generated output is ignored by Git and rebuilt in CI.
## Integration boundaries
+23
View File
@@ -0,0 +1,23 @@
---
title: Collaboration
description: How Eldorado departments combine their responsibilities to deliver shared business outcomes.
---
Departments collaborate around shared outcomes while retaining their own team ownership and accountability. See [Structure](./structure.mdx) for department and squad responsibilities.
## How the departments work together
| Business outcome | Collaboration |
| --- | --- |
| Better buyer experience | Product defines improvements; Technology delivers them; Operations brings customer feedback; Data & AI measures the result. |
| Stronger seller experience | Product and Technology develop seller tools; Operations supports sellers; Finance manages financial processes. |
| Safe and trustworthy trading | Risk & Fraud, Trust & Resolution, Architecture & Security, and Finance coordinate controls and incident responses. |
| Sustainable growth | Marketing develops demand; Product improves conversion and retention; Finance measures profitability. |
| AI-powered execution | Data & AI supports engineering and develops marketplace intelligence; Operations improves service and quality workflows. |
Department leaders remain accountable for outcomes, controls and service quality as AI becomes part of everyday work.
## Related pages
- [Structure](./structure.mdx) — departments, squads and responsibilities.
- [SDLC — Software Delivery Life Cycle](./sdlc.mdx) — leadership and delivery responsibilities.
+27
View File
@@ -0,0 +1,27 @@
---
title: SDLC — Software Delivery Life Cycle
sidebar_label: SDLC
description: Leadership, reporting lines and team responsibilities supporting software delivery at Eldorado.
---
import ArchifyDiagram from '@site/src/components/ArchifyDiagram';
Software delivery brings together Product and Technology, supported by the departments responsible for marketplace operations and growth. This page describes the leadership and delivery responsibilities that support that work.
## Leadership and delivery structure
<ArchifyDiagram name="organization-reporting" compact title="Eldorado leadership and delivery structure" />
The diagram shows management responsibility from leader to role or team:
- **CTO → Head of Engineering → Group Engineering Managers → Engineering Managers → the Product Engineering team.**
- **CTO → AI Architect**, coordinating engineering AI enablement.
- **COO → Operational Quality**, providing independent quality oversight.
- **CMO → Brand Team Lead**, leading Brand & Community.
Product and Technology retain separate team ownership and reporting lines. Their teams coordinate priorities, design, engineering, quality and data work to deliver business outcomes.
## Related pages
- [Structure](./structure.mdx) — departments, squads and responsibilities.
- [Collaboration](./collaboration.mdx) — how departments coordinate around business outcomes.
+27 -57
View File
@@ -22,58 +22,42 @@ Functional leaders translate company priorities into departmental plans. Team le
**Management coordinates the six departments.** Each department has a clear business responsibility and a set of teams that deliver it.
## Product & Technology squads
Product and Technology share a delivery structure of **up to seven cross-functional squads**. Product sets priorities and business outcomes; Technology provides engineering leadership, technical standards and delivery capability.
| Squad | Scope |
| --- | --- |
| **Discovery & Categories** | Browsing, search, category journeys and marketplace conversion. |
| **Orders & Delivery** | Purchase and post-purchase experience, order tracking, delivery and customer feedback. |
| **Seller Platform** | Seller Portal, onboarding, integrations and seller-facing tools. |
| **Payments & Wallet** | Checkout, balances, withdrawals and payout integrations, working with Finance. |
| **Trust & Safety** | Risk controls, dispute tooling and safety workflows, working with Operations. |
| **Data & Intelligence** | Analytics, experimentation, offer ranking, recommendations and marketplace ML. |
| **Platform & AI** | Shared platform, reliability, delivery infrastructure and engineering AI tools. |
Each squad brings together product ownership, engineering, design, quality and data expertise according to its scope. Departmental teams and specialist functions below support these squads; they are not additional delivery squads. Operations retains ownership of customer cases and risk decisions, while Finance retains ownership of financial controls.
## Departments and teams
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 |
| --- | --- |
| Orders | Purchase and post-purchase journeys, order status, delivery experience, dispute flows, feedback and loyalty. |
| Categories | Category experiences, including Boosting and Currency, discovery, conversion and category-specific user journeys. |
| Sellers & Operations | Seller Portal, seller integrations, onboarding and verification, balances and withdrawals, invoicing and operational tooling. |
| Data & Intelligence | Product analytics, experimentation, offer ranking, recommendations and decision support. |
| Product Design | User research, interaction design, design consistency and accessible buyer and seller experiences across product teams. |
| 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 Owners, Designers and Tech Leads work together on each product area. Product owns priorities and outcomes; Technology owns engineering execution and technical quality.
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 / function | Responsibilities |
| Team | Responsibilities |
| --- | --- |
| Product Engineering | Develop and maintain marketplace capabilities in cross-functional product teams. |
| Platform & Reliability | Shared platform services, delivery infrastructure, observability, availability and performance. |
| Architecture & Security | Technical standards, system design, infrastructure security and secure engineering practices. |
| 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. |
| AI Enablement | AI-assisted engineering workflows, developer tools, adoption, standards and safe use of AI. |
| Internal IT | Identity and access, employee devices, internal systems, software administration and joiner–mover–leaver processes. |
| 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 across engineering, working with Architecture & Security and team leaders.
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.
| Team | Responsibilities |
**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. |
@@ -86,7 +70,9 @@ The COO coordinates Operations. Team leads manage specialists and daily service
**Purpose:** attract and retain customers, build the Eldorado brand and grow marketplace demand.
| Team / workstream | Responsibilities |
**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. |
@@ -101,7 +87,9 @@ The CMO coordinates Marketing. The Brand Team Lead owns Brand & Community, with
**Purpose:** maintain financial control, support business decisions and keep marketplace money flows dependable.
| Team / function | Responsibilities |
**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. |
@@ -113,35 +101,17 @@ The CFO coordinates Finance & Accounting and works with executive leadership on
**Purpose:** help teams attract, develop and retain people and provide an effective working environment.
| Team | Responsibilities |
**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 Internal IT on employee onboarding, role changes and offboarding.
HR partners with department leaders on team capacity and development. People Operations works with Platform & IT on employee onboarding, role changes and offboarding.
## Leadership and delivery structure
## Related pages
<ArchifyDiagram name="organization-reporting" title="Eldorado leadership and delivery structure" />
The diagram shows management responsibility from leader to role or team:
- **CTO → Head of Engineering → Group Engineering Managers → Engineering Managers → Product Engineering teams.**
- **CTO → AI Architect**, coordinating engineering AI enablement.
- **COO → Operational Quality**, providing independent quality oversight.
- **CMO → Brand Team Lead**, leading Brand & Community.
Product teams combine product ownership, design, engineering, quality and data expertise. Functional management develops people and professional standards; cross-functional teams deliver business outcomes.
## How the departments work together
| Business outcome | Collaboration |
| --- | --- |
| Better buyer experience | Product defines improvements; Technology delivers them; Operations brings customer feedback; Data measures the result. |
| Stronger seller experience | Product and Technology develop seller tools; Operations supports sellers; Finance manages financial processes. |
| Safe and trustworthy trading | Risk & Fraud, Trust & Resolution, Architecture & Security, and Finance coordinate controls and incident responses. |
| Sustainable growth | Marketing develops demand; Product improves conversion and retention; Finance measures profitability. |
| AI-powered execution | AI Enablement supports engineering; Data & Intelligence develops marketplace intelligence; Operations improves service and quality workflows. |
Department leaders remain accountable for outcomes, controls and service quality as AI becomes part of everyday work.
- [Collaboration](./collaboration.mdx) — how departments work together on business outcomes.
- [SDLC — Software Delivery Life Cycle](./sdlc.mdx) — leadership and delivery responsibilities.
-1
View File
@@ -24,7 +24,6 @@ for (const file of readdirSync('diagrams').sort()) {
run(['deliver',type,input,output,'--quality','showcase','--json']);
run(['check',output,'--json','--require-provenance']);
renameSync(`static/diagrams/${name}/index.delivery.json`, `.cache/archify/${name}.delivery.json`);
copyFileSync(input,`static/diagrams/${name}.json`);
}
copyFileSync('vendor/archify/LICENSE','static/diagrams/ARCHIFY-LICENSE.txt');
copyFileSync('vendor/archify/THIRD_PARTY_NOTICES.md','static/diagrams/THIRD-PARTY-NOTICES.md');
+64 -8
View File
@@ -20,6 +20,7 @@ test('real build removes stale diagrams, keeps receipts private and rejects coll
writeSpec('old');
let result = build(); assert.equal(result.status,0,result.stderr);
assert(existsSync(join(root,'static/diagrams/old/index.html')));
assert(!existsSync(join(root,'static/diagrams/old.json')));
assert(!readdirSync(join(root,'static/diagrams'),{recursive:true}).some(p=>p.endsWith('.delivery.json')));
unlinkSync(join(root,'diagrams/old.architecture.json'));
writeSpec('new');
@@ -42,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']"));
assert(read('sidebars/organization.ts').includes("organizationSidebar: ['structure', 'collaboration', 'sdlc']"));
for (const section of ['organization','strategy','contribution']) assert(config.includes(`id: '${section}'`));
});
test('Archify is pinned, licensed and rebuilt, not a remote embed', () => {
@@ -58,15 +59,70 @@ test('Archify is pinned, licensed and rebuilt, not a remote embed', () => {
assert(wrapper.includes('showModal()') && wrapper.includes('onClose='));
assert(!wrapper.includes('target="_blank"'));
assert(wrapper.includes('Close full-screen diagram'));
assert(!wrapper.includes('JSON source') && !wrapper.includes('download>'));
assert(!wrapper.includes('Open full viewer'));
assert(wrapper.includes('aria-label={`Expand ${title}`}'));
assert(wrapper.includes('aria-hidden="true"'));
assert(read('src/css/custom.css').includes('justify-content: flex-end'));
});
test('Product and Technology share seven delivery squads', () => {
test('Product owns two teams and Technology owns five separate teams', () => {
const spec = JSON.parse(read('diagrams/organization-structure.architecture.json'));
const squads = spec.components.filter(n => n.id.startsWith('squad-'));
assert.equal(squads.length, 7);
for (const dept of ['product','technology']) assert(spec.connections.some(e => e.from === dept && e.to === 'shared-delivery'));
for (const squad of squads) {
assert(spec.connections.some(e => e.from === 'shared-delivery' && e.to === squad.id));
assert(read('docs/organization/structure.mdx').includes(squad.label));
const page = read('docs/organization/structure.mdx');
assert(!/shared-delivery|squad-/i.test(JSON.stringify(spec)));
assert(!/shared squads|share a delivery structure|cross-functional teams/i.test(page));
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 rows = section.split('\n').filter(l => l.startsWith('| ')).slice(2);
assert.equal(rows.length, count);
for (const team of teams) {
const parents = spec.connections.filter(e => e.to === team.id);
assert.deepEqual(parents.map(e => e.from), [dept]);
assert(rows.some(row => row.startsWith(`| ${team.label} |`)));
}
}
});
test('departments share one row and each has delivery teams below it', () => {
const spec = JSON.parse(read('diagrams/organization-structure.architecture.json'));
const page = read('docs/organization/structure.mdx');
const departments = ['product', 'technology', 'operations', 'marketing', 'finance', 'people'];
const nodes = new Map(spec.components.map(n => [n.id, n]));
assert.equal(new Set(departments.map(id => nodes.get(id).pos[1])).size, 1);
for (const [i, id] of departments.entries()) {
const department = nodes.get(id);
const teams = spec.connections.filter(e => e.from === id).map(e => nodes.get(e.to));
assert.equal(teams.length, i === 0 ? 2 : i === 1 ? 5 : 1);
for (const team of teams) {
assert(team.pos[1] > department.pos[1] + department.size[1]);
assert(team.size[0] < department.size[0]);
assert.equal(team.pos[0] + team.size[0], department.pos[0] + department.size[0]);
const edge = spec.connections.find(e => e.from === id && e.to === team.id);
assert.equal(edge.toSide, 'left');
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));
}
}
for (const [i, a] of spec.components.entries()) for (const b of spec.components.slice(i + 1)) {
assert(!(a.pos[0] < b.pos[0] + b.size[0] && a.pos[0] + a.size[0] > b.pos[0] && a.pos[1] < b.pos[1] + b.size[1] && a.pos[1] + a.size[1] > b.pos[1]), `${a.id} overlaps ${b.id}`);
}
});
test('organization content is split into linked focused pages', () => {
const structure = read('docs/organization/structure.mdx');
const collaboration = read('docs/organization/collaboration.mdx');
const sdlc = read('docs/organization/sdlc.mdx');
assert(!structure.includes('## How the departments work together'));
assert(!structure.includes('## Leadership and delivery structure'));
assert(!structure.includes('name="organization-reporting"'));
assert(collaboration.includes('## How the departments work together'));
for (const outcome of ['Better buyer experience', 'Stronger seller experience', 'Safe and trustworthy trading', 'Sustainable growth', 'AI-powered execution']) assert(collaboration.includes(outcome));
assert(sdlc.includes('title: SDLC — Software Delivery Life Cycle'));
assert(sdlc.includes('name="organization-reporting"'));
for (const role of ['Head of Engineering', 'AI Architect', 'Operational Quality', 'Brand Team Lead']) assert(sdlc.includes(role));
for (const [name, page] of [['structure',structure],['collaboration',collaboration],['sdlc',sdlc]]) {
for (const other of ['structure','collaboration','sdlc'].filter(n => n !== name)) assert(page.includes(`./${other}.mdx`));
}
});
test('organization page presents an operating model, not research notes', () => {
+6 -3
View File
@@ -16,15 +16,18 @@ const workflow = read('.gitea/workflows/pages.yml');
assert(workflow.includes('mountpoint -q'));
assert(workflow.includes("gitea.event_name == 'push' && gitea.ref == 'refs/heads/main'"));
if (process.argv.includes('--build')) {
for (const route of ['index.html','docs/overview/index.html','docs/maintain/index.html','docs/reference/index.html','404.html','organization/structure/index.html','strategy/index.html','contribution/index.html','contribution/diagrams/index.html','diagrams/organization-structure/index.html']) {
for (const route of ['index.html','docs/overview/index.html','docs/maintain/index.html','docs/reference/index.html','404.html','organization/structure/index.html','organization/collaboration/index.html','organization/sdlc/index.html','strategy/index.html','contribution/index.html','contribution/diagrams/index.html','diagrams/organization-structure/index.html']) {
assert(existsSync(join('build',route)), `Missing route: ${route}`);
}
assert(!readdirSync('build/diagrams', {recursive: true}).some(f => f.endsWith('.delivery.json')), 'Private build receipts must not be published');
const diagram = read('build/diagrams/organization-structure/index.html');
assert(diagram.includes('Coordinates') && diagram.includes('node-technology'));
assert(diagram.includes('node-product-team-2') && diagram.includes('node-technology-team-5'));
assert(!diagram.includes('shared-delivery'));
assert(!/A: placement|E: careers|J: advertised/.test(diagram));
assert(!diagram.includes('Example leadership'));
for (const id of ['discovery','orders','seller','payments','trust','data','platform']) assert(diagram.includes(`node-squad-${id}`));
for (const [dept, count] of [['product', 2], ['technology', 5]]) {
for (let i = 1; i <= count; i++) assert(diagram.includes(`node-${dept}-team-${i}`));
}
const reporting = read('build/diagrams/organization-reporting/index.html');
assert(reporting.includes('AI Architect') && reporting.includes('Leads'));
assert(!/A: assumed|J: direct/.test(reporting));
+1 -1
View File
@@ -1,2 +1,2 @@
import type {SidebarsConfig} from '@docusaurus/plugin-content-docs';
export default {organizationSidebar: ['structure']} satisfies SidebarsConfig;
export default {organizationSidebar: ['structure', 'collaboration', 'sdlc']} satisfies SidebarsConfig;
+3 -4
View File
@@ -1,10 +1,9 @@
import React, {useEffect, useId, useRef, useState} from 'react';
import useBaseUrl from '@docusaurus/useBaseUrl';
export default function ArchifyDiagram({name, title}: {name: string; title: string}): React.ReactElement {
export default function ArchifyDiagram({name, title, compact = false}: {name: string; title: string; compact?: boolean}): React.ReactElement {
if (!/^[a-z0-9]+(?:-[a-z0-9]+)*$/.test(name)) throw new Error('Invalid diagram name');
const source = useBaseUrl(`/diagrams/${name}/`);
const json = useBaseUrl(`/diagrams/${name}.json`);
const dialog = useRef<HTMLDialogElement>(null);
const opener = useRef<HTMLButtonElement>(null);
const headingId = useId();
@@ -17,8 +16,8 @@ export default function ArchifyDiagram({name, title}: {name: string; title: stri
return () => {document.body.style.overflow = previousOverflow;};
}, [expanded]);
const close = () => {dialog.current?.close();};
return <section className="archify-panel" aria-label={title}>
<div className="archify-toolbar"><strong>Interactive diagram</strong><div><button ref={opener} type="button" className="archify-expand" onClick={() => setExpanded(true)}>Open full viewer ⛶</button><a href={json} download>JSON source ↓</a></div></div>
return <section className={`archify-panel${compact ? ' archify-panel--compact' : ''}`} aria-label={title}>
<div className="archify-toolbar"><button ref={opener} type="button" className="archify-expand" aria-label={`Expand ${title}`} title="Expand diagram" onClick={() => setExpanded(true)}><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" aria-hidden="true"><path d="M8 3H3v5M16 3h5v5M21 16v5h-5M8 21H3v-5" /></svg></button></div>
<iframe src={source} title={title} sandbox="allow-scripts allow-downloads" loading="lazy" referrerPolicy="no-referrer" />
<dialog ref={dialog} className="archify-modal" aria-labelledby={headingId} onClose={() => {setExpanded(false); opener.current?.focus();}}>
<div className="archify-modal-toolbar"><strong id={headingId}>{title}</strong><button type="button" onClick={close} autoFocus aria-label="Close full-screen diagram">Close ×</button></div>
+4 -4
View File
@@ -97,12 +97,12 @@ a:focus-visible, button:focus-visible {outline: 3px solid #b88719; outline-offse
@media (max-width: 996px) {.navbar {padding: 0 1rem;} .hero-inner {gap: 15px; padding: 55px 25px;} .hero-art {transform: scale(.85);} .start-section {padding: 35px 25px;} .start-card {padding: 20px;}}
@media (max-width: 700px) {.hero-inner {grid-template-columns: 1fr; padding: 45px 24px;} .hero-art {display: none;} .hero-copy h1 {font-size: 3rem;} .start-grid {grid-template-columns: 1fr;} .section-heading {align-items: flex-start;} .foundation-badge {display: none;} .start-section {padding: 32px 20px;} .navbar__title {font-size: 1.45rem;} .navbar__logo {height: 31px;} .navbar input {max-width: 145px;} .button--lg {font-size: .95rem;} .button--primary span {padding-left: 10px;}}
.archify-panel {border: 1px solid var(--line); margin: 1.5rem 0;}
.archify-toolbar {display: flex; justify-content: space-between; flex-wrap: wrap; gap: 12px; padding: 12px 16px; background: var(--surface); font-size: .85rem;}
.archify-toolbar div {display: flex; gap: 20px; flex-wrap: wrap;}
.archify-toolbar {display: flex; justify-content: flex-end; padding: 4px; background: var(--surface);}
.archify-panel iframe {width: 100%; height: 720px; border: 0; display: block; background: #f6f6f6;}
.archify-panel--compact > iframe {height: 500px;}
@media (max-width: 700px) {.archify-panel iframe {height: 650px;}}
.archify-expand {border: 0; padding: 0; background: transparent; color: var(--ifm-link-color); font: inherit; cursor: pointer;}
.archify-expand:hover {text-decoration: underline;}
.archify-expand {display: grid; place-items: center; width: 44px; height: 44px; border: 0; padding: 0; background: transparent; color: var(--ifm-link-color); cursor: pointer;}
.archify-expand:hover {background: var(--ifm-hover-overlay);}
.archify-modal {position: fixed; inset: 0; margin: 0; padding: 0; width: 100vw; height: 100dvh; max-width: none; max-height: none; border: 0; background: var(--surface); color: var(--ifm-color-content);}
.archify-modal[open] {display: flex; flex-direction: column;}
.archify-modal::backdrop {background: #000b;}