Skip to content

feat(ui): selectable feature cards and scheduler pre-filled answers - #2712

Open
michaelassraf wants to merge 15 commits into
mainfrom
feat/internal-it-landing-page
Open

michaelassraf wants to merge 15 commits into
mainfrom
feat/internal-it-landing-page

Conversation

@michaelassraf

@michaelassraf michaelassraf commented Oct 17, 2026 •

Copy link
Copy Markdown
Member

Additive variants the new small-IT-team landing page on flamingo.run needs. Every one is optional, so existing callers are unchanged.

  • ConversationCard: context (a labelled line between the two turns, the pain card's "Today"), selection (the card is one toggle with aria-pressed, a +/✓ mark and the accent ring), and an optional footer. The homepage request cards render exactly as before.
  • Booking form fieldCopy.display: 'chips': a HubSpot choice question (select / radio) drawn as one-tap chips on the lib's ToggleGroup. Same answer, name and validation.
  • Scheduler detailsFormProps.initialValues: a page can pre-fill an answer the visitor gave higher up. What they typed before a back edge still wins.
  • EntityQuotesPanel title: null drops the "Key Quotes · N" caption, for one quote standing alone.

Tests: conversation-card.test.tsx (3), booking-form-chips.test.tsx (2); booking-form-field-rows.test.tsx still passes.

Change-Set: feat-internal-it-landing-page
ClickUp task: CU-17tkuw5ycq3 New landing page for direct IT / understaffed teams

🤖 Generated with Claude Code

Change set flamingo-stack/openframe-oss-lib#2712: these pull requests are one change, reviewed together.

Linked work

Linked by the Depends-On / Change-Set lines in these descriptions; this block is maintained by the hub.

…illed answers

FeatureCardGrid takes a selection: items with an id become toggle buttons
(aria-pressed, accent ring while picked). The scheduler's detailsFormProps
takes initialValues, so a page can pre-fill an answer chosen higher up.

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

Copy link
Copy Markdown
Member Author

@github-actions

Copy link
Copy Markdown
Contributor

🦩 Flamingo Code Review

Not reviewed yet. Reviews start when you ask, so the reviewer reads this pull request when it is ready, not when it is opened.

When it is ready:

  • Review this pull request

Or comment @flamingo-review. Add the flamingo-review-always label to review every push.

Updated 2026-10-17 02:03 UTC · workflow run

michaelassraf and others added 6 commits October 16, 2026 22:57
…ng chips, uncaptioned quotes

ConversationCard takes a context line between its turns, a selection toggle
and an optional footer: the request card becomes a pickable pain card.
A booking question can be drawn as one-tap chips (fieldCopy display), and
EntityQuotesPanel can drop its caption. The FeatureCardGrid selection variant
is removed: the pain cards are ConversationCards now.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…the Mingo shortcut

The browser's autofill fires a keydown with no key when it fills a form
field; the Cmd+K listener read event.key.toLowerCase() and threw.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…stions as chips by default

A select or radio question offering at most CHIP_MAX_OPTIONS answers is drawn
as one-tap chips on every booking form, its answers always the link's own;
fieldCopy.display forces chips or the dropdown.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…e size of its label

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…leton the size of its label"

This reverts commit b5fb7c2.
…chips, ODS tokens

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Comment thread openframe-frontend-core/src/components/features/conversation-card.tsx Outdated
michaelassraf and others added 8 commits October 17, 2026 16:15
…questions it asks, PageSectionBar in the lib, the walkthrough player owns its loading, a boxed toggle Button

- BookingForm `optionalFields`: the optional questions of the link this form
  asks (required ones always). A link shared by several pages no longer shows
  one page's optional questions on the others (the MSP page showed the new
  team-size and endpoints questions).
- PageSectionBar moved from the hub into components/navigation, with its anchor
  offsets; its action is a link on the site's anchor scroll (NavLinkAnchor),
  drawn by the bar itself.
- InlineWalkthroughVideo `loading`: a skeleton in the card's 16:9 box. The
  stored file wins over YouTube when both are set (only a file previews on
  hover and resumes in the card).
- ConversationCard selection: a regular boxed Button in the corner.

Change-Set: feat-internal-it-landing-page

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

# Conflicts:
#	openframe-frontend-core/src/components/features/walkthrough-video.tsx
…he choice toggle, booking answers, quote tiles

Skeletons beside the components they stand for (FaqAccordionSkeleton, ConversationCardSkeleton,
QuoteCardTileSkeleton, PersonCellSkeleton); QuoteCardTile shared by the strip and the booking rail;
BookingForm takes `answers` (applied to fields the visitor has not touched) and exports
formFieldOptionLabel; chips use the Toggle `choice` variant and register for focus; PageSectionBar
shows only sections that rendered; playsYouTube is the one rule for which player a video uses.

Change-Set: feat-internal-it-landing-page

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…el card, step progress, text-line skeleton, answers on mount

SectionEyebrow is the one eyebrow (SectionHeading draws it); Card `panel` and Progress `step` replace
call-site overrides; TextLineSkeleton is the one text-line skeleton (conversation card, person cell,
FAQ accordion). BookingForm applies host answers on mount too, only into empty questions or ones still
holding its last answer, and clears a withdrawn answer. A pickable conversation card leaves a click on
a link or control inside it alone. The walkthrough widget keeps main's YouTube-first rule.

Change-Set: feat-internal-it-landing-page

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… section bar's height, conversation card parts

isOwnClick (utils/own-click.ts) is THE click-bubbling rule of a clickable container, read by DataTableRow,
TableRow and a pickable ConversationCard (portalled descendants, data-no-row-click, and with `controls` a
link or control inside). StickySectionNav exports its height; PageSectionBar reads it and a test pins the
anchor margin to header + bar + gap. ConversationCard's context block and footer row are one class each;
stray doc comments placed on what they describe.

Change-Set: feat-internal-it-landing-page

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… rule, own-click tests, named sizes

bookingFormAsks (schemas/meeting-booking-schema.ts, server-safe) is THE rule for which declared questions
the booking form asks; BookingForm and hosts read it. isOwnClick has its own tests. The conversation card
clears its corner toggle by BUTTON_ICON_SM_SIZE and its skeleton names what is loading.

Change-Set: feat-internal-it-landing-page

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…no unused FAQ skeleton

The scheduler's detailsFormProps take `answers` only (the `initialValues` pass-through is gone: one way a
host pre-fills); the unused FaqAccordionSkeleton is removed and FaqAccordion is main's again; TextSkeleton
points at TextLineSkeleton for a skeleton that must match its text.

Change-Set: feat-internal-it-landing-page

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The scheduler's cold-start card, exported so a page that streams can draw it
before the scheduler mounts. The loaded card and its skeleton derive their
wrappers from ONE function (schedulerCardClasses).

Change-Set: feat-internal-it-landing-page

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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