작업 목록
대표 작업소프트웨어사업커머스콘텐츠

초대해

끝까지 만들어 보고, 마음에 들 때 한 번 결제

청첩장을 직접 만들어 링크 하나로 보내는 서비스. 사업자와 통신판매업 신고를 마치고 실결제 카드 채널을 붙여 판매 중이다. 미리보기까지는 가입 없이 만들어 보고, 마음에 들면 14,900원 단일가로 결제해 발행한다 — 옵션별로 값이 붙지 않는다. 처음엔 «결»이라는 이름의 청첩장 하나였고, 거기서 만든 빌더와 뷰어가 지금 엔진의 뼈대가 됐다.

셀프로 만드는 모바일 청첩장 · chodaehae.com

기간
운영 중 — 2026년 10월 자체 서버 이전
역할
기획 · 아키텍처 · 백엔드 · 프론트엔드 · 결제 · 앱 빌드 · 사업자 등록
분류
소프트웨어, 사업, 커머스, 콘텐츠
등급
대표 작업 — 문제부터 결과까지 전부 적어둔 것
실제 화면 · 3장

돌아가고 있는 상태입니다.

만들었다는 말 대신 켜져 있는 화면을 둡니다. 데모용으로 꾸민 것이 아니라 직접 띄워 찍은 것이고, 비어 있는 값은 비어 있는 채로 두었습니다.

초대해 화면
invitation-20261008-home.jpg원본 ↗
초대해 화면
invitation-20261008-templates.jpg원본 ↗
초대해 화면
invitation-20261008-create.jpg원본 ↗
01

무슨 문제였나

모바일 청첩장은 이미 표준이 됐는데 값을 미리 알 수 없다. 기본가는 싸 보이지만 갤러리 · 참석 의사 · 방명록이 옵션별 유료라 다 켜고 나서야 총액이 나온다. 결제를 하기 전까지 결과물을 못 보는 곳도 많다. 만들어 보고 결정하고 싶은 사람이 그럴 수 없는 구조였다.

02

어떻게 풀었나

값을 하나로 묶었다 — 모든 기능을 켠 채로 끝까지 만들어 미리 보고, 마음에 들 때 한 번 결제해 발행하는 단일가. 결과를 보기 전에 지갑을 열 이유를 없앴다. 화면에는 테마를 하드코딩하지 않았다. 표지 · 글꼴 · 색 · 장식을 데이터 계약으로 빼서, 새 테마를 내는 일이 신규 개발이 아니라 «계약 채우기»로 끝난다. 한때 돌잔치 · 환갑 · 기업 행사까지 열다섯 개 카테고리를 이 엔진 위에 얹어 돌려봤고, 수요가 청첩장에 몰린다는 걸 확인한 뒤 청첩장 전용으로 접었다. 넓히는 것도 접는 것도 코드가 아니라 데이터에서 끝났다.

구조

  1. 01공용 엔진 — 허브 · 만들기 · 하객 뷰어 · 결제 · 감사장
  2. 02테마 계약 — 테마 파일엔 색 · 글꼴 토큰만, 배치는 따로 — 발행된 초대장의 모양은 바꾸지 않는다
  3. 03요소 디자인 — 달력 · 길 안내 · 카운트다운 · 신랑신부 카드 · 인트로 영상을 10종씩
  4. 04결제 — 서버가 금액 확정, 웹훅 + 10분 재확인, 결제 전 발행 차단
  5. 05자체 서버 — API + SPA + 링크 미리보기용 OG 주입, Docker · Caddy

어려웠던 것

  • «라벨만 바꾼 재탕»을 만들지 않으려면 카테고리마다 문구와 흐름을 새로 짜야 한다 — 그걸 개발이 아니라 데이터 작성으로 바꾸는 게 설계의 전부였다
  • 여러 에이전트가 카테고리를 동시에 만들어도 충돌하지 않도록 네이밍 · 폴더 · CSS 토큰 · API 규약을 먼저 문서로 고정했다
  • 가격 · 문구 · 라우팅이 여러 곳에 흩어지면 반드시 어긋난다 — 각각 한 곳에서만 정의되게 묶었다
  • 장식과 아이콘은 전부 자체 제작, 폰트는 라이선스가 열린 것만, 문구는 창작이거나 저작권 만료작만 — 저작권 무결을 설계 원칙으로 뒀다
  • 편집 인터페이스와 열람 인터페이스의 요구 분리 — 만드는 쪽은 쉬워야 하고 보는 쪽은 빠르고 예뻐야 한다
03

무엇을 만들었나

  • 테마 엔진 — 표지 · 글꼴 · 색 · 장식을 데이터로 정의해 새 시안을 계약 채우기로 낸다
  • 웨딩 테마 20종 · 요소 디자인 5종류 × 10종 · 배경음악 19곡
  • 카카오톡 공유 카드에서 바로 «일정 추가» (휴대폰 달력 · 구글 캘린더)
  • 배경음악 — 결제한 뒤 편집 화면에서 곡을 고르고, 하객 화면에서 이어서 재생
  • 후기를 남기면 감사장 무료
  • 보관 기간 — 미결제 3일, 결제한 초대장은 예식 뒤 30일
  • 새 카테고리를 여는 절차를 문서로 고정 — 레지스트리 등록 · 프리셋 정의 · 템플릿 추가 · 데모 시드와 검증
  • 게스트 스냅 — 하객이 현장 사진을 올리고 소유자만 전체를 내려받는다
  • 구글 드라이브 동기화 — 하객 사진이 소유자 폴더로 자동 백업
  • 참석 의사 집계 · 방명록 CSV 내려받기
  • 당일 모드 — 행사 당일에는 오시는 길 · 주차 · 식권이 먼저 뜬다
  • 사진을 브라우저에서 먼저 줄여 올린다 — 방향 보정까지
  • 링크 미리보기에 사진 · 이름 · 일시가 뜨도록 서버가 태그를 주입
  • 미리보기까지는 가입 없이 만들고(결제 · 꾸미기는 카카오 · 구글 로그인), 하객은 앱 설치 없이 연다
  • 빌더 마법사 — 두 사람 · 예식 안내 · 사진 · 마음 전하기 · 분위기를 단계로 나눠 묻는다
  • 하객 화면 — D-day 초 단위 카운트 · 초대의 글 · 혼주 표기 · 달력 · 갤러리
  • 오시는 길 — 지도 연동 · 주소 복사 · 지하철 도보 시간 · 주차 안내
  • 마음 전하실 곳 — 양가 계좌를 나눠 담고 복사 버튼을 붙였다
  • 참석 의사 — 성함 · 참석 여부 · 어느 쪽 하객 · 동행 인원 · 식사 여부까지. 식대 정산에 필요한 건 식사 여부다
  • 방명록 · 카카오톡 공유 · 링크 복사
  • 옆에서 폰 화면이 실시간으로 따라온다 — «하객에게 보이는 화면 그대로»
  • 부모님 성함은 «비워두셔도 좋아요» — 집집마다 사정이 다르다
  • 가족 관계 표기를 직접 고른다 (장남 · 차녀 …)

쓴 기술

FastAPIPythonSQLitePillowReactVite포트원 V2 + KCPCapacitorPWAGoogle Drive OAuth카카오 · 구글 로그인DockerCaddy
04

무엇이 남았나

  • 청첩장 전용으로 정리 — 열다섯 개 카테고리까지 얹어 돌려본 뒤 수요가 몰리는 곳만 남겼다
  • 포트원 V2 + KCP 실결제 카드 채널 연동 — 금액은 서버가 확정하고 웹훅 · 10분 재확인으로 대조한다
  • 10월 자체 서버(Docker · Caddy)로 옮겨 운영, 10월 6~8일 사흘 동안 배포 번호 r60 → r85
  • 웹 · 안드로이드 앱 · PWA 세 채널
  • 사업자 등록과 통신판매업 신고 완료 — 전자상거래 판매 요건 확보
  • 사업계획서를 문서로 정리 — 문제 인식부터 손익 시뮬레이션과 로드맵까지

알게 된 것

«확장 가능하게 만든다»는 말은 대개 구호로 끝난다. 이번에는 그걸 검사할 수 있는 형태로 바꿨다 — 새 카테고리를 여는 데 화면 코드를 한 줄이라도 고쳐야 하면 설계가 실패한 것이다. 그 기준을 세우고 나니 나머지 결정이 따라왔다. 그리고 계약을 먼저 정해두면 사람이든 에이전트든 여럿이 동시에 붙어도 합쳐진다는 것을 확인했다. 첫 버전에서 배운 것도 그대로 남아 있다 — 만드는 사람과 보는 사람이 다르면 화면도 나눠야 하고, «필수»를 줄이는 게 곧 배려다. 부모님 칸을 비울 수 있게 하는 것만으로 못 쓰는 사람이 사라진다.

다음 프로젝트패션 유통 관리 시스템