| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Name | Name | Last commit date | ||
|---|---|---|---|---|
사내·소규모 팀용 셀프호스팅 채팅 — Discord/Slack 의 미니 사촌. IP 기반 접근 제어, 그룹/채널 권한, 사용자 프로필, 리액션, 메시지 편집, 멀티 테마.
npm install # 최초 1회
npm start # → http://localhost:3000| 화면 | 경로 |
|---|---|
| 채팅 | http://localhost:3000 |
| 관리자 패널 | http://localhost:3000/admin |
| 말풍선 단위테스트 | http://localhost:3000/bubble-test.html |
관리자 패널에서 허용 이모지 목록을 자유롭게 편집할 수 있습니다. 메시지 hover 시 우측 액션 툴바에서 클릭 → 토글.
사이드바 푸터의 ⚙ 기어 아이콘으로 전환하며 localStorage(concord-theme)에 저장됩니다.
| 테마 | 분위기 |
|---|---|
| Concord | 다크 / 퍼플 (기본·브랜드) |
| Claude | 다크 / 골드 |
| Office | 라이트 / 블루 |
Concord 테마는 영역 단계가 명확하도록 검은 톤들이 단계화되어 있습니다.
좌측 세로 사이드바 형태로 다음 탭을 제공합니다.
말풍선 렌더링 로직이 별도 모듈로 분리되어 있어 단독 수정·테스트가 가능합니다.
말풍선 관련 이슈가 보일 경우 위 두 파일을 수정 후 단위테스트 페이지에서 검증할 수 있습니다.
서버와 같은 폴더의 config.json이 모든 권한·표시 설정의 단일 소스입니다. 서버 재시작 없이 파일 저장만 해도 즉시 반영됩니다.
{
"allowedIPs": [
"127.0.0.1",
"::1",
"192.168.8.*",
"192.168.8.141-186",
"192.168.5.51"
],
"groups": {
"admin": { "label": "최고관리자", "ips": ["127.0.0.1", "192.168.8.141"] },
"winapp": { "label": "윈앱팀", "ips": ["192.168.8.141-186"] },
"guest": { "label": "게스트", "ips": ["192.168.8.*"] }
},
"channels": [
{ "id": "general", "type": "channel", "label": "일반", "desc": "자유롭게", "access": "guest" },
{ "id": "files", "type": "channel", "label": "파일", "desc": "파일 채널", "access": ["winapp"] },
{ "id": "admin-only", "type": "channel", "label": "관리자 전용", "desc": "...", "access": "admin" },
{ "id": "me", "type": "dm", "label": "나에게 메모", "desc": "개인 메모", "access": "private" }
],
"profiles": {
"192.168.8.141": { "name": "Admin", "avatar": "/uploads/141.png" },
"192.168.8.186": { "name": "Galaxy", "avatar": "/uploads/186.png" }
},
"allowedReactions": ["⭕", "❌", "✅", "👍", "👎", "❤️", "😂", "🔥"],
"port": 3000,
"fileSizeLimitMB": 100
}allowedIPs — 허용 IP. 목록에 없는 IP는 403으로 차단.
groups — IP를 그룹으로 묶음.
channels — 사이드바 채널 목록 (순서대로 표시).
profiles — IP 별 표시 닉네임/아바타 (관리자가 지정). 사용자가 본인 프로필을 직접 편집한 경우 그 값이 우선합니다.
allowedReactions — 메시지 리액션으로 사용할 이모지 목록.
| 위치 | 내용 |
|---|---|
| void.db | 메시지 (편집 이력 포함)·첨부·리액션·접속 이력·user_profiles |
| uploads/ | 첨부 파일 / 아바타 이미지 (자동 생성) |
| config.json | 권한·관리자 프로필·채널 설정 |
DB 파일명은 레거시 호환을 위해 void.db를 유지합니다. 메시지 편집을 위해 messages.edited_at 컬럼이 자동 추가됩니다 (서버 시작 시 마이그레이션).
실시간 동기화를 위해 다음 타입의 메시지가 broadcast 됩니다.
| type | 의미 |
|---|---|
| message | 새 메시지 |
| messageEdit | 메시지 본문이 편집됨 (id, text, edited_at) |
| delete | 메시지 삭제 |
| deleteAttachment | 첨부 단건 삭제 |
| reaction | 리액션 토글 |
| profilesUpdate | 프로필 변경 |
| usersUpdate | 접속자 목록 변경 |
| channelsUpdate | 채널/권한 변경 |
| activity | 입력 중 / 업로드 중 |
서버 PC의 IP로 접속:
http://<서버-IP>:3000
방화벽에서 해당 포트(기본 3000)를 열어주세요.
| 동작 | 키 |
|---|---|
| 메시지 전송 | Enter |
| 줄바꿈 | Shift + Enter |
| 메시지 편집 | hover → ✏ 버튼 |
| 편집 저장 | Enter (편집 중) |
| 편집 취소 | Esc (편집 중) |
| 메시지/첨부 즉시 삭제 | Shift + 클릭 (대상) |
| 임의 키 입력 시 자동 포커스 | 입력창으로 점프 |
Shift를 누르면 화면 하단에 삭제 경고 힌트가 표시됩니다.
concord/ ├── server.js # Express + SQLite + WebSocket + API ├── config.json # 권한 / 채널 / 관리자 프로필 ├── public/ │ ├── index.html # 채팅 화면 │ ├── admin.html # 관리자 패널 (좌측 세로 탭) │ ├── bubble.css # Office/Claude 말풍선 스타일 (분리 모듈) │ ├── bubble.js # 말풍선 렌더러 (단위테스트용) │ ├── bubble-test.html # /bubble-test.html — 단위테스트 페이지 │ └── favicon.svg ├── uploads/ # 업로드 파일 / 아바타 (자동 생성) ├── void.db # SQLite DB (자동 생성, 레거시 명칭 유지) └── package.json
| Back | FazBrowse Home | New Git URL |