action-proposal
Concierge announces what it will do before acting. User confirms, edits, or cancels — no silent writes.
Found a great Saturday for you. Here's what I'll do:
RSVP to Prospect Park Picnic
Saturday 1:00 PM · 340 attending
Save Lilia for dinner
567 Union Ave · Italian, 4.9 stars · 7:30 PM slot
Variant: Book agent intro action-proposal
I'll send an intro request on your behalf:
Sarah Mitchell
Compass · Williamsburg specialist · 4.9 stars
"Hi Sarah, I'm interested in discussing options in Williamsburg. Would love to connect."
action-result
Shown after user confirms. Summarizes what was done, links to the artifact so the user can navigate to it.
RSVPed to Prospect Park Picnic
Added to your calendar — Saturday 1 PM
Saved Lilia to your places
Variant: Post drafted + published to feed
"The light on the Williamsburg Bridge this morning was incredible — that golden hour glow..."
image-input affordance
Camera icon added to AIChatInput left side. Two states: default (empty) and selected (thumbnail + dismiss).
State A: Default (no image selected)
State B: Image selected (thumbnail preview + dismiss)
building_photo.jpg
1.2 MB · Tap to analyze
The camera icon uses Camera from lucide-react. In TSX: size=16 for the action bar. The dismiss button is X lucide icon at size=10.
image-analysis result card
Two content variants share the same wrapper. Vision AI analyzes the uploaded photo and renders into the existing card types.
Variant A: Building intel (snap a building)
215 North 11th Street
Williamsburg, Brooklyn · 48 units
Building Score
4.2 / 5
Tenants Say
"Super responsive, clean hallways, elevator issues in 2023 but fixed"
Noise Level
Moderate — street noise above floor 3
Variant B: Apartment listing draft (photograph your apartment)
Here's a listing draft based on your photo:
Bright 1BR in Prime Williamsburg
Est. $3,200/mo · 1 bed · 1 bath · ~650 sqft
"Sun-drenched one-bedroom with exposed brick, hardwood floors throughout, and a modern galley kitchen. South-facing windows flood the space with afternoon light. Located steps from the L train and the best of the Northside dining scene."
Inline "Ask AI about this" trigger
A small Sparkles icon + indigo-600 text link placed on the action bar of listing cards and feed items. Tapping opens the AI drawer with that item preloaded as context.
On a listing card action bar
$3,800/mo · 2BR · 1BA · Kent Ave
Williamsburg · Listed 2h ago · Floor 4
On a community feed post
Jamie Kim
3h ago · Williamsburg
Anyone know what's going up on the corner of N 6th and Wythe? Looks like a big development — cranes all week.
Design note: The trigger is always right-aligned in the action bar, never in the main card body. Label shortens on listing cards ("Ask AI") vs feed items ("Ask AI about this") to fit the bar width. Icon is Lucide Sparkles at size=14. Color is text-indigo-600 — consistent with the existing NabeDataSection Sparkles header color.
AI-narrative morning briefing
An AI-generated, personalized intro paragraph sits at the top of the MorningBriefingDrawer — before the structured sections. Rendered as italic indigo-600 text with a Sparkles label. Shows reasoning ("Because you RSVP'd to…").
Morning Briefing
Since 6am · Williamsburg
"Good morning! Rain is forecast for Saturday afternoon, but Saturday morning through 1 PM looks clear — perfect for the Prospect Park Picnic you RSVP'd to. Sunday is dry all day. The Wythe Hotel rooftop brunch you saved has two slots left for Sunday at 11 AM. And a heads up: Taqueria Diana added happy hour specials this week — 5-7 PM daily."
Today's briefing
Rain Saturday 2–6 PM · 68°F high
3 events tonight · 2 new neighbors
... existing briefing rows continue below ...
Placement: Immediately after the gradient drawer header, before the "Today's briefing" divider and existing structured sections. The AI narrative sits in the warm card layer (from-violet-50 to-pink-50), which is the content card layer — not a frame surface.
Text style: text-sm italic text-indigo-700. The italic style signals "generated text" vs structured data. Label is text-xs font-semibold text-indigo-700 uppercase tracking-wide with a Sparkles icon at size=14.
Fallback: When no AI key is set or the scripted scenario doesn't match, this block collapses entirely. The briefing renders exactly as before — no blank placeholder.