# fanjai TO-BE — 라인 로그인 · 커뮤니티 활성화 · 투표

> AS-IS 실측을 전제로 한다. **이미 있는 것을 다시 만들지 않는 것**이 이 문서의 원칙이다.

---

## 0. 방향

AS-IS가 알려준 것은 하나다.

> **기능이 없어서 안 되는 게 아니라, 사람이 안 와서 안 된다.**
> 기사 826건 · 라우트 62개가 이미 있는데 5주간 유저 글이 0건이다.

그래서 TO-BE의 중심은 새 기능이 아니라 **"오늘 다시 올 이유"** 하나다.
라인 로그인은 그걸 가능하게 하는 전제이고, 투표는 그걸 만들어내는 장치다.

```
라인 로그인 ──▶ 사람이 식별된다 ──▶ 활동이 쌓인다 ──▶ 돌아올 이유가 생긴다
   (전제)          (지금 안 됨)        (posts에 FK 없음)      (투표·스트릭)
```

---

## 1. 세 가지 목표 → 화면 단위 요구

### 목표 A. 라인 로그인 — **켜기만 하면 된다**

| # | 요구 | 기존 활용 | 신규 개발 |
|---|---|---|---|
| A-1 | 라인으로 가입/로그인 | `/api/auth/line`, `/callback` **전부 있음** | **없음** |
| A-2 | 로그인 상태 표시 | `/api/auth/me`, `accountPanel()` **있음** | 없음 |
| A-3 | 게스트 → 라인 계정 승계 | 콜백에 이미 구현 | 없음 |
| A-4 | 환경변수 3개 설정 | — | **설정 작업 (코드 아님)** |
| A-5 | 콘솔에 콜백 URL 등록 | — | **콘솔 작업** |

> **A는 개발 0줄이다.** 설정 2건이 전부.

### 목표 B. 커뮤니티 활성화 — **여기가 진짜 일**

| # | 요구 | 기존 활용 | 신규 개발 |
|---|---|---|---|
| B-1 | **글에 작성자 계정 연결** | `posts` 테이블 | ⚠️ **`author_id` 추가 + 마이그레이션** |
| B-2 | 내 활동 이력 (내 글/댓글/좋아요) | `/api/posts` | **`/api/me/activity`** |
| B-3 | 프로필 (닉네임·라인 아바타) | `users.display_name` | 아바타 컬럼 + 화면 |
| B-4 | 글쓰기 진입 장벽 낮추기 | 글쓰기 폼 있음 | **한 줄 글/짤 업로드 형태 추가** |
| B-5 | **첫 화면에서 빈 커뮤니티가 안 보이게** | 팬톡 탭 | **뉴스 밑에 "이 기사 얘기하기" 붙이기** |
| B-6 | 알림(내 글에 댓글) | 없음 | 라인 푸시 or 배지 |

> **B-5가 핵심이다.** 지금은 팬톡 탭에 들어가야 커뮤니티가 보이는데, 들어가면 5주된 글 19개가 있다.
> 826개 기사 **각각에 댓글을 붙이면** 커뮤니티가 "빈 방"이 아니라 "기사 밑"에서 시작된다.

### 목표 C. 투표 — **있는 걸 쓰이게**

| # | 요구 | 기존 활용 | 신규 개발 |
|---|---|---|---|
| C-1 | 컨테스트 투표 | `/api/vote`, `contests`, `participants` **있음** | 없음 |
| C-2 | **매일 무료표 지급** | `users.free_remaining`, `last_refill` **컬럼 있음** | 일일 리필 로직 확인/보강 |
| C-3 | **오늘 투표 안 하면 손해** | — | **출석/스트릭 (fanjai/에 검증된 구현 있음)** |
| C-4 | 실시간 순위표 | `/api/state` | 화면 |
| C-5 | 투표 대상 채우기 | `participants` 12행 | **운영 작업 (데이터)** |

---

## 2. 우선순위 — 왜 이 순서인가

```
0단계  태국어 버전 프로덕션 승격          ← 이미 만들어진 것을 켜는 것
1단계  라인 로그인 켜기                   ← 설정 2건
2단계  posts에 author_id 붙이기           ← 활성화의 전제. 이거 없으면 3단계가 무의미
3단계  기사 밑 댓글 (B-5)                 ← 826개 기사가 커뮤니티 시드가 된다
4단계  출석 + 매일 무료표 (C-2, C-3)      ← "오늘 올 이유"
5단계  컨테스트 운영 (C-5)                ← 사람이 모인 뒤에 의미가 생김
```

**0~1단계는 개발이 없다.** 여기부터 하는 이유:
지금 fanjai.com은 한국어이고 로그인이 안 된다. **태국 유저 입장에서 쓸 수가 없는 상태**다.
새 기능을 얹기 전에 이미 만들어둔 것을 켜는 게 먼저다.

**2단계가 병목이다.** `posts.author`가 텍스트라서 로그인을 켜도 활동이 사람에게 안 쌓인다.
스트릭도 랭킹도 프로필도 전부 여기에 걸려 있다.

---

## 3. `fanjai/` 모노레포 처리 — 결정 필요

중복 7개를 방치하면 같은 기능을 계속 두 번 만들게 된다. 세 가지 선택지가 있다.

### 안 ① 라이브에 흡수 — **권고**

`app/`을 기준으로 두고, `fanjai/`에서 **없는 것만** 이식한다.

| 이식 대상 | 이유 |
|---|---|
| 출석·스트릭 | "오늘 올 이유". 검증된 구현이 있음 |
| 라인 푸시 | 되돌아오게 하는 채널 |
| 딜 보드 | 체류 이유(선택) |
| 캠페인/MCC | 매출 경로(나중) |

- **장점**: 유저 373명·기사 826건·수집기가 그대로 산다. 도메인/DB 안 바뀜
- **단점**: `fanjai/`의 테스트 40개·마이그레이션 9개를 그대로 못 씀 (스키마가 다름)
- **버리는 것**: `fanjai/`의 중복 7개 (라인/세션/수집/투표/커뮤니티/크리에이터/어드민)

### 안 ② 신규로 갈아타기

`fanjai/`를 본체로 하고 fanjai.com을 옮긴다.

- **장점**: 구조가 깔끔(모노레포, 테스트 40개, 마이그레이션 관리)
- **단점**: **기사 826건·유저 373명·수집기 30소스를 이관해야 한다.** 큐가 유료라 수집기 배포도 막혀 있음
- **현실**: 이관 비용이 크고 지금 얻는 게 없다

### 안 ③ 분리 유지

fanjai.com은 커뮤니티, `fanjai/`는 B2B(캠페인·MCC)로 분리.

- **장점**: 서로 안 건드림
- **단점**: 로그인·계정이 두 벌이 된다. **같은 유저가 두 곳에 따로 가입**해야 함

> **권고는 ①이다.** 근거: 살아 있는 자산(기사 826·수집기·유저)이 전부 `app/`에 있고,
> `fanjai/`가 유일하게 더 가진 것(출석·푸시·딜·캠페인)은 **이식 가능한 크기**다.

---

## 4. 이번에 "안 만드는 것"

- **새 프론트엔드** — 태국어 버전이 이미 있다. 승격만 하면 된다
- **새 라인 로그인** — 이미 있다
- **새 뉴스 수집기** — 826건을 만들고 있는 게 이미 돈다
- **딜 보드** — 커뮤니티가 죽어 있는데 새 탭을 늘리면 더 비어 보인다. 3~4단계 이후
- **코인/토큰** — 규제·비용 모두 지금 할 일이 아니다

---

## 5. 성공 판정 (숫자로)

| 단계 | 지표 | 통과선 |
|---|---|---|
| 1단계 후 | **라인 연동 유저** | 0 → **20명** |
| 2~3단계 후 | 기사 댓글 | 1 → **주 30건** |
| 3단계 후 | **글 쓴 실제 유저** | 1 → **주 10명** |
| 4단계 후 | **D7 잔존율** | 미측정 → **25%** |
| 4단계 후 | 일일 투표 | 0 → **일 50표** |

**1단계 통과선(라인 연동 20명)이 첫 관문이다.** 여기서 안 되면 유입 자체가 없다는 뜻이고,
그러면 2단계 이후 개발은 의미가 없다.
