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.
Program kalendarzowy
Translation pending
ProductivityTypeScript · CSSGitHub @KyaniteHexOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Loading the full README. The saved excerpt is shown below.
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.Read the full 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) |