[cal url=/username/meetingid type=2 text="Schedule a call with me"]
+
+#### SHORTCODE CUSTOMIZATION
+- url: URL of the booking calendar
+- type: Add inline or popup embed. Inline embed: 1, Popup embed: 2
+- text: For popup embed, customize the text/button that triggers the popup.
+
diff --git a/packages/app-store/wordpress/_metadata.ts b/packages/app-store/wordpress/_metadata.ts
new file mode 100644
index 0000000000..9c7f2aa320
--- /dev/null
+++ b/packages/app-store/wordpress/_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/wordpress/api/add.ts b/packages/app-store/wordpress/api/add.ts
new file mode 100644
index 0000000000..fb6e427a8a
--- /dev/null
+++ b/packages/app-store/wordpress/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://wordpress.org/plugins/cal-com/",
+ },
+ createCredential: ({ appType, user, slug }) =>
+ createDefaultInstallation({ appType, userId: user.id, slug, key: {} }),
+};
+
+export default handler;
diff --git a/packages/app-store/wordpress/api/index.ts b/packages/app-store/wordpress/api/index.ts
new file mode 100644
index 0000000000..4c0d2ead01
--- /dev/null
+++ b/packages/app-store/wordpress/api/index.ts
@@ -0,0 +1 @@
+export { default as add } from "./add";
diff --git a/packages/app-store/wordpress/components/.gitkeep b/packages/app-store/wordpress/components/.gitkeep
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/packages/app-store/wordpress/config.json b/packages/app-store/wordpress/config.json
new file mode 100644
index 0000000000..d34d7ee8d9
--- /dev/null
+++ b/packages/app-store/wordpress/config.json
@@ -0,0 +1,16 @@
+{
+ "/*": "Don't modify slug - If required, do it using cli edit command",
+ "name": "Wordpress",
+ "slug": "wordpress",
+ "type": "wordpress_other",
+ "imageSrc": "/api/app-store/wordpress/icon.svg",
+ "logo": "/api/app-store/wordpress/icon.svg",
+ "url": "https://github.com/calcom/wp-plugin",
+ "variant": "other",
+ "categories": ["other"],
+ "publisher": "Cal.com, Inc.",
+ "email": "support@cal.com",
+ "description": "Embedded booking pages right into your wordpress page",
+ "extendsFeature": "EventType",
+ "__createdUsingCli": true
+}
diff --git a/packages/app-store/wordpress/extensions/EventTypeAppCard.tsx b/packages/app-store/wordpress/extensions/EventTypeAppCard.tsx
new file mode 100644
index 0000000000..a48a616b8c
--- /dev/null
+++ b/packages/app-store/wordpress/extensions/EventTypeAppCard.tsx
@@ -0,0 +1,43 @@
+import { useState } from "react";
+
+import { useAppContextWithSchema } from "@calcom/app-store/EventTypeAppContext";
+import AppCard from "@calcom/app-store/_components/AppCard";
+import type { EventTypeAppCardComponent } from "@calcom/app-store/types";
+import { Icon } from "@calcom/ui";
+
+import { appDataSchema } from "../zod";
+
+const EventTypeAppCard: EventTypeAppCardComponent = function EventTypeAppCard({ eventType, app }) {
+ const [getAppData, setAppData] = useAppContextWithSchema