Todo-приложение на чистом JavaScript с локальным сохранением состояния, поддержкой нескольких списков и реальным backend-режимом через JSON Server.
- Полный CRUD задач + inline-редактирование.
- Фильтры:
Все / Активные / Выполненные. - Поиск по названию.
- Hash-роутинг состояния:
#/all,#/active,#/completed+ query-параметры (q,project) в URL. - Сортировка:
Вручную,Сначала новые,Ближайший дедлайн,Высокий приоритет. - Массовые действия TodoMVC:
Toggle all,Clear completed, счетчик активных задач. - Drag-and-drop reorder (режим
Вручную, фильтрВсе, пустой поиск) с сохранением порядка вlocalStorage. - Несколько проектов/списков задач (не один общий список).
- Переключатель темы
light/darkс сохранением выбора. - Состояния интерфейса: загрузка, пустой список, ошибки.
- Улучшенная доступность:
label,aria-label, live-region, клавиатурная навигация (ArrowUp/ArrowDown/Home/End). - Частичные обновления DOM при рендере списка (без полного перерендера каждого элемента).
- Frontend: Vanilla JavaScript (ES modules), HTML, CSS.
- API: JSON Server (локальный реальный CRUD) + fallback на JSONPlaceholder.
- Качество: ESLint, Prettier, Vitest (
jsdom), Playwright. - Контейнеризация: Docker + Docker Compose.
- CI: GitHub Actions (
lint + format + unit + e2e + docker build).
- Node.js
22.xи npm10+ - Docker + Docker Compose (опционально)
Установить зависимости:
npm installЗапустить фронт + API:
npm run devОткрыть: http://localhost:8080
Отдельно:
npm run start # только frontend
npm run api # только JSON Server (http://localhost:3001)По умолчанию приложение на localhost использует API http://localhost:3001.
Если нужно, endpoint можно переопределить через URL-параметр:
http://localhost:8080/?api=https://example.com
npm run format:check
npm run lint
npm test
npm run test:e2e:install
npm run test:e2eЗапустить frontend + API:
docker compose up --build app apiОткрыть: http://localhost:8080
Остановить:
docker compose downПроверки в Docker:
docker compose run --rm tests
docker compose run --rm app npm run lint
docker compose run --rm app npm run format:check
docker compose run --rm e2e- Данные хранятся в ключе
todo_list_state. - Реализовано версионирование схемы (
schemaVersion) и миграция со старого ключаtodo_list_state_v2. - При изменении структуры данных состояние автоматически нормализуется и обновляется.
app.js— оркестрация приложения и обработка сценариев.api.js— HTTP-клиент и выбор backend endpoint.state.js— нормализация, фильтрация, сортировка, миграции иlocalStorage.ui.js— рендер, частичные обновления списка, обработка UI-событий.backend/db.json— база JSON Server.tests/— unit-тесты.e2e/— Playwright e2e..github/workflows/ci.yml— CI пайплайн.
- TodoMVC-база:
Toggle all,Clear completed, счетчик активных задач. - Фильтры и URL-состояние (
#/all,#/active,#/completed,q,project). - Drag-and-drop reorder с сохранением порядка.
- Приоритет, дедлайн, inline-редактирование.
- Несколько проектов/списков.
- Темы
light/darkс сохранением. - Реальный backend-режим через JSON Server.
- Unit + E2E тесты и CI-пайплайн.
- Версионирование и миграции схемы
localStorage.
- Редактирование/удаление проектов, перенос задач между проектами.
- Персистентный backend-режим для продакшена (например, Supabase/Postgres) через
.env. - Авторизация пользователей и разграничение данных по аккаунтам.
- Расширенные e2e-сценарии (ошибки сети, восстановление после offline, мобильный viewport).
- Напоминания по дедлайну (in-app/уведомления) и календарный вид.