From 2e20a95c77781d07d38fd4e0a88b971e9ab84f1f Mon Sep 17 00:00:00 2001 From: JPVenson Date: Wed, 24 Sep 2025 21:46:07 +0300 Subject: [PATCH] Add Team-Member Donation Page (#1557) * Add Donation page * Move donation data to src dir * typo * Add @1hitsong donation details * Fix links * Listify entries * Update docs/general/contributing/direct-donations.mdx Co-authored-by: Niels van Velzen * Apply suggestions from code review Co-authored-by: Niels van Velzen * Add @nielsvanvelzen sponsor info * Clarified inclusion rules * Add @TimGels sponsor info * Add Xbox role to @timgels sponsor info * Add Enum based data entries * Add @joshuaboniface sponsor info * Rephrasing inclusing rules * Add @LePips sponsor info * Apply suggestions from code review Co-authored-by: Ethan Pippin * Change Switftfin developer role * Update @JPVenson title * Add @ferferga sponsor info * Rephrase Inclusion rules * Add @thornbill sponsor info * Add @bond-009 sponsor info * add core as codeowners to direct-donations.mdx * Correct Bond Liberapay entry * Correct name entry * typo * Add @oddstr13 sponsor info * Update .github/CODEOWNERS Co-authored-by: Niels van Velzen --------- Co-authored-by: Niels van Velzen Co-authored-by: Ethan Pippin --- .github/CODEOWNERS | 1 + .../general/contributing/direct-donations.mdx | 54 +++++ docs/general/faq.md | 2 +- src/data/donations.ts | 197 ++++++++++++++++++ 4 files changed, 253 insertions(+), 1 deletion(-) create mode 100644 docs/general/contributing/direct-donations.mdx create mode 100644 src/data/donations.ts diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 9e366d88..e57f2466 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1,6 +1,7 @@ .github/ @jellyfin/core blog/ @jellyfin/core src/data/ @jellyfin/core +docs/general/contributing/direct-donations.mdx @jellyfin/core docs/general/about.md @jellyfin/core docs/general/community-standards.md @joshuaboniface docs/general/contributing/ @jellyfin/core diff --git a/docs/general/contributing/direct-donations.mdx b/docs/general/contributing/direct-donations.mdx new file mode 100644 index 00000000..dbd815ef --- /dev/null +++ b/docs/general/contributing/direct-donations.mdx @@ -0,0 +1,54 @@ +--- +uid: donate-directly +title: Donations to individual developers +--- + +import Link from '@docusaurus/Link'; +import { donations } from '../../../src/data/donations'; + +Jellyfin is free and will always be free. We do not accept any money or benefit for any form of favor or feature and no implicit or explicit entitlement should be assumed or demanded when donating to Jellyfin or one of its developers. + +That said the many developers or moderators accept donations purely as a sign of gratitude for their volunteer work on the project or officially related. + +This table is not conclusive and if you are missing a specific person you want to donate to, please contact the developer directly. +This list is also intentionally randomly ordered to avoid any appearance of favoring any one developer. + + Math.random() - 0.5)[0].links[0].url}>Pick for me, just somebody. + + + + + + + + + {donations + .sort(() => Math.random() - 0.5) + .map((element) => ( + + + + + + ))} + +
UsernameRoleDonation Links
{element.title} +
    + {element.roles.map((role) => ( +
  • {role}
  • + ))} +
+
+
    + {element.links.map((link) => ( +
  • + {link.name} +
  • + ))} +
+
+ +The rules for inclusion into this lists are being a currently active member of the Jellyfin Team and having shown a long term commitment towards the project as a whole. +This can mean either significant contributions to the Jellyfin Server project, any officially recognised Clients or a Jellyfin-Labs project; or existing long commitments towards official moderation efforts as an community moderator in our chat or forum. + +As with all official associations with the Jellyfin project, the Core team has the final say on any decision regarding modifications to this list. diff --git a/docs/general/faq.md b/docs/general/faq.md index a1ed0158..125f0088 100644 --- a/docs/general/faq.md +++ b/docs/general/faq.md @@ -48,4 +48,4 @@ Please see our [requesting features](/docs/general/contributing/issues#requestin All we can ask is you [use Jellyfin](/docs/general/installation), [report any bugs](/docs/general/contributing/issues#reporting-bugs), and tell your friends about us! Really, we're just people volunteering our time to help build a better media system, so joining the community is the best way to show your support. -We do offer a donations page [on OpenCollective](https://opencollective.com/jellyfin), however please note that these funds are **only** used for infrastructure. All our developers are unpaid volunteers on principle. +We do offer a donations page [on OpenCollective](https://opencollective.com/jellyfin), however please note that these funds are **only** used for infrastructure. All our developers are unpaid volunteers on principle. Many individual developers that are active in the project accept [donations](/docs/general/contributing/direct-donations.mdx) however. diff --git a/src/data/donations.ts b/src/data/donations.ts new file mode 100644 index 00000000..a29eab42 --- /dev/null +++ b/src/data/donations.ts @@ -0,0 +1,197 @@ +type Link = { + name: string; + url: string; +}; + +export type DonationTarget = { + title: string; + roles: Array; + links: Array; +}; + +export enum MiscRoles { + Mod = 'Moderator', + CommunityMod = 'Community Moderator', + CoreTeam = 'Core Team', + ReleaseManager = 'Release Manager', + InfastructureAdmin = 'Infastructure Administrator', + ProjectLeader = 'Project Leader', + Tooling = 'Tooling/Packaging Developer' +} + +export enum Projects { + Server = 'Jellyfin Server', + Xbox = 'Jellyfin for Xbox', + Roku = 'Jellyfin for Roku', + ATV = 'Jellyfin for Android TV', + Android = 'Jellyfin for Android', + Swiftfin = 'Swiftfin', + Vue = 'Jellyfin Vue', + JellyfinWeb = 'Jellyfin Web', + IOS = 'Jellyfin for iOS', + Kodi = 'Jellyfin for Kodi' +} + +export enum ProjectRole { + SubprojectLead = 'Subproject Lead', + Contributor = 'Contributor' +} + +export enum SponsorTypes { + GithubSponsor = 'Github Sponsors', + BuyMeACoffee = 'Buy Me a Coffee', + Patreon = 'Patreon', + Liberapay = 'Liberapay', + KoFi = 'ko-fi' +} + +function GetProjectRole(project: Projects, roleInProject: ProjectRole) { + return `${project} ${roleInProject}`; +} + +export const donations: Array = [ + { + title: 'Jean-Pierre Bachmann (JPVenson)', + roles: [ + GetProjectRole(Projects.Xbox, ProjectRole.SubprojectLead), + GetProjectRole(Projects.Server, ProjectRole.Contributor), + MiscRoles.Mod + ], + links: [ + { + url: 'https://coff.ee/venson', + name: SponsorTypes.BuyMeACoffee + } + ] + }, + { + title: '1hitsong', + roles: [GetProjectRole(Projects.Roku, ProjectRole.SubprojectLead)], + links: [ + { + url: 'https://coff.ee/1hitsong', + name: SponsorTypes.BuyMeACoffee + }, + { + url: 'https://github.com/sponsors/1hitsong', + name: SponsorTypes.GithubSponsor + } + ] + }, + { + title: 'Niels van Velzen', + roles: [ + MiscRoles.CoreTeam, + GetProjectRole(Projects.ATV, ProjectRole.SubprojectLead), + GetProjectRole(Projects.Android, ProjectRole.SubprojectLead) + ], + links: [ + { + url: 'https://github.com/sponsors/nielsvanvelzen', + name: SponsorTypes.GithubSponsor + }, + { + url: 'https://coff.ee/nielsvanvelzen', + name: SponsorTypes.BuyMeACoffee + } + ] + }, + { + title: 'Tim Gels', + roles: [MiscRoles.CommunityMod, GetProjectRole(Projects.Xbox, ProjectRole.Contributor)], + links: [ + { + url: 'https://github.com/sponsors/TimGels', + name: SponsorTypes.GithubSponsor + }, + { + url: 'https://coff.ee/timgels', + name: SponsorTypes.BuyMeACoffee + } + ] + }, + { + title: 'Joshua Boniface', + roles: [MiscRoles.ProjectLeader, MiscRoles.ReleaseManager, MiscRoles.InfastructureAdmin], + links: [ + { + url: 'https://github.com/sponsors/joshuaboniface', + name: SponsorTypes.GithubSponsor + }, + { + url: 'https://patreon.com/joshuaboniface', + name: SponsorTypes.Patreon + } + ] + }, + { + title: 'Ethan Pippin', + roles: [GetProjectRole(Projects.Swiftfin, ProjectRole.SubprojectLead)], + links: [ + { + url: 'https://github.com/sponsors/LePips', + name: SponsorTypes.GithubSponsor + } + ] + }, + { + title: 'Fernando Fernández (ferferga)', + roles: [GetProjectRole(Projects.Vue, ProjectRole.SubprojectLead)], + links: [ + { + url: 'https://github.com/sponsors/ferferga', + name: SponsorTypes.GithubSponsor + } + ] + }, + { + title: 'Bill Thornton', + roles: [ + MiscRoles.CoreTeam, + GetProjectRole(Projects.JellyfinWeb, ProjectRole.SubprojectLead), + GetProjectRole(Projects.IOS, ProjectRole.SubprojectLead) + ], + links: [ + { + url: 'https://github.com/sponsors/thornbill', + name: SponsorTypes.GithubSponsor + }, + { + url: 'https://coff.ee/thornbill', + name: SponsorTypes.BuyMeACoffee + } + ] + }, + { + title: 'Bond_009', + roles: [MiscRoles.CoreTeam, GetProjectRole(Projects.Server, ProjectRole.Contributor)], + links: [ + { + url: 'https://liberapay.com/Bond_009', + name: SponsorTypes.Liberapay + }, + { + url: 'https://github.com/sponsors/Bond-009', + name: SponsorTypes.GithubSponsor + } + ] + }, + { + title: 'Odd Stråbø', + roles: [GetProjectRole(Projects.Kodi, ProjectRole.SubprojectLead), MiscRoles.Tooling], + links: [ + { + url: 'https://github.com/sponsors/oddstr13', + name: SponsorTypes.GithubSponsor + }, + { + url: 'https://ko-fi.com/oddstr13', + name: SponsorTypes.KoFi + }, + { + url: 'https://buymeacoffee.com/oddstr13', + name: SponsorTypes.BuyMeACoffee + } + ] + } +];