TutorLoom
The learning platform for companies, colleges and training institutes. Free and open source, with an Enterprise edition.
翻譯準備中
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證製作者的介紹僅有上面的一句話。 更多詳情請閱讀儲存庫 README。 儲存庫 README ↗
正在載入完整 README。
檢視完整 README ↗Neoficiální studentský portál pro třídu na Weilovce – studijní materiály, zápisy, domácí úkoly, testy, rozvrh, kalendář a oznámení na jednom místě. Součástí je samostatná administrace, ve které se veškerý obsah spravuje formuláři, bez zásahu do kódu.
Stav: aplikace je hotová a otestovaná (databázová pravidla, logika, build). Aby fungovala, je potřeba ji propojit s vlastním projektem Supabase – postup níže. Bez toho se zobrazí stránka „Aplikace čeká na připojení databáze“.
| Vrstva | Použito |
|---|---|
| Frontend | Next.js 16 (App Router), React 19, TypeScript, Tailwind CSS 4, Radix UI (základ shadcn/ui) |
| Ikonky | Lucide (lucide-react) s vlastními hover animacemi ve stylu itshover.com |
| Formuláře | React Hook Form + Zod |
| Editor | TipTap 3 (obsah uložený jako strukturovaný JSON) |
| Backend | Supabase – PostgreSQL, Auth, Storage, Row Level Security |
| Datumy | date-fns s českou lokalizací, časová zóna Europe/Prague |
| Testy | Vitest + PGlite (skutečné migrace v Postgresu), Playwright (E2E) |
Zadání je silně relační: vazby materiál ↔ úkol ↔ test, unikátní dvojice uživatel + úkol, tematické okruhy patřící k předmětu, audit, fulltextové vyhledávání bez ohledu na diakritiku. To vše PostgreSQL řeší nativně (cizí klíče, UNIQUE, CHECK, triggery) a Row Level Security vynucuje oprávnění přímo v databázi – i pro požadavky mimo aplikaci. Ve Firestore by se stejná pravidla musela složitě duplikovat v Security Rules a denormalizovat data.
Na supabase.com založte nový projekt (region Central EU – Frankfurt).
V SQL Editoru postupně spusťte obsah souborů:
supabase/migrations/20261012000001_schema.sqlsupabase/migrations/20261012000002_security.sqlsupabase/migrations/20261013000003_rozvrh_cyklus.sql – rozvrh se střídáním týdnů A → E → B → Fsupabase/migrations/20261013000004_import_rozvrh_i1m.sql – import rozvrhu I1.M z Family StationAlternativně přes CLI: npx supabase link --project-ref <ref> a npx supabase db push.
Migrace vytvoří tabulky, RLS politiky, triggery i oba Storage buckety:
materials – soukromý, soubory materiálů a úkolů (max. 50 MB, jen povolené MIME typy),avatars – veřejný pro profilové obrázky (náhodné názvy souborů, zápis jen do vlastní složky).Pokud by vytvoření bucketů selhalo (např. kvůli oprávněním), vytvořte je ručně v Storage → New bucket se stejnými názvy a nastavením a spusťte znovu jen část „Úložiště souborů“ ze souboru …_security.sql.
V Authentication → URL Configuration:
http://localhost:3000, v produkci např. https://weilhub.vercel.app),http://localhost:3000/auth/callback a https://<vaše-doména>/auth/callback.V Authentication → Sign In / Providers → Email: ponechte zapnuté Confirm email.
Doporučené (ochrana proti zneužití):
Aplikace má navíc vlastní limit pokusů o přihlášení, registraci a obnovu hesla.
cp .env.example .env.local
Vyplňte NEXT_PUBLIC_SUPABASE_URL, NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY a NEXT_PUBLIC_SITE_URL. Volitelně SUPABASE_SECRET_KEY (jen server – zpřístupní v administraci e-maily uživatelů a mazání účtů).
Tajný klíč nikdy nedávejte do proměnné s prefixem
NEXT_PUBLIC_ani do klientského kódu.
npm install
npm run dev
Aplikace běží na http://localhost:3000.
Veřejná registrace nikdy neudělí roli admin. První administrátor se zakládá takto:
insert into public.invitations (code, note, max_uses) values ('PRVNI-ADMIN-2026', 'bootstrap', 1);
/registrace) s tímto kódem a potvrďte e-mail.select public.bootstrap_first_admin('[email protected]');
Funkce funguje jen z SQL editoru (není dostupná přes API) a jen dokud žádný admin neexistuje.Další administrátory a editory už nastavujete v Administrace → Uživatelé. Databáze nedovolí odebrat posledního administrátora.
supabase/seed.sql obsahuje ukázkové předměty, materiály, úkoly, testy, rozvrh a pozvánku DEMO-POZVANKA. Všechny položky jsou označené [DEMO].
npx supabase db reset,.env.example (pro Production i Preview). Veřejné proměnné NEXT_PUBLIC_* musí být nastavené před buildem.| Role | Může |
|---|---|
| Admin | vše – obsah, uživatelé a role, pozvánky, nastavení portálu, evidence akcí |
| Editor | předměty, materiály, úkoly, testy, rozvrh, akce, oznámení, odkazy |
| Student | číst publikovaný obsah, stahovat soubory, označovat vlastní úkoly, oblíbené, upravit profil |
| Neschválený / zablokovaný | nevidí žádná data (stránka „Čeká na schválení“) |
Registrace: primárně pozvánkou (kód nebo odkaz …/registrace?pozvanka=KÓD). V Administrace → Nastavení lze registrace vypnout, vyžadovat pozvánku a zvolit, zda se pozvaní schvalují automaticky.
materials není veřejný. Stažení jde přes /api/soubory/<id>: ověří přihlášení, přes RLS zkontroluje, že rodičovský materiál/úkol je publikovaný, a vydá podepsaný odkaz platný 60 s.audit_logs (čte jen admin).npm test # jednotkové + databázové testy (bez internetu, bez Dockeru)
npm run check # typy + lint + testy
npm run test:e2e # E2E proti TESTOVACÍ instanci Supabase
tests/db – spouští skutečné migrace v PGlite (Postgres ve WASM) a ověřuje RLS: koncepty, neschválené účty, zákaz změny role, ochrana posledního admina, soukromé soubory, vyhledávání bez konceptů, unikátnost splnění úkolu…tests/unit – štítky termínů, střídání týdnů A/E/B/F, změny a slučování akcí v rozvrhu, validace souborů, bezpečné vykreslení zápisů.tests/e2e – 20 hlavních scénářů ze zadání. Vyžadují testovací projekt Supabase a dva účty (admin, student) v proměnných E2E_* – viz .env.example. Před prvním spuštěním: npx playwright install chromium.src/
app/
(auth)/ přihlášení, registrace, obnova hesla
(portal)/ studentský portál (dashboard, předměty, materiály, úkoly, …)
admin/ administrace
api/ vyhledávání, autorizované stahování souborů
auth/callback/ odkazy z e-mailů
components/ UI komponenty (ui/, layout/, portal/, admin/, editor/, upload/)
lib/
actions/ server actions (vždy kontrolují oprávnění)
data/ čtecí dotazy (přes RLS)
validation/ Zod schémata
supabase/ klienti Supabase (server, prohlížeč, admin)
proxy.ts obnova relace, přesměrování nepřihlášených
supabase/
migrations/ schéma, RLS, triggery, Storage
seed.sql demonstrační data (jen lokálně)
tests/ db, unit, e2e
Rozvrh třídy funguje stejně jako ve Family Station: týdny se střídají A → E → B → F (pondělí 14. 9. 2026 = týden B), každý týden cyklu má vlastní výchozí rozvrh a nad ním se zadávají změny jen pro konkrétní týden:
| Štítek | Význam |
|---|---|
| S | změna / suplování (červený rámeček) |
| M | změna místnosti (červený čárkovaný) |
| N | nová hodina navíc (zelený) |
| A | akce třídy – navazující hodiny se spojí do jedné karty (zelený čárkovaný) |
| O | hodina odpadá (červený čárkovaný, přeškrtnuté) |
| V | celodenní volno / svátek (fialový) |
V Administrace → Rozvrh se klikem na hodinu upravuje výchozí rozvrh nebo změna pro daný týden, klikem na den celodenní volno či akce. Dále jsou tam záložky Předměty a učitelé (nabídka pro výběr) a Období zobrazení (od–do a nastavení střídání týdnů). Výchozí rozvrh se změnami nikdy nepřepisuje.
Označení třídy a školní rok se mění v Administrace → Nastavení – nic není pevně svázané s „I1.M“. Předměty lze archivovat (obsah zůstane zachován) a přidávat nové.