From 7bc53c4f3dccd1be725111bde2b8f3038c8949ea Mon Sep 17 00:00:00 2001 From: Luke Vella Date: Fri, 15 Aug 2025 17:05:58 +0100 Subject: [PATCH 1/7] =?UTF-8?q?=F0=9F=93=9D=20Update=20licensing=20page=20?= =?UTF-8?q?with=20information=20about=20Spaces?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/docs/self-hosting/licensing.mdx | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/apps/docs/self-hosting/licensing.mdx b/apps/docs/self-hosting/licensing.mdx index 40dd18faa5c..bead6e25b00 100644 --- a/apps/docs/self-hosting/licensing.mdx +++ b/apps/docs/self-hosting/licensing.mdx @@ -10,12 +10,12 @@ If you want to run a multi-user setup, we ask that you purchase a license key. ## Pricing -| Tier | User Limit | Price | | -|:-------------|:--------------|:------------|:-------------------------------------------------------| -| **Personal** | 1 user | Free | - | -| **Plus** | Up to 5 users | $49 | [Buy License](https://rallly.co/buy-license/plus) | -| **Organization** | Up to 50 users| ~\$499~ **$299** (Limited Time Offer) | [Buy License](https://rallly.co/buy-license/organization) | -| **Enterprise** | 50+ users | Custom | [Get Quote](https://app.formbricks.com/s/cmebvnf2ohvjkt901eefxsonr) | +| Tier | User Limit | Space Members | Price | | +|:-------------|:--------------|:--------------|:------------|:-------------------------------------------------------| +| **Personal** | 1 user | 1 seat | Free | - | +| **Plus** | Up to 5 users | 5 seats | $49 | [Buy License](https://rallly.co/buy-license/plus) | +| **Organization** | Up to 50 users| 50 seats | ~\$499~ **$299** (Limited Time Offer) | [Buy License](https://rallly.co/buy-license/organization) | +| **Enterprise** | 50+ users | 100 seats | Custom | [Get Quote](https://app.formbricks.com/s/cmebvnf2ohvjkt901eefxsonr) | The license key you purchase is a **perpetual license specifically for Rallly v4.x versions**. This means your license will grant you access to all features and updates within the entire Rallly v4 series for the user tier you've selected. @@ -32,10 +32,23 @@ Once you have your license key, you can activate it in your self-hosted Rallly i Your instance will now be licensed for multi-user access according to your chosen tier. +## Spaces and Collaboration + +Starting with Rallly v4.3.0, **Spaces** allow you to create collaborative workspaces where you can invite other users to work together on polls. Each Space has a seat limit based on your licensing tier: + +- **Personal**: Cannot invite other members (1 seat only) +- **Plus**: Up to 5 members per Space +- **Organization**: Up to 50 members per Space +- **Enterprise**: Up to 100 members per Space + +Members invited to a Space can create and manage polls within that workspace, making it easier for teams and organizations to collaborate on scheduling. + ## FAQ Only individuals with a **registered user account** on your Rallly instance count towards your user limit. People who participate in polls without being registered (i.e., guest voters) **do not** count as users for licensing purposes. + +When you invite someone to a Space, they become a member of that Space and count towards both your instance user limit and the Space's seat limit. From f6891a17558269b0f3eb333b9547e5e674e3663e Mon Sep 17 00:00:00 2001 From: Luke Vella Date: Sat, 16 Aug 2025 11:30:37 +0100 Subject: [PATCH 2/7] =?UTF-8?q?=F0=9F=92=84=20Update=20menus?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../(dashboard)/components/sidebar/nav-user.tsx | 10 +++++++++- .../src/app/[locale]/account/components/sidebar.tsx | 12 +++++++++--- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/apps/web/src/app/[locale]/(space)/(dashboard)/components/sidebar/nav-user.tsx b/apps/web/src/app/[locale]/(space)/(dashboard)/components/sidebar/nav-user.tsx index 85fe51628e7..c52057ec0e6 100644 --- a/apps/web/src/app/[locale]/(space)/(dashboard)/components/sidebar/nav-user.tsx +++ b/apps/web/src/app/[locale]/(space)/(dashboard)/components/sidebar/nav-user.tsx @@ -5,6 +5,7 @@ import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, + DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger, } from "@rallly/ui/dropdown-menu"; @@ -52,7 +53,14 @@ export function NavUser({ - + + + + diff --git a/apps/web/src/app/[locale]/account/components/sidebar.tsx b/apps/web/src/app/[locale]/account/components/sidebar.tsx index fb739598327..16d06f65bf4 100644 --- a/apps/web/src/app/[locale]/account/components/sidebar.tsx +++ b/apps/web/src/app/[locale]/account/components/sidebar.tsx @@ -15,9 +15,11 @@ import { import Link from "next/link"; import { usePathname } from "next/navigation"; import { useTranslation } from "@/i18n/client"; +import { useFeatureFlag } from "@/lib/feature-flags/client"; export function AccountSidebarMenu() { const { t } = useTranslation(); + const isBillingEnabled = useFeatureFlag("billing"); const pathname = usePathname(); const menuItems = [ { @@ -38,13 +40,17 @@ export function AccountSidebarMenu() { icon: , href: "/account/spaces", }, - { + ]; + + if (isBillingEnabled) { + menuItems.push({ id: "billing", label: t("billing", { defaultValue: "Billing" }), icon: , href: "/account/billing", - }, - ]; + }); + } + return ( {menuItems.map((item) => ( From 32cdc2cae0b9b7795b100dd0db36e4c5355c1c61 Mon Sep 17 00:00:00 2001 From: Luke Vella Date: Sat, 16 Aug 2025 12:09:07 +0100 Subject: [PATCH 3/7] =?UTF-8?q?=F0=9F=92=84=20Dialog=20updates?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/ui/src/dialog.tsx | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/packages/ui/src/dialog.tsx b/packages/ui/src/dialog.tsx index 995c06f207a..29136d6c634 100644 --- a/packages/ui/src/dialog.tsx +++ b/packages/ui/src/dialog.tsx @@ -37,9 +37,9 @@ DialogOverlay.displayName = DialogPrimitive.Overlay.displayName; const dialogContentVariants = cva( cn( //style - "gap-4 bg-background p-4 shadow-lg sm:rounded-xl", + "gap-4 rounded-xl bg-background p-4 shadow-lg", // position - "-translate-x-1/2 fixed top-0 left-1/2 z-50 grid w-full", + "-translate-x-1/2 -translate-y-1/2 fixed top-1/2 left-1/2 z-50 grid w-full", // animation "data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=open]:slide-in-from-left-1/2 data-[state=closed]:slide-out-to-left-1/2 duration-200 data-[state=closed]:animate-out data-[state=open]:animate-in", ), @@ -127,7 +127,10 @@ const DialogFooter = ({ ...props }: React.HTMLAttributes) => (
); From 9f6775f2ca2c151cccd250673aedb1692c072e48 Mon Sep 17 00:00:00 2001 From: Luke Vella Date: Sat, 16 Aug 2025 12:51:01 +0100 Subject: [PATCH 4/7] =?UTF-8?q?=F0=9F=93=88=20Track=20button=20click?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/sidebar/space-sidebar.tsx | 23 ++---------- .../sidebar/upgrade-to-pro-alert.tsx | 35 +++++++++++++++++++ 2 files changed, 38 insertions(+), 20 deletions(-) create mode 100644 apps/web/src/app/[locale]/(space)/(dashboard)/components/sidebar/upgrade-to-pro-alert.tsx diff --git a/apps/web/src/app/[locale]/(space)/(dashboard)/components/sidebar/space-sidebar.tsx b/apps/web/src/app/[locale]/(space)/(dashboard)/components/sidebar/space-sidebar.tsx index 642595d4983..34dc40a32c5 100644 --- a/apps/web/src/app/[locale]/(space)/(dashboard)/components/sidebar/space-sidebar.tsx +++ b/apps/web/src/app/[locale]/(space)/(dashboard)/components/sidebar/space-sidebar.tsx @@ -7,11 +7,10 @@ import { SidebarHeader, SidebarSeparator, } from "@rallly/ui/sidebar"; -import { ChevronsUpDownIcon, SparklesIcon } from "lucide-react"; +import { ChevronsUpDownIcon } from "lucide-react"; import type React from "react"; +import { UpgradeToProAlert } from "@/app/[locale]/(space)/(dashboard)/components/sidebar/upgrade-to-pro-alert"; import { requireSpace, requireUser } from "@/auth/data"; -import { Trans } from "@/components/trans"; -import { PayWallButton } from "@/features/billing/client"; import { SpaceDropdown } from "@/features/space/components/space-dropdown"; import { SpaceIcon } from "@/features/space/components/space-icon"; import { SpaceTierLabel } from "@/features/space/components/space-tier"; @@ -64,23 +63,7 @@ export async function SpaceSidebar({ {activeSpace.tier !== "pro" ? ( <> -
- -
-

- -

-

- -

- - - -
-
+ ) : null} diff --git a/apps/web/src/app/[locale]/(space)/(dashboard)/components/sidebar/upgrade-to-pro-alert.tsx b/apps/web/src/app/[locale]/(space)/(dashboard)/components/sidebar/upgrade-to-pro-alert.tsx new file mode 100644 index 00000000000..e3dc04dd2d2 --- /dev/null +++ b/apps/web/src/app/[locale]/(space)/(dashboard)/components/sidebar/upgrade-to-pro-alert.tsx @@ -0,0 +1,35 @@ +"use client"; + +import { usePostHog } from "@rallly/posthog/client"; +import { SparklesIcon } from "lucide-react"; +import { Trans } from "@/components/trans"; +import { PayWallButton } from "@/features/billing/client"; + +export function UpgradeToProAlert() { + const posthog = usePostHog(); + return ( +
+ +
+

+ +

+

+ +

+ { + posthog?.capture("space_sidebar:upgrade_button_click"); + }} + className="w-full" + > + + +
+
+ ); +} From c9569bc4cf8cf78bae593d4ba2627c45b76524c4 Mon Sep 17 00:00:00 2001 From: Luke Vella Date: Sat, 16 Aug 2025 12:55:05 +0100 Subject: [PATCH 5/7] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20Refactor=20billing=20a?= =?UTF-8?q?nd=20track=20events=20(#1909)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../billing/components/billing-plan.tsx | 41 ++++ ...ats-button.tsx => manage-seats-dialog.tsx} | 152 +++++++-------- .../components/seats-updated-alert.tsx | 29 --- .../settings/billing/page-client.tsx | 183 ++++++++++++++++++ .../(dashboard)/settings/billing/page.tsx | 126 +----------- ...atus.tsx => subscription-status-label.tsx} | 12 +- 6 files changed, 308 insertions(+), 235 deletions(-) create mode 100644 apps/web/src/app/[locale]/(space)/(dashboard)/settings/billing/components/billing-plan.tsx rename apps/web/src/app/[locale]/(space)/(dashboard)/settings/billing/components/{manage-seats-button.tsx => manage-seats-dialog.tsx} (56%) delete mode 100644 apps/web/src/app/[locale]/(space)/(dashboard)/settings/billing/components/seats-updated-alert.tsx create mode 100644 apps/web/src/app/[locale]/(space)/(dashboard)/settings/billing/page-client.tsx rename apps/web/src/features/billing/components/{subscription-status.tsx => subscription-status-label.tsx} (84%) diff --git a/apps/web/src/app/[locale]/(space)/(dashboard)/settings/billing/components/billing-plan.tsx b/apps/web/src/app/[locale]/(space)/(dashboard)/settings/billing/components/billing-plan.tsx new file mode 100644 index 00000000000..dfa4e2cd8cd --- /dev/null +++ b/apps/web/src/app/[locale]/(space)/(dashboard)/settings/billing/components/billing-plan.tsx @@ -0,0 +1,41 @@ +"use client"; + +import type React from "react"; +import { StackedList, StackedListItem } from "@/components/stacked-list"; +import { Trans } from "@/components/trans"; +import { + SpaceTierIcon, + SpaceTierLabel, +} from "@/features/space/components/space-tier"; +import type { SpaceTier } from "@/features/space/schema"; + +export function BillingPlan({ + tier, + status, + seats, +}: { + tier: SpaceTier; + status?: React.ReactNode; + seats: number; +}) { + return ( + + + +
+
+ +
+

{status}

+
+
+ +
+
+
+ ); +} diff --git a/apps/web/src/app/[locale]/(space)/(dashboard)/settings/billing/components/manage-seats-button.tsx b/apps/web/src/app/[locale]/(space)/(dashboard)/settings/billing/components/manage-seats-dialog.tsx similarity index 56% rename from apps/web/src/app/[locale]/(space)/(dashboard)/settings/billing/components/manage-seats-button.tsx rename to apps/web/src/app/[locale]/(space)/(dashboard)/settings/billing/components/manage-seats-dialog.tsx index 9c7a7e3c4e5..92d60851dd6 100644 --- a/apps/web/src/app/[locale]/(space)/(dashboard)/settings/billing/components/manage-seats-button.tsx +++ b/apps/web/src/app/[locale]/(space)/(dashboard)/settings/billing/components/manage-seats-dialog.tsx @@ -1,6 +1,7 @@ "use client"; import { Button } from "@rallly/ui/button"; +import type { DialogProps } from "@rallly/ui/dialog"; import { Dialog, DialogClose, @@ -9,17 +10,15 @@ import { DialogFooter, DialogHeader, DialogTitle, - useDialog, } from "@rallly/ui/dialog"; import { Icon } from "@rallly/ui/icon"; import { Input } from "@rallly/ui/input"; import { Label } from "@rallly/ui/label"; -import { ArmchairIcon, MinusIcon, PlusIcon } from "lucide-react"; +import { MinusIcon, PlusIcon } from "lucide-react"; import { useCallback, useState } from "react"; import { Trans } from "@/components/trans"; import { updateSeatsAction } from "@/features/billing/actions"; import { useSafeAction } from "@/lib/safe-action/client"; -import { isSelfHosted } from "@/utils/constants"; interface ManageSeatsButtonProps { currentSeats: number; @@ -122,11 +121,13 @@ function SeatCountSelector({ ); } -export function ManageSeatsButton({ +export function ManageSeatsDialog({ + onOpenChange, + open, + children, currentSeats, usedSeats, -}: ManageSeatsButtonProps) { - const dialog = useDialog(); +}: DialogProps & ManageSeatsButtonProps) { const [newSeatCount, setNewSeatCount] = useState(currentSeats); const seatDelta = newSeatCount - currentSeats; const isRemoving = seatDelta < 0; @@ -141,88 +142,75 @@ export function ManageSeatsButton({ }); const handleUpdate = async () => { - if (isSelfHosted) { - // Redirect to self-hosted licensing page - window.location.href = "/licensing"; - } else { - // Use Stripe billing portal with subscription_update_confirm flow - updateSeats({ seatDelta }); - } + updateSeats({ seatDelta }); }; return ( - <> - - - - - - - - + + {children} + + + + + + + + + +
+
+ + +

- - -

-
- - -

- -

-
- +

- - - - -
+ + + - - -
- + + + +
+
); } diff --git a/apps/web/src/app/[locale]/(space)/(dashboard)/settings/billing/components/seats-updated-alert.tsx b/apps/web/src/app/[locale]/(space)/(dashboard)/settings/billing/components/seats-updated-alert.tsx deleted file mode 100644 index 37396a10765..00000000000 --- a/apps/web/src/app/[locale]/(space)/(dashboard)/settings/billing/components/seats-updated-alert.tsx +++ /dev/null @@ -1,29 +0,0 @@ -"use client"; - -import { Alert, AlertDescription, AlertTitle } from "@rallly/ui/alert"; -import { CheckCircleIcon } from "lucide-react"; -import { useSearchParams } from "next/navigation"; -import { Trans } from "@/components/trans"; - -export function SeatsUpdatedAlert() { - const searchParams = useSearchParams(); - - if (!searchParams.has("seats_updated")) { - return null; - } - - return ( - - - - - - - - - - ); -} diff --git a/apps/web/src/app/[locale]/(space)/(dashboard)/settings/billing/page-client.tsx b/apps/web/src/app/[locale]/(space)/(dashboard)/settings/billing/page-client.tsx new file mode 100644 index 00000000000..c9711b1268b --- /dev/null +++ b/apps/web/src/app/[locale]/(space)/(dashboard)/settings/billing/page-client.tsx @@ -0,0 +1,183 @@ +"use client"; + +import type { SubscriptionStatus } from "@rallly/database"; +import { usePostHog } from "@rallly/posthog/client"; +import { Alert, AlertDescription, AlertTitle } from "@rallly/ui/alert"; +import { Button } from "@rallly/ui/button"; +import { DialogTrigger } from "@rallly/ui/dialog"; +import { Icon } from "@rallly/ui/icon"; +import { + ArmchairIcon, + CheckCircleIcon, + CreditCardIcon, + SendIcon, +} from "lucide-react"; +import { useSearchParams } from "next/navigation"; +import { Trans } from "react-i18next"; +import { BillingPlan } from "@/app/[locale]/(space)/(dashboard)/settings/billing/components/billing-plan"; +import { ManageSeatsDialog } from "@/app/[locale]/(space)/(dashboard)/settings/billing/components/manage-seats-dialog"; +import { + PageSection, + PageSectionContent, + PageSectionDescription, + PageSectionGroup, + PageSectionHeader, + PageSectionTitle, +} from "@/app/components/page-layout"; +import { PayWallButton } from "@/features/billing/client"; +import { SubscriptionStatusLabel } from "@/features/billing/components/subscription-status-label"; +import type { SpaceTier } from "@/features/space/schema"; + +export function BillingPageClient({ + tier, + subscription, + totalSeats, + usedSeats, +}: { + tier: SpaceTier; + subscription?: { + id: string; + status: SubscriptionStatus; + cancelAtPeriodEnd: boolean; + periodEnd: Date; + }; + totalSeats: number; + usedSeats: number; +}) { + const posthog = usePostHog(); + + const searchParams = useSearchParams(); + + const didUpdateSeats = searchParams.has("seats_updated"); + + return ( + + + + + + + + + + + + + ) : ( + + ) + } + seats={totalSeats} + /> +
+ {subscription ? ( +
+ + + + + + +
+ ) : ( + { + posthog?.capture("space_billing:upgrade_button_click"); + }} + > + + + )} +
+ {didUpdateSeats ? ( + + + + + + + + + + ) : null} +
+
+ + + + + + + + + + + + + +
+ ); +} diff --git a/apps/web/src/app/[locale]/(space)/(dashboard)/settings/billing/page.tsx b/apps/web/src/app/[locale]/(space)/(dashboard)/settings/billing/page.tsx index fe72d02ff39..266971bff70 100644 --- a/apps/web/src/app/[locale]/(space)/(dashboard)/settings/billing/page.tsx +++ b/apps/web/src/app/[locale]/(space)/(dashboard)/settings/billing/page.tsx @@ -1,17 +1,7 @@ -import { Button } from "@rallly/ui/button"; -import { Icon } from "@rallly/ui/icon"; -import { CreditCardIcon, SendIcon, ShieldXIcon } from "lucide-react"; +import { ShieldXIcon } from "lucide-react"; import type { Metadata } from "next"; import { notFound } from "next/navigation"; -import { SeatsUpdatedAlert } from "@/app/[locale]/(space)/(dashboard)/settings/billing/components/seats-updated-alert"; -import { - PageSection, - PageSectionContent, - PageSectionDescription, - PageSectionGroup, - PageSectionHeader, - PageSectionTitle, -} from "@/app/components/page-layout"; +import { BillingPageClient } from "@/app/[locale]/(space)/(dashboard)/settings/billing/page-client"; import { requireSpace, requireUser } from "@/auth/data"; import { EmptyState, @@ -19,20 +9,12 @@ import { EmptyStateIcon, EmptyStateTitle, } from "@/components/empty-state"; -import { StackedList, StackedListItem } from "@/components/stacked-list"; import { Trans } from "@/components/trans"; -import { PayWallButton } from "@/features/billing/client"; -import { SubscriptionStatus } from "@/features/billing/components/subscription-status"; import { getSpaceSubscription } from "@/features/billing/data"; -import { - SpaceTierIcon, - SpaceTierLabel, -} from "@/features/space/components/space-tier"; import { loadMembers } from "@/features/space/data"; import { getTotalSeatsForSpace } from "@/features/space/utils"; import { getTranslation } from "@/i18n/server"; import { isFeatureEnabled } from "@/lib/feature-flags/server"; -import { ManageSeatsButton } from "./components/manage-seats-button"; export default async function BillingSettingsPage() { if (!isFeatureEnabled("billing")) { @@ -71,104 +53,12 @@ export default async function BillingSettingsPage() { const usedSeats = members.total; return ( - - - - - - - - - - - - - - -
-
- -
- {subscription ? ( -

- -

- ) : ( -

- -

- )} -
-
- -
-
-
- -
- {subscription ? ( -
- - -
- ) : ( - - - - )} -
- - -
-
- - - - - - - - - - - - - -
+ ); } diff --git a/apps/web/src/features/billing/components/subscription-status.tsx b/apps/web/src/features/billing/components/subscription-status-label.tsx similarity index 84% rename from apps/web/src/features/billing/components/subscription-status.tsx rename to apps/web/src/features/billing/components/subscription-status-label.tsx index 21e77fe559e..456b179a53e 100644 --- a/apps/web/src/features/billing/components/subscription-status.tsx +++ b/apps/web/src/features/billing/components/subscription-status-label.tsx @@ -1,22 +1,22 @@ "use client"; -import type { SubscriptionStatus as SubscriptionStatusType } from "@prisma/client"; +import type { SubscriptionStatus } from "@rallly/database"; import dayjs from "dayjs"; import { Trans } from "@/components/trans"; import { useTranslation } from "@/i18n/client"; -interface SubscriptionStatusProps { - status: SubscriptionStatusType; +interface SubscriptionStatusLabelProps { + status: SubscriptionStatus; cancelAtPeriodEnd: boolean; periodEnd: Date; } -export const SubscriptionStatus = ({ +export const SubscriptionStatusLabel = ({ status, cancelAtPeriodEnd, periodEnd, -}: SubscriptionStatusProps) => { +}: SubscriptionStatusLabelProps) => { const { t } = useTranslation(); const statusConfig: Record< @@ -63,7 +63,7 @@ export const SubscriptionStatus = ({ ); } From 048f024b4eb1a6656a3941ecae29e30bac241849 Mon Sep 17 00:00:00 2001 From: Luke Vella Date: Mon, 18 Aug 2025 09:55:10 +0100 Subject: [PATCH 6/7] =?UTF-8?q?=F0=9F=90=9B=20Set=20PORT=20env=20in=20Dock?= =?UTF-8?q?erfile?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/web/Dockerfile | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/web/Dockerfile b/apps/web/Dockerfile index cd3a84def58..26312357da2 100644 --- a/apps/web/Dockerfile +++ b/apps/web/Dockerfile @@ -85,6 +85,7 @@ ENV HOME=/app USER nextjs EXPOSE 3000 +ENV PORT=3000 ARG SELF_HOSTED ENV NEXT_PUBLIC_SELF_HOSTED=$SELF_HOSTED From 4faa2238d8c186f6cbd9c6b24a89329e694b8d2b Mon Sep 17 00:00:00 2001 From: Luke Vella Date: Mon, 18 Aug 2025 09:55:24 +0100 Subject: [PATCH 7/7] =?UTF-8?q?=F0=9F=94=96=20Release=204.3.1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 0e683b2580a..08839c3ac6a 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "rallly", "private": true, - "version": "4.3.0", + "version": "4.3.1", "scripts": { "dev": "turbo dev --filter=@rallly/web", "dev:emails": "turbo dev --filter=@rallly/emails",