diff --git a/apps/sim/app/layout.tsx b/apps/sim/app/layout.tsx
index ed2921203e..a7c424d760 100644
--- a/apps/sim/app/layout.tsx
+++ b/apps/sim/app/layout.tsx
@@ -2,6 +2,7 @@ import { Analytics } from '@vercel/analytics/next'
import { SpeedInsights } from '@vercel/speed-insights/next'
import type { Metadata, Viewport } from 'next'
import { PublicEnvScript } from 'next-runtime-env'
+import { env } from '@/lib/env'
import { isHosted } from '@/lib/environment'
import { createLogger } from '@/lib/logs/console/logger'
import { getAssetUrl } from '@/lib/utils'
@@ -225,10 +226,10 @@ export default function RootLayout({ children }: { children: React.ReactNode })
{/* RB2B Script - Only load on hosted version */}
- {isHosted && (
+ {isHosted && env.NEXT_PUBLIC_RB2B_KEY && (
)}
diff --git a/apps/sim/lib/env.ts b/apps/sim/lib/env.ts
index b0e606fdf4..3a67de5b8f 100644
--- a/apps/sim/lib/env.ts
+++ b/apps/sim/lib/env.ts
@@ -157,6 +157,9 @@ export const env = createEnv({
// Google Services - For client-side Google integrations
NEXT_PUBLIC_GOOGLE_CLIENT_ID: z.string().optional(), // Google OAuth client ID for browser auth
+
+ // Analytics & Tracking
+ NEXT_PUBLIC_RB2B_KEY: z.string().optional(), // RB2B tracking key for B2B analytics
NEXT_PUBLIC_GOOGLE_API_KEY: z.string().optional(), // Google API key for client-side API calls
NEXT_PUBLIC_GOOGLE_PROJECT_NUMBER: z.string().optional(), // Google project number for Drive picker
},
@@ -173,6 +176,7 @@ export const env = createEnv({
NEXT_PUBLIC_SENTRY_DSN: process.env.NEXT_PUBLIC_SENTRY_DSN,
NEXT_PUBLIC_BLOB_BASE_URL: process.env.NEXT_PUBLIC_BLOB_BASE_URL,
NEXT_PUBLIC_GOOGLE_CLIENT_ID: process.env.NEXT_PUBLIC_GOOGLE_CLIENT_ID,
+ NEXT_PUBLIC_RB2B_KEY: process.env.NEXT_PUBLIC_RB2B_KEY,
NEXT_PUBLIC_GOOGLE_API_KEY: process.env.NEXT_PUBLIC_GOOGLE_API_KEY,
NEXT_PUBLIC_GOOGLE_PROJECT_NUMBER: process.env.NEXT_PUBLIC_GOOGLE_PROJECT_NUMBER,
NEXT_PUBLIC_SOCKET_URL: process.env.NEXT_PUBLIC_SOCKET_URL,
diff --git a/apps/sim/lib/security/csp.ts b/apps/sim/lib/security/csp.ts
index 6077b7a0f8..1c575b35d2 100644
--- a/apps/sim/lib/security/csp.ts
+++ b/apps/sim/lib/security/csp.ts
@@ -36,6 +36,7 @@ export const cspDirectives: CSPDirectives = {
'https://vercel.com',
'https://*.vercel.app',
'https://vitals.vercel-insights.com',
+ 'https://b2bjsstore.s3.us-west-2.amazonaws.com',
],
'style-src': ["'self'", "'unsafe-inline'", 'https://fonts.googleapis.com'],
diff --git a/apps/sim/next.config.ts b/apps/sim/next.config.ts
index 7e625755e5..b7897f7f9b 100644
--- a/apps/sim/next.config.ts
+++ b/apps/sim/next.config.ts
@@ -153,6 +153,22 @@ const nextConfig: NextConfig = {
},
]
},
+ async redirects() {
+ return [
+ {
+ source: '/((?!api|_next|_vercel|favicon|static|.*\\..*).*)',
+ destination: 'https://www.sim.ai/$1',
+ permanent: true,
+ has: [{ type: 'host', value: 'simstudio.ai' }],
+ },
+ {
+ source: '/((?!api|_next|_vercel|favicon|static|.*\\..*).*)',
+ destination: 'https://www.sim.ai/$1',
+ permanent: true,
+ has: [{ type: 'host', value: 'www.simstudio.ai' }],
+ },
+ ]
+ },
}
const sentryConfig = {