You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

295 lines
18 KiB
JavaScript

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

/* 아리 — 메일 데이터 (여러 계정 통합 · AI 분석 포함) */
(function () {
/* ---------- 계정 (여러 어카운트 수입) ---------- */
const accounts = [
{ id: "work", name: "회사", email: "jiwoo@lumi.co", tone: "coral", kind: "Lumi Workspace", unread: 3 },
{ id: "personal", name: "개인", email: "jiwoo.kim@gmail.com", tone: "blue", kind: "Google", unread: 2 },
{ id: "side", name: "사이드", email: "jiwoo@hey.com", tone: "violet", kind: "HEY", unread: 1 },
];
const acc = Object.fromEntries(accounts.map((a) => [a.id, a]));
/* ---------- 폴더 / 스마트뷰 ---------- */
const folders = [
{ id: "inbox", name: "받은편지함", icon: "inbox" },
{ id: "starred", name: "별표", icon: "star" },
{ id: "sent", name: "보낸편지함", icon: "send" },
{ id: "drafts", name: "임시보관함", icon: "file" },
{ id: "archive", name: "보관함", icon: "archive" },
];
/* ---------- 사람 ---------- */
const people = {
hyunwoo: { name: "현우", email: "hyunwoo@lumi.co", initial: "현", c: "var(--violet)", role: "프로덕트 디자이너" },
daepyo: { name: "서지원 대표", email: "jiwon@lumi.co", initial: "서", c: "var(--coral)", role: "대표이사" },
minseo: { name: "민서", email: "minseo@lumi.co", initial: "민", c: "var(--green)", role: "팀 리드" },
sua: { name: "수아", email: "sua@lumi.co", initial: "수", c: "oklch(0.66 0.13 200)", role: "UX 리서처" },
jaeho: { name: "재호", email: "jaeho@lumi.co", initial: "재", c: "var(--amber)", role: "데이터 분석" },
bank: { name: "우리카드", email: "no-reply@wooricard.com", initial: "우", c: "oklch(0.6 0.12 250)", role: "카드 명세" },
book: { name: "수요 독서모임", email: "club@bookwed.kr", initial: "독", c: "oklch(0.62 0.1 150)", role: "모임 운영" },
stripe: { name: "Stripe", email: "receipts@stripe.com", initial: "S", c: "oklch(0.6 0.15 285)", role: "결제 영수증" },
recruit: { name: "박서연 (지원자)", email: "seoyeon.p@gmail.com", initial: "박", c: "oklch(0.64 0.12 30)", role: "프로덕트 디자이너 지원" },
me: { name: "지우", email: "jiwoo@lumi.co", initial: "지", c: "var(--blue)", me: true },
};
const P = (s) => s.split("\n").map((t) => t.trim()).filter(Boolean);
/* ---------- 메일 (최신순) ----------
ai: 아리가 새 메일을 분석해 준비해 둔 작업 묶음
summary : 한두 줄 요약
priority : 높음 | 보통 | 낮음
category : 분류 라벨
tasks : [{ text, project, due, prio }]
events : [{ title, date, day, time, dur }]
replies : [{ tone, preview, body }]
file : { project, reason } 프로젝트 정리 제안
*/
const emails = [
{
id: "m1", account: "work", from: "hyunwoo", to: "나",
subject: "온보딩 시안 v3 — 금요일까지 피드백 부탁드려요",
time: "8분 전", date: "오늘 09:12", read: false, starred: false, hasAttach: true,
attachments: [{ name: "온보딩_v3.fig", size: "4.2MB" }, { name: "변경사항_요약.pdf", size: "320KB" }],
labels: ["디자인"],
preview: "지우님, 리뷰에서 나온 코멘트 반영해서 v3 정리했어요. 환영·권한요청·음성안내 3개 화면이 바뀌었고…",
body: P(`지우님, 안녕하세요. 현우입니다.
지난 디자인 리뷰에서 주신 코멘트 반영해서 온보딩 시안 v3 정리했습니다. 이번에 바뀐 건 크게 세 화면이에요.
1) 환영 화면 — 카피 톤을 조금 더 친근하게 바꿨고, 일러스트는 교체 요청 넣어둔 상태입니다.
2) 권한 요청 화면 — 요청 순서를 재배치했어요. (알림 → 위치 → 연락처)
3) 음성 안내 화면 — 신규 추가했습니다. 한 번 봐주시면 좋겠어요.
금요일(6/13)까지 피드백 주시면 다음 스프린트에 바로 반영하겠습니다. 피그마 링크랑 변경사항 요약본 첨부했어요. 감사합니다!`),
ai: {
summary: "온보딩 시안 v3 도착 — 3개 화면(환영·권한요청·음성안내) 수정. 금요일 6/13까지 피드백 요청.",
priority: "높음", category: "검토 요청",
tasks: [
{ text: "온보딩 시안 v3 피드백 정리", project: "온보딩 리디자인 · 와이어프레임", due: "6/13", prio: "높음" },
{ text: "음성 안내 화면 신규 검토", project: "온보딩 리디자인 · 음성 인터페이스", due: "6/12", prio: "보통" },
],
events: [],
replies: [
{ tone: "수락 · 일정 약속", preview: "금요일까지 피드백 드릴게요", body: "현우님, 잘 받았어요! 오늘 중으로 살펴보고 금요일 오전까지 화면별로 코멘트 정리해서 드릴게요. 음성 안내 화면은 특히 꼼꼼히 볼게요. 수고하셨어요 👏" },
{ tone: "질문 추가", preview: "권한 요청 순서 근거가 궁금해요", body: "현우님, 시안 잘 봤어요. 권한 요청 순서를 알림 → 위치 → 연락처로 두신 근거가 따로 있을까요? 리서치 결과랑 연결해서 보면 좋을 것 같아 여쭤봐요." },
{ tone: "간단 확인", preview: "확인했고 회신 예정", body: "확인했습니다, 현우님! 금요일까지 피드백 드릴게요." },
],
file: { project: "온보딩 리디자인", reason: "‘와이어프레임’ 작업과 직접 연결돼요" },
},
},
{
id: "m2", account: "work", from: "daepyo", to: "나, 재무팀",
subject: "[중요] 오늘 14시 분기 전략 미팅 — 리포트 초안 공유 부탁",
time: "42분 전", date: "오늘 08:38", read: false, starred: true, hasAttach: false,
labels: ["경영진"],
preview: "지우님, 오늘 오후 미팅 전에 분기 리포트 초안 미리 돌려볼 수 있을까요? 특히 매출·예산 섹션 위주로…",
body: P(`지우님,
오늘 오후 2시 분기 전략 미팅 잘 부탁드려요. 미팅 전에 분기 리포트 초안을 미리 공유해 주시면 다같이 보고 들어갈 수 있을 것 같아요.
특히 매출 섹션과 예산 재배분 안건은 의사결정이 필요한 부분이라, 숫자가 확정된 버전으로 부탁드립니다. 리텐션 지표는 지난번 버전으로도 충분해요.
미팅은 60분, 대회의실입니다. 늦지 않게 시작하면 좋겠어요. 고생 많으십니다.
서지원 드림`),
ai: {
summary: "오늘 14시 분기 전략 미팅 전, 매출·예산 섹션 확정본 리포트 공유 요청. 의사결정 안건 포함.",
priority: "높음", category: "마감 임박",
tasks: [
{ text: "분기 리포트 매출 섹션 숫자 확정", project: "경영 전략 · 분기 리포트", due: "6/10", prio: "높음" },
{ text: "예산 재배분 안건 1p 요약", project: "경영 전략 · 예산 관리", due: "6/10", prio: "높음" },
{ text: "미팅 시작 전 리포트 메일로 공유", project: "경영 전략 · 분기 리포트", due: "6/10", prio: "높음" },
],
events: [
{ title: "분기 전략 미팅", date: "6/10", day: "오늘", time: "14:00", dur: "60분", place: "대회의실" },
],
replies: [
{ tone: "확정 회신", preview: "13시까지 확정본 공유할게요", body: "대표님, 확인했습니다. 매출·예산 섹션 숫자 확정해서 오후 1시까지 미팅 참석자분들께 공유드리겠습니다. 예산 재배분 안건은 1페이지 요약 따로 붙여둘게요." },
{ tone: "일부 지연 양해", preview: "예산 섹션만 미팅 중 공유", body: "대표님, 매출 섹션은 1시까지 확정해서 보내드리겠습니다. 예산 재배분 안건은 재무팀 최종 확인이 오전 중 마무리되는 대로, 늦어도 미팅 직전에 공유드릴게요." },
],
file: { project: "경영 전략", reason: "‘분기 리포트’ 마감 작업과 연결돼요" },
},
},
{
id: "m3", account: "work", from: "minseo", to: "나",
subject: "오늘 1:1 안건 미리 정리해뒀어요",
time: "2시간 전", date: "오늘 07:50", read: false, starred: false, hasAttach: false,
labels: ["팀"],
preview: "지우님, 오후 1:1 때 이야기 나누고 싶은 거 두 가지 정리했어요. 1) 하반기 성장 로드맵 2) 업무 분장…",
body: P(`지우님, 좋은 아침이에요!
오늘 오후 1:1 때 이야기 나누고 싶은 거 미리 정리해봤어요.
1) 하반기 성장 로드맵 — 제 쪽 OKR이랑 어떻게 맞물리면 좋을지 같이 보면 좋겠어요.
2) 업무 분장 — 리서치 보드 업데이트랑 회고 문서 배포, 둘 중 하나는 재호님께 넘기는 게 어떨까요?
편하게 오시면 됩니다. 이따 봬요 :)`),
ai: {
summary: "오늘 1:1(16:30) 안건 2건: 하반기 성장 로드맵, 업무 분장(재호님께 일부 위임 제안).",
priority: "보통", category: "준비 필요",
tasks: [
{ text: "1:1 전 하반기 로드맵 초안 훑어보기", project: "팀 운영", due: "6/10", prio: "보통" },
],
events: [
{ title: "1:1 — 민서님", date: "6/10", day: "오늘", time: "16:30", dur: "30분", place: "포커스룸 B" },
],
replies: [
{ tone: "준비해서 갈게요", preview: "로드맵 보고 갈게요", body: "민서님, 정리 고마워요! 1:1 전에 하반기 로드맵 초안 한 번 보고 갈게요. 업무 분장은 재호님 일정도 같이 보면서 정리하면 좋겠어요. 이따 봬요 :)" },
],
file: { project: "팀 운영", reason: "1:1·업무 분장 관련 항목이에요" },
},
},
{
id: "m4", account: "personal", from: "bank", to: "나",
subject: "[우리카드] 6월 결제 예정 명세서 안내",
time: "5시간 전", date: "오늘 04:30", read: false, starred: false, hasAttach: false,
labels: ["금융"],
preview: "고객님의 6월 결제 예정 금액은 1,284,500원입니다. 결제일은 6월 25일이며, 등록된 카드…",
body: P(`안녕하세요, 우리카드입니다.
고객님의 6월 결제 예정 금액을 안내드립니다.
· 결제 예정 금액: 1,284,500원
· 결제 예정일: 2026년 6월 25일
· 결제 계좌: 우리은행 (***-12)
※ 등록하신 결제 카드의 유효기간이 6월 말 만료될 예정입니다. 자동 결제 중단을 막으려면 카드 정보를 갱신해 주세요.
본 메일은 발신 전용입니다.`),
ai: {
summary: "6월 결제 예정 1,284,500원(6/25). 결제 카드 유효기간 6월 말 만료 → 갱신 필요.",
priority: "보통", category: "금융 · 액션 필요",
tasks: [
{ text: "구독 결제 카드 정보 갱신 (말일 전)", project: "개인", due: "6/28", prio: "보통" },
],
events: [
{ title: "카드 결제일 (1,284,500원)", date: "6/25", day: "수", time: "종일", dur: "", place: "" },
],
replies: [],
file: { project: "개인", reason: "결제·구독 관리 항목이에요" },
},
},
{
id: "m5", account: "side", from: "book", to: "나",
subject: "이번 주 수요 독서모임 — 6/12 저녁 7시 ‘몰입’ 2부",
time: "어제", date: "6월 9일 18:20", read: false, starred: false, hasAttach: false,
labels: ["모임"],
preview: "이번 주는 ‘몰입(Deep Work) 2부를 다룹니다. 장소는 합정 모임공간, 저녁 7시예요. 발제는…",
body: P(`안녕하세요, 수요 독서모임입니다.
이번 주 모임 안내드려요.
· 일시: 6월 12일(목) 저녁 7시
· 장소: 합정 모임공간 ‘책상’
· 범위: ‘몰입(Deep Work) 2부 (128~210쪽)
· 발제: 지우님 (2장 담당)
지우님이 이번 주 2장 발제 맡아주셨어요. 부담 갖지 마시고 인상 깊었던 부분 위주로 준비해오시면 됩니다. 곧 뵐게요!`),
ai: {
summary: "6/12(목) 19시 독서모임 ‘몰입’ 2부. 지우님이 2장 발제 담당.",
priority: "보통", category: "개인 일정",
tasks: [
{ text: "‘몰입’ 2장 발제 준비 (128~210쪽)", project: "개인 · 성장", due: "6/12", prio: "보통" },
],
events: [
{ title: "수요 독서모임 (2장 발제)", date: "6/12", day: "목", time: "19:00", dur: "120분", place: "합정 ‘책상’" },
],
replies: [
{ tone: "참석 확정", preview: "발제 준비해서 갈게요", body: "안녕하세요! 6/12 참석합니다. 2장 발제 준비해서 갈게요. 인상 깊었던 부분 위주로 정리해볼게요. 곧 뵐게요 :)" },
],
file: { project: "개인", reason: "독서·성장 관련 일정이에요" },
},
},
{
id: "m6", account: "work", from: "recruit", to: "나",
subject: "프로덕트 디자이너 지원합니다 — 박서연 포트폴리오",
time: "어제", date: "6월 9일 14:05", read: true, starred: false, hasAttach: true,
attachments: [{ name: "박서연_포트폴리오.pdf", size: "12MB" }],
labels: ["채용"],
preview: "안녕하세요, 프로덕트 디자이너 직무에 지원하는 박서연입니다. 5년 차 디자이너로 모바일 앱…",
body: P(`안녕하세요, 채용 담당자님.
프로덕트 디자이너 직무에 지원하는 박서연입니다. 5년 차 디자이너로, 핀테크와 헬스케어 분야 모바일 앱 디자인을 주로 해왔습니다.
특히 온보딩 플로우 개선으로 전환율을 23% 높인 경험이 있어, Lumi의 온보딩 리디자인 방향성과 잘 맞을 것 같아 지원하게 되었습니다.
포트폴리오 첨부드립니다. 검토 후 연락 주시면 감사하겠습니다.`),
ai: {
summary: "프로덕트 디자이너 지원(5년 차, 온보딩 전환율 +23% 경험). 포트폴리오 첨부.",
priority: "보통", category: "채용",
tasks: [
{ text: "박서연 포트폴리오 검토 & 1차 의견", project: "팀 운영 · 채용 & 온보딩", due: "6/13", prio: "보통" },
],
events: [],
replies: [
{ tone: "검토 후 회신 약속", preview: "검토 후 다음 주 연락드릴게요", body: "박서연님, 지원해 주셔서 감사합니다. 포트폴리오 잘 받았습니다. 내부 검토 후 다음 주 초 연락드리겠습니다. 좋은 하루 보내세요!" },
],
file: { project: "팀 운영", reason: "‘채용 & 온보딩’ 작업과 연결돼요" },
},
},
{
id: "m7", account: "personal", from: "stripe", to: "나",
subject: "Your receipt from ChatGPT Plus — $20.00",
time: "2일 전", date: "6월 8일 09:00", read: true, starred: false, hasAttach: false,
labels: ["영수증"],
preview: "Receipt #2451-0098 · ChatGPT Plus Subscription · $20.00 paid on Jun 8, 2026…",
body: P(`Receipt from OpenAI, LLC
Amount paid: $20.00
Date: June 8, 2026
Subscription: ChatGPT Plus (monthly)
Payment method: Visa ···· 4242
Thank you for your business.`),
ai: {
summary: "ChatGPT Plus 월 구독 $20 결제 영수증. 별도 조치 불필요.",
priority: "낮음", category: "영수증",
tasks: [],
events: [],
replies: [],
file: { project: "개인", reason: "구독 영수증으로 보관하면 좋아요" },
},
},
{
id: "m8", account: "work", from: "jaeho", to: "나, 수아",
subject: "리텐션 코호트 데이터 v2 — 이탈 사유 태깅 완료",
time: "2일 전", date: "6월 8일 17:42", read: true, starred: false, hasAttach: true,
attachments: [{ name: "retention_cohort_v2.xlsx", size: "880KB" }],
labels: ["데이터"],
preview: "지우님, 수아님. 이탈 사유 태깅까지 끝내서 코호트 데이터 v2 올려요. 주차별 잔존율이랑…",
body: P(`지우님, 수아님.
이탈 사유 태깅까지 마무리해서 리텐션 코호트 데이터 v2 공유드려요. 주차별 잔존율, 코호트별 이탈 사유 분포까지 정리돼 있습니다.
분기 리포트 리텐션 섹션에 바로 쓰실 수 있게 시각화용 표도 시트 2번에 넣어뒀어요. 추가로 필요한 분석 있으면 말씀 주세요.`),
ai: {
summary: "리텐션 코호트 v2 완료(이탈 사유 태깅 포함). 리포트용 시각화 표 포함.",
priority: "보통", category: "데이터 수신",
tasks: [
{ text: "코호트 v2 표 → 분기 리포트 리텐션 섹션 반영", project: "경영 전략 · 분기 리포트", due: "6/10", prio: "보통" },
],
events: [],
replies: [
{ tone: "감사 + 확인", preview: "리포트에 반영할게요", body: "재호님, 수고하셨어요! 시각화 표까지 챙겨주셔서 감사해요. 리텐션 섹션에 바로 반영할게요. 추가 분석 필요하면 말씀드릴게요." },
],
file: { project: "경영 전략", reason: "‘분기 리포트’ 데이터 소스예요" },
},
},
];
/* 보낸 편지함 샘플 (간단) */
const sent = [
{ id: "s1", account: "work", to: "현우", toKey: "hyunwoo", subject: "온보딩 리뷰 일정 공유", time: "어제", date: "6월 9일 11:00",
preview: "현우님, 다음 리뷰는 목요일 오전으로 잡았어요…", read: true },
{ id: "s2", account: "work", to: "민서", toKey: "minseo", subject: "회고 문서 잘 봤어요", time: "3일 전", date: "6월 7일 16:20",
preview: "민서님, 회고 문서 정리 깔끔하네요. 액션 아이템만…", read: true },
];
/* 임시보관 샘플 */
const drafts = [
{ id: "d1", account: "work", to: "재무팀", subject: "예산 재배분 안건 정리 (작성 중)", time: "1시간 전",
preview: "예산 재배분 관련해서 세 가지 시나리오를…", read: true, draft: true },
];
window.MailData = { accounts, acc, folders, people, emails, sent, drafts };
})();