TreeMap
무료 오픈소스 디스크 사용량 시각화 도구로, 사각형 트리맵·중복 파일 탐색·디스크 가득 예측·정리 시 파일을 휴지통으로만 이동한다
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
굿노트처럼 PDF 위에 펜으로 필기하는 웹앱. 서버도 로그인도 없습니다. • 종이가 먼저. 툴바·서랍이 종이 크기나 비율을 깎지 않습니다(미리보기 서랍만 예외로 밀어냅니다). • 바 하나. 굿노트4식 유틸리티 바 한 줄. 두 번째 알약이나 레일을 만들지 않습니다. • 조용히 이기지 않습니다. 남의 기기가 고친 것을 덮어쓰지 않고, 지운 것은 되돌릴 수 있고, 실패는 한 줄로 말합니다. • 펜이 먼저입니다. S펜·애플펜슬이 보고하는 표본을 하나도 버리지 않고 곡선으로 잇고, 그리는 동안에는 그 획만 따로 얹어 필기가 쌓여도 느려지지 않습니다. 저장은 획 사이가 아니라 한가할 때 합니다. • 필기는 좌표입니다. 1000쪽 문서라도 저장은 몇 KB, 언제든 다시 고칠 수 있습니다. 1. PDF만 올려요 상자에 PDF를 놓습니다. 드롭박스·구글 드라이브에서 바로 열 수도 있습니다. 2. 문서는 잠금(보기)으로 열립니다. 헤더 오른쪽 자물쇠로 편집으로 바꿉니다. 3. 바에서 도구를 고르고 씁니다. 클라우드 문서라면 2.5초 뒤 알아서 올라갑니다 — 평소엔 저장을 누를 일이 없습니다.README 전문 보기 ↗
굿노트처럼 PDF 위에 펜으로 필기하는 웹앱. 서버도 로그인도 없습니다.
써 보기 → https://pdf-ink.vercel.app
| 무엇 | PDF를 열어 펜·형광·색연필로 쓰고, 쪽을 오리고 붙이고, 목차를 달고, PDF로 굽는다 |
| 어디에 남나 | 필기는 이 브라우저에. 원하면 드롭박스·구글 드라이브의 PDF 옆에 작은 파일로 |
| 서버 | 없음. 정적 호스팅뿐이라 우리 쪽에 남는 문서가 없다 |
| 기술 | 바닐라 JS + Vite · pdf.js(렌더) · pdf-lib(쓰기) · PWA(오프라인) |
| 라이선스 | AGPL-3.0-or-later |
| 칸 | 탭하면 | 길게 누르면(400ms) |
|---|---|---|
| 펜 | 펜으로 쓰기 | 색·굵기 팔레트 |
| 형광 | 형광펜(끌 정도 투명, 납작한 팁) | 팔레트 |
| 색연필 | 색연필(기본 채점 빨강) | 팔레트 |
| 지우개 | 쓰던 모드로 지우기 | 획/픽셀 모드와 크기 |
| 손바닥 | 종이를 끌어 옮기기 (편집 진입 시 기본) | — |
| 선택 | 상자로 고르기 · 영역 잡기 | — |
| 되돌리기 / 다시 실행 | 한 단계 | 되돌리기를 길게 = 다시 실행 |
| ⋯ | 전체화면 · 이미지 · 쪽 가져오기 · 스티커 · 회전 · 쪽 복사/붙여넣기 · 선반 · 저장 · PDF에 굽기 · 다른 이름으로 저장 · 내보내기 · 필기 옮기기 |
PC에서는 스페이스를 누르는 동안만 손바닥이 되고, 떼면 쓰던 도구로 돌아옵니다.
펜·형광·색연필로 한 획을 긋고 끝에서 400ms 멈추면 후보 도형이 40% 고스트로 뜨고 직선·사각·원 칩이 종이 위에 납니다. 칩을 눌러야 도형이 되고, 안 고르면 손 획 그대로입니다.
헤더 왼쪽 위 아이콘으로 엽니다. 눌러 두면 종이를 만지거나 획을 그어도 열린 채 남고, 본문을 가리지 않고 왼쪽 자리를 차지하며 밀어냅니다(오른쪽 가장자리를 끌어 96~360px). 썸에는 필기도 함께 보이고, 한 번 그린 쪽 그림은 저장해 두었다가 다시 열 때 바로 씁니다.
목차 항목은 쪽 번호가 아니라 그 쪽 자체를 가리켜서, 순서를 바꾸거나 앞에 쪽을 끼워도 같은 쪽으로 갑니다. 탭하면 이동, 더블탭하면 이름 고치기, 길게 누르면 이름 변경·삭제입니다. 원래 목차가 든 PDF를 열면 그 목차를 읽어 채웁니다. 목차와 책갈피(별)는 내보낸 PDF 안에 박힙니다.
같은 자료의 다른 판에서 필기를 가져옵니다. 쪽 번호가 아니라 쪽에 적힌 글자(없으면 쪽 그림)로 짝을 찾으므로 판마다 쪽 수가 달라도 제자리를 찾아갑니다. 두 문서를 나란히 놓고 짝을 고쳐 정할 수 있고, 되돌리기 한 번으로 통째 취소됩니다.
| 무엇 | 어디에 |
|---|---|
| 필기·쪽 구성·목차 | 이 브라우저(localStorage, 넘치면 IndexedDB) + 클라우드 사이드카 <이름>.pdf.ink |
| PDF 원본 | 열어 온 곳(로컬 파일 · 드롭박스 · 구글 드라이브) + 다시 열기용 사본(IndexedDB) |
| 쪽 그림(썸네일) | IndexedDB. 문서별 설정으로 <이름>.pdf.thumbs 공유 |
| 스티커 | IndexedDB + (고르면) 드롭박스·드라이브 |
이름-필기.pdf를 내려받습니다.PDF에 들어 있던 링크는 잠금(보기)일 때 눌러 따라갑니다(http·https·mailto만). 자리는 옅은 하늘색으로 보이고, 설정에서 표시만 끌 수 있습니다. 굿노트 export처럼 파일 안에서 이미 목적지가 끊긴 링크는 길게 눌러 「이 문서의 몇 쪽」이나 웹 주소로 고칩니다 — 같은 곳을 가리키던 링크 전부를 한 번에 고칠 수도 있습니다. 고친 목적지는 쪽 자체를 가리키고, 사이드카에 담겨 다른 기기까지 따라가며 굽기·내보내기 때 파일에 박힙니다. 확인은 node scripts/inspect-links.mjs 문서.pdf.
| 항목 | 하는 일 |
|---|---|
| 툴바 위치 | 위·아래·왼쪽·오른쪽·떠 있게 (그립을 끌어도 됩니다) |
| 보기 | 페이지 넘김 ↔ 세로 스크롤 |
| 펜만 | S펜·애플펜슬만 그리기, 손가락은 이동 |
| 이 문서 썸네일 올리기 | 쪽 그림을 드롭박스에 함께 두고 다른 기기에서 한 번 내려받기 |
| 링크 자리 표시 | 링크 자리의 하늘색 표시 |
| 스티커 동기화 | 안 함 · 드롭박스 · 드라이브 |
| 배율 고정 | 핀치가 배율을 바꾸지 않게 |
| Ctrl/Cmd + C · V · X · Z | 복사 · 붙여넣기 · 잘라내기 · 되돌리기 (다시 실행은 Ctrl+Shift+Z 또는 Ctrl+Y) |
| Space (누르는 동안) | 손바닥 |
| Ctrl + 휠 · 헤더의 +/- | 확대·축소 (PC) |
| 화살표 / Shift·Alt + 화살표 | 고른 것 밀기 |
| 두 손가락 | 확대·이동 (0.7~8배, 멈추면 그 배율로 다시 그려 또렷하게) |
| 빠르게 튕기기 | 관성으로 쪽이 넘어갑니다 |
바깥 앱에서 복사한 것은 Ctrl+V가 가장 잘 붙습니다 — 브라우저의 클립보드 읽기는 몇 형식만 내주지만 진짜 붙여넣기는 원본 앱이 넣은 것을 그대로 들고 오기 때문입니다. 굿노트처럼 필기를 앱 안에만 담는 앱은 어떤 웹앱도 읽을 수 없어서, 그럴 땐 그렇다고 알려 주고 이미지로 내보내 끌어다 놓으라고 안내합니다.
브라우저의 설치(홈 화면에 추가)로 앱처럼 씁니다. 주소창이 사라져 종이가 넓어지고, 앱 껍데기와 PDF 엔진이 캐시돼 오프라인에서도 최근 문서를 엽니다. 새 버전이 준비되면 한 줄로 알리고 새로고침할 때 바뀝니다. 문서를 처음 열 때 저장공간 유지를 한 번 요청합니다 — 필기는 이 기기에만 있으니까요.
npm install
npm run dev # http://localhost:5173
npm test # node --test (순수 모듈 + 계약 테스트)
npm run build && npm run preview
npm run smoke # 빌드한 dist를 진짜 크로미움으로 — 열기·링크·펜·되돌리기·성능 예산
npm run notices # 서드파티 표시 다시 만들기
npm run smoke는 CI(GitHub Actions의 smoke 잡)가 매 PR마다 돌립니다. 로컬에서 돌리려면 npx playwright install chromium으로 크로미움을 받거나, 이미 있는 실행 파일을 SMOKE_CHROME으로 가리킵니다(루트 없이 apt-get download로 받은 라이브러리는 SMOKE_LD). /tmp가 작은 tmpfs라 차 있으면 크로미움 렌더러가 조용히 죽으니 TMPDIR를 넉넉한 곳으로 두세요.
src/main.js가 DOM과 이벤트를 배선하고, 나머지 순수 모듈 47개가 각자 *.test.js를 답니다. 배선·디자인 수치는 정규식 계약 테스트로 못 박습니다.드롭박스 App key는 코드에 들어 있어 바로 됩니다. 구글 드라이브는 값 두 개가 필요하고, 없으면 「구글 드라이브에서 열기」 버튼이 아예 보이지 않습니다.
VITE_GOOGLE_CLIENT_ID=...apps.googleusercontent.com
VITE_GOOGLE_API_KEY=AIza...
로컬은 .env.example을 .env.local로 복사해 채우고, 배포는 Vercel 환경변수에 같은 이름으로 넣고 재배포합니다(빌드 때 박힙니다). 둘 다 브라우저에 노출되는 공개값이라 시크릿이 아니며, 보호는 승인된 JavaScript 원본과 리퍼러 제한으로 합니다. 그래서 저장소에는 넣지 않습니다.
Vite 정적 호스팅만 씁니다. vercel.json이 빌드·출력(dist)·SPA fallback과 **콘텐츠 보안 정책(CSP)**을 지정합니다 — 스크립트는 우리 것만, 연결은 드롭박스·드라이브 원본만 허용합니다. 서버·로그인·시크릿은 없습니다.
| docs/PRD.md | 제품 정의 — 원칙, 되는 것, 아직 아닌 것 |
| docs/ARCHITECTURE.md | 구조와 UML(컴포넌트·모델·열기/저장 흐름) |
| docs/PROCESS.md | 이슈별로 무엇을 왜 그렇게 했는지의 기록 |
| docs/LICENSES.md | 무엇이 실려 나가고 왜 섞어도 되는지 |
| docs/BOARD.md | 이슈 보드 |
GNU AGPL-3.0-or-later (LICENSE). 자유롭게 쓰고 고치고 나눠 주되, 고친 것을 웹에서 서비스하면 그 소스도 같은 라이선스로 공개해야 합니다(13조). 그냥 쓰는 사람에게는 아무 의무가 없고, 가져가서 자기 서비스로 다시 파는 경우에만 걸립니다. 그래서 앱 화면에 소스 링크를 둡니다.
「필기웹」·「pdf-ink」라는 이름과 아이콘은 라이선스에 포함되지 않습니다. 포크는 다른 이름을 쓰세요.
함께 쓰는 것: pdfjs-dist(Apache-2.0), pdf-lib(MIT)와 그 의존성(MIT·Zlib·0BSD), workbox-window(MIT) — 모두 AGPL 안에 넣을 수 있습니다. 저작권 표시는 public/THIRD-PARTY-NOTICES.txt에 모아 앱의 다른 코드 링크로 엽니다.