feat(marketing): role gate modal on Launch App#11
Conversation
Replace hardcoded hex values with the corresponding token classes (success-500, neutral-400/700, white/8) across input, textarea, option-card and marketing surfaces, and correct the GitHub org, Discord, Telegram, LinkedIn and docs URLs to the live destinations. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Clicking Launch App in the marketing header now opens a role gate
modal ("Choose how you want to explore Boundless") instead of routing
straight to the dashboard. The visitor picks Contributor or Organiser,
then Continue lands them in /dashboard for that role.
- New LaunchAppModal built on the Dialog, OptionCard and PillButton
primitives; Continue is disabled until a role is chosen.
- Imports the two 3D illustrations (coin, briefcase) from Figma as
self-contained SVGs under public/illustrations.
- Wires all three Launch App entry points (desktop, mobile actions,
mobile drawer) to open the modal.
- Full screen on mobile with a close button; centered 520px card on
larger viewports.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (2)
🚧 Files skipped from review as they are similar to previous changes (2)
📝 WalkthroughWalkthroughAdds a new Launch App modal (role selection) and integrates it into the site header/mobile menu; replaces multiple hard-coded color utilities with design-system token classes across UI components; updates marketing/navigation and SITE_SOCIALS external URLs. ChangesLaunch App Modal & Design Token Migration
Sequence DiagramsequenceDiagram
participant User
participant SiteHeader
participant LaunchAppModal
participant Dashboard
User->>SiteHeader: Click "Launch App" button
SiteHeader->>SiteHeader: Set launchOpen=true
SiteHeader->>LaunchAppModal: Render with open=true
User->>LaunchAppModal: Select role (contributor/organiser)
User->>LaunchAppModal: Click Continue
LaunchAppModal->>Dashboard: Navigate to /dashboard?role=selected
LaunchAppModal->>SiteHeader: onOpenChange(false)
Estimated Code Review Effort🎯 3 (Moderate) | ⏱️ ~20 minutes Possibly Related PRs
Poem
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 1
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
src/features/discover/components/opportunity-card.tsx (1)
23-28:⚠️ Potential issue | 🟠 Major | ⚡ Quick winIncomplete color token migration: STATUS_COLOR constant must be updated for consistency.
While lines 118 and 136 correctly migrate individual span colors to design tokens (
text-primary-700,text-info-500), theSTATUS_COLORconstant (lines 23–28) still contains hard-coded hex values (text-[#21a879],text-[#3ba7ff],text-[#ae7f01]). These same colors are applied viaStatusBadge(line 35, used on line 103), creating two sources of truth for the same colors—one old (hex), one new (token).For design consistency and maintainability, migrate all entries in the
STATUS_COLORobject to design tokens, or at minimum, replace the hex values that match your new tokens:
open: 'text-[#21a879]'→text-primary-700applications: 'text-[#3ba7ff]'→text-info-500review: 'text-[#ae7f01]'→ (verify the warning/caution token equivalent)Also applies to: 103-103
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/features/discover/components/opportunity-card.tsx` around lines 23 - 28, STATUS_COLOR still uses hard-coded hex classes; update the mapping for OpportunityCardStatus in the STATUS_COLOR constant to use design tokens used elsewhere (so StatusBadge and inline spans share the same tokens). Replace 'open: text-[`#21a879`]' with 'text-primary-700', 'applications: text-[`#3ba7ff`]' with 'text-info-500', and change 'review: text-[`#ae7f01`]' to the appropriate warning/caution token used in your design system (e.g., text-warning-600 or the project's equivalent), ensuring STATUS_COLOR is the single source of truth referenced by StatusBadge and any spans in OpportunityCard.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@src/features/marketing/components/launch-app-modal.tsx`:
- Around line 28-43: ROLES array has inconsistent punctuation in the RoleOption
description strings: the contributor description ends with a period while the
organiser description does not; update the organiser RoleOption (value:
'organiser', title: 'Organiser (Create & Host)') description to add a trailing
period so both descriptions match, ensuring consistent user-facing copy.
---
Outside diff comments:
In `@src/features/discover/components/opportunity-card.tsx`:
- Around line 23-28: STATUS_COLOR still uses hard-coded hex classes; update the
mapping for OpportunityCardStatus in the STATUS_COLOR constant to use design
tokens used elsewhere (so StatusBadge and inline spans share the same tokens).
Replace 'open: text-[`#21a879`]' with 'text-primary-700', 'applications:
text-[`#3ba7ff`]' with 'text-info-500', and change 'review: text-[`#ae7f01`]' to the
appropriate warning/caution token used in your design system (e.g.,
text-warning-600 or the project's equivalent), ensuring STATUS_COLOR is the
single source of truth referenced by StatusBadge and any spans in
OpportunityCard.
🪄 Autofix (Beta)
✅ Autofix completed
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: 84f4e1aa-90a1-44c4-b4ff-7fdfaed303fc
⛔ Files ignored due to path filters (3)
public/icons/coin.svgis excluded by!**/*.svgpublic/illustrations/role-contributor.svgis excluded by!**/*.svgpublic/illustrations/role-organiser.svgis excluded by!**/*.svg
📒 Files selected for processing (15)
src/components/layout/app-nav.tsxsrc/components/layout/site-header.tsxsrc/components/ui/input.tsxsrc/components/ui/option-card.tsxsrc/components/ui/textarea.tsxsrc/config/marketing-nav.tssrc/features/discover/components/discover-header.tsxsrc/features/discover/components/opportunity-card.tsxsrc/features/marketing/components/cta-pill.tsxsrc/features/marketing/components/launch-app-modal.tsxsrc/features/marketing/index.tssrc/features/onboarding/components/avatar-upload.tsxsrc/features/onboarding/components/crop-photo-modal.tsxsrc/features/onboarding/components/role-gate-modal.tsxsrc/lib/site.ts
|
Note Autofix is a beta feature. Expect some limitations and changes as we gather feedback and continue to improve it. Fixes Applied SuccessfullyFixed 2 file(s) based on 1 unresolved review comment. Files modified:
Commit: The changes have been pushed to the Time taken: |
Fixed 2 file(s) based on 1 unresolved review comment. Co-authored-by: CodeRabbit <noreply@coderabbit.ai>
Summary
Clicking Launch App in the marketing header now opens a role gate modal ("Choose how you want to explore Boundless") instead of routing straight to
/dashboard. The visitor picks Contributor or Organiser, then Continue lands them in/dashboard?role=<role>. Implements the Figma design (modal, option card).Changes
Launch App role gate modal
LaunchAppModalbuilt on theDialog,OptionCardandPillButtonprimitives; Continue is disabled until a role is chosen (disabled style matches the Figma spec exactly).public/illustrations, rendered vianext/image.Design-token + link cleanups (separate commit)
success-500,neutral-400/700,white/8) acrossinput,textarea,option-card, and marketing surfaces.Testing
npm run typecheck— passnpm run lint— pass (one pre-existing warning in an untouched file)npm run test— 14 passednpm run build— pass🤖 Generated with Claude Code
Summary by CodeRabbit