Voting and match scaffoldP0 40/70

/matches

매칭 결과 목록

최대 3명 호감 투표와 앱·프로필 매칭 결과 안내 화면

투표는 최대 3명·수정 불가·행사 종료 후 10분 기준으로 고정하고, 매칭 결과는 앱/프로필 안내와 실시간 대화 제외 경계를 함께 둡니다.

ASBU서툰 우리의 옆자리

Concept C — Social Event

핵심 소셜 이벤트

매칭 결과는 앱과 프로필 페이지로 안내하되 V1 실시간 대화처럼 보이지 않게 한다.

PDF 로고 반영 · 폰트/앱 아이콘 미확정

Route

/matches매칭 결과 목록사용자 모바일 · P0

Template

votingMatchFlow시안 변경 시 family plan과 componentSet을 먼저 수정합니다.High expression

Reusable components

ExtractedLogoVoteParticipantCardAnonymousVoteNoteMatchReportCardSafeContactGuide

Guardrails

검증된 오프라인 이벤트에 초대받는 밝고 설레는 경험투표/매칭 화면은 밝게, 인증/결제/관리자 화면은 절제한다실시간 채팅, AI 매칭, OCR, 구독/IAP처럼 보이는 UI를 만들지 않는다

Primary CTA

상대 프로필 보기계약상 route action을 유지하고, 시각 표현만 Concept C 컴포넌트로 교체합니다.상대 프로필 보기
ASBU
매칭검증된 오프라인 이벤트

투표와 매칭

매칭 결과

행사 이후 공개된 매칭 결과를 확인합니다.

익명성 안내실시간 대화 아님정적 결과 확인
선택 카드01미리보기
선택 카드02미리보기
선택 카드032 / 5

매칭 결과

2 / 5

행사 후 선택을 스와이프 카드로 확인합니다

사진, 대화 기억, 운영 확인 신호를 한 화면 안에서 비교합니다.

대화 기억공개 범위수동 확정
대화 기억행사에서 자연스럽게 이어진 대화를 먼저 봅니다

상대 정보보다 내가 기억하는 대화 맥락과 운영 기준을 앞에 둡니다.

공개 범위연락 전 공개되는 정보만 확인합니다

연락처나 개인 식별 정보는 고객 정책 확정 전까지 노출하지 않습니다.

선택 확정확정 CTA는 화면 하단 가까이에 고정합니다

선택은 미리보기 상태이며 실제 매칭 공개나 알림 발송을 의미하지 않습니다.

미리보기 · 실제 알림/연락처 공개 없음선택 확정

매칭 결과

앱과 프로필 페이지로 결과를 안내합니다

상세 화면에서 공개 범위와 문의/신고 동선을 확인합니다. 실시간 대화 기능은 V1에 포함하지 않습니다.

비동기 매칭 리포트공개 대기

앱·프로필 매칭 결과

매칭 결과는 앱과 프로필 페이지로 안내하고 실시간 대화는 V1에서 제외

app-delivery프로필-page-deliverychat-post-v1

다음 이동

상대 프로필 보기

결과를 확인한 뒤 필요한 문의나 신고 동선으로 이어갈 수 있습니다.

fixture-only no-provider-call audit log preview

Template family

votingMatchFlow

투표 저장/매칭 공개 API 대기

01ProfileCard
02Vote state
03EmptyState
04Match CTA

UI primitives

공통 컴포넌트 슬롯

MobileShellPageHeaderProfileCardStatusBadgeCallToActionEmptyState

State contract

로딩·빈값·오류·차단·주요 행동

디자인과 실데이터를 기다리는 동안에도 모든 route가 같은 실패/대기/빈값 골격을 유지하도록 화면별 상태 계약을 고정합니다.

Loading

매칭 결과 목록 불러오는 중

최대 3명 선택, 수정 불가, 종료 후 10분 마감 기준을 반영한 투표/매칭 상태를 불러오는 중입니다.

Empty

매칭 결과 목록에 표시할 항목이 없습니다

아직 표시할 투표 또는 매칭 결과가 없습니다. 결과는 앱과 프로필 페이지 안내 범위에서 표시합니다.

Error

매칭 결과 목록 데이터를 확인하지 못했습니다

실제 계정·정책·결제 연동 전에는 외부 요청을 만들지 않고, 재시도·문의·뒤로가기 위치만 계약으로 고정합니다.

Blocked

매칭 결과 목록 고객 입력 대기

실제 투표 저장, 마감 시각 검증, 매칭 결과 발송은 Firebase 연결과 운영 정책 확정 후 활성화합니다.

Success

매칭 결과 목록이 완료됐어요

투표 결과와 매칭 정보를 차분히 확인할 수 있습니다. 다음 단계는 매칭 상대 프로필에서 이어서 확인할 수 있어요.

Primary action

상대 프로필 보기/matches/[matchId]customer input required

Required data

eventVotingWindowvoteStatematchResultprimitive:MobileShellprimitive:PageHeaderprimitive:ProfileCardprimitive:StatusBadgeprimitive:CallToActionprimitive:EmptyState

Customer input

brandSkinmatchingPolicyvotingPolicyfirebaseProject

Next routes

/matches/[matchId]/me

Action/Form contract

버튼·폼·상태전이 바인딩

`screen-action-contract.json` 기준 primary CTA, form field, 상태전이, provider 차단, audit requirement를 화면에 직접 표시합니다. 현재 경계는 fixture-only-no-provider-call이며 no provider calls before customer accounts 정책을 유지합니다.

Provider block

no-provider-call-before-customer-accounts

Firebase·Toss·Storage·Auth production call은 고객 계정 수령 전까지 차단합니다.

Cloud Firestore

Audit requirement

audit log not required

none

none

Form preview

입력 폼 없음이 화면은 primary CTA 또는 상태전이만 fixture로 표시합니다.
준비idle

상대 프로필 보기을 누르면 투표와 매칭 확인으로 자연스럽게 이어집니다.

진행 중submitting

잠시만 기다리면 매칭 결과 목록 상태가 화면에 정리됩니다.

완료success

투표 결과와 매칭 정보를 차분히 확인할 수 있습니다. 다음 단계는 매칭 상대 프로필에서 이어서 확인할 수 있어요.

다시 확인error

입력한 내용과 화면 안내를 확인한 뒤 상대 프로필 보기을 다시 눌러 주세요.

확인 필요blocked

매칭 공개 기준과 투표 안내 문구 확인이 필요합니다. 준비되면 상대 프로필 보기을 다시 진행할 수 있습니다.

action-matches-primaryidlesubmitting

사용자가 primary action을 실행합니다.

fixtureSuccesssubmittingsuccess

외부 provider 호출 없이 fixture 성공 상태를 표시합니다.

fixtureErrorsubmittingerror

검증/fixture 오류 상태를 표시합니다.

customerInputMissingidleblocked

고객 로고/계정/정책 blocker가 남아 있으면 blocked 상태를 유지합니다.

customerInputResolvedblockedidle

필수 입력이 해결되면 기본 상태로 돌아갑니다.

Fixture interaction runner

role·CTA·form·provider·audit 시뮬레이션

실 provider 호출 없이 primary CTA, role decision, form submit, state transition, audit requirement를 fixture-only로 점검합니다.

Role access

user6 denied roles

Primary flow

상대 프로필 보기/matches/demo-match

Form submit

none0 required fields provided by fixture

Audit/provider

audit not required1 blocked providers, 0 calls

Mock navigation fixture

실데이터 없이 클릭 가능한 대표 흐름

Firebase·Toss·정책 원문을 호출하지 않는 fixture-only 링크입니다. 동적 segment는 demo id로 치환해 브라우저에서 바로 route reachability를 확인합니다.

Seed

매칭 결과 목록 demo flowroute-matches-fixturefixture-only-no-provider-call

Mocked entities

fixture:voteStatefixture:matchPreviewfixture:profileSubsetprimitive:MobileShellprimitive:PageHeaderprimitive:ProfileCardprimitive:StatusBadgeprimitive:CallToActionprimitive:EmptyState

Fixture payload

화면별 최소 DTO preview

실제 Firebase/Toss/정책 원문 대신 사용할 최소 payload입니다. 화면 구조와 DTO 슬롯을 먼저 맞추고, 고객 계정·정책 수령 후 실제 데이터로 교체합니다.

Payload contract

votingMatchpayload-matchesmatch

Summary

매칭 결과를 앱과 프로필 페이지에서 안내하되 V1 실시간 대화는 제외하는 match fixture payload입니다. 실제 provider 호출 없이 layout과 DTO 슬롯만 확인합니다.

route-matches-fixture
ready앱·프로필

전달 경로

neutralV1 제외

실시간 대화

공개 대기

앱·프로필 매칭 결과

매칭 결과는 앱과 프로필 페이지로 안내하고 실시간 대화는 V1에서 제외

app-deliveryprofile-page-deliverychat-post-v1

Table columns

이름 · title상태 · status

participant auth

max-3-vote-policy-applied

vote-edit-locked

match-chat-post-v1

audit-friendly state