diff --git a/src/lib/components/migration/EditorChooserModal.svelte b/src/lib/components/migration/EditorChooserModal.svelte
index 5532dcca..05dadf62 100644
--- a/src/lib/components/migration/EditorChooserModal.svelte
+++ b/src/lib/components/migration/EditorChooserModal.svelte
@@ -1,8 +1,9 @@
@@ -27,11 +19,11 @@
target="_blank"
class="col-start-1 row-start-1 flex items-center justify-center gap-4 no-underline">
- Limited time: 10% off Mermaid Advanced Editor with code NEWYEAR
+ Try Mermaid Advanced Editor — OSS users get 10% off with code JS26
diff --git a/src/lib/util/promos/promo.ts b/src/lib/util/promos/promo.ts
index 3656162d..6af7b2e6 100644
--- a/src/lib/util/promos/promo.ts
+++ b/src/lib/util/promos/promo.ts
@@ -5,7 +5,7 @@ import type { Component } from 'svelte';
import { get, writable, type Writable } from 'svelte/store';
import { localStorage, persist } from '../persist';
import April2025 from './April2025.svelte';
-import NewYear2026 from './NewYear2026.svelte';
+import JS2026 from './JS2026.svelte';
dayjs.extend(duration);
@@ -17,10 +17,10 @@ interface Promotion {
}
const promotions: Record = {
- 'promo-newyear-2026': {
+ 'promo-js-2026': {
startDate: new Date('2026-01-01'),
- endDate: new Date('2026-03-14'),
- component: NewYear2026,
+ endDate: new Date('2026-12-31'),
+ component: JS2026,
hideDurationMs: dayjs.duration(1, 'week').asMilliseconds()
},
'promo-april-2025': {
diff --git a/src/lib/util/util.ts b/src/lib/util/util.ts
index fc0d071a..c252f370 100644
--- a/src/lib/util/util.ts
+++ b/src/lib/util/util.ts
@@ -40,6 +40,23 @@ export const MCBaseURL = env.isEnabledMermaidChartLinks
? 'https://mermaid.ai' // 'http://localhost:5174'
: 'https://example.com';
+export const getCheckoutUrl = ({
+ utmCampaign,
+ utmMedium
+}: {
+ utmCampaign: string;
+ utmMedium: string;
+}): string => {
+ const params = new URLSearchParams({
+ coupon: 'arDfyFT8',
+ tier: 'plus',
+ utm_campaign: utmCampaign,
+ utm_medium: utmMedium,
+ utm_source: getUTMSource()
+ });
+ return `${MCBaseURL}/app/user/billing/checkout?${params.toString()}`;
+};
+
let count = 0;
export const errorDebug = (limit = 1000) => {
count += 1;