개발자를 위한 커뮤니케이션 허브. Discord의 가벼움, Slack의 업무 구조, 그리고 개발 워크플로(이슈 · 저장소 · AI)를 한 화면에 합친다.
개인용으로 시작해 서비스화를 목표로 하는 개인 프로젝트.
일반 메신저는 개발 맥락을 모르고, 개발 도구는 대화를 담지 못한다. Nexus는 그 사이를 메운다.
- 커밋 · PR/MR · 이슈 이벤트가 채널 안으로 흘러 들어온다
- 대화 중에 그 자리에서 이슈를 만든다 (원문 링크가 남는다)
- AI가 대화와 코드를 같은 맥락으로 읽는다
app/ Flutter — 단일 코드베이스로 모바일 · 데스크톱 · 웹
│
│ REST + Socket.IO
▼
server/ NestJS + Prisma
├─ PostgreSQL 사용자 · 스페이스 · 채널 · 메시지 · 이슈
├─ Redis 프레즌스 · Socket.IO 어댑터 · AI 작업 큐
└─ S3 호환 첨부 파일 (개발: MinIO / 운영: S3 · R2)
멀티테넌트 구조다. Space(Discord의 서버 / Slack의 워크스페이스)가 모든 데이터의 루트이며, 채널 · 메시지 · 이슈 · 저장소는 전부 스페이스에 속한다.
| 폴더 | 설명 |
|---|---|
app/ |
Flutter 앱. iOS · Android · Windows · macOS · Linux · Web을 한 코드베이스로 |
server/ |
NestJS 백엔드. REST API + Socket.IO 게이트웨이 |
design-system/ |
토큰 · 컴포넌트 · 화면 프리뷰 (자기완결 HTML) |
docs/ |
기획 · 설계 문서 |
main 이 기준 브랜치다. 새 작업은 feat/* 를 따서 하고 끝나면 main 으로 합친다.
git clone https://github.com/dbsrjs/Nexus.git && cd Nexus
npm --prefix server install
cp server/.env.example server/.env # JWT_SECRET 을 채워야 부팅된다
npm run db:setup # (1회) WSL 안에 Postgres + pgvector
# Docker 를 쓴다면 건너뛴다
npm run db:up # Docker: npm run db:up:docker
npm --prefix server exec prisma migrate deploy
npm run db:seed
npm run server:dev # http://localhost:3000/apiJWT_SECRET 생성:
node -e "console.log(require('crypto').randomBytes(48).toString('base64url'))"DB 는 PC 마다 따로다. 계정 · 메시지는 git 으로 옮겨지지 않는다. 새 PC 에서는 시드로 새로 만들어진다. 자세한 주의사항은 server/README.md.
| 문서 | 내용 |
|---|---|
| 제품 기획서 | 방향 · 타겟 · 기능 범위 · 로드맵 |
| 백엔드 설계 | 멀티테넌시 · 데이터 모델 · API · 실시간 |
| 앱 설계 | Flutter 스택 · 화면 · 상태 관리 · 오프라인 전략 |
| 인프라 설계 | 무료 운영 전제의 배포 구성 · 공개 저장소 보안 체크리스트 |
| 디자인 시스템 | 색 · 타이포 · 간격 · 컴포넌트 (산출물은 design-system/) |
| 전환 계획 | 현재 코드에서 새 구조로 가는 작업 목록 |
| 기술 스택 가이드 | 이어서 만들려면 무엇을 알아야 하는지 · 코드 읽기 시작점 |
cd server
docker compose up -d # postgres + redis + minio
cp .env.example .env # JWT_SECRET 등 필수 값 설정
npm install
npx prisma migrate dev
npm run seed
npm run start:dev # http://localhost:3000/apicd app
flutter pub get
flutter run --dart-define=API_BASE=http://localhost:3000/apiAPI 주소는 빌드 타임에 주입한다. Android 에뮬레이터에서 호스트를 가리키려면 http://10.0.2.2:3000/api를 쓴다.
플랫폼별 빌드:
flutter build apk --dart-define=API_BASE=https://api.example.com
flutter build web --dart-define=API_BASE=https://api.example.com
flutter build windows --dart-define=API_BASE=https://api.example.com사내 메신저 통합 솔루션에서 개인 프로젝트로의 전환을 마쳤다. 대화 · 파일까지 동작하며, 다음은 이슈 · 저장소 연동 · AI 다.
- ✅ 재기획 완료 — 제품 · 백엔드 · 앱 · 인프라 · 전환 계획 문서
- ✅ 디자인 시스템 — 토큰 · 컴포넌트 8종 · 검증 화면 2종 (
design-system/) - ✅ 기존 자산 정리 —
www/(React) ·desktop/(Electron) ·mobile/(Capacitor) · 루트index.html삭제, 구 디자인 소스는docs/archive/로 이관 - ✅ 멀티테넌시 골격 — 스키마 전면 재작성(26개 모델), 인증 개편(가입 · 리프레시 회전 · 재사용 탐지),
spaces·SpaceGuard - ✅ 채팅 API 뼈대 — 카테고리 · 채널 · 메시지(전송 · 수정 이력 · 소프트 삭제 · 읽음 마커)
- 🔄 실시간(Socket.IO) 개편 — 룸 동기화 · 읽음 저장 · 프레즌스
- ⬜ Flutter 앱 신규 구축 (
app/) - ⬜ 저장소 웹훅 연동 · AI 기능
진행 순서는 전환 계획 §6을 따른다.
| 단계 | 목표 |
|---|---|
| Phase 0 | 나 혼자 쓰는 개발 허브. 내 프로젝트를 채널로 나누고 할 일 · 저장소를 붙인다 |
| Phase 1 | 2~10인 소규모 팀. 초대 · 온보딩 · 푸시 알림 |
| Phase 2 | 공개 서비스. 테넌트 격리 · 스토리지 쿼터 · 과금 |