jacefiles
최근 수정 시각: 2026-08-28 22:20:10
1. 개요
jacefiles는 파트너의 도라에몽 주머니다. 파일·텍스트·이미지를 아무 기기에서나 넣어 두고 아무 기기에서나 꺼내는 개인 상비함으로, 폰의 웹 PWA·터미널의 jf CLI·윈도우 트레이 미니창이 전부 같은 주머니 하나를 본다.
1세대는 사서함이었다. 밖에서 올린 파일이 GitHub 저장소의 inbox/에 커밋되고, 각 머신의 에이전트가 git pull로 받아가는 구조였다. 잘 돌긴 했지만 파일당 45MB 상한과 커밋 지연이 있었고, 무엇보다 전달하면 비우는 성격이라 상비품을 두기엔 맞지 않았다.
2026-08-14~16에 저장소를 Cloudflare R2 + D1으로 옮기며 2세대 주머니가 됐다. 용량 제한과 지연이 사라졌고, 성격도 사서함에서 상비함으로 바뀌었다. PIN을 한 번 넣으면 서명된 기기 토큰이 저장되고 이후엔 그냥 열린다. 텍스트와 이미지가 1급 시민이라 붙여넣기 한 번이면 카드가 되고 클릭 한 번이면 클립보드로 돌아온다 — 사실상 기기 간 클립보드로도 쓴다.
머신 사이에 뭔가 옮길 일이 생기면 이제 scp보다 주머니가 먼저다.
2. 핵심 기능
- PIN → 기기 토큰 — 최초 1회 PIN 입력이면 서명된 장기 토큰이 발급되고, 웹·CLI·미니창이 각자 토큰을 들고 같은 주머니를 본다.
- 웹 보드 (PWA) — 검색바, 태그 레일 필터, 📌고정/최근 2단 그리드, 드래그&드롭 투입,
Ctrl+V붙여넣기, 이미지 라이트박스, 이름·본문·태그·고정을 고치는 편집 시트. - 공유 대상 등록 — 폰의 공유 메뉴에 주머니가 뜬다. 사진·링크·파일을 앱에서 바로 밀어 넣을 수 있다.
- 텍스트·이미지 1급 취급 — 텍스트 카드는 누르면 클립보드로, 이미지는 이미지째로 클립보드에 복사된다.
- CLI
jf—login·ls [검색어]·put <파일>·text "내용"·get·cat·pin·rm. 이름 매칭은 id 접두 → 정확 일치 → 부분 일치 순이고, 부분 일치는 후보가 하나일 때만 받는다. 세 머신 WSL에 전부 설치돼 있다. - 윈도우 미니창 — PowerShell + WPF 단일 파일, 빌드 없이 트레이에 상주한다. 탐색기에서 창으로 끌어다 넣고, 아이템을 탐색기로 끌어다 꺼낸다. 항상 위 고정과 자동 새로고침 지원.
- 고정(📌) — 자주 쓰는 상비품은 위에 박아 둔다. 정렬 인덱스가 고정 우선으로 잡혀 있다.
3. 기술 스택
| 영역 | 기술 |
|---|---|
| 웹 | vanilla JS PWA (프레임워크 없음), 서비스 워커 + manifest |
| API | Cloudflare Pages Functions (TypeScript) |
| 저장 | Cloudflare D1(아이템 메타·텍스트 본문) + R2(파일 실체) |
| CLI | Node ESM 단일 파일, ~/.local/bin/jf 심링크 |
| 데스크톱 | PowerShell 5.1 + WPF, 빌드 없음 |
| 인증 | 가족 PIN + HMAC 서명 기기 토큰(장기) |
| 호스팅 | Cloudflare Pages |
4. 개발 배경
기기가 셋(집·노트북·거실)에 폰까지 있으면, "그 파일 어디 뒀더라"가 일상이 된다. 클라우드 드라이브는 무겁고, 메신저 자기 자신에게 보내기는 지저분하고, scp는 매번 경로를 외워야 한다.
주머니는 그 사이의 빈칸을 겨냥했다. 아무 데서나 열리고, 아무거나 들어가고, 비우지 않아도 되는 곳. 그래서 상비함이라는 말을 쓴다 — 전달이 끝나면 지우는 사서함과 반대로, 여기 있는 것들은 계속 여기 있는 게 정상이다.
에이전트 쪽 규율도 그 성격을 따른다. 시키지 않는 한 지우지 않고, 📌 고정된 것은 파트너의 상비물로 대접한다.
5. 링크
- 라이브: jacefiles.pages.dev
- GitHub: architectofthoughts/jacefiles (비공개)