Приложение для управления заметками с авторизацией, темами и анимациями.
- React 18 + TypeScript
- Next.js 14 — сборка, dev-сервер, маршрутизация (App Router)
- Feature-Sliced Design — архитектура проекта
- Redux Toolkit — глобальное состояние (тема, alert)
- TanStack React Query — кэширование и работа с API заметок
- NextAuth — авторизация
- Styled Components — стили
- Framer Motion — анимации
- Formik + Yup — формы и валидация
- FontAwesome — иконки
- Firebase Admin — бэкенд (хранение данных)
- Vitest + Testing Library — тестирование
- Добавление, удаление заметок
- Редактирование заголовка по клику на заметку
- Отметка задач как выполненных
- Удаление всех заметок
- Поиск по заголовку заметки
- Фильтрация списка по статусу (все / активные / выполненные)
- Сортировка: по дате, по названию, по статусу
- Оптимистичные обновления (React Query)
- API-маршруты для работы с данными (
/api/notes)
- Регистрация и вход (NextAuth)
- Отдельные заметки для каждого пользователя
- Выход из аккаунта
- Светлая и тёмная тема (cookie)
- Адаптивная навигация с мобильным меню
- Система уведомлений (Alert)
- Плавные переходы между страницами
| Путь | Описание |
|---|---|
/ |
Notes — список заметок |
/modal |
Modal — пример модального окна |
/select |
Select — кастомный компонент выбора |
/motion |
Motion — анимации на основе drag (Framer Motion) |
- Node.js 18+ (рекомендуется LTS)
- Yarn 4.13+ (packageManager в
package.json)
# Клонирование репозитория
git clone <your-repo-url> react-notes
cd react-notes
# Установка зависимостей
yarn- Скопируйте файл
.env.local.exampleв.env.local. - Заполните переменные окружения:
FIREBASE_PROJECT_ID,FIREBASE_CLIENT_EMAIL,FIREBASE_PRIVATE_KEY— данные сервисного аккаунта Firebase Admin.NEXTAUTH_SECRET— секрет для NextAuth (можно сгенерировать черезopenssl rand -base64 32).NEXTAUTH_URL— базовый URL приложения (по умолчаниюhttp://localhost:3000).- при необходимости —
SESSION_MAX_AGE_MINUTES.
# Режим разработки
yarn dev
# Сборка
yarn build
# Запуск production-сборки
yarn startyarn typecheck # Проверка типов TypeScript
yarn lint # Проверка ESLint (src, app)
yarn lint:fix # Исправление ошибок ESLint
yarn pretty # Форматирование кода (Prettier)
yarn test # Запуск тестов (Vitest) в watch-режиме
yarn test:run # Однократный прогон тестовПроект использует Vitest и Testing Library для unit- и компонентных тестов:
src/store/slices/alertSlice.test.ts— тесты Redux-слайсаsrc/features/notes/api/notes.test.ts— тесты API заметокsrc/features/notes/ui/note-form/NoteForm.test.tsx— тесты формыsrc/features/notes/ui/note-item/NoteItemContent.test.tsx— тесты элемента заметкиsrc/shared/ui/select/Select.test.tsx— тесты компонента Selectapp/api/utils/— тесты утилит API
app/ # Next.js App Router
├── api/ # API Routes
│ ├── auth/ # NextAuth
│ ├── register/ # Регистрация
│ └── notes/ # CRUD заметок
├── motion/
├── modal/
├── select/
├── AppShell.tsx # Оболочка: Navbar, Alert, layout
├── Providers.tsx # QueryClient, Session, Theme
├── StoreProvider.tsx
├── layout.tsx
├── page.tsx
└── ...
src/
├── features/
│ ├── alert/ # Глобальные уведомления
│ ├── auth/ # Авторизация (Navbar, формы, UserMenu)
│ └── notes/ # Заметки (форма, список, API, хуки React Query)
├── views/ # NotePage, ModalPage, SelectPage, MotionPage
├── shared/
│ ├── config/ # Темы, брейкпоинты, константы
│ ├── layouts/ # Container, Flex, Grid
│ ├── lib/ # Хуки, анимации
│ └── ui/ # Alert, Button, Checkbox, ErrorBoundary, ErrorMessage, Input, Modal, Select, Skeleton
├── store/ # Redux store и слайсы
├── lib/ # auth-options, firebase-admin, queryClient, registry
├── styles/ # Глобальные стили
└── types/ # TypeScript-типы
Автодеплой настроен через Vercel. При пуше в подключённый репозиторий (GitHub) приложение собирается и публикуется на Vercel. Для Next.js доступны preview-деплои для веток и production-деплой для основной ветки.