gitextract_c85d7kb8/ ├── .claude/ │ └── settings.local.json ├── .cursorrules ├── .dockerignore ├── .github/ │ └── workflows/ │ ├── main.yml │ └── tests.yml ├── .gitignore ├── .prettierrc.js ├── CLAUDE.md ├── Dockerfile ├── LICENSE ├── README.md ├── bin/ │ └── peerjs.js ├── docker-compose.production.yml ├── docker-compose.yml ├── docs/ │ └── file-transfer-protocol.md ├── eslint.config.mjs ├── next-env.d.ts ├── next.config.js ├── package.json ├── playwright.config.ts ├── postcss.config.js ├── public/ │ ├── robots.txt │ ├── stream.html │ └── sw.js ├── renovate.json ├── scripts/ │ └── pull-and-run.sh ├── src/ │ ├── app/ │ │ ├── api/ │ │ │ ├── create/ │ │ │ │ └── route.ts │ │ │ ├── destroy/ │ │ │ │ └── route.ts │ │ │ ├── ice/ │ │ │ │ └── route.ts │ │ │ └── renew/ │ │ │ └── route.ts │ │ ├── download/ │ │ │ └── [...slug]/ │ │ │ └── page.tsx │ │ ├── layout.tsx │ │ ├── not-found.tsx │ │ ├── page.tsx │ │ └── reported/ │ │ └── page.tsx │ ├── channel.ts │ ├── components/ │ │ ├── AddFilesButton.tsx │ │ ├── CancelButton.tsx │ │ ├── ConnectionListItem.tsx │ │ ├── CopyableInput.tsx │ │ ├── DownloadButton.tsx │ │ ├── Downloader.tsx │ │ ├── DropZone.tsx │ │ ├── ErrorMessage.tsx │ │ ├── Footer.tsx │ │ ├── InputLabel.tsx │ │ ├── Loading.tsx │ │ ├── ModeToggle.tsx │ │ ├── PasswordField.tsx │ │ ├── ProgressBar.tsx │ │ ├── QueryClientProvider.tsx │ │ ├── ReportTermsViolationButton.tsx │ │ ├── ReturnHome.tsx │ │ ├── Spinner.tsx │ │ ├── StartButton.tsx │ │ ├── StopButton.tsx │ │ ├── SubtitleText.tsx │ │ ├── TermsAcceptance.tsx │ │ ├── ThemeProvider.tsx │ │ ├── TitleText.tsx │ │ ├── TypeBadge.tsx │ │ ├── UnlockButton.tsx │ │ ├── UploadFileList.tsx │ │ ├── Uploader.tsx │ │ ├── WebRTCProvider.tsx │ │ └── Wordmark.tsx │ ├── config.ts │ ├── coturn.ts │ ├── fs.ts │ ├── hooks/ │ │ ├── useClipboard.ts │ │ ├── useDownloader.ts │ │ ├── useRotatingSpinner.ts │ │ ├── useUploaderChannel.ts │ │ └── useUploaderConnections.ts │ ├── log.ts │ ├── messages.ts │ ├── redisClient.ts │ ├── routes.ts │ ├── slugs.ts │ ├── styles.css │ ├── toppings.ts │ ├── types.ts │ ├── utils/ │ │ ├── download.ts │ │ └── pluralize.ts │ └── zip-stream.ts ├── tests/ │ ├── e2e/ │ │ ├── add-files.test.ts │ │ ├── basic.test.ts │ │ ├── file-transfer.test.ts │ │ └── helpers.ts │ └── unit/ │ ├── CancelButton.test.tsx │ ├── ConnectionListItem.test.tsx │ ├── CopyableInput.test.tsx │ ├── DownloadButton.test.tsx │ ├── Downloader.subcomponents.test.tsx │ ├── DropZone.test.tsx │ ├── ErrorMessage.test.tsx │ ├── Footer.test.tsx │ ├── InputLabel.test.tsx │ ├── Loading.test.tsx │ ├── ModeToggle.test.tsx │ ├── PasswordField.test.tsx │ ├── ProgressBar.test.tsx │ ├── QueryClientProvider.test.tsx │ ├── ReportTermsViolationButton.test.tsx │ ├── ReturnHome.test.tsx │ ├── Spinner.test.tsx │ ├── StartButton.test.tsx │ ├── StopButton.test.tsx │ ├── TermsAcceptance.test.tsx │ ├── ThemeProvider.test.tsx │ ├── TitleText.test.tsx │ ├── TypeBadge.test.tsx │ ├── UnlockButton.test.tsx │ ├── UploadFileList.test.tsx │ ├── Uploader.test.tsx │ ├── WebRTCProvider.test.tsx │ ├── Wordmark.test.tsx │ ├── isFinalChunk.test.ts │ └── useRotatingSpinner.test.ts ├── tsconfig.json ├── vitest.config.ts └── vitest.setup.ts