공개 피드백 보드 열기

피드백 보드는 사용자가 다음에 원하는 것을 모읍니다. 공개 페이지에서 사용자는 다른 사람이 올린 아이디어를 읽고, 원하는 아이디어에 투표하고, 댓글을 달고, 자기 아이디어를 올립니다. 팀은 Mocco에서 같은 게시물을 보고 답변하며, 상태를 검토 중에서 계획됨, 진행 중, 출시됨으로 옮깁니다.

1. 시작하기 전에

공개 보드는 프로젝트의 헬프 센터 사이트에서 제공되므로 프로젝트에 헬프 센터 사이트가 있어야 합니다(헬프 센터 게시하기 참고). 사이트에 문서가 없어도 됩니다. 사이트가 showyourtime.help.mocco.club인 보드는 다음 주소에 있습니다.

https://showyourtime.help.mocco.club/feedback/<board>

헬프 센터에 help.showyourtime.app 같은 자체 도메인이 있으면 보드도 그 도메인에 있습니다. https://help.showyourtime.app/feedback/<board>입니다.

2. 보드 만들기

워크스페이스의 Products 페이지에서 Feedback board를 켭니다. 그러면 프로젝트에 Feedback 섹션이 생깁니다. 보드가 없는 프로젝트는 첫 보드를 만드는 양식으로 열립니다. 이름을 입력하면 주소는 이름을 따라 정해지고(Feature requests → /feedback/feature-requests), 원하면 바꿀 수 있습니다.

Manage boards는 모든 보드를 공개 주소와 함께 나열합니다. 여기서 보드 이름을 바꾸고, 주소를 바꾸고, 비공개로 전환하고, 삭제하고, 카테고리를 추가하거나 이름을 바꿉니다. 사용자는 글을 올릴 때 카테고리를 고르고, 보드와 로드맵은 카테고리로 필터링됩니다. 카테고리를 삭제해도 그 게시물은 카테고리 없음 상태로 남습니다.

보드와 카테고리 관리

보드는 만들 때 공개로 시작합니다. 비공개로 표시한 보드에는 공개 페이지가 없습니다. 보드 주소를 바꾸면 공개 링크도 바뀌므로, 이전에 공유한 링크는 더 이상 동작하지 않습니다.

3. 방문자에게 보이는 것

보드는 게시물을 득표 수가 많은 순으로 나열합니다. 누구나 읽을 수 있고 검색 엔진이 색인합니다. 각 게시물에는 득표 수, 상태, 댓글 수가 표시됩니다.

게시물이 득표 수 순으로 나열된 공개 피드백 보드

Top과 New는 목록을 정렬하고, 상태 버튼과 카테고리 버튼은 목록을 필터링합니다. 필터는 주소에 유지되므로(?status=planned&category=mobile) 필터링한 목록을 링크로 공유할 수 있습니다. 팀이 다른 게시물로 병합한 중복 게시물은 목록에서 빠집니다.

게시물 페이지에는 설명, 팀의 공식 답변, 공개 댓글이 있습니다. 팀의 내부 메모는 공개 페이지에 나타나지 않으며, 댓글에는 작성자가 드러나지 않고 "Official response", "The team", "A user"로 표시되고, 읽는 사람 본인의 댓글은 "You"로 표시됩니다.

득표 수, 공식 답변, 댓글이 있는 게시물

병합된 중복 게시물의 주소는 읽는 사람을 병합 대상 게시물로 보냅니다.

보드의 Roadmap 페이지(/feedback/<board>/roadmap)는 팀이 계획 중인 것, 만드는 중인 것, 출시한 것을 나란히 보여 줍니다. 각 열에는 득표 수가 많은 게시물이 먼저 최대 50개까지 나옵니다. Mocco에서 게시물을 계획됨, 진행 중, 출시됨으로 옮기면 로드맵에 올라가고, 검토 중이거나 닫힌 게시물은 로드맵에 나오지 않습니다. 카테고리 버튼으로 열을 좁힐 수 있고, 선택은 주소에 유지됩니다(?category=mobile).

로드맵: 계획됨, 진행 중, 출시됨이 득표 수 순으로 나열된 모습

Changelog 페이지(/feedback/<board>/changelog)에서는 출시한 내용을 알립니다. 각 항목에는 날짜, 태그(New, Improved, Fixed), 본문, 그 항목으로 출시된 아이디어가 있고, 그 아이디어에는 다시 Shipped in과 되돌아가는 링크가 표시됩니다. 게시된 항목만 나타납니다. 독자는 /feedback/<board>/changelog.rss에서 피드 리더로 구독할 수 있습니다.

변경 로그: 태그와 출시된 아이디어가 있는 항목 두 개

검색 엔진은 헬프 센터의 사이트맵(/sitemap.xml)으로 보드, 로드맵, 변경 로그, 모든 게시물을 찾으므로 직접 제출할 필요가 없습니다.

4. 앱에서 사용자 로그인시키기

글을 올리고 댓글을 달려면 사용자가 누구인지 알아야 합니다. 앱 서버가 로그인한 사용자를 위해 수명이 짧은 토큰에 서명합니다. 앱이 피드백 API에 보내는 것과 같은 토큰입니다(identity secret은 Mocco Messenger로 앱 안에서 문의받기 참고). 프로젝트의 identity secret(Messenger 설정에 나오는 그 값)으로 서명한 HS256 JWT이며, 사용자 ID를 sub에 넣고 만료는 최대 한 시간 뒤로 합니다.

토큰을 주소에 붙여 보드로 링크합니다.

import { SignJWT } from 'jose';

// On your server, for the signed-in user.
const now = Math.floor(Date.now() / 1000);
const token = await new SignJWT({})
  .setProtectedHeader({ alg: 'HS256' })
  .setSubject(user.id)
  .setIssuedAt(now)
  .setExpirationTime(now + 15 * 60)
  .sign(new TextEncoder().encode(process.env.MOCCO_IDENTITY_SECRET));

const boardUrl = `https://showyourtime.help.mocco.club/feedback/ideas?token=${token}`;

페이지는 토큰을 해당 브라우저 탭에서만 보관하고 주소에서는 지웁니다. 그래서 북마크되거나 다른 사람에게 전달되지 않습니다. 토큰이 만료되면 사용자는 앱의 링크를 다시 따라가면 됩니다.

로그인한 사용자는 아이디어를 올릴 수 있습니다. 제목을 입력하는 동안 보드가 비슷한 게시물을 보여 주므로, 사용자는 중복 게시물을 올리는 대신 그중 하나에 투표할 수 있습니다. 새 게시물은 작성자 본인의 표와 함께 Under review 상태로 시작합니다.

아이디어를 올리는 중에 비슷한 게시물이 제안되는 모습

로그인한 사용자는 게시물에서 클릭 한 번으로 투표하고, 다시 클릭하면 투표가 취소됩니다. 개수는 즉시 갱신됩니다. 댓글도 달 수 있습니다.

5. 계정이 없는 방문자

앱이 로그인시키지 않은 사람도 이메일 주소로 투표할 수 있습니다. Mocco가 링크를 메일로 보내고, 링크를 열면 투표가 집계됩니다. 글을 올리거나 댓글을 달 수는 없습니다.

이메일로 투표하기: 메일로 받은 링크를 열면 투표가 집계되는 모습

이메일 투표를 쓰려면 Mocco가 메일을 보낼 수 있어야 합니다. 이메일 발송기가 없는 자체 호스팅 Mocco에서는 양식이 사용할 수 없다고 안내합니다.

이메일로 투표한 사람은 게시물의 상태 변경 소식도 받습니다. 게시물이 계획됨, 진행 중, 출시됨, 닫힘이 되면 Mocco가 메일을 보냅니다. 출시 메일에는 출시된 변경 로그 항목의 링크가 들어 있습니다. 메일은 변경 2분 뒤에 발송되므로 실수를 되돌릴 수 있습니다. 2분 안에 게시물이 다시 옮겨지면 최신 상태만 발송하고, 게시물을 검토 중으로 되돌릴 때는 아무에게도 메일을 보내지 않습니다. 모든 메일에는 해당 게시물의 메일을 한 번에 끊는 구독 해지 링크와, 프로젝트 피드백에 관한 모든 메일을 끊는 링크가 있습니다. 모든 메일을 끊은 사람도 새 이메일 투표를 확인하는 메일은 받으며, 그 페이지에서 나머지 메일을 다시 켤 수 있습니다. Mocco는 앱이 로그인시킨 사람에게는 메일을 보내지 않습니다. 이메일 주소를 보관하지 않기 때문입니다. 이 사람들에게는 앱이 직접 알릴 수 있습니다.

구독 해지 페이지: 한 게시물의 메일을 끊거나, 프로젝트 피드백의 모든 메일을 끊는 선택지

6. 인박스에서 분류하기

Feedback 섹션은 인박스로 열립니다. 인박스에는 한 보드의 게시물이 검토 중인 것부터 최신순으로 나옵니다. 다른 보드, 상태(또는 All), 카테고리, 정렬(Newest, Most voted, By status)을 고를 수 있습니다. 선택은 주소에 유지되므로 보기를 북마크하거나 팀원에게 보낼 수 있습니다. 각 게시물에는 득표 수, 보드에서의 번호, 상태, 공개 댓글 수, 팀이 올렸는지 사용자가 올렸는지가 표시됩니다. 목록은 열려 있는 동안 30초마다 새로고침됩니다.

인박스: 모든 상태가 득표 수 순으로 나열된 모습

게시물을 열어 작업합니다.

  • Status로 게시물을 진행시킵니다. 게시물을 팔로우하는 모든 사람이 변경 소식을 받고, 계획됨, 진행 중, 출시됨 게시물은 로드맵에 나타납니다.

  • Category로 게시물을 분류하고, No category로 분류에서 뺍니다.

  • Comment는 세 가지 방식으로 남깁니다. Reply는 공개입니다. Official response는 팀의 답변이며 공개 댓글 사이에서 강조됩니다. Internal note는 Mocco 안에만 남고 방문자에게는 보이지 않습니다.

  • Votes는 투표한 사람을 나열합니다. 대기 중인 투표는 이메일 확인을 기다리는 투표입니다. 사용자가 이메일이나 통화로 요청하면, 앱이 그 사용자를 아는 ID로 투표를 기록하세요.

  • **Merge into another post…**는 중복을 처리합니다. 보드에서 제목이나 번호로 검색해 남길 게시물을 고릅니다. 중복 게시물의 투표와 팔로워가 그쪽으로 옮겨지고 각 사람은 한 번만 계산되며, 중복 게시물의 공개 주소는 독자를 남긴 게시물로 보냅니다.

Mocco의 게시물: 상태, 카테고리, 내부 메모와 공식 답변이 있는 댓글, 투표

대화를 피드백으로 바꾸기

사용자가 Messenger 인박스에서 무언가를 요청하면, 대화를 열고 옆 패널에서 Convert to feedback을 선택합니다. Mocco가 사용자가 쓴 내용에서 제목과 세부 내용을 채우고, 이미 같은 요청을 다루고 있을 수 있는 보드의 게시물을 보여 줍니다. Add to #N은 그중 하나에 요청을 추가하고, Create post는 새 게시물을 만듭니다. 로그인한 사용자의 투표는 대신 추가되므로, 게시물이 진행되면 그 사용자도 소식을 받습니다. 게시물 페이지에는 게시물이 나온 대화가 각 대화로 가는 링크와 함께 표시됩니다.

대화 변환: 보드의 비슷한 게시물과, 요청 내용으로 채워진 새 게시물

중복 가능성이 있는 게시물

Mocco는 새 게시물이 도착하고 1분 안팎에 그 게시물을 보드의 이전 게시물과 비교합니다. 제목의 단어 대부분이 이전 게시물 제목에 있거나, (임베딩 모델이 설정된 곳에서는) 두 게시물이 다른 말로 거의 같은 뜻을 담고 있으면, 그 쌍이 인박스 머리글의 Possible duplicates에 대기 중인 수와 함께 나타납니다. 각 쌍에서 Merge는 더 새로운 게시물을 이전 게시물로 합치고(**Merge into another post…**와 같습니다), Not the same은 그 쌍을 제쳐 두어 다시 제안되지 않게 합니다.

Possible duplicates: 세 쌍이 있고 각각 Merge와 Not the same 버튼이 있는 모습

GitHub 이슈와 풀 리퀘스트 연결

게시물을 그것을 구현하는 작업과 연결합니다. 게시물 페이지의 GitHub 아래에서 **Link an issue or pull request…**를 선택하고, 프로젝트에 연결된 저장소 중 하나를 고르고, Issue 또는 Pull request를 선택한 다음, 단어나 번호(#128)로 검색합니다. 결과를 클릭하면 연결됩니다. 각 연결에는 열림, 닫힘, 병합됨 여부가 표시되고, 병합된 경우에는 병합 커밋도 표시됩니다. 연결된 이슈에는 그 이슈를 닫는 풀 리퀘스트도 함께 나열됩니다. GitHub에서 상황이 바뀌면 Mocco가 이 정보를 최신으로 유지하므로 직접 돌아와서 새로고침할 필요가 없습니다. Unlink는 연결을 하나 제거합니다.

게시물의 프로젝트에 연결된 저장소만 검색하거나 연결할 수 있습니다. 먼저 프로젝트 페이지에서 저장소를 연결하세요. 연결 기능이 나오기 전에 Mocco GitHub App을 설치했다면, GitHub가 조직 소유자에게 읽기 전용 권한 두 가지(Issues와 Pull requests)를 수락하도록 요청합니다. GitHub 설정에서 App의 설치 페이지에 있는 Review request를 찾으세요. 그때까지는 이슈 검색이 실패합니다.

닫힌 이슈, 그것을 닫은 병합된 풀 리퀘스트, 열린 풀 리퀘스트에 연결된 게시물

릴리스되면 게시물을 출시됨으로 표시하기

Mocco는 게시물 뒤의 작업이 라이브가 되었을 때 알려 줄 수 있습니다. Manage boards의 Shipping on release에서 Release repository를 고릅니다. 이 보드의 기능을 사용자에게 내보내는 릴리스를 만드는 저장소입니다. 릴리스는 그 저장소의 파이프라인 실행 중 성공했고 승인 게이트를 통과한 실행입니다. 따라서 게이트가 없는 실행은 아무것도 출시하지 않습니다. 같은 파이프라인이 여러 곳에 배포한다면 Release step에 사용자에게 배포하는 단계의 이름(예: deploy-production)을 적어 두세요. 그러면 그 단계를 마친 실행만 집계됩니다. 그런 다음 게시물이 출시된 것으로 간주되는 시점을 고릅니다. 연결된 이슈와 풀 리퀘스트가 모두 출시되었을 때, 또는 하나라도 출시되었을 때입니다. 병합하지 않고 닫은 풀 리퀘스트나 풀 리퀘스트 없이 닫은 이슈는 게시물을 붙잡지 않습니다.

Shipping on release: 릴리스 저장소, 선택 사항인 릴리스 단계, 정책, 묻지 않고 게시물을 출시됨으로 표시하는 옵션

릴리스에 게시물과 연결된 풀 리퀘스트가 들어 있으면(병합 커밋이 릴리스된 커밋이거나, GitHub가 릴리스에 포함된다고 알려 주는 경우), 인박스에 배너가 나타납니다. 릴리스로 출시된 게시물 수, 출시된 실행, 승인한 사람이 표시됩니다. Mark shipped는 모든 게시물을 출시됨으로 옮기고, 이메일로 투표한 팔로워는 다른 상태 변경과 마찬가지로 소식을 받습니다. Dismiss는 게시물을 그대로 둡니다. Mocco는 게시물과 그 풀 리퀘스트를 나열한 변경 로그 항목 초안도 만들어 둡니다. Draft changelog entry를 열어 편집하고 게시할 수 있습니다.

인박스 배너: sre가 승인한 릴리스로 출시된 게시물 두 개

배너를 보려고 인박스를 계속 열어 둘 필요는 없습니다. Mocco는 보드와 릴리스마다 한 번씩 feedback.ship.suggested 알림도 보냅니다. 출시된 게시물 수, 해당 게시물, 릴리스의 커밋, 승인한 사람, 인박스 링크가 담겨 있습니다. Discord 채널에서 받으려면 Notifications의 채널 Rules에 이 알림이 포함된 Mocco 프리셋을 적용하거나, 직접 규칙을 추가하세요. 필터 board=<slug>로 알림을 보드 하나로 한정할 수 있습니다(Mocco 이벤트 참고).

확인 절차를 거치지 않으려면 Mark posts shipped without asking를 켜세요. 그러면 Mocco가 릴리스를 보는 즉시 게시물을 출시됨으로 표시하고, 이 변경은 게시물의 이력과 감사 로그에 Mocco가 한 것으로 기록됩니다. 켜지 않으면 꺼져 있습니다. Mocco는 릴리스 저장소에 있는 게시물의 풀 리퀘스트만 확인합니다. 그래서 작업이 다른 저장소에도 반영되는 게시물은 "모두" 정책에서 그 작업을 기다립니다. 이미 출시되었거나, 다른 게시물에 병합되었거나, 이전 배너를 기다리는 게시물은 건드리지 않습니다.

출시한 내용 알리기

인박스 머리글의 Changelog는 보드의 항목(초안, 예약됨, 게시됨)을 나열합니다. 제목을 입력하고 New entry를 선택해 새 항목을 시작합니다. 항목에는 변경된 내용을 Markdown으로 쓰고(미리보기는 독자에게 보이는 모습 그대로 보여 줍니다), New, Improved, Fixed 중 해당하는 것에 체크하고, 그 항목으로 출시된 게시물을 추가합니다. 그런 다음 Publish now를 선택하거나 시간을 골라 Schedule을 선택합니다. Mocco는 그 시간 후 1분 안에 게시합니다. 게시된 항목은 Unpublish로 초안 상태로 되돌릴 수 있습니다.

변경 로그 항목 작성: 제목, 태그, 미리보기가 있는 Markdown, 출시된 게시물

이메일로 게시물에 투표한 사람은 게시물이 출시되면 소식을 받고, 그 메일에는 출시를 알린 항목의 링크가 들어 있습니다.

7. 한도

각 사용자는 한 시간에 투표 30번, 댓글 20개, 게시물 5개를 올릴 수 있고, 로그인한 사용자가 누구든 한 네트워크 주소에서는 한 시간에 변경을 120번까지 할 수 있습니다. 이메일 주소 하나당 투표 확인 메일은 한 시간에 3통입니다.

검색 엔진이나 처음 방문한 사람에게 보이는 목록은 최소 1분에 한 번 새로고침됩니다. 게시물 페이지의 투표 수는 항상 최신입니다.