diff --git a/.gitignore b/.gitignore index b33976e85..1e4869291 100644 --- a/.gitignore +++ b/.gitignore @@ -9,4 +9,4 @@ _vendor # Member logo cloud # These are generated by scripts/extract_org_logos.py content/members/images -data/org_summary.yaml \ No newline at end of file +data/org_summary.yaml diff --git a/README.md b/README.md index c7e408a3a..367af0320 100644 --- a/README.md +++ b/README.md @@ -23,6 +23,10 @@ See [the Team Compass blog documentation](https://compass.2i2c.org/communication ## Website-specific features +### Add a Feedback button to a page or post + +Use the `{{< feedback >}}` short-code to add a button that provides a feedback link for the current page. See more information in [our feedback process docs](https://docs.google.com/document/d/1bH5fN2lXcZ-vjQ4Pb4lfaeQbmoCBkN1QYjA7ZaxkmsY/edit?tab=t.dxyyjksnpswv#heading=h.kh8meot2eulc). + ### Automatic GitHub link shortening This theme will automatically shorten GitHub links and add a little GitHub icon to the front. For example, see the [Jack Eddy Symposium blog post](https://2i2c.org/blog/2022/eddy-symposium-report/). diff --git a/config/_default/hugo.yaml b/config/_default/hugo.yaml index ab56d7cc6..3888fe598 100644 --- a/config/_default/hugo.yaml +++ b/config/_default/hugo.yaml @@ -32,7 +32,7 @@ permalinks: tags: '/tag/:slug/' categories: '/category/:slug/' publication_types: '/publication-type/:slug/' -disableAliases: true +disableAliases: false # This makes Hugo generate HTML redirects instead of server-side ones outputs: home: [HTML, RSS, JSON, WebAppManifest, headers, redirects] section: [HTML, RSS] diff --git a/content/_index.md b/content/_index.md index ae44f9f76..4d6388a91 100644 --- a/content/_index.md +++ b/content/_index.md @@ -154,7 +154,7 @@ sections: {{< video src="videos/magic-links.mp4">}}
- Powered by and . Example from the Spyglass toolbox paper. + Powered by and . Example from the Spyglass toolbox paper.
diff --git a/content/blog/2024/hhmi-spyglass/index.md b/content/blog/2024/hhmi-spyglass/index.md index 22f947ac9..6b03071de 100644 --- a/content/blog/2024/hhmi-spyglass/index.md +++ b/content/blog/2024/hhmi-spyglass/index.md @@ -13,7 +13,7 @@ draft: false ![Spyglass landing page](featured.png "[Spyglass](https://github.com/LorenFrankLab/spyglass) landing page") -[Spyglass](https://github.com/LorenFrankLab/spyglass) is a framework for reproducible and shareable neuroscience research produced by [Loren Frankโ€™s lab](https://github.com/LorenFrankLab) at the University of California, San Francisco. They recently released a [preprint](https://www.biorxiv.org/content/10.1101/2024.01.25.577295v3.full.pdf+html) about their toolbox, and are using a 2i2c hub to provide accessible interactive cloud environments that demonstrate its functionality and helps researchers get started. +[Spyglass](https://github.com/LorenFrankLab/spyglass) is a framework for reproducible and shareable neuroscience research produced by [Loren Frankโ€™s lab](https://github.com/LorenFrankLab) at the University of California, San Francisco. They recently released a [preprint](https://www.biorxiv.org/content/10.1101/2024.01.25.577295v4.full.pdf+html) about their toolbox, and are using a 2i2c hub to provide accessible interactive cloud environments that demonstrate its functionality and helps researchers get started. ## Acknowledgements diff --git a/content/blog/2025/cloud-cost-monitoring/featured.png b/content/blog/2025/cloud-cost-monitoring/featured.png new file mode 100644 index 000000000..2a5112d44 Binary files /dev/null and b/content/blog/2025/cloud-cost-monitoring/featured.png differ diff --git a/content/blog/2025/cloud-cost-monitoring/index.md b/content/blog/2025/cloud-cost-monitoring/index.md new file mode 100644 index 000000000..c32aeece8 --- /dev/null +++ b/content/blog/2025/cloud-cost-monitoring/index.md @@ -0,0 +1,34 @@ +--- +title: Enabling transparent cloud cost monitoring with user-level dashboards +date: "2025-10-02" +authors: + - Chris Holdgraf + - Jenny Wong +categories: +- service +tags: +- open source +- cloud costs +- transparency +--- + +We are excited to announce that **dashboards to monitor cloud usage and costs at a per-user level** are now available! + +A key goal of 2i2c is to make the cloud safe for science. By providing transparent cost monitoring, we give communities the confidence that they won't face unexpected bills and can better understand how their usage patterns translate to cloud costs. This visibility is especially valuable in our shared platform model, where each community gets their own independent hub while benefiting from shared infrastructure expertise. + +![Cloud cost monitoring dashboard showing user-level usage and cost breakdowns](featured.png) + +The user-level cost breakdown allows communities to identify individual usage trends and manage their resources more effectively. Communities can now see exactly how their computational work translates to cloud spending, enabling better resource planning and budget management. + +{{< feedback >}} + +## Learn more + +- [Community Hub Guide](https://docs.2i2c.org/admin/howto/monitoring/cost-users/) + + +## Acknowledgements + +- [Development Seed](../../collaborators/devseed/) for working on this with us. +- [NASA VEDA](../../collaborators/nasa-veda/) for funding much of this work. +- [Openscapes](../../collaborators/openscapes/) and [Earthscope](../../collaborators/earthscope/) for giving us close feedback. diff --git a/content/blog/2025/executive-council-updates/featured.png b/content/blog/2025/executive-council-updates/featured.png new file mode 100644 index 000000000..b40c23999 Binary files /dev/null and b/content/blog/2025/executive-council-updates/featured.png differ diff --git a/content/blog/2025/executive-council-updates/index.md b/content/blog/2025/executive-council-updates/index.md new file mode 100644 index 000000000..98a4577d4 --- /dev/null +++ b/content/blog/2025/executive-council-updates/index.md @@ -0,0 +1,43 @@ +--- +title: "Updates from Chris' position on the Jupyter Executive Council and Foundation Board" +subtitle: "" +authors: ["Chris Holdgraf"] +tags: ["open source", "jupyter"] +categories: ["impact"] +date: "2025-09-23" +featured: false +draft: false +--- + +This is a running blog post for Chris to share out community updates from his time on the [Jupyter Executive Council](https://ec.jupyter.org/). See [context for this page](#context). + +## Updates for the Jupyter community from Chris + +Chris aims to write monthly updates for Jupyter's community in the [Jupyter Community Forum](https://discourse.jupyter.org/c/governance/executive-council/51) to share his perspective on what the council is up to. We'll update this index post as new posts are available. + +- [August 2025](https://discourse.jupyter.org/t/chris-update-for-august-2025-community-proposals-are-live/37879) +- [July 2025](https://discourse.jupyter.org/t/chris-update-for-july-2025-towards-community-led-funding-proposals/37424/2) +- [June 2025](https://discourse.jupyter.org/t/chris-jec-and-board-experience-for-june-2025/36488/1) +- [May 2025](https://discourse.jupyter.org/t/chris-update-for-may-2025-a-few-funding-discussions-from-the-jupyter-foundation-board/35764/3) + +## Blog posts about Chris' experience on the executive council + +Chris blogs now and then to share his thoughts, important announcements, and provide major updates from his perspective on the executive council. Here are the posts that have come out of this effort. + +- [Your Ideas, Our Support: Jupyter Community Call For Funding Proposals](https://blog.jupyter.org/your-ideas-our-support-jupyter-community-call-for-funding-proposals-f4642590ae76?source=collection_home_page----95916e268740-----0-----------------------------------) +- [Why open source foundations try to fund systems, not development](https://chrisholdgraf.com/blog/2025/fund-systems-not-developmend) - May 31, 2025 +- [Jupyter can align the needs of its community and its foundation by enabling contribution](https://chrisholdgraf.com/blog/2025/more-contributors) - Mar 22, 2025 +- [The relationship between the Jupyter Executive Council, Software Steering Council, and Foundation](https://chrisholdgraf.com/blog/2025/jupyter-org-structure) - Mar 02, 2025 +- [Ways the Jupyter Foundation could support open source projects](https://chrisholdgraf.com/blog/2025/os-support) - Feb 26, 2025 +- [Running for the Jupyter Executive Council](https://chrisholdgraf.com/blog/2025/jec) - Jan 14, 2025 + +## 2i2c's commitment to supporting open source communities +{#context} + +In early 2025, Chris was [elected to the Jupyter Executive Council](../jupyter-executive-council/index.md). +We're tracking these efforts because providing leadership and community support to open source projects is a [key Foundational contribution](../good-citizen/index.md) we wish to make for open source projects. 2i2c makes time for team members to contribute upstream in strategic ways like this as part of our [commitment to open practices](../../../open-practices/index.md). However, this kind of work is very difficult to track! This blog post is an attempt at putting these efforts into one place for us to track and for others to discover. + +## Acknowledgements + +- [2i2c's member communities](../../../members/index.md) support [Foundation open source contributions](../good-citizen/index.md) like this with their membership fees. +- [The Navigation Fund](../../../collaborators/navigation/) provides strategic funding support for 2i2c which covers major open source leadership contributions like this. diff --git a/content/blog/2025/foundational-contributions/index.md b/content/blog/2025/foundational-contributions/index.md new file mode 100644 index 000000000..d66d4536f --- /dev/null +++ b/content/blog/2025/foundational-contributions/index.md @@ -0,0 +1,188 @@ +--- +title: "From scattered effort to strategic impact: How we're systematizing our Foundational open source contributions" +date: 2025-09-26 +authors: + - Yuvi Panda +tags: + - open source +categories: + - impact +--- + + +Over the past year we've experimented with being more strategic about supporting upstream communities _as a team_. This post summarizes our current plan, including team targets and practices we'll continue to pilot. We'll revisit this as we learn more. + +> **Note**: This document is about the _Foundational_ contributions we make so that open source communities are healthier and more impactful. It is not about _Directed_ upstream contributions we make as part of our own product work. See [On being a good open source citizen: supporting a healthy ecosystem through directed and foundational contributions](../good-citizen/index.md). + +## The challenge: Why scattered individual efforts aren't enough + +Healthy open source communities rely on both individual and institutional contributions. +2i2c [aims to be an *excellent "upstream citizen"*](../good-citizen/index.md), so we need a structured approach with clear goals and rationale for why it's the best use of our team's time. + +Without a coordinated approach, we risk two problematic outcomes: + +**Best case**: Scattered, individual efforts that are subject to the [Tyranny of Structurelessness](https://www.jofreeman.com/joreen/tyranny.htm). We help at the margins but not meaningfully. + +**Worst case**: Our organizational capacity inadvertently dominates communities, making 2i2c the sole stakeholder capable of meaningful development and maintenance. We _functionally take over the project_. + +By setting explicit goals, both our member communities and upstream projects can hold us accountable for actions that strengthen rather than undermine community health. + +## Our long-term goal: Multi-stakeholder, resilient communities + +With this in mind, we've chosen the following *outcomes* as our major goals for upstream contribution: + + +
+ +> We want the Jupyter[^0] community to be a *multi-stakeholder*[^1], *diverse*[^2] community with a very high [*bus factor*](https://en.wikipedia.org/wiki/Bus_factor), because we believe this is a critical pre-requisite for advancing [our mission and value proposition](https://compass.2i2c.org/organization/mission/). + +
+ +[^0]: Currently this is particularly JupyterHub and Jupyter-wide leadership. We're [exploring how to incorporate JupyterBook into our service](../jb-for-communities/index.md) and are thus investing Foundation contributions there as well. +[^1]: With different kinds and sizes of organizations (companies, non-profits, universities, etc) and individuals being stakeholders. We want to avoid a single organization monopolizing power within any community. +[^2]: Across the power spectrum - from users to bug reporters to casual contributors to maintainers to people on governance duty + +We want to build team processes that help upstream communities make progress towards this goal, so everyone can equitably participate with the support they need. + +## Two key objectives + +Starting with [JupyterHub](../../../collaborators/jupyterhub/), we've identified two objectives that will guide our work: + +
+ +> **Objective 1**: Increase the number of casual but returning contributors to the JupyterHub community +> +> **Objective 2**: Increase the number of total maintainers in the JupyterHub community + +
+ +We've chosen these objectives because (1) they have impact, (2) we can make meaningful progress on them, and (3) we can integrate this work into our team's workflow. + +For each activity below, we've brainstormed some Key Performance Indicators (KPIs) to track progress and ensure we're learning effectively. + +## Four pilot activities + +We'll experiment with these four activities[^all]: + +- [**Review pull requests from non-maintainers**](#review-prs) +- [**Issue Triage office hours**](#issue-triage) +- [**Sponsoring and Mentoring new Maintainers**](#mentoring-maintainers) +- [**Increase bus factor and diversity of people making releases**](#release-diversity) + +[^all]: **Implementation note**: We will not start doing **all** these immediately! We will consult with the rest of the team, and start these 1 at a time so we can build these processes sustainably and equitably. + +### Review Pull Requests from non-maintainers {#review-prs} + +Imagine two different scenarios: + +1. You casually contribute a PR to some OSS project. Someone responds the next day, you have a pleasant back and forth, and it gets merged (or rejected) within a few days. +2. You casually contribute a PR to some OSS project. Nobody responds for a year. Eventually someone leaves a comment. You have forgotten everything, and don't even respond. Much later, your PR gets closed as stale. + +Which experience will encourage you to come back and contribute again? + +It's clearly (1). We should use our institutional capacity to bring the community closer to (1). + +We'll accomplish this by including the following work item in every sprint: + +> `Review of N PRs by non-maintainers of JupyterHub` + +We will build skills (via pairing, training, etc) inside 2i2c, as not everyone will feel comfortable reviewing pull requests for all projects, nor have rights to merge or close PRs. We may also do additional work like new contributor drives, better documentation, and policy advocacy. We will include pull requests of all types, not just code contributions. + +#### KPIs + +We imagine two KPIs for this activity: + +1. Number of PRs merged (or closed) through our sprint planning activity. +2. Number of *returning* contributors whose PRs were reviewed by us. + +### Issue Triage office hours {#issue-triage} + +Issue Triage involves combing through an upstream repository's issue tracker, engaging with new issues, refining them to be actionable, and signal boosting important ones for team action. +This is hard for newcomers, as it often requires deep knowledge of various components to understand how to direct an issue or refine it. +It's also challenging for team members still learning open source community dynamics. We'd like to upskill our team members within 2i2c and our upstream open source communities. + +As part of our sprints, we will run regular "Issue Triage" office hours. +We'll begin by upskilling our _own 2i2c team members_ in effective issue triaging. We'll then explore opening issue triage sessions to the broader upstream community. + +#### KPIs + +1. Number of issues triaged by 2i2c team members.[^triage] + +[^triage]: This requires a definition of "an issue that has been triaged", and to our knowledge no such definition exists. We'd like to learn how to measure something abstract like "issue triage" - perhaps it is something specific putting it on a board for further action or applying a label, or something more abstract like "increasing how clear and actionable the issue is". We'll explore this when we start to make progress towards this objective. + +### Sponsoring and Mentoring new Maintainers {#mentoring-maintainers} + +OSS communities must grow their _contributors_ into _maintainers_, or they will die. + +{{< figure src="https://imgs.xkcd.com/comics/dependency.png" alt="XKCD comic about dependency" link="https://xkcd.com/2347/" caption="XKCD comic about dependency" >}} + +Growing new maintainers takes time and effort from both the potential maintainer and existing maintainers who mentor and sponsor them. The focus on sponsorship is important, as [laid out by Lara Hogan](https://larahogan.me/blog/what-sponsorship-looks-like/). This work takes years, not months, to manifest. + +We will build structures to identify potential maintainers and create pathways for them to gain maintainership status. As JupyterHub lacks an explicit maintainer pathway, we will build our own process via these focus areas: + +1. Identifying potential candidates for maintainership +2. Identifying potential community work they can do to help get involved (contributing bug fixes, code reviewing, issue triage, helping answer questions, contributing code / documentation, release management, etc) +3. Build pathways for candidates to do (2) as appropriate. +4. Iteratively continue until candidates have done 'enough' work to gain maintainership status. + +This work is nebulous but worthwhile. We will coordinate this effort closely with community leaders, recognizing it takes time to actualize. + +In the Jupyter community, maintainership status is tied to individuals, not to organizations they work for. Nobody should get maintainership status *simply* because they work for a specific organization (such as 2i2c). We should look for diverse candidates, ideally funded by different organizations, who are *interested* in becoming maintainers. + +> **Note**: We'd also like to start with individuals [in our **collaborator network**](../../../collaborators/_index.md). For example, we're using an engagement between [NASA VEDA](../../../collaborators/nasa-veda/) and [Development Seed](../../../collaborators/devseed/) to onboard several team members into these projects. + +#### KPI + +This measurement moves slowly, but is very clearly impactful: + +1. Number of people who have become maintainers due to our concerted efforts. + +### Increase bus factor and diversity of people making releases {#release-diversity} + +Making releases is often thankless but important to community health. It involves coordinating testing, writing changelogs, and providing upgrade instructions. Institutions can help by dedicating team time to perform this task regularly. To advance the 'multi-stakeholder' and 'high bus factor' aspects of our goal, we will have many different people do releases, via mentorship and sponsorship. This will integrate into our regular workstreams. + +#### KPIs + +1. Number of releases performed by 2i2c engineers +2. Number of releases performed by others with sponsorship / mentorship from 2i2c engineers + +## Criteria for upstream projects to support + +Our long-term goal applies to upstream communities that: + +1. We strategically *depend* on to serve [our member communities](../../../members/) as part of [our community hub service](../../../platform/_index.md) +2. We *need* to help sustain, given upstream community dynamics +3. We have the *ability* to help sustain + +For example, Kubernetes satisfies (1) but not (2) or (3), while JupyterLab meets (1) and (2) but not (3) (presently). Currently this policy only applies to JupyterHub, but may change as our organization evolves. + +## How we'll implement this + +### Who is responsible + +Implementation is the responsibility of [2i2c's Product & Services team](https://compass.2i2c.org/product-and-services/). These activities must integrate into the team's daily practices, not become an external shadow process for some members. + +### How we'll fund this work + +Foundational upstream support requires significant work and expertise. We plan to fund this through: + +- Fees from [our member communities](../../../members/). A percentage of our membership fees includes covering the cost of Foundational contributions like this. +- Targeted contributions from [some of our collaborators](../../../collaborators/). Some collaborators have funds and want to support open source at a foundational level, in some cases we use funds from these collaborators to cover our costs. + +We still need to explore what these efforts cost and mechanisms to recover those costs. + +## Next step: Learning in public + +We're excited to experiment with more effective upstream contribution and eager to learn. We'll share our experiences so others can learn from and comment on our process. + +## Acknowledgements + +- [@MinRK](https://github.com/minrk) and - [@bsipocz](https://github.com/bsipocz) for helping review a draft of this! +- [@choldgraf](../../../authors/chris-holdgraf/_index.md) for feedback, guidance, and editing for this post and the team practices in it. +- [JupyterHub](../../../collaborators/jupyterhub/), [JupyterBook](../../../collaborators/jupyter-book/), and [Project Jupyter](../../../collaborators/jupyter/) for teaching us a lot about open source over the years. + diff --git a/content/blog/2025/good-citizen/index.md b/content/blog/2025/good-citizen/index.md index e7c867692..190f1a4e8 100644 --- a/content/blog/2025/good-citizen/index.md +++ b/content/blog/2025/good-citizen/index.md @@ -8,6 +8,8 @@ tags: - open source categories: - impact +aliases: + - /blog/2025/foundational-contributions/ --- Any organization building on open source faces a fundamental tension: how do you serve the needs of your organizational stakeholders while also acting as a responsible steward of the upstream projects you depend on? @@ -27,6 +29,8 @@ Along the way, we realized there are **two very different kinds of upstream cont Historically we have conflated these types of contributions, but we think it's key that we treat them differently. +> **Note**: For a more practical guide that describes the systems we've set up to accomplish _Foundational_ upstream contributions, see [From scattered effort to strategic impact: How we're systematizing our Foundational open source contributions](../foundational-contributions/index.md). + ## Everybody has an open source hat and a stakeholder hat Open source teams[^inclusive] are usually two kinds of teams that overlap heavily: diff --git a/content/blog/2025/status-page/featured.png b/content/blog/2025/status-page/featured.png new file mode 100644 index 000000000..758c21100 Binary files /dev/null and b/content/blog/2025/status-page/featured.png differ diff --git a/content/blog/2025/status-page/index.md b/content/blog/2025/status-page/index.md new file mode 100644 index 000000000..80ea3363e --- /dev/null +++ b/content/blog/2025/status-page/index.md @@ -0,0 +1,31 @@ +--- +title: "Demonstrating our infrastructure's reliability with a hub status page for our communities" +subtitle: "" +tags: ["reliability"] +categories: ["service"] +date: "2025-09-23" +featured: false +draft: false +--- + +One of 2i2c's goals is to **make the cloud safe for science**. +A big part of this is making the black box of commercial cloud infrastructure more predictable and reliable for our member communities, across our network of community hubs that all operate autonomously. + +{{< feedback >}} + +To that end, we've created a **status page for 2i2c's network of community hubs**. This is a source of truth to provide a high-level picture of the stability of our infrastructure, let a community know if their hub is experiencing a problem, and to give us a heads up when things aren't working as expected. You can check it out at: + +๐Ÿ‘‰ [**`status.2i2c.org`**](http://status.2i2c.org) + +{{< figure src="featured.png" caption="The 2i2c Status Page gives communities a high-level view of the uptime for our entire network of community hubs.">}} + +While we make status more visible, we're also [streamlining our incident response processes](https://github.com/2i2c-org/team-compass/pull/1021) in order to more quickly respond to outages when they occur (ideally, before a community has even noticed!). + +There are still plenty of improvements we'd like to make: for example, we're focusing on major outages right now, but would like to extend some level of reporting for _degraded_ service, like unexpectedly slow start times. + +## Learn more + +- ๐Ÿ‘‰ [The status page](https://2i2c-hubs.trust.pagerduty.com/posts/dashboard) +- ๐Ÿ‘‰ [The status page documentation](https://docs.2i2c.org/admin/reliability/status-page/) +- ๐Ÿ‘‰ [Our new process for incident response](https://github.com/2i2c-org/team-compass/pull/1021) +- ๐Ÿ‘‰ Follow an [in-progress initiative to improve the reliability of our infrastructure](https://github.com/2i2c-org/infrastructure/issues/6417) diff --git a/content/blog/_template-post/impact-post.md b/content/blog/_template-post/impact-post.md index d9ee8352f..5e9504fb9 100644 --- a/content/blog/_template-post/impact-post.md +++ b/content/blog/_template-post/impact-post.md @@ -3,7 +3,7 @@ title: Enabling / creating / X outcome by doing Y thing date: "2999-01-01" authors: - - Chris Holdgraf + - categories: - impact tags: diff --git a/content/case-studies/_index.md b/content/case-studies/_index.md index 732130d43..34664c745 100644 --- a/content/case-studies/_index.md +++ b/content/case-studies/_index.md @@ -68,14 +68,14 @@ sections: content: title: "Research communication: The spyglass toolbox demonstration hub" subtitle: | - [Spyglass](https://github.com/LorenFrankLab/spyglass) is a framework for reproducible and shareable neuroscience research produced by [Loren Frank's lab](https://github.com/LorenFrankLab) at the University of California, San Francisco. They recently released [a preprint about their toolbox](https://www.biorxiv.org/content/10.1101/2024.01.25.577295v3), and are using a 2i2c hub to provide accessible interactive cloud environments that demonstrate its functionality and helps researchers get started. + [Spyglass](https://github.com/LorenFrankLab/spyglass) is a framework for reproducible and shareable neuroscience research produced by [Loren Frank's lab](https://github.com/LorenFrankLab) at the University of California, San Francisco. They recently released [a preprint about their toolbox](https://www.biorxiv.org/content/10.1101/2024.01.25.577295v4), and are using a 2i2c hub to provide accessible interactive cloud environments that demonstrate its functionality and helps researchers get started. text: | {{< figure src="/images/communities/spyglass-landing.png" >}} {{< figure src="/images/communities/spyglass-demo.png" >}} - [Spyglass project page](https://lorenfranklab.github.io/spyglass/latest/) | [Biorxiv article](https://www.biorxiv.org/content/10.1101/2024.01.25.577295v1) + [Spyglass project page](https://lorenfranklab.github.io/spyglass/latest/) | [Biorxiv article](https://www.biorxiv.org/content/10.1101/2024.01.25.577295v4) - block: markdown id: join diff --git a/content/collaborators/devseed/index.md b/content/collaborators/devseed/index.md index 05f3984e9..08e7d576d 100644 --- a/content/collaborators/devseed/index.md +++ b/content/collaborators/devseed/index.md @@ -7,4 +7,6 @@ show_date: false ![](featured.png) -[Development Seed](https://developmentseed.org/) is a data and software engineering company that specializes in using satellite imagery, machine learning, and open data. \ No newline at end of file +[Development Seed](https://developmentseed.org/) is a data and software engineering company that specializes in using satellite imagery, machine learning, and open data. + +[LinkedIn](https://www.linkedin.com/company/development-seed/) diff --git a/content/collaborators/navigation/index.md b/content/collaborators/navigation/index.md index bf97e98a5..ab1aa86f7 100644 --- a/content/collaborators/navigation/index.md +++ b/content/collaborators/navigation/index.md @@ -7,8 +7,8 @@ show_date: false ![](featured.png) -[The Navigation Fund](https://www.thenavigationfund.org/) focuses on supporting organizations that are building critical infrastructure for the future of research and education, particularly those working to create sustainable models for open source and open science initiatives. +[The Navigation Fund](https://www.navigation.org/) focuses on supporting organizations that are building critical infrastructure for the future of research and education, particularly those working to create sustainable models for open source and open science initiatives. ## Grants from this funder -- [The Navigation Fund](https://www.thenavigationfund.org/) awarded 2i2c approximately [$1.5 million over 2 years in 2024](../../blog/2024/funding-navigation/index.md) to identify and build a scalable sustainability model for the organization. This strategic investment enables 2i2c to develop comprehensive sustainability strategies and establish long-term financial resilience. \ No newline at end of file +- [The Navigation Fund](https://www.navigation.org/) awarded 2i2c approximately [$1.5 million over 2 years in 2024](../../blog/2024/funding-navigation/index.md) to identify and build a scalable sustainability model for the organization. This strategic investment enables 2i2c to develop comprehensive sustainability strategies and establish long-term financial resilience. diff --git a/content/members/index.md b/content/members/index.md index ae93a9001..17e3c4c0c 100644 --- a/content/members/index.md +++ b/content/members/index.md @@ -2,10 +2,12 @@ title: Our member communities --- -This is a list of organizations with communities currently in our member network[^1]. Our members collectively support [2i2c's impact](../impact/index.md) with their resources. Each member gets one or more [community hubs run by our team](../platform/_index.md). Some have deeper collaborations with 2i2c, and our [collaborators page](../collaborators/_index.md) lists those that have contributed additional resources to our impact. +This is a list of organizations with communities currently in our member network, and a resource for community members to quickly find and access their hub URL[^1]. + +_Member organizations support [2i2c's impact](../impact/index.md) and our [commitment to open practices](../open-practices/index.md) with membership fees. Each member gets one or more [community hubs run by our team](../platform/_index.md). Our [collaborators page](../collaborators/_index.md) lists members that have contributed additional resources for [Directed and Foundational open source contributions](../blog/2025/good-citizen/index.md)._ {{< cta cta_text="Join our member network" cta_link="/join/" >}} {{< members-logo-cloud >}} -[^1]: This is automatically generated using our community hub configuration data in [the 2i2c infrastructure repository](https://github.com/2i2c-org/infrastructure/). \ No newline at end of file +[^1]: This is automatically generated using our community hub configuration data in [the 2i2c infrastructure repository](https://github.com/2i2c-org/infrastructure/). Clicking each logo will take you to the community hub for each community. diff --git a/content/open-practices/index.md b/content/open-practices/index.md index 48cf2f815..5573452bd 100644 --- a/content/open-practices/index.md +++ b/content/open-practices/index.md @@ -30,7 +30,7 @@ sections: content: title: Co-create our impact with other communities text: | - - Take an [upstream first](https://compass.2i2c.org/open-source/strategy/#upstream-first) approach and provide both [Directed and Foundational open source contributions](../blog/2025/good-citizen/index.md). + - Take an [upstream first](https://compass.2i2c.org/open-source/strategy/#upstream-first) approach and provide both [Directed and Foundational open source contributions](../blog/2025/good-citizen/index.md) that [we own as a team](../blog/2025/upstream-impact-strategy/index.md). - Acknowledge the [contributions that our collaborators and funders have made](../collaborators/_index.md) in our work. {{< cta cta_text="See our collaborators and funders" cta_link="/collaborators" >}} diff --git a/content/platform/_index.md b/content/platform/_index.md index 2c342cb31..8f5fa4188 100644 --- a/content/platform/_index.md +++ b/content/platform/_index.md @@ -148,7 +148,7 @@ sections: {{< video src="videos/magic-links.mp4">}}
- Powered by and . Example from the Spyglass toolbox paper. + Powered by and . Example from the Spyglass toolbox paper.
diff --git a/layouts/_default/_markup/render-link.html b/layouts/_default/_markup/render-link.html index d6dda8a84..ab504610d 100644 --- a/layouts/_default/_markup/render-link.html +++ b/layouts/_default/_markup/render-link.html @@ -10,6 +10,6 @@ {{/* This is a custom link resolver that resolves both internal and external links, thanks to @cmd-ntrf for the helpful fix. */}} - + {{- $title | safeHTML -}} \ No newline at end of file diff --git a/layouts/shortcodes/feedback.html b/layouts/shortcodes/feedback.html new file mode 100644 index 000000000..b52498fa0 --- /dev/null +++ b/layouts/shortcodes/feedback.html @@ -0,0 +1,10 @@ +{{/* Hugo shortcode for generating a feedback callout with button */}} +{{ $url := .Get "url" | default .Page.Permalink }} +{{ $feedbackForm := "https://docs.google.com/forms/d/e/1FAIpQLSff-u-sWFuwO1-VTgk2Ir7f1nfUUlLevQk_Vkk_jnmcI1nJnw/viewform?usp=pp_url&entry.648332035=" }} +{{ $fullUrl := printf "%s%s" $feedbackForm $url }} + + +
+
Give us feedback! Click here to provide feedback that will help us make this more impactful.
+
+
\ No newline at end of file diff --git a/scripts/extract_org_logos.py b/scripts/extract_org_logos.py index 73681fcd7..aa22d01f9 100755 --- a/scripts/extract_org_logos.py +++ b/scripts/extract_org_logos.py @@ -37,7 +37,7 @@ def load_yaml_file(filepath): except Exception: return None -def extract_org_from_values(values_config): +def extract_org_from_values(values_config, hub_domain): """Extract org info from values file.""" try: org = values_config.get('jupyterhub', {}).get('custom', {}).get('homepage', {}).get('templateVars', {}).get('org', {}) @@ -48,7 +48,7 @@ def extract_org_from_values(values_config): return None return { 'name': name, - 'url': org.get('url'), + 'url': f'https://{hub_domain}' if hub_domain else org.get('url'), 'logo_url': org.get('logo_url') } except Exception: @@ -58,25 +58,26 @@ def extract_org_from_values(values_config): def process_clusters(clusters_dir): """Process all clusters and extract org info.""" orgs = [] - + for cluster_dir in clusters_dir.iterdir(): if not cluster_dir.is_dir(): continue - + cluster_file = cluster_dir / "cluster.yaml" cluster_config = load_yaml_file(cluster_file) - + if not cluster_config: continue - + for hub in cluster_config.get('hubs', []): + hub_domain = hub.get('domain') for values_file in hub.get('helm_chart_values_files', []): if values_file.endswith('.values.yaml'): values_path = cluster_dir / values_file values_config = load_yaml_file(values_path) - + if values_config: - org_info = extract_org_from_values(values_config) + org_info = extract_org_from_values(values_config, hub_domain) if org_info: orgs.append(org_info)