-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathhealth.html
More file actions
288 lines (266 loc) · 17.5 KB
/
health.html
File metadata and controls
288 lines (266 loc) · 17.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Health & Culture | Orange Dev Tracker | Bitcoin Data Labs</title>
<meta name="description"
content="Assess the sustainability of Bitcoin Core development. Track maintainer tenure, corporate vs. independent funding, and global developer activity heatmaps.">
<link rel="canonical" href="https://sorukumar.github.io/orange-dev-tracker/health.html">
<script src="https://cdn.jsdelivr.net/npm/echarts@5.4.3/dist/echarts.min.js"></script>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;600&display=swap" rel="stylesheet">
<link rel="stylesheet" href="https://bitcoindatalabs.org/styles/styles.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css">
<link rel="icon" type="image/png" href="https://bitcoindatalabs.org/favicon.png">
<!-- Open Graph -->
<meta property="og:title" content="Health & Culture | Orange Dev Tracker | Bitcoin Data Labs">
<meta property="og:description" content="Assess the sustainability of Bitcoin Core development.">
<meta property="og:image" content="https://sorukumar.github.io/orange-dev-tracker/assets/og-image.png">
<link rel="stylesheet" href="styles/style.css">
</head>
<body class="has-fixed-header">
<div id="header"></div>
<div class="container">
<!-- Slide: Maintainers -->
<!-- Slide: Maintainers -->
<section class="slide">
<div class="card">
<h3>The Relay Race: Maintainer Legacy</h3>
<p>From Satoshi to the current guard. Each bar represents a maintainer's active tenure.</p>
<div id="chart-maintainers" style="height: 450px;"></div>
</div>
</section>
<!-- Story Section: Corporate Era -->
<section class="story-section">
<div class="card">
<h2>Institutionalization & Independence</h2>
<p class="narrative">Bitcoin development has shifted from a weekend hobby for cypherpunks to a
professionalized workforce. Who is funding the code?</p>
<div style="display: flex; gap: 30px; flex-wrap: wrap; margin-top: 20px;">
<!-- Chart 1: Contributor Sponsorship (Commits over time) -->
<div style="flex: 2; min-width: 450px;">
<h4 style="margin-bottom: 10px; color: #4A5568; font-size: 14px;">
<i class="fas fa-users" style="margin-right: 8px; opacity: 0.7;"></i>
The Shift to Sponsored Development <span class="partial-year-badge">2026 Partial</span>
</h4>
<p style="font-size: 12px; color: #718096; margin-bottom: 15px;">
% of commits from sponsored vs independent developers over time.
</p>
<div id="chart-corporate" style="height: 350px;"></div>
</div>
<!-- Chart 2: Maintainer Independence (Pie/Bar) -->
<div style="flex: 1; min-width: 300px;">
<div
style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 10px;">
<h4 style="margin-bottom: 0; color: #4A5568; font-size: 14px;">
<i class="fas fa-shield-alt" style="margin-right: 8px; opacity: 0.7;"></i>
Funding the Gatekeepers
</h4>
<div class="toggle-group"
style="display: flex; background: #EDF2F7; padding: 2px; border-radius: 6px; font-size: 10px; font-weight: 600;">
<button id="btn-maintainer-active" class="active"
style="padding: 4px 8px; border: none; background: #fff; border-radius: 4px; cursor: pointer; box-shadow: 0 1px 2px rgba(0,0,0,0.05);">Active</button>
<button id="btn-maintainer-all"
style="padding: 4px 8px; border: none; background: transparent; border-radius: 4px; cursor: pointer; color: #718096;">All-Time</button>
</div>
</div>
<p style="font-size: 12px; color: #718096; margin-bottom: 15px;">
Distribution of maintainers by sponsoring entity.
</p>
<div id="chart-maintainer-independence" style="height: 350px;"></div>
</div>
</div>
</div>
</section>
<!-- The Global Heartbeat -->
<section id="heartbeat" class="story-section">
<div class="card">
<h2>The Global Heartbeat</h2>
<p class="narrative">Bitcoin never sleeps. What began as a weekend project for a handful of cypherpunks
has evolved into a global 24/7 industrial-grade operation.</p>
<div style="display:flex; gap:30px; height: 450px; flex-wrap: wrap; margin-top: 20px;">
<!-- Heatmap: The 24/7 Proof -->
<div style="flex: 2; min-width: 450px; display: flex; flex-direction: column;">
<h4 style="margin-bottom: 15px; color: #4A5568; font-size: 14px;">
<i class="fas fa-clock" style="margin-right: 8px; opacity: 0.7;"></i>
Hourly Activity by Year (UTC)
</h4>
<div id="chart-heatmap" style="flex: 1; min-width: 400px;"></div>
</div>
<!-- Vital Signs Panel: Why it matters -->
<div style="flex: 1; min-width: 280px;">
<div
style="background: #F7FAFC; padding: 25px; border-radius: 16px; border: 1px solid #E2E8F0; height: 100%; display: flex; flex-direction: column; justify-content: center;">
<h4
style="margin-top: 0; color: var(--color-primary); font-size: 1.1rem; margin-bottom: 15px;">
The Sun Never Sets</h4>
<div style="margin-bottom: 25px;">
<div
style="display: flex; justify-content: space-between; border-bottom: 1px dashed #CBD5E0; padding-bottom: 8px; margin-bottom: 12px;">
<span style="font-size: 13px; color: #4A5568;">Hourly Coverage</span>
<span style="font-size: 13px; font-weight: 700; color: var(--color-success);">24 /
24 hrs</span>
</div>
<p style="font-size: 13px; line-height: 1.5; color: #718096; margin: 0;">
The "follow-the-sun" model: When US devs log off, Europe and Asia Pacific maintain
the momentum. Review activity never hits zero.
</p>
</div>
<div style="margin-bottom: 25px;">
<div
style="display: flex; justify-content: space-between; border-bottom: 1px dashed #CBD5E0; padding-bottom: 8px; margin-bottom: 12px;">
<span style="font-size: 13px; color: #4A5568;">Vested Interests</span>
<span style="font-size: 13px; font-weight: 700; color: #E8916B;">9-to-5 Shift</span>
</div>
<p style="font-size: 13px; line-height: 1.5; color: #718096; margin: 0;">
Weekend coding has plummeted from 40% (2009) to ~8% today. Bitcoin is no longer a
hobby; it is a professional vocation.
</p>
</div>
<div>
<h5
style="margin: 0 0 10px 0; font-size: 11px; text-transform: uppercase; letter-spacing: 1px; color: #A0AEC0;">
Key Hubs</h5>
<div style="display: flex; flex-wrap: wrap; gap: 8px;">
<span
style="background: #EDF2F7; padding: 4px 10px; border-radius: 12px; font-size: 11px; color: #4A5568; font-weight: 600;">San
Francisco (UTC-8)</span>
<span
style="background: #EDF2F7; padding: 4px 10px; border-radius: 12px; font-size: 11px; color: #4A5568; font-weight: 600;">London
(UTC+0)</span>
<span
style="background: #EDF2F7; padding: 4px 10px; border-radius: 12px; font-size: 11px; color: #4A5568; font-weight: 600;">Berlin
(UTC+1)</span>
<span
style="background: #EDF2F7; padding: 4px 10px; border-radius: 12px; font-size: 11px; color: #4A5568; font-weight: 600;">Sydney
(UTC+10)</span>
</div>
</div>
</div>
</div>
</div>
<!-- Weekend Ratio: The Professionalization Proof -->
<div style="margin-top: 40px; padding-top: 30px; border-top: 1px solid #EDF2F7;">
<h4 style="margin-bottom: 15px; color: #4A5568; font-size: 14px;">
<i class="fas fa-briefcase" style="margin-right: 8px; opacity: 0.7;"></i>
The Death of the Hobbyist Era: Weekend Coding Ratio
</h4>
<div id="chart-weekend" style="height: 180px;"></div>
</div>
</div>
</section>
<!-- Regional Evolution Section -->
<section id="regional-evolution" class="story-section">
<div class="card">
<h2>Global Contributor Evolution</h2>
<p class="narrative">Bitcoin's recruitment is shifting geographical gears. Over the last decade, we've
moved from a
predominantly North American and European base to a truly global professionalized workforce.</p>
<div style="display: flex; gap: 30px; flex-wrap: wrap; margin-top: 20px;">
<div style="flex: 2; min-width: 450px;">
<h4 style="margin-bottom: 10px; color: #4A5568; font-size: 14px;">
<i class="fas fa-chart-area" style="margin-right: 8px; opacity: 0.7;"></i>
Recruitment Velocity by Region <span class="partial-year-badge">2026 Partial</span>
</h4>
<div id="chart-regional-evolution" style="height: 400px;"></div>
</div>
<div
style="flex: 1; min-width: 300px; display: flex; flex-direction: column; justify-content: center;">
<div
style="background: var(--bg-card); padding: 25px; border-radius: 16px; border: 1px solid var(--border-color); box-shadow: 0 4px 6px -1px rgba(0,0,0,0.05);">
<h4 style="margin-top: 0; color: var(--color-primary); font-size: 1.1rem;">The Multi-Polar
Workforce</h4>
<p style="font-size: 14px; line-height: 1.6; color: var(--color-text-secondary);">
While "Western Hubs" remain the primary recruitment engine, the **geopolitical
footprint** of Bitcoin's code is expanding.
</p>
<p
style="font-size: 14px; line-height: 1.6; color: var(--color-text-secondary); margin-top: 10px;">
We are seeing a notable surge in **Asia Pacific** participation, while regions like
**Africa** have established a consistent yearly footprint for the first time.
</p>
<p
style="font-size: 11px; color: var(--color-text-light); margin-top: 15px; font-style: italic; opacity: 0.8;">
Note: "Undisclosed" data (~65% of contributors) reflects the project's cypherpunk roots
and the cultural value of pseudonymity.
</p>
<div
style="margin-top: 25px; padding-top: 20px; border-top: 1px dashed var(--border-color);">
<div style="display: flex; justify-content: space-between; margin-bottom: 10px;">
<span style="font-size: 13px; color: var(--color-text-secondary);">Growth Hub</span>
<span style="font-size: 13px; font-weight: 600;">Asia Pacific</span>
</div>
<div style="display: flex; justify-content: space-between;">
<span style="font-size: 13px; color: var(--color-text-secondary);">Recruitment
Velocity</span>
<span
style="font-size: 13px; font-weight: 600; color: var(--color-success);">Expanding
+2x YoY</span>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
<!-- Advanced Human Metrics: Retention -->
<section class="story-section">
<div class="card">
<div style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 20px;">
<h3 style="margin: 0;">Retention</h3>
<div class="toggle-group"
style="display: flex; background: #EDF2F7; padding: 2px; border-radius: 6px; font-size: 11px; font-weight: 600;">
<button id="btn-retention-workforce" class="active"
style="padding: 5px 12px; border: none; background: #fff; border-radius: 4px; cursor: pointer; box-shadow: 0 1px 2px rgba(0,0,0,0.05);">
Workforce Stability
</button>
<button id="btn-retention-loyalty"
style="padding: 5px 12px; border: none; background: transparent; border-radius: 4px; cursor: pointer; color: #718096;">
New Joiner Loyalty
</button>
</div>
</div>
<div id="retention-desc-workforce">
<p class="narrative"><strong>Workforce Stability:</strong> Tracks the stability of the active
project team. It focuses on <b>"Regulars"</b> (contributors with 3+ commits in a given year),
regardless of when they first joined, and shows how many remain active in subsequent years. This
measures <b>system continuity</b>.</p>
</div>
<div id="retention-desc-loyalty" style="display: none;">
<p class="narrative"><strong>New Joiner Loyalty:</strong> Tracks the survival of arrival cohorts. It
specifically filters for new developers who joined in that year AND demonstrated immediate
commitment (3+ commits in their first year). This measures <b>onboarding health</b> by excluding
casual one-time contributors.</p>
</div>
<div id="chart-retention" style="height: 500px; width: 100%;"></div>
</div>
</section>
</div>
<div id="footer"></div>
<script src="https://bitcoindatalabs.org/components/app-components.js"></script>
<script src="js/utils.js"></script>
<script src="js/theme.js"></script>
<script src="js/charts-dashboard.js"></script>
<script src="js/charts-health.js"></script>
<script src="js/charts-advanced.js"></script>
<script src="js/app.js?v=3"></script>
<script>
document.addEventListener('DOMContentLoaded', () => {
BitcoinLabsApp.init({
isApp: true,
appName: 'orange-dev-tracker',
appHomeUrl: 'index.html',
navLinks: [
{ name: 'Dashboard', url: 'index.html' },
{ name: 'The Story', url: 'story.html' },
{ name: 'Contributors', url: 'contributors.html' },
{ name: 'Codebase', url: 'codebase.html' },
{ name: 'Engineering', url: 'engineering.html' },
{ name: 'Health & Culture', url: 'health.html' },
{ name: 'Methodology', url: 'methodology.html' }
]
});
});
</script>
</body>
</html>