Веб-приложение для управления домашними заданиями университетской группы.
- 📅 Удобный календарь с выбором года, месяца и дня
- 📝 Просмотр домашних заданий для студентов
- 🔐 Панель администратора для управления заданиями
- 🌓 Светлая и тёмная темы
- 📱 Адаптивный дизайн (Desktop, Tablet, Mobile)
- ⚡ Быстрая загрузка и плавные анимации
- Frontend: React 18 + Vite
- Styling: Tailwind CSS
- Routing: React Router v6 (HashRouter)
- Backend: Supabase (Auth + PostgreSQL)
- Icons: Material Icons
- Deploy: GitHub Pages
git clone https://github.com/your-username/university-timetable.git
cd university-timetablenpm install- Создайте проект на supabase.com
- Скопируйте
Project URLиanon publicключ - Создайте файл
.env.local:
VITE_SUPABASE_URL=your_project_url
VITE_SUPABASE_ANON_KEY=your_anon_keyВыполните следующий SQL в SQL Editor вашего проекта Supabase:
-- Включаем расширение для UUID
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
-- Создаём таблицу домашних заданий
CREATE TABLE homework (
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
subject TEXT NOT NULL,
task TEXT NOT NULL,
homework_date DATE NOT NULL,
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
created_by UUID REFERENCES auth.users(id)
);
-- Создаём индекс для быстрого поиска по дате
CREATE INDEX idx_homework_date ON homework(homework_date);
-- Включаем Row Level Security
ALTER TABLE homework ENABLE ROW LEVEL SECURITY;
-- Политика: все могут читать
CREATE POLICY "Публичное чтение" ON homework
FOR SELECT TO anon, authenticated
USING (true);
-- Политика: только авторизованные могут добавлять
CREATE POLICY "Только админ может добавлять" ON homework
FOR INSERT TO authenticated
WITH CHECK (true);
-- Политика: только авторизованные могут удалять
CREATE POLICY "Только админ может удалять" ON homework
FOR DELETE TO authenticated
USING (true);
-- Политика: только авторизованные могут редактировать
CREATE POLICY "Только админ может редактировать" ON homework
FOR UPDATE TO authenticated
USING (true);В Supabase Dashboard:
- Перейдите в
Authentication→Users - Нажмите
Add user→Create new user - Введите email и пароль для администратора
npm run devОткройте http://localhost:5173
npm run buildnpm run previewУбедитесь, что в vite.config.js указано правильное имя репозитория:
export default {
base: '/university-timetable/',
// ...
}В настройках репозитория (Settings → Secrets → Actions) добавьте:
VITE_SUPABASE_URLVITE_SUPABASE_ANON_KEY
npm run deployИли настройте GitHub Actions для автоматического деплоя.
src/
├── components/
│ ├── Calendar.jsx # Компонент календаря
│ ├── HomeworkCard.jsx # Карточка домашнего задания
│ ├── HomeworkList.jsx # Список домашних заданий
│ ├── AddHomeworkModal.jsx # Модальное окно добавления
│ ├── ThemeToggle.jsx # Переключатель темы
│ ├── YearMonthSelector.jsx # Селектор года/месяца
│ ├── LoginForm.jsx # Форма входа
│ └── Toast.jsx # Уведомления
├── pages/
│ ├── HomePage.jsx # Публичная страница
│ └── AdminPage.jsx # Панель администратора
├── lib/
│ ├── supabaseClient.js # Клиент Supabase
│ ├── auth.js # Функции авторизации
│ └── homework.js # CRUD операции с ДЗ
├── contexts/
│ └── ThemeContext.jsx # Контекст темы
├── App.jsx # Главный компонент
├── main.jsx # Точка входа
└── index.css # Стили Tailwind
import { getHomeworkByDate } from './lib/homework'
const { data, error } = await getHomeworkByDate('2024-12-25')import { addHomework } from './lib/homework'
const { data, error } = await addHomework({
subject: 'Математика',
task: 'Решить задачи 1-10 на стр. 42',
homework_date: '2024-12-25'
})import { updateHomework } from './lib/homework'
const { data, error } = await updateHomework('uuid-id', {
subject: 'Физика',
task: 'Новое описание'
})import { deleteHomework } from './lib/homework'
const { error } = await deleteHomework('uuid-id')| Название | Светлая тема | Тёмная тема |
|---|---|---|
| Background | #F3F1FF |
#0F0A2A |
| Surface | #FFFFFF |
#1A1042 |
| Accent | #6D59E8 |
#6D59E8 |
| Text Primary | #1A0C5A |
#FFFFFF |
| Text Secondary | #6B7280 |
#9CA3AF |
MIT
Создано с ❤️ для университетской группы