From 137ed967d68a8496c170866fd34b3f0c6e922327 Mon Sep 17 00:00:00 2001
From: Benjie Gillam
Date: Thu, 16 Jul 2026 14:44:54 +0100
Subject: [PATCH] Add a handbook about the crowdfund
---
crowdfund/application.md | 25 +++++++++++
crowdfund/filing.md | 85 ++++++++++++++++++++++++++++++++++++++
crowdfund/index.md | 20 +++++++++
docusaurus.config.ts | 1 +
sidebars.crowdfund.ts | 7 ++++
src/pages/index.module.css | 10 +++--
src/pages/index.tsx | 11 +++++
7 files changed, 155 insertions(+), 4 deletions(-)
create mode 100644 crowdfund/application.md
create mode 100644 crowdfund/filing.md
create mode 100644 crowdfund/index.md
create mode 100644 sidebars.crowdfund.ts
diff --git a/crowdfund/application.md b/crowdfund/application.md
new file mode 100644
index 0000000..a9ea397
--- /dev/null
+++ b/crowdfund/application.md
@@ -0,0 +1,25 @@
+---
+title: Application process
+sidebar_position: 2
+---
+
+Ambassadors and locals organizers can request crowdfund support by emailing
+[operations@graphql.org][]. The email should contain:
+
+- The purpose of the request.
+- An estimate of the amounts needed (for example travel and accommodation
+ amounts) in US Dollars.
+- Their full legal name.
+- Their mailing address.
+- Their preferred email address.
+
+If the request is approved, someone from the Linux Foundation will add you as a
+beneficiary to the crowdfund platform, and you will be invited to create an
+account on Expensify - you should do so promptly. You should also be informed
+which email addresses you should include in the `CC` when filing any reports -
+if you were not told this, please ask.
+
+Once all costs are incurred and all receipts are available for a single request,
+a report should be created following the [filing process](/crowdfund/filing).
+
+[operations@graphql.org]: mailto:operations@graphql.org
diff --git a/crowdfund/filing.md b/crowdfund/filing.md
new file mode 100644
index 0000000..8f4fbf7
--- /dev/null
+++ b/crowdfund/filing.md
@@ -0,0 +1,85 @@
+---
+title: Filing process
+sidebar_position: 3
+---
+
+If you do not yet have access to expensify, please complete the
+[application process](/crowdfund/application) first.
+
+## Terminology
+
+### Report
+
+**A "report" is a claim for refund.**
+
+For a single event (e.g. a Local, a Conference, etc), exactly **ONE REPORT**
+should be filed. The report should be itemized - each individual expense should
+be entered as **separate receipts** within the **same report**.
+
+> [!DANGER] Do NOT combine multiple receipts into a single PDF - keep them
+> separate.
+
+### Receipts
+
+**A "receipt" is a single scanned document from a vendor showing an amount paid
+related to a report.**
+
+Each report may have more than one receipt.
+
+The amounts in each receipt must match exactly the amount entered.
+
+An expense cannot be claimed without a receipt.
+
+## Creating a report
+
+Log in to Expensify.
+
+Create a basic report:
+
+- **Department**: LFX
+
+Then move on to adding expenses:
+
+## Adding expenses
+
+Each receipt should have its own expense entry (on the **same** report).
+
+Here's some guidance on the inputs:
+
+- **Currency**: match the currency of the receipt.
+- **Description**: The descriptions will be rendered publicly, but are
+ truncated, thus please prefix them with the most important info, e.g.:
+ - Report name: `(London) April 26 GraphQL Local`
+ - Receipt name: `(London) Pizzas`
+ - Receipt name: `(London) Drinks`
+ - Receipt name: `(London) Stickers`
+ - Report name: `(Ambassador) Amsterdam GraphQL Day`
+ - Receipt name: `(Ambassador) Outbound travel`
+ - Receipt name: `(Ambassador) 2 nights hotel stay`
+ - Receipt name: `(Ambassador) Return travel`
+ - Receipt name: `(Ambassador) Stickers`
+- **Project**: "graphql" (**NOT** "GraphiQL")
+- **Category**: whatever seems right to you. For flyers/stickers/swag use
+ "Marketing". For GraphQL Locals if in doubt use "Meetups".
+
+## Submitting your request
+
+1. Go to Settings > Account > Wallet and make sure you have linked a bank
+ account.
+2. Submit the report to LFX:
+ - **CC**: be sure to include the list of email addresses you were given to CC
+ during the application process, or request that list if you do not have it.
+ - **Memo**: Same as description (e.g. "(Ambassador) Amsterdam GraphQL Day")
+
+## Getting paid
+
+Once a report is submitted, it will be validated by a member of the Linux
+Foundation team. Unless added to the CC explicitly, the GraphQL Foundation
+currently have no visibility into this process.
+
+Allow 30 days for payment to clear, longer in certain territories. If after 35
+days still no updates, applicant should use the "support" feature (modal?)
+available from the report they have created through Expensify; this message will
+then route to an admin to figure out why it went wrong. The GraphQL Foundation
+can only offer limited help here, feel free to keep us in the loop but your
+support requests should go through expensify.
diff --git a/crowdfund/index.md b/crowdfund/index.md
new file mode 100644
index 0000000..efef543
--- /dev/null
+++ b/crowdfund/index.md
@@ -0,0 +1,20 @@
+---
+title: Crowdfund
+sidebar_position: 1
+---
+
+The [GraphQL Crowdfund](https://fund.graphql.org/) can be found at
+https://fund.graphql.org
+
+The crowdfund is shared across a number of GraphQL Foundation initiatives
+including the Ambassador and Locals programs, and is funded by the GraphQL
+Foundation and other supportive individuals and organizations from the GraphQL
+Community.
+
+Since the crowdfund has a very limited budget, we ask that you're respectful of
+the limited resources, help us to leverage them wisely, and always ask your
+employer or other local companies for support before requesting from the shared
+pot.
+
+To apply for funding, complete the
+[application process](/crowdfund/application).
diff --git a/docusaurus.config.ts b/docusaurus.config.ts
index a94c15d..c7efd3a 100644
--- a/docusaurus.config.ts
+++ b/docusaurus.config.ts
@@ -76,6 +76,7 @@ const config: Config = {
docs("wg"),
docs("tsc"),
docs("grants"),
+ docs("crowdfund"),
],
themeConfig: {
diff --git a/sidebars.crowdfund.ts b/sidebars.crowdfund.ts
new file mode 100644
index 0000000..040e34d
--- /dev/null
+++ b/sidebars.crowdfund.ts
@@ -0,0 +1,7 @@
+import type { SidebarsConfig } from "@docusaurus/plugin-content-docs";
+
+const sidebars: SidebarsConfig = {
+ docs: [{ type: "autogenerated", dirName: "." }],
+};
+
+export default sidebars;
diff --git a/src/pages/index.module.css b/src/pages/index.module.css
index 27f1277..f7bd18a 100644
--- a/src/pages/index.module.css
+++ b/src/pages/index.module.css
@@ -30,16 +30,18 @@
}
.overviewGrid {
- display: grid;
+ display: flex;
gap: 2rem;
- grid-template-columns: repeat(auto-fit, minmax(22rem, 1fr));
+ flex-wrap: wrap;
margin-bottom: 2.5rem;
- align-items: start;
+ align-items: stretch;
+ justify-content: space-around;
}
.handbookCard {
+ flex: 1 0 22rem;
+ max-width: 30rem;
display: flex;
- height: 100%;
flex-direction: column;
border: 2px solid #e10098;
border-radius: 15px;
diff --git a/src/pages/index.tsx b/src/pages/index.tsx
index 15d1a53..a2fc2cf 100644
--- a/src/pages/index.tsx
+++ b/src/pages/index.tsx
@@ -124,6 +124,17 @@ export default function Home(): ReactNode {
releases and coordinating between projects.
+
+
+ The GraphQL Foundation supports many of its initiatives
+ through crowdfunding. Find out how to contribute to the fund,
+ and how to claim from it.
+
+
💡 Community-maintained