TreeMap
무료 오픈소스 디스크 사용량 시각화 도구로, 사각형 트리맵·중복 파일 탐색·디스크 가득 예측·정리 시 파일을 휴지통으로만 이동한다
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기치과 스탭 전용 사내 위키 + LLM Q&A (Next.js · Supabase · pgvector)
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
치과 스탭(치과위생사·기공사·방사선사) 전용 사내 위키 + LLM 질의응답 서비스입니다. 진료과별 인수인계 / 보험·비보험 수가 / 병원 내규·운영회칙 문서를 등록해두고, 자연어로 질문하면 등록된 문서를 근거로 답변합니다. • Next.js (App Router, TypeScript, Tailwind CSS) — 화면과 API를 한 프로젝트에서 처리 • Supabase(Postgres + pgvector) — 문서·수정로그·사원번호 화이트리스트 저장, 의미 검색용 임베딩 • OpenAI API — 질문/문서 임베딩 생성 및 답변 생성 • 배포: Vercel .env는 비밀 값이라 저장소에 올라가지 않습니다. 새 컴퓨터에서는 아래 순서로 세팅하세요. 프로젝트 최상위에 .env 파일을 만들고 아래 항목을 채웁니다. 값은 기존 컴퓨터의 .env에서 직접 복사해오거나, 각 서비스 대시보드에서 다시 발급받으세요. 3. DB 연결 (이미 만들어둔 Supabase 프로젝트에 연결) DB 스키마는 이미 적용되어 있으므로, 새 마이그레이션을 추가했을 때만 아래를 실행합니다. http://localhost:3000 접속 → 사원번호 + 공통 비밀번호로 로그인합니다.README 전문 보기 ↗
치과 스탭(치과위생사·기공사·방사선사) 전용 사내 위키 + LLM 질의응답 서비스입니다. 진료과별 인수인계 / 보험·비보험 수가 / 병원 내규·운영회칙 문서를 등록해두고, 자연어로 질문하면 등록된 문서를 근거로 답변합니다.
.env는 비밀 값이라 저장소에 올라가지 않습니다. 새 컴퓨터에서는 아래 순서로 세팅하세요.
git clone <저장소 주소>
cd myapp
npm install
.env 파일을 직접 만들기프로젝트 최상위에 .env 파일을 만들고 아래 항목을 채웁니다. 값은 기존 컴퓨터의 .env에서
직접 복사해오거나, 각 서비스 대시보드에서 다시 발급받으세요.
| 키 | 용도 | 어디서 얻나 |
|---|---|---|
NEXT_PUBLIC_SUPABASE_URL | Supabase 프로젝트 주소 | Supabase 대시보드 → Project Settings → API |
SUPABASE_SERVICE_ROLE_KEY | 서버에서 DB 접근 (service_role 키) | 같은 화면의 service_role 키 |
OPENAI_API_KEY | 임베딩·답변 생성 | OpenAI 대시보드 |
COMMON_LOGIN_PASSWORD | 전 직원 공통 로그인 비밀번호 | 직접 정한 값 (기존 값과 같아야 기존 계정으로 로그인됨) |
SESSION_SECRET | 로그인 세션 서명용 | 임의의 긴 문자열 (바뀌면 기존 로그인 세션만 풀림) |
SUPABASE_ACCESS_TOKEN | Supabase CLI 인증 | Supabase 대시보드 → Account → Access Tokens |
SUPABASE_DB_PASSWORD | 마이그레이션 적용용 DB 비밀번호 | Project Settings → Database → Reset password |
OPENAI_CHAT_MODEL | (선택) 답변 생성 모델 | 미설정 시 gpt-4o-mini |
npx supabase link --project-ref <프로젝트-ref>
DB 스키마는 이미 적용되어 있으므로, 새 마이그레이션을 추가했을 때만 아래를 실행합니다.
npx supabase db push
npm run dev
http://localhost:3000 접속 → 사원번호 + 공통 비밀번호로 로그인합니다.
main 브랜치에 푸시하면 Vercel이 자동으로 빌드·배포한다. 따로 명령을 실행할 필요가 없다..env는 저장소에 올라가지 않으므로 Vercel에 따로 등록해야 한다.
(대시보드 → dental-wiki → Settings → Environment Variables)
Production에 등록해 둔 것은 앱 실행에 필요한 5개뿐이다.
| 키 | 용도 |
|---|---|
NEXT_PUBLIC_SUPABASE_URL | Supabase 프로젝트 주소 |
SUPABASE_SERVICE_ROLE_KEY | 서버에서 DB 접근 |
OPENAI_API_KEY | 임베딩·답변 생성 |
SESSION_SECRET | 로그인 세션 서명 |
COMMON_LOGIN_PASSWORD | 전 직원 공통 비밀번호 |
GITHUB_TOKEN, VERCEL_TOKEN, SUPABASE_ACCESS_TOKEN, SUPABASE_DB_PASSWORD는
로컬 CLI 작업용이므로 Vercel에 올리지 않는다. 배포된 앱이 쓸 이유가 없는 값은 주지 않는다.
코드는 자동 배포되지만 supabase/migrations/의 SQL은 따로 적용해야 한다.
마이그레이션을 추가한 커밋을 푸시했다면 아래를 잊지 말 것.
npx supabase db push
npm run dev # 개발 서버
npm test # 자동 테스트 (계산 코드) — 몇 초
npm run test:api # 자동 테스트 (API 규칙) — 개발 서버가 떠 있어야 함
npm run lint # 문법·스타일 검사
npm run build # 테스트 + 빌드 확인
npm run seed:docs -- --check # 등록 전 형식만 검사 (DB·OpenAI 호출 없음)
npm run seed:docs # data/seed-docs 의 마크다운 문서를 DB에 등록
npm run build 가 npm test 를 먼저 실행하므로, 테스트가 깨지면 빌드가 멈추고
Vercel 배포도 자동으로 막힌다. 사이트가 깨진 채로 올라가지 않는다.
패키지는 추가하지 않았다. Node 내장 테스트 도구(node:test)를 그대로 쓴다.
| 명령 | 검사 대상 | 필요한 것 |
|---|---|---|
npm test | tests/unit/ — UUID 검사, 세션 서명 위조 방어, 카테고리 정합성, IP 추출 | 없음 |
npm run test:api | tests/api/ — 로그인 없이 접근 시 리다이렉트·401, 잘못된 입력 400 | 개발 서버 (npm run dev) |
npm test 는 외부 의존이 전혀 없어 빌드에 넣어도 안전하다.
npm run test:api 는 서버가 필요해 빌드에 넣지 않았으므로, 푸시하기 전에 직접 실행한다.
DB에 쓰는 테스트를 만들지 않았다. 지금 DB는 실제로 쓰는 하나뿐이라, 테스트가 문서와 수정 로그를 남기게 된다. 로그는 트리거로 보호되어 지울 수도 없다. 필요해지면 테스트용 Supabase 프로젝트를 따로 만든 뒤에 추가한다.
브라우저를 조작하는 E2E 테스트도 넣지 않았다. 이 규모에서는 만드는 비용과 자주 깨지는 부담이 얻는 것보다 크다.
테스트는 의도적으로 바꾼 동작까지 실패로 잡는다. 예를 들어 카테고리를 하나
추가하면 tests/unit/categories.test.mts 가 실패한다. 이건 고장이 아니라
"마이그레이션도 같이 고쳤나?"를 묻는 것이다. 코드와 테스트를 함께 고치면 된다.
카테고리 화면 → "새 문서 만들기". 한두 건 추가할 때 편하다.
파워포인트·엑셀·종이 문서를 옮겨올 때 쓴다.
data/templates/ 의 틀을 복사한다. 작성 요령은 그 폴더의 README.md에 있다.
| 원본 | 틀 | category |
|---|---|---|
| 보험·비보험 수가 | 2-수가.md | insurance |
| 내규·운영회칙 | 3-내규.md | policy |
data/seed-docs/ 에 저장하고 내용을 채운다. 문서 하나에 주제 하나로 나눈다.
cp data/templates/2-수가.md "data/seed-docs/임플란트-급여수가.md"
등록 전에 형식을 검사한다. 이 단계는 DB도 OpenAI도 건드리지 않아 비용이 들지 않는다.
npm run seed:docs -- --check
통과하면 등록한다.
npm run seed:docs
<!-- 작성 안내 --> 주석은 등록할 때 자동으로 걷어내지만, 되도록 직접 지운다.data/templates/ 의 파일은 등록되지 않는다. 등록되는 것은 data/seed-docs/ 안의 .md 뿐이다.