Skip to content

Commit ba89f4a

Browse files
committed
wip: save App.jsx changes
1 parent 3ec05e3 commit ba89f4a

1 file changed

Lines changed: 95 additions & 2 deletions

File tree

src/App.jsx

Lines changed: 95 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,15 @@ import ChatList from './components/ChatList'
55
import ChatView from './components/ChatView'
66
import ActivityList from './components/ActivityList'
77
import TitleBar from './components/TitleBar'
8+
import PrototypeGallery from './components/PrototypeGallery'
89
import { FreModal } from './components/common'
910
import './App.css'
1011

12+
// Map prototype id → initial chat id
13+
const PROTOTYPE_CHAT = { p1: 23, p2: 34, p3: 35 }
14+
1115
export default function App() {
16+
const [selectedPrototype, setSelectedPrototype] = useState(null) // null = gallery
1217
const [activeView, setActiveView] = useState('chat') // 'chat' | 'activity'
1318
const [activeChatId, setActiveChatId] = useState(35)
1419
const [readChatIds, setReadChatIds] = useState(() => new Set([35]))
@@ -28,6 +33,21 @@ export default function App() {
2833

2934
const dismissFre = useCallback(() => setShowFre(false), [])
3035

36+
const launchPrototype = useCallback((id) => {
37+
const chatId = PROTOTYPE_CHAT[id]
38+
setSelectedPrototype(id)
39+
setActiveChatId(chatId)
40+
setReadChatIds(new Set([chatId]))
41+
setActiveView('chat')
42+
setNavIntent(null)
43+
setShowFre(true)
44+
}, [])
45+
46+
const backToGallery = useCallback(() => {
47+
setSelectedPrototype(null)
48+
setShowFre(false)
49+
}, [])
50+
3151
const selectChat = useCallback((chatId) => {
3252
setActiveChatId(chatId)
3353
setReadChatIds(prev => (prev.has(chatId) ? prev : new Set(prev).add(chatId)))
@@ -79,9 +99,20 @@ export default function App() {
7999

80100
const activityUnreadCount = activityEvents.reduce((n, e) => n + (e.unread ? 1 : 0), 0)
81101

102+
if (!selectedPrototype) {
103+
return (
104+
<div className="app">
105+
<TitleBar />
106+
<div className="app-body">
107+
<PrototypeGallery onLaunch={launchPrototype} />
108+
</div>
109+
</div>
110+
)
111+
}
112+
82113
return (
83114
<div className="app">
84-
<TitleBar onShowFre={() => setShowFre(true)} />
115+
<TitleBar onBack={backToGallery} onShowFre={() => setShowFre(true)} />
85116
<div className="app-body">
86117
<NavRail
87118
activeView={activeView}
@@ -113,7 +144,69 @@ export default function App() {
113144
clearNavIntent={clearNavIntent}
114145
/>
115146
</div>
116-
{showFre && (
147+
{showFre && selectedPrototype === 'p1' && (
148+
<FreModal
149+
title="Day-one agent onboarding"
150+
subtitle="Agent joins a group chat and instantly knows who's in the room — no user grounding required."
151+
onDismiss={dismissFre}
152+
>
153+
<h3 className="fre-section-title">The problem</h3>
154+
<p>
155+
Every time an agent is added to a group chat, someone has to spend
156+
time briefing it: who the stakeholders are, what tools the group
157+
uses, what files exist, what decisions are in flight. That onboarding
158+
tax falls on the user — and it has to happen again for every new chat.
159+
</p>
160+
161+
<h3 className="fre-section-title">The idea</h3>
162+
<p>
163+
At the moment an agent is added, it reads the existing thread —
164+
messages, file shares, @mentions, link cards — and synthesizes a
165+
structured brief automatically. The welcome message isn't a generic
166+
greeting; it's proof the agent already knows the room.
167+
</p>
168+
169+
<h3 className="fre-section-title">What to look for</h3>
170+
<p>
171+
Open the <strong>Northwind launch</strong> chat and scroll to the
172+
bottom. Claude's welcome card surfaces: the core team with roles,
173+
tools already in use (Figma, Jira, GitHub), files shared in the
174+
thread, and open items with urgency levels — all derived from the
175+
conversation history above.
176+
</p>
177+
</FreModal>
178+
)}
179+
{showFre && selectedPrototype === 'p2' && (
180+
<FreModal
181+
title="Context brief as a pinned tab"
182+
subtitle="Agent synthesizes the chat into a living document and pins it where the team can always find it."
183+
onDismiss={dismissFre}
184+
>
185+
<h3 className="fre-section-title">The problem</h3>
186+
<p>
187+
A welcome card in the thread is useful once, then it gets buried.
188+
New members joining later have no way to get up to speed without
189+
scrolling through hundreds of messages.
190+
</p>
191+
192+
<h3 className="fre-section-title">The idea</h3>
193+
<p>
194+
Instead of posting a card, the agent writes a{' '}
195+
<strong>context-brief.md</strong> and pins it as a tab to the chat
196+
header. The brief is always one click away — a persistent,
197+
skimmable source of truth for anyone in the chat.
198+
</p>
199+
200+
<h3 className="fre-section-title">What to look for</h3>
201+
<p>
202+
Open the <strong>Northwind launch</strong> chat. Notice the pin icon
203+
tab next to "Chat" in the header. Click it to open the context brief:
204+
team roster, open items with status badges, tools, shared files, and
205+
key decisions — all in a document-style panel.
206+
</p>
207+
</FreModal>
208+
)}
209+
{showFre && selectedPrototype === 'p3' && (
117210
<FreModal
118211
title="Group intelligence for Teams agents"
119212
subtitle="Agents monitor group conversations and decide when to engage — without waiting to be @mentioned."

0 commit comments

Comments
 (0)