Skip to content

Commit a067c41

Browse files
author
Codex
committed
Add homepage conversation use cases
1 parent 22f4349 commit a067c41

2 files changed

Lines changed: 365 additions & 1 deletion

File tree

site/src/main.jsx

Lines changed: 143 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,51 @@ const COPY = {
6868
],
6969
workflowKicker: "How it feels",
7070
workflowTitle: "Less explaining. More replying.",
71+
useCasesKicker: "When to use it",
72+
useCasesTitle: "For the moments where a reply is not just a reply.",
73+
useCasesText:
74+
"Sayless helps when the problem is not typing, but deciding what kind of person you want to sound like in that chat.",
75+
useCases: [
76+
{
77+
id: "rizz",
78+
label: "Rizz",
79+
title: "When you are talking to someone you like",
80+
thought: "What do I even say here without sounding desperate...",
81+
chatName: "Maya",
82+
messages: [
83+
{ side: "other", text: "Tonight was actually fun." },
84+
{ side: "other", text: "You are not as annoying as I thought" },
85+
{ side: "me", text: "I will take that as a compliment." }
86+
],
87+
suggestion: "Careful. One more compliment and I might ask you out properly."
88+
},
89+
{
90+
id: "foreign",
91+
label: "Foreign friends",
92+
title: "When the room moves in another language",
93+
thought: "I want to join in with slang and not sound like a textbook...",
94+
chatName: "Yuki and Chen",
95+
messages: [
96+
{ side: "other", text: "昨日の写真めっちゃ笑った lol" },
97+
{ side: "other", text: "你们昨天真的太搞笑了" },
98+
{ side: "me", text: "I understood like 70% of it" }
99+
],
100+
suggestion: "Wait, I caught enough to know I was being roasted in two languages. Fair though, that photo was criminal."
101+
},
102+
{
103+
id: "lazy",
104+
label: "Low-energy replies",
105+
title: "When you do not really want to talk",
106+
thought: "I do not want to be rude, but I also do not want to continue this...",
107+
chatName: "Evan",
108+
messages: [
109+
{ side: "other", text: "So what are you doing later?" },
110+
{ side: "other", text: "We could talk for a bit if you are free" },
111+
{ side: "me", text: "Maybe, not sure yet" }
112+
],
113+
suggestion: "I am pretty wiped today, so I will probably keep it low-key. Hope your night is good though."
114+
}
115+
],
71116
steps: [
72117
{ title: "You are in KakaoTalk", text: "No copying the whole conversation into a separate AI app." },
73118
{
@@ -85,7 +130,7 @@ const COPY = {
85130
finalCta: "Review install notes",
86131
platformsKicker: "Works with",
87132
platformsTitle: "Works with your favorite messaging apps",
88-
platformsText: "KakaoTalk, Instagram, Discord, Slack, and more.",
133+
platformsText: "KakaoTalk, Web Instagram, Discord, Slack, and more.",
89134
platformStatusReady: "Available now",
90135
platformStatusPlanned: "Planned",
91136
platformsDisclaimer:
@@ -251,6 +296,51 @@ const COPY = {
251296
],
252297
workflowKicker: "실제로는 이런 느낌",
253298
workflowTitle: "설명은 줄이고. 답장은 빨리.",
299+
useCasesKicker: "어디에 쓰냐면",
300+
useCasesTitle: "답장은 문장보다 타이밍과 온도가 더 중요할 때가 많습니다.",
301+
useCasesText:
302+
"Sayless는 그냥 자동 답장 생성기가 아니라, 지금 채팅방에서 어떤 사람처럼 보여야 할지까지 같이 잡아주는 대화 어시스턴트입니다.",
303+
useCases: [
304+
{
305+
id: "rizz",
306+
label: "썸타는 상대에게",
307+
title: "괜히 진지해 보이긴 싫은데, 호감은 보여야 할 때",
308+
thought: "뭐라 해야 하지 하... 너무 들이대는 것처럼 보이면 안 되는데",
309+
chatName: "지민",
310+
messages: [
311+
{ side: "other", text: "오늘 생각보다 재밌었어" },
312+
{ side: "other", text: "너 은근 웃기더라" },
313+
{ side: "me", text: "은근은 좀 아쉽네" }
314+
],
315+
suggestion: "그럼 다음엔 대놓고 웃겨볼게. 내일 커피 한 번 더 할래?"
316+
},
317+
{
318+
id: "foreign",
319+
label: "외국인 친구와 대화할 때",
320+
title: "영어나 일본어 섞인 대화에 자연스럽게 끼고 싶을 때",
321+
thought: "슬랭 섞으면서 재밌게 얘기 끼고 싶은데, 번역기 말투는 싫어...",
322+
chatName: "Alex, Yuki",
323+
messages: [
324+
{ side: "other", text: "昨日の写真めっちゃ笑った lol" },
325+
{ side: "other", text: "Bro that was actually iconic" },
326+
{ side: "me", text: "나 그거 아직도 이해 중임" }
327+
],
328+
suggestion: "Okay I got roasted in two languages, but honestly that photo deserved it."
329+
},
330+
{
331+
id: "lazy",
332+
label: "답장 귀찮은 상대일 때",
333+
title: "말하긴 싫은데, 무시하기도 애매할 때",
334+
thought: "별로 이어가고 싶진 않은데 뭐라고 끝내야 덜 이상하지",
335+
chatName: "민수",
336+
messages: [
337+
{ side: "other", text: "오늘 뭐해?" },
338+
{ side: "other", text: "시간 되면 좀 얘기하자" },
339+
{ side: "me", text: "아직 모르겠어" }
340+
],
341+
suggestion: "오늘은 좀 정신없어서 길게 얘기하긴 어려울 것 같아. 나중에 여유 생기면 말할게."
342+
}
343+
],
254344
steps: [
255345
{ title: "카톡을 보고 있다가", text: "대화 전체를 다른 AI 앱에 복붙할 필요가 없습니다." },
256346
{
@@ -478,6 +568,8 @@ function HomePage({ lang, setLang, t }) {
478568
<AssistantMockup key={lang} demo={t.demo} />
479569
</section>
480570

571+
<UseCasesSection t={t} />
572+
481573
<PlatformsSection t={t} />
482574

483575
<section className="proof-band" aria-label="Sayless workflow">
@@ -1116,6 +1208,56 @@ function FeatureCard({ icon, title, text }) {
11161208
);
11171209
}
11181210

1211+
function UseCasesSection({ t }) {
1212+
return (
1213+
<section className="section use-cases-section" aria-label={t.home.useCasesKicker}>
1214+
<div className="use-cases-heading">
1215+
<p className="section-kicker">{t.home.useCasesKicker}</p>
1216+
<h2>{t.home.useCasesTitle}</h2>
1217+
<p>{t.home.useCasesText}</p>
1218+
</div>
1219+
<div className="use-case-grid">
1220+
{t.home.useCases.map((useCase) => (
1221+
<UseCaseCard key={useCase.id} useCase={useCase} />
1222+
))}
1223+
</div>
1224+
</section>
1225+
);
1226+
}
1227+
1228+
function UseCaseCard({ useCase }) {
1229+
return (
1230+
<article className={`use-case-card ${useCase.id}`}>
1231+
<div className="use-case-top">
1232+
<span className="use-case-pill">{useCase.label}</span>
1233+
<MessageSquareText size={18} />
1234+
</div>
1235+
<h3>{useCase.title}</h3>
1236+
<div className="mini-chat" aria-label={useCase.chatName}>
1237+
<div className="mini-chat-head">
1238+
<span></span>
1239+
<strong>{useCase.chatName}</strong>
1240+
</div>
1241+
<div className="mini-chat-thread">
1242+
{useCase.messages.map((message, index) => (
1243+
<p key={`${message.text}-${index}`} className={`mini-message ${message.side}`}>
1244+
{message.text}
1245+
</p>
1246+
))}
1247+
</div>
1248+
<div className="mini-thought">
1249+
<Wand2 size={15} />
1250+
<span>{useCase.thought}</span>
1251+
</div>
1252+
</div>
1253+
<div className="mini-suggestion">
1254+
<span>Sayless</span>
1255+
<p>{useCase.suggestion}</p>
1256+
</div>
1257+
</article>
1258+
);
1259+
}
1260+
11191261
function PlatformsSection({ t }) {
11201262
return (
11211263
<section className="section platform-section" aria-label={t.home.platformsKicker}>

0 commit comments

Comments
 (0)