TreeMap
A free, open-source disk-space visualizer. Squarified treemap, duplicate hunting, disk-full forecasting, and cleanup that only ever moves files to the Trash.
翻译准备中
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证正在加载完整 README。 以下为已保存的摘录。
Kalendarz studencki do zarządzania planem zajęć (wersja produkcyjna: https://mru-os.vercel.app). Wpisujesz zajęcia raz, jako serię (przedmiot, typ, sala, godziny, dni tygodnia, zakres semestru), a MruOS pokazuje je w widoku miesiąca i dnia, uwzględniając dni wolne, zajęcia co dwa tygodnie i pojedyncze zmiany terminów.查看完整 README ↗
Kalendarz studencki do zarządzania planem zajęć (wersja produkcyjna: https://mru-os.vercel.app). Wpisujesz zajęcia raz, jako serię (przedmiot, typ, sala, godziny, dni tygodnia, zakres semestru), a MruOS pokazuje je w widoku miesiąca i dnia, uwzględniając dni wolne, zajęcia co dwa tygodnie i pojedyncze zmiany terminów.
/api/ical/<kod>.ics dla Kalendarza Google, iPhone’a i Maca, który aktualizuje się sam; link widać tylko przy tworzeniu, nowy link unieważnia stary, ustawienia zmienia się bez nowego linku.przeglądarka ──► Vercel (frontend, apps/web)
│ /api/* → przekierowanie + nagłówek X-Origin-Secret
▼
Render (API, apps/api) ──► MongoDB Atlas
Frontend i API działają pod jednym adresem, więc ciasteczko sesji jest httpOnly, Secure, SameSite=Lax. API odrzuca żądania, które nie przyszły przez Vercel (brak sekretu originu), dzięki czemu limit prób logowania liczy się dla prawdziwego adresu IP.
| Katalog | Zawartość |
|---|---|
apps/web | React, React Router, Vite, Tailwind, FullCalendar |
apps/api | Express, Mongoose, sesje, argon2 |
packages/shared | Typy, schematy zod, wyliczanie terminów z reguł powtarzania |
e2e | Testy Playwright (desktop i emulacja telefonu) |
Wymagania: Node.js 22+ i pnpm 10.
pnpm install
pnpm dev # frontend: http://localhost:5173, API: http://localhost:3001
Bez pliku .env API startuje z tymczasową bazą MongoDB w pamięci: konta i plany działają, ale znikają przy każdym restarcie API (także po zmianie kodu). Żeby dane przetrwały, skopiuj .env.example do .env i ustaw MONGODB_URI (np. osobna baza mruos-dev w Atlasie) oraz SESSION_SECRET (min. 32 znaki).
Bez działającego API aplikacja nadal działa w trybie lokalnym (zapis w przeglądarce).
pnpm lint # ESLint i sprawdzanie typów
pnpm test # testy jednostkowe i integracyjne (MongoDB w pamięci)
pnpm exec playwright install chromium # jednorazowo
pnpm test:e2e # testy E2E na własnym API i bazie w pamięci
pnpm build
CI (GitHub Actions) uruchamia lint, testy, build oraz testy E2E dla każdego pusha i pull requesta.
Każde wdrożenie podaje swój commit:
pnpm dev),GET /health zwraca {"status":"ok","version":"d5b820c"}.Na Vercelu i Renderze commit pochodzi z ich zmiennych VERCEL_GIT_COMMIT_SHA i RENDER_GIT_COMMIT, lokalnie z git.
| Środowisko | Gałąź | Frontend (Vercel) | API (Render) | Baza (Atlas) |
|---|---|---|---|---|
| Produkcja | production | https://mru-os.vercel.app | mruos-api | mruos |
| Testowe | main | podglądy (main i pull requesty) | mruos-api-staging | mruos-staging |
Zmiany trafiają do main przez pull request i lądują w środowisku testowym. Po sprawdzeniu wydanie produkcyjne to:
git push origin main:production
Wartości oznaczone <...> wygeneruj lub skopiuj z paneli usług. Sekrety wpisuj tylko w panelach, nigdy do repozytorium.
readWrite tylko do swojej bazy: jednego dla mruos, drugiego dla mruos-staging.0.0.0.0/0. Darmowy Render nie ma stałych adresów IP, więc ochroną są silne, losowe hasła użytkowników.mongodb+srv://<user>:<hasło>@<klaster>/mruos?retryWrites=true&w=majority
(dla środowiska testowego: /mruos-staging).Wygeneruj dwa różne sekrety, jeden dla produkcji i jeden dla środowiska testowego:
openssl rand -hex 32
git push origin main:production.render.yaml i utworzy mruos-api oraz mruos-api-staging.MONGODB_URI (odpowiednia baza) i ORIGIN_SECRET (odpowiedni sekret). SESSION_SECRET Render wygeneruje sam.https://mruos-api.onrender.com. Sprawdzenie: <adres>/health zwraca {"status":"ok"}.Darmowy serwis usypia po 15 minutach bez ruchu; pierwsze żądanie po przerwie trwa do około minuty.
Vercel → Add New → Project → repozytorium, Root Directory: apps/web. Resztę ustawień czyta apps/web/vercel.json.
Settings → Git → Production Branch: production.
Settings → Environment Variables:
| Zmienna | Production | Preview |
|---|---|---|
API_ORIGIN | https://mruos-api.onrender.com | https://mruos-api-staging.onrender.com |
ORIGIN_SECRET | sekret produkcyjny | sekret testowy |
API_ORIGIN bez końcowego /.
Wdróż ponownie i sprawdź, że rejestracja działa pod domeną produkcyjną, a odświeżenie strony /konto otwiera aplikację (pozostałe adresy trafiają do index.html).
GitHub → Settings → Branches → reguła dla main (i production): wymagaj zielonych checków quality i e2e przed merge.
| Zmienna | Wymagana | Opis |
|---|---|---|
MONGODB_URI | w produkcji | Connection string z nazwą bazy; lokalnie bez niej baza w pamięci |
SESSION_SECRET | w produkcji | Min. 32 znaki, podpis ciasteczka sesji; lokalnie losowy |
ORIGIN_SECRET | w produkcji | Min. 32 znaki, taki sam jak w odpowiednim środowisku Vercel |
NODE_ENV | nie | production włącza ciasteczka Secure i wymaga ORIGIN_SECRET |
PORT | nie | Domyślnie 3001 (Render ustawia sam) |
WEB_ORIGIN | nie | Tylko przy frontendzie pod innym adresem (CORS) |