PlanIT: 스크럼 주기를 시스템이 견인하는 협업 SaaS
며칠이면 끊기는 스크럼을 데일리·위클리·먼슬리 START/END 주기와 Slack 연동, 잔디·피드·미니룸으로 붙잡는 제품. 2026.10 종료.

- 역할
- 제품 기획 · 풀스택 · 인프라 (주도)
- 함께
- 팀원 김민영 (활동 시각화 · 벡터화 · 에셋)
- 상태
- 2026.10 종료 · 가입 계정 10(본인·테스트 포함), 실사용자 0
- 기술
- NestJS 11 · Prisma 7 · PostgreSQL 16 · Next.js 15 · React 19 · Tailwind · shadcn · FastAPI · Slack OAuth · Web Push · Resend · Docker Compose · Caddy · GHCR · Terraform · EC2 · Vercel
- 23
- Prisma 모델 · 마이그레이션 16
- 90
- HTTP 엔드포인트 · 모듈 15
- 145
- 테스트 케이스
- 3
- 언어 (ko · en · ja) · PWA
개인과 팀의 계획·회고가 도구마다 흩어지고 작성이 번거로워 며칠이면 끊깁니다. START/END 스크럼 주기를 시스템이 견인하고 Slack 연동, GitHub식 잔디, 팔로우·반응 피드, 2.5D 미니룸으로 지속을 유도하는 제품을 만들어 운영했습니다. 사용자는 모이지 않았고 2026.10에 내렸습니다.
상황
2025년 프로토타입에서 도메인 고정값(주기·START/END·공개 범위)과 Controller–Service 계층, Prisma 마이그레이션 흐름을 실험했고, 2026년 3월에 운영판을 새로 썼습니다. 6월에 팀·연동 기능을 걷어내 '개인 스크럼 전용'으로 피벗했다가, 7월에 어댑터 아키텍처로 연동을 다시 들였습니다.
한 일
- 01
인증·보안 하드닝
httpOnly 듀얼 토큰(access 메모리 + refresh rotation), 이메일 인증·비밀번호 재설정, rate-limit·helmet·trust proxy.
- 02
연동 어댑터
Slack OAuth 토큰을 AES-256-GCM으로 암호화 저장하고, 웹훅은 HMAC fail-closed와 멱등 처리로 받습니다. 팀 플랜·리포팅, 채널 바인딩, 리마인더·다이제스트 잡, 간트 API. 과거 구현의 결함 6건을 '복원 금지' 목록으로 남겼습니다.
- 03
지속을 위한 장치
팔로잉 피드·이모지 반응·알림·Web Push, 주간 회고 cron, 스트릭·업적 12종·포인트와 상점, 2.5D 미니룸(격자 투영·회전·테마·서버 검증), 검색·해시태그·OG 카드·통계, PWA, 3개 언어.
- 04
배포
GitHub Actions → GHCR 이미지 → EC2 systemd 타이머 2분 주기 pull-deploy(변경 시만 재기동, SSH 시크릿 불필요), Docker Compose(db · api · caddy), 부팅 시 prisma migrate deploy, Terraform으로 EC2·EIP·SG. dev/main 환경 분리.
결과
- 모델 23 · 엔드포인트 90 · 테스트 145 · 3개 언어 · PWA까지 운영 가능한 형태로 구축.
- 2026-10-23 종료: EC2·Vercel·Railway·DNS 정리, DB 덤프 보관. 재개 조건은 '본인이 2주 매일 쓰는가'.
정직하게 적어 두는 것
- README가 표방한 Discord 연동은 enum만 있고 어댑터는 Slack만 구현됐습니다. 사용자는 모이지 않았습니다(가입 계정 10, 실사용 0).
화면
클릭하면 크게