Skip to content
Draft
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
1 change: 1 addition & 0 deletions apps/sim/app/(landing)/components/footer/footer.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ const PRODUCT_LINKS: FooterItem[] = [
{ label: 'Chat', href: 'https://docs.sim.ai/mothership', external: true },
{ label: 'Workflows', href: '/workflows' },
{ label: 'Knowledge Base', href: '/knowledge' },
{ label: 'Sim Search', href: '/search' },
{ label: 'Tables', href: '/tables' },
{ label: 'Files', href: '/files' },
{ label: 'Logs', href: '/logs' },
Expand Down
25 changes: 16 additions & 9 deletions apps/sim/app/(landing)/components/hero-cta/hero-cta.tsx
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
'use client'

import { usePathname } from 'next/navigation'
import { LandingCtaLink, type LandingCtaSection } from '@/app/(landing)/components/landing-cta-link'
import { DEMO_HREF, SIGNUP_HREF } from '@/app/(landing)/constants'

Expand All @@ -18,6 +21,8 @@ export function HeroCta({
secondaryLabel = 'Sign up',
trackingSection,
}: HeroCtaProps) {
const demoOnly = usePathname() === '/search'

return (
<div className='flex items-center gap-2 max-sm:w-full max-sm:flex-col max-sm:items-stretch'>
<LandingCtaLink
Expand All @@ -28,15 +33,17 @@ export function HeroCta({
>
{DEMO_LABEL}
</LandingCtaLink>
<LandingCtaLink
variant='outline'
href={SIGNUP_HREF}
prefetch={false}
size={size}
track={trackingSection && { label: secondaryLabel, section: trackingSection }}
>
{secondaryLabel}
</LandingCtaLink>
{!demoOnly && (
<LandingCtaLink
variant='outline'
href={SIGNUP_HREF}
prefetch={false}
size={size}
track={trackingSection && { label: secondaryLabel, section: trackingSection }}
>
{secondaryLabel}
</LandingCtaLink>
)}
</div>
)
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import {
} from '@/app/(landing)/components/navbar/components/nav-menu-chip/components/nav-menu-preview/components/menu-preview-header/menu-preview-header'

interface FilesMenuPreviewProps {
layout?: 'menu' | 'hero'
layout?: 'menu' | 'hero' | 'feature'
}

const FILES = [
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ interface MenuPreviewFrameProps {
children: ReactNode
/** Opt in only when a preview contains real hover or keyboard interaction. */
interactive?: boolean
layout?: 'menu' | 'hero'
layout?: 'menu' | 'hero' | 'feature'
}

/** Navigation crops and open hero stages share the same product UI and edge treatment. */
Expand All @@ -18,7 +18,7 @@ export function MenuPreviewFrame({
interactive = false,
layout = 'menu',
}: MenuPreviewFrameProps) {
const isHero = layout === 'hero'
const isHero = layout !== 'menu'

return (
<div
Expand All @@ -32,9 +32,11 @@ export function MenuPreviewFrame({
>
<div
className={cn(
isHero
? '-translate-x-1/2 absolute top-20 @max-[640px]:left-6 left-1/2 w-max @max-[640px]:translate-x-0 max-sm:top-6'
: 'relative w-[640px] origin-top-left p-10 [scale:min(1,tan(atan2(100cqw,640px)))]'
layout === 'feature'
? '-translate-x-1/2 absolute top-10 left-1/2 w-[720px] origin-top px-[30px] [scale:min(1,tan(atan2(100cqw,720px)))] max-sm:top-6'
: isHero
? '-translate-x-1/2 absolute top-20 @max-[640px]:left-6 left-1/2 w-max @max-[640px]:translate-x-0 max-sm:top-6'
: 'relative w-[640px] origin-top-left p-10 [scale:min(1,tan(atan2(100cqw,640px)))]'
)}
>
{children}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import type {
NavMenuItemData,
NavMenuPreviewKind,
} from '@/app/(landing)/components/navbar/components/nav-menu-chip/types'
import { SearchPreview } from '@/app/(landing)/search/components/search-preview'

interface NavMenuPreviewProps {
item: NavMenuItemData
Expand Down Expand Up @@ -96,6 +97,8 @@ function PreviewGraphic({ kind, details }: ProductGraphicProps) {
return <EnterpriseMenuPreview />
case 'team':
return <TeamGraphic details={details} />
case 'search':
return <SearchPreview />
case 'resource':
return <ResourceGraphic details={details} />
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,11 +52,6 @@ export const PLATFORM_MENU: NavMenu = {
details: ['Trigger', 'Agent', 'Action'],
},
},
],
},
{
label: 'Operations and control',
items: [
{
brand: 'Sim',
title: 'Knowledge Base',
Expand All @@ -69,6 +64,23 @@ export const PLATFORM_MENU: NavMenu = {
details: ['Notion', 'Google Drive', 'Confluence'],
},
},
],
},
{
label: 'Operations and control',
items: [
{
brand: 'Sim',
title: 'Search',
description: 'Ask questions and find company content. Available with Sim Enterprise.',
href: '/search',
preview: {
kind: 'search',
eyebrow: 'Sim Enterprise',
title: 'Your company’s knowledge. One place to ask.',
details: ['Ask Sim', 'Find files', 'Explore company context'],
},
},
{
brand: 'Sim',
title: 'Files',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ export type NavMenuPreviewKind =
| 'knowledge'
| 'logs'
| 'resource'
| 'search'
| 'tables'
| 'team'
| 'workflows'
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
'use client'

import { cn } from '@sim/emcn'
import Link from 'next/link'
import { usePathname } from 'next/navigation'
import { LOGIN_HREF, SIGNUP_HREF } from '@/app/(landing)/constants'

interface NavbarAuthPillProps {
Expand All @@ -13,6 +16,7 @@ const SEGMENT_CLASSES =

/** Two independent account links share one pill and a short inset divider. */
export function NavbarAuthPill({ size = 'compact', className, onNavigate }: NavbarAuthPillProps) {
const demoOnly = usePathname() === '/search'
const compact = size === 'compact'

return (
Expand All @@ -29,22 +33,33 @@ export function NavbarAuthPill({ size = 'compact', className, onNavigate }: Navb
href={LOGIN_HREF}
prefetch={false}
onClick={onNavigate}
className={cn(SEGMENT_CLASSES, 'rounded-l-full', compact ? 'px-3' : 'flex-auto px-2')}
className={cn(
SEGMENT_CLASSES,
demoOnly ? 'rounded-full' : 'rounded-l-full',
compact ? 'px-3' : 'flex-auto px-2'
)}
>
Log in
</Link>
<span
aria-hidden='true'
className={cn('w-px shrink-0 self-center bg-[var(--border)]', compact ? 'h-3' : 'h-3.5')}
/>
<Link
href={SIGNUP_HREF}
prefetch={false}
onClick={onNavigate}
className={cn(SEGMENT_CLASSES, 'rounded-r-full', compact ? 'px-3' : 'flex-auto px-2')}
>
Start building
</Link>
{!demoOnly && (
<>
<span
aria-hidden='true'
className={cn(
'w-px shrink-0 self-center bg-[var(--border)]',
compact ? 'h-3' : 'h-3.5'
)}
/>
<Link
href={SIGNUP_HREF}
prefetch={false}
onClick={onNavigate}
className={cn(SEGMENT_CLASSES, 'rounded-r-full', compact ? 'px-3' : 'flex-auto px-2')}
>
Start building
</Link>
</>
)}
</div>
)
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ export function ProductFeature({ feature }: ProductFeatureProps) {
>
<div
aria-hidden='true'
inert
inert={!feature.allowPreviewHover}
data-product-feature-visual={feature.id}
className='pointer-events-none relative isolate h-[460px] select-none overflow-hidden [container-type:inline-size] max-sm:h-[380px] max-xl:h-[420px]'
>
Expand Down
2 changes: 2 additions & 0 deletions apps/sim/app/(landing)/components/solutions-page/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -144,6 +144,8 @@ export interface SolutionsProductFeatureConfig {
description: string
visual: ReactNode
visualSize?: 'default' | 'compact'
/** Allow pointer hover on decorative previews with non-focusable tooltip triggers. */
allowPreviewHover?: boolean
cta?: SolutionsPillCta
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
/** A soft neutral radial glow behind the hero animation. */
export function SearchBackdrop() {
return (
<div aria-hidden='true' className='pointer-events-none absolute inset-0 overflow-hidden'>
<div className='absolute inset-0 bg-[radial-gradient(circle_at_50%_50%,color-mix(in_srgb,var(--text-secondary)_9%,transparent)_0%,color-mix(in_srgb,var(--text-secondary)_4%,transparent)_35%,transparent_70%)] dark:opacity-60' />
<div className='absolute inset-0 bg-[linear-gradient(to_bottom,var(--bg),transparent_22%,transparent_72%,var(--bg))]' />
</div>
)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
/** Fictional search examples for the marketing animation; no customer data. */
export const SEARCH_SCENARIOS = [
{
kind: 'chat',
prompt: 'Find the launch plan and summarize the next steps.',
activity: 'Searching company files…',
sources: ['Launch plan.pdf', 'Product brief.docx'],
reply:
'The launch plan has three next steps: finish the product review, prepare the team, and confirm the launch date. The product brief covers the scope and owners for each milestone.',
},
{
kind: 'files',
prompt: 'Find the files for our product launch.',
activity: 'Searching company files…',
query: 'Product launch',
files: [
{ name: 'Launch plan.pdf', size: '1.2 MB', owner: 'Morgan' },
{ name: 'Product brief.docx', size: '324 KB', owner: 'Alex' },
{ name: 'Launch checklist.pdf', size: '640 KB', owner: 'Jordan' },
],
},
{
kind: 'chat',
prompt: 'What is our process for onboarding a new teammate?',
activity: 'Reading company knowledge…',
sources: ['Onboarding guide.pdf', 'Team handbook.docx'],
reply:
'Start with the onboarding checklist: request access, schedule a team introduction, and review the team handbook. The first-week guide brings the setup steps and useful links together.',
},
{
kind: 'files',
prompt: 'Show me our onboarding documents.',
activity: 'Finding onboarding files…',
query: 'Onboarding',
files: [
{ name: 'Onboarding guide.pdf', size: '864 KB', owner: 'Alex' },
{ name: 'Team handbook.docx', size: '428 KB', owner: 'Morgan' },
{ name: 'First-week checklist.pdf', size: '218 KB', owner: 'Jordan' },
],
},
] as const
Loading
Loading