TreeMap
무료 오픈소스 디스크 사용량 시각화 도구로, 사각형 트리맵·중복 파일 탐색·디스크 가득 예측·정리 시 파일을 휴지통으로만 이동한다
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기A a local-first peer-to-peer audio recording app
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Tapes is a local-first audio recording app. You record in the browser. Your
recordings stay on your own devices and sync across your local network with
Automerge CRDTs. There is no central database.
The desktop app is the sync host. It stores the shared data and serves the
recording UI to other devices on the LAN. Those devices join as guests by
scanning a QR code, and record into the same library.README 전문 보기 ↗Tapes is a local-first audio recording app. You record in the browser. Your recordings stay on your own devices and sync across your local network with Automerge CRDTs. There is no central database.
The desktop app is the sync host. It stores the shared data and serves the recording UI to other devices on the LAN. Those devices join as guests by scanning a QR code, and record into the same library.
Recorded audio is not carried in the Automerge document. The bytes are stored on
the host and addressed by their sha-256 hash. The document holds only a
descriptor for each recording. Guests upload what they record and fetch what they
play over the host's /blobs endpoint.
This is a Turborepo monorepo managed with Yarn 4.
| Package | Description | Dev port |
|---|---|---|
apps/web-client | Vite and React shell that mounts the Tapes app and captures microphone audio. | 3000 |
apps/electron-client | Desktop host. Embeds web-client and runs the LAN sync server. | — |
apps/api | Standalone NestJS Automerge sync server. An alternative remote backend. | 3031 |
apps/web | Next.js marketing site. | 3002 |
apps/docs | Next.js documentation site. | 3001 |
apps/identity | Static passkey ceremony page, served at identity.tapes.network. | 3003 |
The host's embedded sync server listens on port 9001 by default. If that port
is taken it uses whatever port the OS hands it. Set TAPES_SYNC_SERVER_PORT to
pick a different one.
| Package | Description |
|---|---|
@tapes-monorepo/core | The Tapes application itself: App, views, context, sync helpers and QR pairing. |
@tapes-monorepo/provenance | Signed statements about recordings: types, canonical JSON and Ed25519 signing. |
@tapes-monorepo/sync-protocol | What a guest and a host must agree on to open a sync socket. Plain TypeScript. |
@tapes-monorepo/ui | Shared presentational React components, styled with Tailwind. |
@tapes-monorepo/tailwind-config | Shared Tailwind theme. |
@tapes-monorepo/eslint-config | Shared ESLint configurations. |
@tapes-monorepo/typescript-config | Shared tsconfig.json bases. |
The UI lives in packages/core/app/. Both web-client and the electron
renderer mount it, so the same app runs in a browser and inside the desktop host.
flowchart LR
subgraph host["Desktop host (electron-client)"]
renderer["Renderer<br/>(@tapes-monorepo/core)"]
sync["Embedded Automerge<br/>sync server :9001"]
renderer <--> sync
end
subgraph guest["Guest device (browser)"]
webclient["web-client<br/>(@tapes-monorepo/core)"]
end
api["apps/api<br/>NestJS sync server :3031"]
webclient -- "ws/wss (LAN)" --> sync
renderer -. "optional remote sync" .-> api
webclient -. "optional remote sync" .-> api
Each shell builds its own Automerge repo. It hands the repo to core's providers
and renders App inside them. Storage and networking are platform-specific, so
only the shell knows where its sync server lives.
web-client dev server
proxies /sync and /blobs to it. See apps/web-client/vite.config.ts.apps/api is an independent, filesystem-backed sync server. It can act as a
remote backend. Its auth module is currently commented out..nvmrc.packageManager. Run corepack enable once so the pinned
version is used.ipconfig getifaddr en0. The desktop host shells out to
SoX to record and to
switchaudio-osx to select an
input. On Linux and Windows the non-audio parts build and run, but end-to-end
recording is not supported.corepack enable # once, to activate the pinned Yarn 4
yarn # install dependencies
yarn dev # start all apps in dev mode
Browsers only expose the microphone and OPFS in a secure context. LAN guests therefore cannot record over plain HTTP. Use HTTPS on the LAN IP instead:
yarn dev:https
That script starts ui, core, web-client, the electron host and api. The
web client gets TLS from @vitejs/plugin-basic-ssl. The host advertises an
https://<lan-ip>:3000 URL to guests.
The embedded sync server stays on plain HTTP here. Guests do not reach it
directly in development. They load the Vite dev server, which proxies through to
it over loopback, and both hops are already secure contexts. So the host
certificate authority described below does not come into play under
yarn dev:https.
apps/api serves over HTTPS in development. It expects localhost-key.pem and
localhost-cert.pem in apps/api/. Generate them with yarn workspace api cert.
In the packaged app guests connect to the embedded sync server directly, so that server needs its own certificate. The host is its own certificate authority. It mints a root once and issues the server certificate from it. Guests either install that root once or click through a browser warning. Both are supported.
See the electron-client README for what each option protects against, and for the page a host can send a guest to.
Run these from the repo root. Each one fans out through Turborepo.
| Command | Description |
|---|---|
yarn dev | Start all apps in dev mode. |
yarn dev:https | Start the LAN recording surfaces over HTTPS. |
yarn build | Build all apps and packages. |
yarn lint | Lint everything. |
yarn check-types | Type-check everything. |
yarn test | Run unit tests. |
yarn format | Prettier-format every .ts, .tsx and .md file. |
yarn clean | Remove build artifacts. |
Versioning uses Changesets. Add a changeset when your change affects a published package:
yarn changeset
On push to main the Release workflow opens or updates a "Version Packages" pull
request that applies the pending changesets. Dependency updates are automated
with Renovate.
Pull requests to main run two jobs. See
.github/workflows/ci.yml.
yarn lint, yarn check-types and yarn build, then the
unit tests for core, electron-client and web-client. The apps/api Jest
suite is excluded because of a pre-existing compile failure.The electron end-to-end suite runs nightly instead of per pull request, on a
macOS runner. It packages the desktop app and records through SoX, which is slow
and macOS-only. See
.github/workflows/e2e-electron.yml. You
can also trigger it by hand.
Each app and package has its own README with setup and environment details.
Contribution guidelines are in CONTRIBUTING.md. Guidance
for AI agents is in CLAUDE.md.