Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 0 additions & 19 deletions apps/web/.cross-domain-allowlist.json
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@
"src/domains/chat/components/chat-route-content.tsx": [
"interactions",
"messaging",
"nudges",
"subagents"
],
"src/domains/chat/components/mobile-subagent-detail-overlay.tsx": [
Expand All @@ -47,9 +46,6 @@
"src/domains/chat/components/voice-input-button.tsx": [
"voice"
],
"src/domains/chat/hooks/use-app-nudges.ts": [
"nudges"
],
"src/domains/chat/hooks/use-assistant-lifecycle.ts": [
"onboarding"
],
Expand Down Expand Up @@ -190,21 +186,9 @@
"src/domains/logs/components/usage-tab.tsx": [
"chat"
],
"src/domains/onboarding/pages/pre-chat-flow.tsx": [
"nudges"
],
"src/domains/onboarding/screens/get-ios-app-screen.tsx": [
"nudges"
],
"src/domains/onboarding/screens/get-macos-app-screen.tsx": [
"nudges"
],
"src/domains/settings/ai/ai-page.tsx": [
"voice"
],
"src/domains/settings/components/ios-app-card.tsx": [
"nudges"
],
"src/domains/settings/components/panels/assistant-terminal-panel.tsx": [
"terminal"
],
Expand All @@ -226,9 +210,6 @@
"src/domains/settings/pages/archive-page.tsx": [
"chat"
],
"src/domains/settings/pages/community-page.tsx": [
"nudges"
],
"src/domains/settings/pages/voice-page.tsx": [
"voice"
],
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@

import { DiscordLogo } from "@/components/icons/discord-logo.js";
import { NudgeChatBanner } from "@/domains/nudges/components/nudge-chat-banner.js";
import { NudgeChatBanner } from "@/components/nudges/nudge-chat-banner.js";

interface DiscordNudgeBannerProps {
onJoin: () => void;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@

import { Star } from "lucide-react";

import { NudgeChatBanner } from "@/domains/nudges/components/nudge-chat-banner.js";
import { NudgeChatBanner } from "@/components/nudges/nudge-chat-banner.js";

function GitHubIcon({ size = 16 }: { size?: number }) {
return (
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@

import { Smartphone } from "lucide-react";

import { NudgeChatBanner } from "@/domains/nudges/components/nudge-chat-banner.js";
import { NudgeChatBanner } from "@/components/nudges/nudge-chat-banner.js";

interface IOSAppBannerProps {
onDownload: () => void;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
import { Download } from "lucide-react";

import { AppleLogo } from "@/components/icons/apple-logo.js";
import { NudgeChatBanner } from "@/domains/nudges/components/nudge-chat-banner.js";
import { NudgeChatBanner } from "@/components/nudges/nudge-chat-banner.js";

interface MacOSAppBannerProps {
onDownload: () => void;
Expand Down
8 changes: 4 additions & 4 deletions apps/web/src/domains/chat/components/chat-route-content.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -42,10 +42,10 @@ import { useChatAttachmentDropZone } from "@/domains/chat/components/chat-attach
import type { ChatAttachment } from "@/domains/chat/components/chat-attachments/use-chat-attachments.js";
import type { ChatEmptyStateProps } from "@/domains/chat/components/chat-empty-state.js";
import { CreditsExhaustedBanner } from "@/domains/chat/components/credits-exhausted-banner.js";
import { DiscordNudgeBanner } from "@/domains/nudges/components/discord-nudge-banner.js";
import { GitHubNudgeBanner } from "@/domains/nudges/components/github-nudge-banner.js";
import { IOSAppBanner } from "@/domains/nudges/components/ios-app-banner.js";
import { MacOSAppBanner } from "@/domains/nudges/components/macos-app-banner.js";
import { DiscordNudgeBanner } from "@/components/nudges/discord-nudge-banner.js";
import { GitHubNudgeBanner } from "@/components/nudges/github-nudge-banner.js";
import { IOSAppBanner } from "@/components/nudges/ios-app-banner.js";
import { MacOSAppBanner } from "@/components/nudges/macos-app-banner.js";
import { Loader2 } from "lucide-react";
import { Button, Notice, ResizablePanel } from "@vellum/design-library";
import { ProviderBillingBanner } from "@/domains/chat/components/provider-billing-banner.js";
Expand Down
17 changes: 7 additions & 10 deletions apps/web/src/domains/chat/hooks/use-app-nudges.ts
Original file line number Diff line number Diff line change
@@ -1,24 +1,21 @@
import { type MutableRefObject, useEffect, useState } from "react";

import type { DisplayMessage } from "@/domains/chat/utils/reconcile.js";
import { useIsIOSWeb } from "@/domains/nudges/ios-app-platform.js";
import { useIsIOSWeb, useIsMacOSWeb } from "@/utils/platform-detection.js";
import {
readIOSAssistantTurnsSeen,
incrementIOSAssistantTurnsSeen,
useIOSNudgeState,
} from "@/domains/nudges/ios-app-prefs.js";
import { IOS_APP_BANNER_MIN_TURNS } from "@/domains/nudges/ios-app-constants.js";
import { useIsMacOSWeb } from "@/domains/nudges/mac-app-platform.js";
IOS_APP_BANNER_MIN_TURNS,
} from "@/hooks/use-ios-app-nudge.js";
import {
readMacOsAssistantTurnsSeen,
incrementMacOsAssistantTurnsSeen,
useMacOsNudgeState,
} from "@/domains/nudges/mac-app-prefs.js";
import { MAC_APP_BANNER_MIN_TURNS } from "@/domains/nudges/mac-app-constants.js";
import { useGitHubNudgeState } from "@/domains/nudges/github-prefs.js";
import type { GitHubNudgeState } from "@/domains/nudges/github-prefs.js";
import { useDiscordNudgeState, ensureFirstSeenAt } from "@/domains/nudges/discord-prefs.js";
import type { DiscordNudgeState } from "@/domains/nudges/discord-prefs.js";
MAC_APP_BANNER_MIN_TURNS,
} from "@/hooks/use-macos-app-nudge.js";
import { useGitHubNudgeState, type GitHubNudgeState } from "@/hooks/use-github-nudge.js";
import { useDiscordNudgeState, ensureFirstSeenAt, type DiscordNudgeState } from "@/hooks/use-discord-nudge.js";

// ---------------------------------------------------------------------------
// Types
Expand Down
35 changes: 0 additions & 35 deletions apps/web/src/domains/nudges/discord-constants.ts

This file was deleted.

18 changes: 0 additions & 18 deletions apps/web/src/domains/nudges/github-constants.ts

This file was deleted.

15 changes: 0 additions & 15 deletions apps/web/src/domains/nudges/ios-app-constants.ts

This file was deleted.

17 changes: 0 additions & 17 deletions apps/web/src/domains/nudges/mac-app-constants.ts

This file was deleted.

39 changes: 0 additions & 39 deletions apps/web/src/domains/nudges/mac-app-platform.ts

This file was deleted.

7 changes: 3 additions & 4 deletions apps/web/src/domains/onboarding/pages/pre-chat-flow.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,9 @@ import { useQuery } from "@tanstack/react-query";
import { useEffect, useLayoutEffect, useRef, useState } from "react";
import { useNavigate } from "react-router";

import { useIsIOSWeb } from "@/domains/nudges/ios-app-platform.js";
import { readIOSAppDownloaded } from "@/domains/nudges/ios-app-prefs.js";
import { useIsMacOSWeb } from "@/domains/nudges/mac-app-platform.js";
import { readMacOsAppDownloaded } from "@/domains/nudges/mac-app-prefs.js";
import { useIsIOSWeb, useIsMacOSWeb } from "@/utils/platform-detection.js";
import { readIOSAppDownloaded } from "@/hooks/use-ios-app-nudge.js";
import { readMacOsAppDownloaded } from "@/hooks/use-macos-app-nudge.js";
import { persistContentAutomationPreChatHandoff } from "@/domains/onboarding/content-automation.js";
import { GetIOSAppScreen } from "@/domains/onboarding/screens/get-ios-app-screen.js";
import { GetMacOSAppScreen } from "@/domains/onboarding/screens/get-macos-app-screen.js";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import { OnboardingLayout } from "@/domains/onboarding/components/onboarding-lay
import {
writeIOSAppDownloaded,
openIOSAppStore,
} from "@/domains/nudges/ios-app-prefs.js";
} from "@/hooks/use-ios-app-nudge.js";

interface GetIOSAppScreenProps {
onComplete: () => void;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import { OnboardingLayout } from "@/domains/onboarding/components/onboarding-lay
import {
writeMacOsAppDownloaded,
openMacOsDownload,
} from "@/domains/nudges/mac-app-prefs.js";
} from "@/hooks/use-macos-app-nudge.js";

interface GetMacOSAppScreenProps {
onComplete: () => void;
Expand Down
4 changes: 2 additions & 2 deletions apps/web/src/domains/settings/components/ios-app-card.tsx
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import { Bell, Fingerprint, Smartphone, Vibrate } from "lucide-react";

import { NudgeSettingsCard } from "@/domains/settings/components/nudge-settings-card.js";
import { useIsIOSWeb } from "@/domains/nudges/ios-app-platform.js";
import { useIsIOSWeb } from "@/utils/platform-detection.js";
import {
openIOSAppStore,
writeIOSAppDownloaded,
} from "@/domains/nudges/ios-app-prefs.js";
} from "@/hooks/use-ios-app-nudge.js";

export function IOSAppCard() {
const isIOSWeb = useIsIOSWeb();
Expand Down
5 changes: 2 additions & 3 deletions apps/web/src/domains/settings/pages/community-page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,8 @@ import { DiscordLogo } from "@/components/icons/discord-logo.js";
import { GitHubLogo } from "@/components/icons/github-logo.js";
import { YouTubeLogo } from "@/components/icons/youtube-logo.js";
import { XLogo } from "@/components/icons/x-logo.js";
import { GITHUB_REPO_URL } from "@/domains/nudges/github-constants.js";
import { useGitHubNudgeState } from "@/domains/nudges/github-prefs.js";
import { joinDiscord } from "@/domains/nudges/discord-prefs.js";
import { GITHUB_REPO_URL, useGitHubNudgeState } from "@/hooks/use-github-nudge.js";
import { joinDiscord } from "@/hooks/use-discord-nudge.js";

function HeroBanner() {
return (
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,17 +8,36 @@

import { useCallback } from "react";

import { useNudgeStore } from "@/domains/nudges/nudge-store.js";
import { useNudgeStore } from "@/stores/nudge-store.js";
import {
readGitHubNudgeStarred,
readGitHubBannerDismissedAt,
} from "@/domains/nudges/github-prefs.js";
import {
DISCORD_INVITE_URL,
DISCORD_MIN_CONVERSATION_COUNT,
DISCORD_MIN_ACCOUNT_AGE_MS,
DISCORD_GITHUB_DISMISS_COOLDOWN_MS,
} from "@/domains/nudges/discord-constants.js";
} from "@/hooks/use-github-nudge.js";

// ---------------------------------------------------------------------------
// Constants
// ---------------------------------------------------------------------------

/** Public Discord invite URL for the Vellum community. */
export const DISCORD_INVITE_URL = "https://discord.gg/ZABd9V2zM8";

/**
* Minimum number of conversations (sidebar threads) the user must have
* before the Discord nudge becomes eligible. Aggressive: 2.
*/
export const DISCORD_MIN_CONVERSATION_COUNT = 2;

/**
* Minimum account age (milliseconds since `firstSeenAt`) before the
* Discord nudge becomes eligible. 0 = no minimum age gate.
*/
export const DISCORD_MIN_ACCOUNT_AGE_MS = 0;

/**
* Cooldown (milliseconds) after the GitHub nudge banner is dismissed
* before the Discord nudge can surface. 24 hours.
*/
export const DISCORD_GITHUB_DISMISS_COOLDOWN_MS = 24 * 60 * 60 * 1000;

// ---------------------------------------------------------------------------
// First-seen timestamp
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,22 @@
/**
* GitHub-nudge public API.
*
* Backed by `useNudgeStore`; this file just exposes the GitHub-specific
* Backed by `useNudgeStore`; this file exposes the GitHub-specific
* derived state, click handlers, and a few non-React readers used by the
* Discord-nudge prerequisite checks.
*/

import { useCallback } from "react";

import { useNudgeStore } from "@/domains/nudges/nudge-store.js";
import { GITHUB_REPO_URL } from "@/domains/nudges/github-constants.js";
import { useNudgeStore } from "@/stores/nudge-store.js";

// ---------------------------------------------------------------------------
// Constants
// ---------------------------------------------------------------------------

/** Public GitHub repository for Vellum Assistant. */
export const GITHUB_REPO_URL =
"https://github.com/vellum-ai/vellum-assistant";

// ---------------------------------------------------------------------------
// Public readers (non-React, for cross-module prerequisite checks)
Expand Down
Loading