diff --git a/src/content/config.ts b/src/content/config.ts
index a3d63c47..1f4a90df 100644
--- a/src/content/config.ts
+++ b/src/content/config.ts
@@ -46,7 +46,7 @@ const implementations = defineCollection({
description: z.string().describe('HTML allowed'),
license: z.string(),
type: z.union([z.literal('official'), z.literal('community')]),
- subtype: z.union([z.literal('client'), z.literal('server')]).optional(),
+ subtype: z.union([z.literal('client'), z.literal('server'), z.literal('both')]).optional(),
}),
})
diff --git a/src/content/implementations/resumable-upload.json b/src/content/implementations/resumable-upload.json
new file mode 100644
index 00000000..a739593d
--- /dev/null
+++ b/src/content/implementations/resumable-upload.json
@@ -0,0 +1,14 @@
+{
+ "href": "https://github.com/sts07142/resumable-upload",
+ "authors": [
+ {
+ "name": "sts07142",
+ "href": "https://github.com/sts07142"
+ }
+ ],
+ "name": "sts07142/resumable-upload",
+ "description": "A Python implementation of the tus v1.0.0 for server and client, with zero runtime dependencies.",
+ "license": "MIT",
+ "type": "community",
+ "subtype": "both"
+}
diff --git a/src/pages/implementations.astro b/src/pages/implementations.astro
index 53fbc969..a126c9c5 100644
--- a/src/pages/implementations.astro
+++ b/src/pages/implementations.astro
@@ -6,6 +6,11 @@ import { getCollection } from 'astro:content'
const description = 'Explore real-life tus protocol implementations in various languages and platforms, showcasing its versatility and efficiency in file uploads.'
+const officialBoth = await getCollection(
+ 'implementations',
+ (d) => d.data.type === 'official' && d.data.subtype === 'both'
+)
+
const officialServers = await getCollection(
'implementations',
(d) => d.data.type === 'official' && d.data.subtype === 'server'
@@ -16,6 +21,11 @@ const officialClients = await getCollection(
(d) => d.data.type === 'official' && d.data.subtype === 'client'
)
+const communityBothImplementations = await getCollection(
+ 'implementations',
+ (d) => d.data.type === 'community' && d.data.subtype === 'both'
+)
+
const communityClientImplementations = await getCollection(
'implementations',
(d) => d.data.type === 'community' && d.data.subtype === 'client'
@@ -69,6 +79,16 @@ const communityServerImplementations = await getCollection(
developers.