diff --git a/packages/playground/public/images/icons/jitsi.png b/packages/playground/public/images/icons/jitsi.png
new file mode 100644
index 0000000000..96b89a0f29
Binary files /dev/null and b/packages/playground/public/images/icons/jitsi.png differ
diff --git a/packages/playground/public/info/jitsi.md b/packages/playground/public/info/jitsi.md
new file mode 100644
index 0000000000..813cdc29e9
--- /dev/null
+++ b/packages/playground/public/info/jitsi.md
@@ -0,0 +1,9 @@
+---
+title: Jitsi
+---
+
+Jitsi Meet is a set of Open Source projects which empower users to use and deploy video conferencing platforms with state-of-the-art video quality and features. For more details, check [Jitsi documentation](https://www.manual.grid.tf/documentation/dashboard/solutions/jitsi.html).
+
+```
+
+```
diff --git a/packages/playground/src/components/vm_deployment_table.vue b/packages/playground/src/components/vm_deployment_table.vue
index 759cfc1b6b..a4a833fce1 100644
--- a/packages/playground/src/components/vm_deployment_table.vue
+++ b/packages/playground/src/components/vm_deployment_table.vue
@@ -343,6 +343,7 @@ const filteredHeaders = computed(() => {
ProjectName.Subsquid,
ProjectName.Peertube,
ProjectName.Jenkins,
+ ProjectName.Jitsi,
] as string[];
const IPV4Solutions = [
@@ -367,6 +368,7 @@ const filteredHeaders = computed(() => {
ProjectName.Peertube,
ProjectName.Jenkins,
ProjectName.Caprover,
+ ProjectName.Jitsi,
] as string[];
const WireguardSolutions = [ProjectName.VM, ProjectName.Fullvm, ProjectName.Umbrel, ProjectName.TFRobot] as string[];
diff --git a/packages/playground/src/constants/deployment_list.ts b/packages/playground/src/constants/deployment_list.ts
index dab3b161b3..23ed230d41 100644
--- a/packages/playground/src/constants/deployment_list.ts
+++ b/packages/playground/src/constants/deployment_list.ts
@@ -40,6 +40,11 @@ export const deploymentListEnvironments = {
CASPERLABS_HOSTNAME: "Casperlabs Hostname",
},
+ jitsi: {
+ SSH_KEY: _ssh,
+ JITSI_HOSTNAME: "Jitsi Hostname",
+ },
+
discourse: {
SSH_KEY: _ssh,
DISCOURSE_HOSTNAME: "Discourse Hostname",
diff --git a/packages/playground/src/router/index.ts b/packages/playground/src/router/index.ts
index 54cea2b410..27fa03c8d0 100644
--- a/packages/playground/src/router/index.ts
+++ b/packages/playground/src/router/index.ts
@@ -253,6 +253,28 @@ function createApplicationsRoutes(): RouteRecordRaw[] {
},
},
},
+ {
+ path: DashboardRoutes.Applications.Jitsi,
+ component: () => import("../views/jitsi_view.vue"),
+ meta: {
+ title: "Jitsi",
+ info: { page: "info/jitsi.md" },
+ navbarConfig: {
+ back: true,
+ path: [
+ { title: "Deploy" },
+ {
+ title: "Applications",
+ disabled: false,
+ to: DashboardRoutes.Deploy.Applications,
+ },
+ {
+ title: "Jitsi",
+ },
+ ],
+ },
+ },
+ },
{
path: DashboardRoutes.Applications.Algorand,
component: () => import("../views/algorand_view.vue"),
diff --git a/packages/playground/src/router/routes.ts b/packages/playground/src/router/routes.ts
index 954bc7ceb2..39e147d442 100644
--- a/packages/playground/src/router/routes.ts
+++ b/packages/playground/src/router/routes.ts
@@ -72,6 +72,7 @@ enum ApplicationRoutes {
Gitea = "/deploy/applications/gitea/",
Nostr = "/deploy/applications/nostr/",
Domains = "/deploy/applications/domains/",
+ Jitsi = "/deploy/applications/jitsi/",
}
const DashboardRoutes = {
diff --git a/packages/playground/src/types/index.ts b/packages/playground/src/types/index.ts
index 5e192e54fe..6b14b045ef 100644
--- a/packages/playground/src/types/index.ts
+++ b/packages/playground/src/types/index.ts
@@ -132,6 +132,7 @@ export enum ProjectName {
Gitea = "Gitea",
Nostr = "Nostr",
Domains = "Domains",
+ Jitsi = "Jitsi",
}
export enum SolutionCode {
@@ -163,6 +164,7 @@ export enum SolutionCode {
gitea = "gt",
nostr = "nt",
Domains = "dm",
+ jitsi = "jt",
}
export const solutionType: { [key: string]: string } = {
@@ -191,6 +193,7 @@ export const solutionType: { [key: string]: string } = {
Gitea: "Gitea",
nostr: "Nostr",
domains: "Domains",
+ jitsi: "Jitsi",
};
export interface solutionFlavor {
diff --git a/packages/playground/src/utils/delete_deployment.ts b/packages/playground/src/utils/delete_deployment.ts
index 08aab5c208..4144141a02 100644
--- a/packages/playground/src/utils/delete_deployment.ts
+++ b/packages/playground/src/utils/delete_deployment.ts
@@ -85,6 +85,7 @@ export function solutionHasGateway(projectName: ProjectName) {
ProjectName.Taiga,
ProjectName.Wordpress,
ProjectName.Nextcloud,
+ ProjectName.Jitsi,
];
for (const solution of solutions) {
diff --git a/packages/playground/src/views/jitsi_view.vue b/packages/playground/src/views/jitsi_view.vue
new file mode 100644
index 0000000000..9b14e8353f
--- /dev/null
+++ b/packages/playground/src/views/jitsi_view.vue
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/playground/src/views/solutions_view.vue b/packages/playground/src/views/solutions_view.vue
index 39567a0266..d154a5965d 100644
--- a/packages/playground/src/views/solutions_view.vue
+++ b/packages/playground/src/views/solutions_view.vue
@@ -158,6 +158,13 @@ export default {
icon: "domains.png",
route: DashboardRoutes.Applications.Domains,
},
+ {
+ title: "Jitsi",
+ excerpt:
+ "Jitsi Meet is a set of Open Source projects which empower users to use and deploy video conferencing platforms with state-of-the-art video quality and features.",
+ icon: "jitsi.png",
+ route: DashboardRoutes.Applications.Jitsi,
+ },
];
cards = cards.sort((a, b) => a.title.localeCompare(b.title));
diff --git a/packages/playground/src/weblets/tf_deployment_list.vue b/packages/playground/src/weblets/tf_deployment_list.vue
index d7c591359e..301fa966a0 100644
--- a/packages/playground/src/weblets/tf_deployment_list.vue
+++ b/packages/playground/src/weblets/tf_deployment_list.vue
@@ -338,6 +338,15 @@
:href="'https://' + item.env.WP_URL + '/wp-admin'"
/>
+
+
+
+
+
@@ -454,6 +463,7 @@ const tabs: Tab[] = [
{ title: "Nostr", value: "Nostr", imgPath: "images/icons/nostr.png" },
{ title: "Jenkins", value: "Jenkins", imgPath: "images/icons/jenkins.png" },
{ title: "Domains", value: "Domains", imgPath: "images/icons/domains.png" },
+ { title: "Jitsi", value: "Jitsi", imgPath: "images/icons/jitsi.png" },
];
const layout = useLayout();
diff --git a/packages/playground/src/weblets/tf_jitsi.vue b/packages/playground/src/weblets/tf_jitsi.vue
new file mode 100644
index 0000000000..6ebdc16907
--- /dev/null
+++ b/packages/playground/src/weblets/tf_jitsi.vue
@@ -0,0 +1,215 @@
+
+
+ Deploy a Jitsi Instance
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+