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é.