Skip to content

Commit c4aaebb

Browse files
authored
feat: DevSeed branding update and contributor network improvements (#28)
## What's Changed ### Branding - Updated color scheme to DevSeed brand (Grenadier orange #CF3F02, Aquamarine blue #2E86AB) - Switched fonts to Roboto (from Atkinson Hyperlegible) ### New CLI Commands - `discover`: Find repos where DevSeed employees contribute - `list-contributors`: Show all configured contributors ### Data Improvements - Separated contributors into categories (devseed vs alumni) - Added 30+ new repos from NASA-IMPACT, MAAP, EOEPCA, WRI, etc. - Removed the central "DevSeed Team" pseudo-node from rendering ### Bug Fixes - Fixed hover state getting stuck outside visualization bounds - Added null safety checks for missing contributors/repos - Improved hover performance by filtering artificial links ### Documentation - Complete README rewrite with workflow instructions - Added inline code documentation
1 parent b1da2b7 commit c4aaebb

File tree

272 files changed

+1239
-496
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

272 files changed

+1239
-496
lines changed

README.md

Lines changed: 104 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,134 @@
1-
# Development Seed contributor network
1+
# Development Seed Contributor Network
22

33
The code behind <https://developmentseed.org/contributor-network>.
44

55
![A splash of the page](./img/site-image.jpg)
66

7-
This visual is derived from the excellent <https://github.com/nbremer/ORCA/tree/main/top-contributor-network>.
7+
This visual is derived from the excellent [ORCA top-contributor-network](https://github.com/nbremer/ORCA/tree/main/top-contributor-network) by Nadieh Bremer.
88

9-
## Rebuilding
9+
## Quick Start
1010

11-
We use [workflow dispatch](https://github.com/developmentseed/contributor-network/actions/workflows/build.yml) to rebuild the source data.
12-
Right now this is manual, but eventually we'd like to set this up on a schedule: <https://github.com/developmentseed/contributor-network/issues/8>.
11+
### Prerequisites
1312

14-
## Development
13+
- [uv](https://docs.astral.sh/uv/getting-started/installation/) for Python package management
14+
- A GitHub personal access token with `public_repo` scope
1515

16-
To view things locally:
16+
### View Locally
1717

1818
```shell
19-
python -m http.server
19+
cd dist
20+
python -m http.server 8000
2021
```
2122

22-
This will open the page on <http://localhost:8000/>.
23+
Then open <http://localhost:8000/>.
24+
25+
## CLI Commands
26+
27+
All commands are run via `uv run contributor-network <command>`.
28+
29+
### `list-contributors`
2330

24-
To check the Python files, get [uv](https://docs.astral.sh/uv/getting-started/installation/), then:
31+
List all configured contributors by category:
2532

2633
```shell
27-
uv sync
28-
uv run ruff check --fix
29-
uv run ruff format
30-
uv run pytest
34+
uv run contributor-network list-contributors
3135
```
3236

33-
To add new repos or contributors, see [constants.py](src/devseed_contributor_network/constants.py)
37+
### `discover`
38+
39+
Find new repositories that DevSeed employees contribute to:
3440

35-
### Rebuilding locally
41+
```shell
42+
export GITHUB_TOKEN="your_token_here"
43+
uv run contributor-network discover --min-contributors 2 --limit 50
44+
```
3645

37-
To build the data locally, set up [.netrc authentication for Github](https://pygithub.readthedocs.io/en/stable/examples/Authentication.html#netrc-authentication).
38-
Then:
46+
This queries GitHub to find repos where multiple DevSeed employees have contributed, which are not yet in the configuration.
47+
48+
### `data`
49+
50+
Fetch contribution data from GitHub for all configured repositories:
3951

4052
```shell
53+
export GITHUB_TOKEN="your_token_here"
4154
uv run contributor-network data data
55+
```
56+
57+
Options:
58+
- `--all-contributors`: Include alumni/friends (not just current DevSeed employees)
59+
60+
### `csvs`
61+
62+
Generate CSV files from the fetched JSON data:
63+
64+
```shell
4265
uv run contributor-network csvs data
66+
```
67+
68+
### `build`
69+
70+
Build the static site to the `dist/` folder:
71+
72+
```shell
4373
uv run contributor-network build data dist
4474
```
4575

76+
## Full Workflow
77+
78+
To update the visualization with new data:
79+
80+
```shell
81+
# 1. Set your GitHub token
82+
export GITHUB_TOKEN="your_token_here"
83+
84+
# 2. (Optional) Discover new repos to add
85+
uv run contributor-network discover --min-contributors 2
86+
87+
# 3. Edit config.toml to add/remove repos or contributors
88+
89+
# 4. Fetch data from GitHub
90+
uv run contributor-network data data
91+
92+
# 5. Generate CSVs
93+
uv run contributor-network csvs data
94+
95+
# 6. Build the site
96+
uv run contributor-network build data dist
97+
98+
# 7. Preview locally
99+
cd dist && python -m http.server 8000
100+
```
101+
102+
## Configuration
103+
104+
Edit `config.toml` to configure:
105+
106+
- **repositories**: List of GitHub repos to track (format: `"owner/repo"`)
107+
- **contributors.devseed**: Current DevSeed employees (format: `github_username = "Display Name"`)
108+
- **contributors.alumni**: Friends and alumni (commented out by default)
109+
110+
## Development
111+
112+
### Code Quality
113+
114+
```shell
115+
uv sync
116+
uv run ruff check --fix
117+
uv run ruff format
118+
uv run pytest
119+
```
120+
121+
### Automated Rebuilds
122+
123+
We use [workflow dispatch](https://github.com/developmentseed/contributor-network/actions/workflows/build.yml) to rebuild the source data manually.
124+
125+
## Branding
126+
127+
This visualization uses the Development Seed brand colors:
128+
- **Grenadier** (#CF3F02): Primary orange accent
129+
- **Aquamarine** (#2E86AB): Secondary blue
130+
- **Base** (#443F3F): Text color
131+
46132
## License
47133

48134
This work was copied-and-modified from <https://github.com/nbremer/ORCA> and is licensed under the same (MPL).

config.toml

Lines changed: 47 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
title = "The Development Seed Contributor Network"
22
author = "Pete Gadomski"
33
description = "An interactive visualization of contributors to Development Seed code and their connections to other repositories"
4-
central_repository = "Development Seed"
4+
central_repository = "DevSeed Team"
55
repositories = [
66
"developmentseed/titiler",
77
"developmentseed/lonboard",
@@ -39,34 +39,66 @@ repositories = [
3939
"OSMCha/osmcha-frontend",
4040
"hotosm/tasking-manager",
4141
"hotosm/OpenAerialMap",
42+
"developmentseed/openeo-studio",
43+
"NASA-IMPACT/veda-backend",
44+
"developmentseed/moz-proenergia-backend",
45+
"wri/project-zeno-next",
46+
"developmentseed/titiler-cmr",
47+
"NASA-IMPACT/veda-ui",
48+
"developmentseed/async-tiff",
49+
"NASA-IMPACT/veda-deploy",
50+
"wri/project-zeno-deploy",
51+
"eopf-toolkit/eopf-101",
52+
"NASA-IMPACT/veda-keycloak",
53+
"NASA-IMPACT/veda-data-airflow",
54+
"EOPF-Explorer/titiler-eopf",
55+
"developmentseed/openeo-udp",
56+
"developmentseed/stac-map",
57+
"source-cooperative/source.coop",
58+
"beatrizbsperes/eopf-101",
59+
"NASA-IMPACT/csda-client",
60+
"NASA-IMPACT/veda-config",
61+
"developmentseed/eo-predictor",
62+
"EOPF-Explorer/landing-page",
63+
"EOPF-Explorer/narratives",
64+
"developmentseed/deck.gl-raster",
65+
"MAAP-Project/maap-eoapi",
66+
"MAAP-Project/maap-documentation",
67+
"EOEPCA/demo",
68+
"EOEPCA/resource-discovery",
69+
"virtual-zarr/obspec-utils",
70+
"developmentseed/geotiff-test-data",
71+
"GenericMappingTools/pygmt",
72+
"developmentseed/pixelverse",
4273
]
4374

44-
[contributors]
45-
# Friends and alumni
46-
jsignell = "Julia Signell"
47-
geospatial-jeff = "Jeff Albrecht"
48-
cholmes = "Chris Holmes"
49-
m-mohr = "Matthias Mohr"
50-
matthewhanson = "Matthew Hanson"
51-
d-v-b = "Davis Bennett"
75+
# Friends and alumni - commented out but preserved for future use
76+
# Uncomment the [contributors.alumni] section to include these contributors
77+
# [contributors.alumni]
78+
# jsignell = "Julia Signell"
79+
# geospatial-jeff = "Jeff Albrecht"
80+
# cholmes = "Chris Holmes"
81+
# m-mohr = "Matthias Mohr"
82+
# matthewhanson = "Matthew Hanson"
83+
# d-v-b = "Davis Bennett"
5284

53-
# Development Seed
85+
# Development Seed employees
86+
[contributors.devseed]
5487
AMSCamacho = "Angela Camacho"
5588
AliceR = "Alice Rühl"
5689
LanesGood = "Lane Goodman"
5790
abarciauskas-bgse = "Aimee Barciauskas"
5891
aboydnw = "Anthony Boyd"
59-
aliziel = "Ali Z."
92+
aliziel = "Ali Z"
6093
alukach = "Anthony Lukach"
6194
anayeaye = "Alexandra Kirk"
62-
aripaulg = "Ari Greenberg"
6395
batpad = "Sanjay Bhangar"
6496
beatrizbsperes = "Beatriz Peres"
6597
benbovy = "Benoît Bovy"
6698
bitner = "David Bitner"
6799
botanical = "Jennifer Tran"
68-
briannapagan = "Brianna Pagán"
69-
camillecroft = "camillecroft"
100+
briannacorremonte = "Brianna Corremonte"
101+
camillecroft = "Camille Croft"
70102
ceholden = "Chris Holden"
71103
chuckwondo = "Chuck Daniels"
72104
ciaransweet = "Ciaran Sweet"
@@ -98,7 +130,7 @@ olafveerman = "Olaf Veerman"
98130
omniajoe = "Omnia Joehar"
99131
pantierra = "xıʃǝɟ"
100132
ricardoduplos = "Ricardo Duplos"
101-
sandrahoang686 = "sandrahoang686"
133+
sandrahoang686 = "Sandra Hoang"
102134
sharkinsspatial = "Sean Harkins"
103135
sharonwanlu = "SharonLu"
104136
smohiudd = "Saadiq Mohiuddin"

css/style.css

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,19 @@
33
/*************************************/
44

55
html {
6-
--color-repo-main: #a682e8;
7-
--color-repo: #64d6d3;
8-
--color-owner: #f2a900;
9-
--color-contributor: #ea9df5;
10-
--color-text: #4d4950;
6+
/* DevSeed Brand Colors */
7+
--color-repo-main: #CF3F02; /* Grenadier (signature orange) */
8+
--color-repo: #2E86AB; /* Aquamarine (secondary blue) */
9+
--color-owner: #CF3F02; /* Grenadier */
10+
--color-contributor: #3A9BBF; /* Lighter aquamarine for contributors */
11+
--color-text: #443F3F; /* Base dark gray */
1112
--color-background: #f7f7f7;
12-
--color-gradient: linear-gradient(to right, var(--color-contributor), var(--color-repo-main), var(--color-repo)) 1;
13+
--color-gradient: linear-gradient(to right, var(--color-repo), var(--color-repo-main)) 1;
1314
}
1415

1516
body {
1617
margin: 0;
17-
font-family: 'Atkinson Hyperlegible', sans-serif;
18+
font-family: 'Roboto', 'Antarctica', sans-serif;
1819
}
1920

2021
.central-repo {
@@ -92,14 +93,14 @@ p {
9293

9394
.code {
9495
font-family: 'Fira Code', monospace;
95-
background-color: #64d6d375;
96+
background-color: #2E86AB30; /* Aquamarine at ~20% opacity */
9697
font-size: 0.9em;
9798
padding: 0.2em 0.4em;
9899
}
99100

100101
a {
101102
border-bottom: 3px solid var(--color-repo);
102-
border-image: linear-gradient(to right, var(--color-repo), var(--color-contributor)) 1;
103+
border-image: linear-gradient(to right, var(--color-repo), var(--color-repo-main)) 1;
103104
/* padding: 0.1em 0.3em; */
104105
font-weight: 700;
105106
cursor: pointer;
@@ -173,8 +174,7 @@ a {
173174

174175
#explanation-link {
175176
border-bottom: 2px solid var(--color-repo-main);
176-
border-image: linear-gradient(to right, var(--color-owner), var(--color-contributor), var(--color-repo)) 1;
177-
/* border-image: var(--color-gradient); */
177+
border-image: linear-gradient(to right, var(--color-repo-main), var(--color-repo)) 1;
178178
font-size: 0.9em;
179179
font-style: italic;
180180
color: var(--color-text);
@@ -267,7 +267,7 @@ li#item-remaining::before {
267267
font-size: 0.9em;
268268

269269
border: 3px solid var(--color-repo);
270-
border-image: linear-gradient(to right, var(--color-owner), var(--color-contributor), var(--color-repo)) 1;
270+
border-image: linear-gradient(to right, var(--color-repo-main), var(--color-repo)) 1;
271271
padding: 0.8em 1.2em;
272272
margin-top: 0.5em;
273273
margin-bottom: 1.5em;
@@ -350,7 +350,7 @@ li#item-remaining::before {
350350

351351
#dataviz-credit a {
352352
border-bottom: 3px solid var(--color-repo-main);
353-
border-image: linear-gradient(to right, var(--color-contributor), var(--color-repo)) 1;
353+
border-image: linear-gradient(to right, var(--color-repo), var(--color-repo-main)) 1;
354354
/* padding: 0.1em 0.3em; */
355355
font-weight: 700;
356356
cursor: pointer;

0 commit comments

Comments
 (0)