What's there now
Existing NeighborhoodStoriesRow.tsx — Instagram-style horizontal scroll. 7 stories visible, founder feels it's too many bubbles + adds nothing the feed doesn't.
Uniform bubbles · type-tagged corner badge
Keep all tiles at the same 48px circle size. Add a small corner badge to distinguish type (pin icon = check-in, star = quick rec, default = story). Stories stay first; live activity follows. Trim to 5–6 tiles max.
Mixed-width · 80×104 cards
First take — stories stay as 48px bubbles; check-ins / recs render as compact 80×104 mini-cards. Founder picked this variant but asked to make tiles similar size to the bubbles. See Variant B-Bubble and Variant B-Stack below for the refined options.
Same 48px bubble · venue is the label · corner type badge
Refined Variant B per founder direction: tiles are the same dimensions as story bubbles (48px circle + ~14px label = ~62px tall total). The circle gets a corner badge (pin = live check-in, star = quick rec) and the label below is the venue name, not the person. Author identity stays in the tap target (open the tile → see the full post + author).
- Story — brand-gradient ring, person's name. Same as today.
- Live check-in — emerald-cyan ring, pin badge corner, venue name as label, venue initials inside the circle.
- Quick rec — amber-orange ring, star badge corner, venue name as label, venue initials inside.
Ring color = type (gradient/emerald/amber) so it's distinct even before reading the badge. Tap a tile → opens the venue drawer (with the post + author surfaced inside). Tap-and-hold could preview the author chip; that's a Phase 41 polish.
Same width · slightly taller · venue + author both visible
Alternative if losing author identity in B-Bubble feels wrong: tile width matches a bubble (48px) but height grows by ~24px to fit a two-line label (venue + "by Maria"). Slightly taller total but information density higher.
Two stacked rows · stories above, live activity below
Keep stories as their own row (smaller, 3–4 bubbles max). Below it, a second row labeled "Right now in your block" mixes check-ins + quick recs as compact pill-cards. Each row has its own purpose; founder still gets density without mixing the metaphors.
Side-by-side · like briefing / calendar split bar
Founder direction 2026-05-26: instead of stacking the two rows, put them side-by-side like the briefing / calendar split bar below the header. Same vertical footprint as one row, but each side gets its own dedicated lane. Two sub-options below — pick one.
Nabe Pulse
- The pulsing dot + brand-gradient "Nabe Pulse" label tells you the whole section is live neighborhood activity
- Left card — three overlapping story avatars + "+2 more sharing now" → photo updates from neighbors. Tap → full-screen story viewer (existing pattern).
- Right card — venue avatar with pin badge + "James at Paulie Gee's" + secondary line → live check-ins & quick recs. Tap → drawer listing all current activity.
- No sub-labels needed. The visual content distinguishes the two cards under one section header.
Component rename: NeighborhoodStoriesRow.tsx → NabePulseRow.tsx. "Stories" name retired everywhere.
Each half scrolls independently. Stories scroll on the left, Nabe Pulse pills on the right. ~3-4 items visible per side. Tile pattern matches Variant B-Bubble (color-coded ring + corner badge + venue label).
⚖️ Quick decision matrix
| Dimension | A · Uniform | B-Bubble ⭐ | B-Stack | C · Stacked | C-Split-Preview | C-Split-Scroll |
|---|---|---|---|---|---|---|
| Vertical space saved | ★★★★★ | ★★★★★ | ★★★★ | ★★ | ★★★★★ | ★★★★ |
| Pulse readable at glance | ★★ | ★★★★ | ★★★★ | ★★★★★ | ★★ | ★★★ |
| Venue cross-link native | ★★ | ★★★★ | ★★★★ | ★★★★★ | ★★★ | ★★★★ |
| Matches briefing/calendar split | — | — | — | — | ★★★★★ | ★★★★ |
| Build complexity | low | medium | medium | medium | low | medium |
| Risk of cluttered top-of-feed | low | low | low | high | low | medium |
🏗️ Architecture (whichever variant)
- Component: rename
NeighborhoodStoriesRow.tsx→NeighborhoodHighlightsRow.tsx(the new pattern). Old name accurately described stories-only; new name reflects mixed content. - Data source: derive from existing
MOCK_POSTS. Filter totype === 'check-in' || type === 'quick-rec'in the active neighborhood, sort by recency, cap at N tiles. Stories stay sourced from the existing inlineSTORIESarray (or get extracted intomockStories.ts). - Feed cleanup: remove CheckIn / QuickRec from the long-form feed render (they're now in the highlights row only). PhotoFirst stays as a feed card because the photo IS the content.
- Tap behaviors:
- Story tile → full-screen story overlay (existing pattern)
- Check-in tile → tap venue chip / card body opens
entityNav.openBusiness(bizId); tap author avatar opens user profile - Quick rec tile → same: venue → business, author → user
- Empty state: if neighborhood has no check-ins / recs in the last 24h, render only stories + "Your Story" slot. Don't show an empty highlights section.
- Stories trimming: cap at 4 visible stories (down from current 7) per founder's "too many bubbles" feedback.