diff --git a/apps/web/components/apps/App.tsx b/apps/web/components/apps/App.tsx index f390eab310..187a115c3b 100644 --- a/apps/web/components/apps/App.tsx +++ b/apps/web/components/apps/App.tsx @@ -66,7 +66,9 @@ const Component = ({ } ); - const allowedMultipleInstalls = categories.indexOf("calendar") > -1; + // variant not other allows, an app to be shown in calendar category without requiring an actual calendar connection e.g. vimcal + // Such apps, can only be installed once. + const allowedMultipleInstalls = categories.indexOf("calendar") > -1 && variant !== "other"; return (
diff --git a/packages/app-store/apps.metadata.generated.ts b/packages/app-store/apps.metadata.generated.ts index 1cc1b00518..d11dd7f1db 100644 --- a/packages/app-store/apps.metadata.generated.ts +++ b/packages/app-store/apps.metadata.generated.ts @@ -39,6 +39,7 @@ import { metadata as stripepayment_meta } from "./stripepayment/_metadata"; import { metadata as tandemvideo_meta } from "./tandemvideo/_metadata"; import { metadata as telegram_meta } from "./telegram/_metadata"; import { metadata as typeform_meta } from "./typeform/_metadata"; +import { metadata as vimcal_meta } from "./vimcal/_metadata"; import { metadata as vital_meta } from "./vital/_metadata"; import { metadata as weather_in_your_calendar_meta } from "./weather_in_your_calendar/_metadata"; import { metadata as whatsapp_meta } from "./whatsapp/_metadata"; @@ -86,6 +87,7 @@ export const appStoreMetadata = { tandemvideo: tandemvideo_meta, telegram: telegram_meta, typeform: typeform_meta, + vimcal: vimcal_meta, vital: vital_meta, weather_in_your_calendar: weather_in_your_calendar_meta, whatsapp: whatsapp_meta, diff --git a/packages/app-store/apps.server.generated.ts b/packages/app-store/apps.server.generated.ts index 1bd44d031f..a0b3ddfa99 100644 --- a/packages/app-store/apps.server.generated.ts +++ b/packages/app-store/apps.server.generated.ts @@ -38,6 +38,7 @@ export const apiHandlers = { tandemvideo: import("./tandemvideo/api"), telegram: import("./telegram/api"), typeform: import("./typeform/api"), + vimcal: import("./vimcal/api"), vital: import("./vital/api"), weather_in_your_calendar: import("./weather_in_your_calendar/api"), whatsapp: import("./whatsapp/api"), diff --git a/packages/app-store/vimcal/README.mdx b/packages/app-store/vimcal/README.mdx new file mode 100644 index 0000000000..5a5eeb3407 --- /dev/null +++ b/packages/app-store/vimcal/README.mdx @@ -0,0 +1,11 @@ +--- +description: The world's fastest calendar, beautifully designed for a remote world +items: + - /api/app-store/vimcal/1.gif + - /api/app-store/vimcal/2.gif + - /api/app-store/vimcal/3.gif + - /api/app-store/vimcal/4.gif +--- + +{description} + diff --git a/packages/app-store/vimcal/_metadata.ts b/packages/app-store/vimcal/_metadata.ts new file mode 100644 index 0000000000..9c7f2aa320 --- /dev/null +++ b/packages/app-store/vimcal/_metadata.ts @@ -0,0 +1,10 @@ +import type { AppMeta } from "@calcom/types/App"; + +import config from "./config.json"; + +export const metadata = { + category: "other", + ...config, +} as AppMeta; + +export default metadata; diff --git a/packages/app-store/vimcal/api/add.ts b/packages/app-store/vimcal/api/add.ts new file mode 100644 index 0000000000..a9a7df96d3 --- /dev/null +++ b/packages/app-store/vimcal/api/add.ts @@ -0,0 +1,21 @@ +import { AppDeclarativeHandler } from "@calcom/types/AppHandler"; + +import { createDefaultInstallation } from "../../_utils/installation"; +import appConfig from "../config.json"; + +const handler: AppDeclarativeHandler = { + // Instead of passing appType and slug from here, api/integrations/[..args] should be able to derive and pass these directly to createCredential + appType: appConfig.type, + variant: appConfig.variant, + slug: appConfig.slug, + supportsMultipleInstalls: false, + handlerType: "add", + redirect: { + newTab: true, + url: "https://cal.com/blog/cal-plus-vimcal", + }, + createCredential: ({ appType, user, slug }) => + createDefaultInstallation({ appType, userId: user.id, slug, key: {} }), +}; + +export default handler; diff --git a/packages/app-store/vimcal/api/index.ts b/packages/app-store/vimcal/api/index.ts new file mode 100644 index 0000000000..4c0d2ead01 --- /dev/null +++ b/packages/app-store/vimcal/api/index.ts @@ -0,0 +1 @@ +export { default as add } from "./add"; diff --git a/packages/app-store/vimcal/components/.gitkeep b/packages/app-store/vimcal/components/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/app-store/vimcal/config.json b/packages/app-store/vimcal/config.json new file mode 100644 index 0000000000..41bfd3b790 --- /dev/null +++ b/packages/app-store/vimcal/config.json @@ -0,0 +1,16 @@ +{ + "/*": "Don't modify slug - If required, do it using cli edit command", + "name": "Vimcal", + "slug": "vimcal", + "type": "vimcal_other", + "imageSrc": "/api/app-store/vimcal/icon.svg", + "logo": "/api/app-store/vimcal/icon.svg", + "url": "https://cal.com/apps/vimcal", + "variant": "other", + "categories": ["calendar"], + "publisher": "Cal.com, Inc.", + "email": "support@cal.com", + "description": "The world's fastest calendar, beautifully designed for a remote world\r", + "extendsFeature": "User", + "__createdUsingCli": true +} diff --git a/packages/app-store/vimcal/index.ts b/packages/app-store/vimcal/index.ts new file mode 100644 index 0000000000..5d372ceda3 --- /dev/null +++ b/packages/app-store/vimcal/index.ts @@ -0,0 +1,2 @@ +export * as api from "./api"; +export { metadata } from "./_metadata"; diff --git a/packages/app-store/vimcal/package.json b/packages/app-store/vimcal/package.json new file mode 100644 index 0000000000..4262385361 --- /dev/null +++ b/packages/app-store/vimcal/package.json @@ -0,0 +1,14 @@ +{ + "$schema": "https://json.schemastore.org/package.json", + "private": true, + "name": "@calcom/vimcal", + "version": "0.0.0", + "main": "./index.ts", + "description": "The world's fastest calendar, beautifully designed for a remote world\r", + "dependencies": { + "@calcom/lib": "*" + }, + "devDependencies": { + "@calcom/types": "*" + } +} diff --git a/packages/app-store/vimcal/static/1.avif b/packages/app-store/vimcal/static/1.avif new file mode 100644 index 0000000000..84b29b685e Binary files /dev/null and b/packages/app-store/vimcal/static/1.avif differ diff --git a/packages/app-store/vimcal/static/1.gif b/packages/app-store/vimcal/static/1.gif new file mode 100644 index 0000000000..af2618b6ef Binary files /dev/null and b/packages/app-store/vimcal/static/1.gif differ diff --git a/packages/app-store/vimcal/static/2.avif b/packages/app-store/vimcal/static/2.avif new file mode 100644 index 0000000000..0a686d8657 Binary files /dev/null and b/packages/app-store/vimcal/static/2.avif differ diff --git a/packages/app-store/vimcal/static/2.gif b/packages/app-store/vimcal/static/2.gif new file mode 100644 index 0000000000..cc6a50a5c7 Binary files /dev/null and b/packages/app-store/vimcal/static/2.gif differ diff --git a/packages/app-store/vimcal/static/3.avif b/packages/app-store/vimcal/static/3.avif new file mode 100644 index 0000000000..94d6e369da Binary files /dev/null and b/packages/app-store/vimcal/static/3.avif differ diff --git a/packages/app-store/vimcal/static/3.gif b/packages/app-store/vimcal/static/3.gif new file mode 100644 index 0000000000..49b5db53e1 Binary files /dev/null and b/packages/app-store/vimcal/static/3.gif differ diff --git a/packages/app-store/vimcal/static/4.avif b/packages/app-store/vimcal/static/4.avif new file mode 100644 index 0000000000..0f5e3dc4c8 Binary files /dev/null and b/packages/app-store/vimcal/static/4.avif differ diff --git a/packages/app-store/vimcal/static/4.gif b/packages/app-store/vimcal/static/4.gif new file mode 100644 index 0000000000..3c820e8ed9 Binary files /dev/null and b/packages/app-store/vimcal/static/4.gif differ diff --git a/packages/app-store/vimcal/static/icon.svg b/packages/app-store/vimcal/static/icon.svg new file mode 100644 index 0000000000..ee58606924 --- /dev/null +++ b/packages/app-store/vimcal/static/icon.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/prisma/seed-app-store.config.json b/packages/prisma/seed-app-store.config.json index 2d9e156f39..2c24a3f852 100644 --- a/packages/prisma/seed-app-store.config.json +++ b/packages/prisma/seed-app-store.config.json @@ -143,5 +143,11 @@ "categories": ["video"], "slug": "signal", "type": "signal_video" + }, + { + "dirName": "vimcal", + "categories": ["calendar"], + "slug": "vimcal", + "type": "vimcal_other" } ]