diff --git a/site/.env.example b/site/.env.example
index b7080b49e..0596880e9 100644
--- a/site/.env.example
+++ b/site/.env.example
@@ -1 +1,6 @@
-VITE_SESSION_SECRET=MY_SUPER_VALUE
\ No newline at end of file
+VITE_SESSION_SECRET=MY_SUPER_VALUE
+
+# Requires the `repo` scope.
+GITHUB_TOKEN_TRIGGER_SPONSORS=MY_SUPER_VALUE
+
+WEBHOOK_PATH="/webhook/something"
\ No newline at end of file
diff --git a/site/src/handles/webhookHandle.js b/site/src/handles/webhookHandle.js
new file mode 100644
index 000000000..4eab99564
--- /dev/null
+++ b/site/src/handles/webhookHandle.js
@@ -0,0 +1,32 @@
+import { GITHUB_TOKEN_TRIGGER_SPONSORS, WEBHOOK_PATH } from '$env/static/private'
+import { json } from '@sveltejs/kit'
+
+/** @type {import('@sveltejs/kit').Handle} */
+export const webhookHandle = async ({ event, resolve }) => {
+ // if WEBHOOK_PATH is defined and the request match, let's go
+ if (WEBHOOK_PATH && event.url.pathname === WEBHOOK_PATH) {
+ // trigger the CI
+ const result = await event.fetch(
+ `https://api.github.com/repos/HoudiniGraphql/sponsors/actions/workflows/generate.yml/dispatches`,
+ {
+ method: 'POST',
+ headers: {
+ Accept: 'application/vnd.github+json',
+ Authorization: `Bearer ${GITHUB_TOKEN_TRIGGER_SPONSORS}`,
+ 'X-GitHub-Api-Version': '2022-11-28'
+ },
+ body: JSON.stringify({ ref: 'main' })
+ }
+ )
+
+ let data = null
+ try {
+ data = await result.json()
+ } catch (error) {}
+
+ return json({ status: result.status, statusText: result.statusText, data })
+ }
+
+ const response = await resolve(event)
+ return response
+}
diff --git a/site/src/hooks.server.js b/site/src/hooks.server.js
index b99d78365..941646700 100644
--- a/site/src/hooks.server.js
+++ b/site/src/hooks.server.js
@@ -1,4 +1,8 @@
import { redirect } from '@sveltejs/kit'
+import { sequence } from '@sveltejs/kit/hooks'
+import { webhookHandle } from './handles/webhookHandle'
+
+export const handle = sequence(webhookHandle)
/** @type {import('@sveltejs/kit').HandleServerError} */
export function handleError({ error, event }) {
diff --git a/site/src/routes/_sponsors/+page.server.js b/site/src/routes/_sponsors/+page.server.js
new file mode 100644
index 000000000..dd259a3e1
--- /dev/null
+++ b/site/src/routes/_sponsors/+page.server.js
@@ -0,0 +1,6 @@
+export const load = async (event) => {
+ const result = await event.fetch(
+ 'https://raw.githubusercontent.com/HoudiniGraphql/sponsors/main/generated/sponsors.svg'
+ )
+ return { svg: await result.text() }
+}
diff --git a/site/src/routes/_sponsors/+page.svelte b/site/src/routes/_sponsors/+page.svelte
new file mode 100644
index 000000000..be0d7185b
--- /dev/null
+++ b/site/src/routes/_sponsors/+page.svelte
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+{@html data.svg}
+
+
diff --git a/site/tsconfig.json b/site/tsconfig.json
index f34a7bef7..5efb51ebc 100644
--- a/site/tsconfig.json
+++ b/site/tsconfig.json
@@ -32,5 +32,11 @@
"~/*": ["src/*"]
}
},
- "include": ["src/**/*.d.ts", "src/**/*.js", "src/**/*.ts", "src/**/*.svelte"]
+ "include": [
+ "src/**/*.d.ts",
+ "src/**/*.js",
+ "src/**/*.ts",
+ "src/**/*.svelte",
+ ".svelte-kit/ambient.d.ts"
+ ]
}