Skip to content

feat(squads): redesign the squad page and add Verified Company Squad features - #6732

Merged
idoshamun merged 11 commits into
mainfrom
claude/verified-squad-paid-features-b010da
Sep 27, 2026
Merged

idoshamun merged 11 commits into
mainfrom
claude/verified-squad-paid-features-b010da

Conversation

@idoshamun

@idoshamun idoshamun commented Sep 27, 2026 •

Copy link
Copy Markdown
Member

Summary

Brings the designer's squad page direction (storybook squad-page, "1. Direction" and use cases, #6721) into production and adds the paid Verified Company Squad features.

Merge order: requires dailydotdev/daily-api#4314 in production first. This PR queries Source.features on post pages and the source argument of searchPostSuggestions. The homepage feed fragment is unchanged.

No feature flag: the new page replaces the legacy one for every squad, and the legacy components are deleted.

Squad page (every squad)

  • Profile-style header: cover, round logo, meta line, stats with facepile, one action row (Join last), options menu.
  • Right column (Team, Stack & Tools, Analytics for admins) that becomes an About tab below laptop and stays in the DOM, so crawlers see it on mobile.
  • Composer, pinned posts with collapse, infinite feed, role-specific empty states, private wall, View as a visitor, share card.
  • Fixes the production quirks from the designer's audit (logged-out Join, cover never shown, blocked members keeping the bell and Leave, endless pending skeleton, and more).

Sub-pages and Manage

URL Page
/squads/[handle]/members Members (replaces the members modals)
/squads/[handle]/products Products
/squads/[handle]/pending Author's pending posts
/squads/[handle]/manage/[section] details, products, links, members, moderation, posting, analytics, integrations, danger-zone

/edit, /analytics, /moderate and /squads/moderate?handle= redirect permanently.

Paid (per-squad feature map, set by sales through Smith)

Each renders only when its key is on; free squads, admins included, see nothing of it.

  • verified: badge and the Verified Company Squad card.
  • links: Links widget and website in the meta line, without nofollow. Product and post links keep it.
  • products: shelf, Products page, add and edit form.
  • adFree: no ads or brand sponsorships on the squad feed, its search results and its posts (page, modal, focus, reader), through one isSourceAdFree rule.

Search

Spotlight can be scoped to a squad (header search button and Cmd+K on the squad page): pinned and latest posts, scoped suggestions, See all results, widen to all of daily.dev.

Also

  • Feed.tsx compared against the squads directory feed name, so the squad feed ad cadence never applied since feat: squad list view #4710.
  • SquadActionButton announced every Join button as "You are not allowed to join the Squad" to screen readers.

Test plan

  • Webapp suite (100 suites) and shared suite pass; new SquadPage test covers the viewer matrix, private wall, preview, each paid key, Manage entries and disableAds
  • Ad-free placements and brand sponsorships proven hidden and still shown for normal sources
  • Spotlight squad scope tests
  • Strict typecheck on changed files, lint, full webapp tsc (remaining errors are pre-existing in untouched test files)
  • Manual QA against a local API with fix: show profile image when no awards already exist on post #4314 once it merges

Preview domain

https://claude-verified-squad-paid-featu.preview.app.daily.dev

…features

Replaces the legacy squad page for every squad with the designer's
profile-style direction (storybook squad-page, 1. Direction), with no
feature flag, and deletes the legacy components.

- Header with cover, round logo, stats and one action row; right column
  that becomes an About tab below laptop and stays in the DOM for SEO;
  composer, pinned posts, infinite feed, role-specific empty states,
  private wall, View as a visitor and the share card.
- Members, Pending posts and a Manage area for staff. Legacy /edit,
  /analytics and /moderate URLs redirect permanently.
- Paid surfaces, each rendered only when the squad's feature is on:
  verified badge and card, Links widget (dofollow) and website, products.
- Ad-free squads get no ads or brand sponsorships on their feed, search
  results and posts (page, modal, focus and reader).
- Spotlight can be scoped to a squad, with scoped type-ahead suggestions.
- Feed.tsx compared against the squads directory feed name, so the squad
  feed ad cadence never applied.

Spec: docs/verified-company-squad.md. Requires dailydotdev/daily-api#4314.
@vercel

vercel Bot commented Sep 27, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
daily-webapp Ready Ready Preview Sep 27, 2026 7:52pm UTC

Request Review

- Pinned posts: the feed now leaves pins out, so staff lost every way to
  unpin. Pinned cards get an Unpin control for viewers with the pin
  permission, and pinning or swapping from a feed card refreshes the
  pinned strip, which kept showing the old pins until it went stale.
- JSON-LD `sameAs` listed the stored website and links of squads without
  the `links` feature, leaking a paid surface into the server HTML.
- Members of a private squad lost the Joined button; only Join and Boost
  are dropped for private squads.
- Manage > Links dropped a pasted link that was not added before Save.
- The product name field caps at the API's 100 characters.
- Mock parity: the products shelf sits above the Posts and About tabs and
  stays on both, the squad search has its own empty state, the options
  menu lists Members for moderators only and the invitation link for
  visitors only, member rows show Follow only to non-staff, the Analytics
  widget carries the mock's caption and rows, Pending posts has its intro
  line, and /manage highlights the section it opens on laptop.
- Remove SquadUsersModal, left unused by the deleted members modals.
A post modal opens with the feed card's post, whose source carries no
features (the feed fragment stays lean), and kept it as the active post.
Brand sponsorships under the modal never saw `adFree`, and the sidebar and
comment ads were requested before the post query landed.

- The modal's active post takes the source of the loaded post.
- The sidebar and comment ads wait while a squad's features are unknown,
  and the comment ad no longer renders a cached ad for an ad-free source.
- Brand sponsorships are blanked for the ad-free squad's own feed cards.
…alytics days

The mock shows one column of list cards on the squad feed and its search
results, so both are list-only feeds without the list frame that doubled
the page card border. Empty analytics days get a baseline bar so a squad
with sparse impressions still reads as a 45 day strip.
The tiles show lifetime totals while the widget caption covers the 45 day
strip, so the tiles now say Lifetime impressions and Lifetime reach.
Pinned cards fall back to the shared post's image, then to the standard
post cover placeholder, through the shared Image component.
The page waited for the viewer's own squad query before showing the staff
widgets, the composer and the phone actions, so they pushed the rail and
the feed down after the first paint. The viewer's role now comes from
boot's squad memberships until that query lands, the composer and the lock
card share a height, the member facepile and the analytics strip keep
their size while loading.
@idoshamun
idoshamun merged commit a1a4b78 into main Sep 27, 2026
11 checks passed
@idoshamun
idoshamun deleted the claude/verified-squad-paid-features-b010da branch September 27, 2026 20:11
tsahimatsliah added a commit that referenced this pull request Sep 27, 2026
main replaced SquadHeaderBar with SquadActions (#6732), so the logged-out
"Learn how Squads work" button now takes SquadOptionsMenu's place there.

Mockup-to-eng-pass: 1

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

This branch was successfully deployed

1 active deployment
Preview — 4b616b4c Deployed Sep 27, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant