### Техническое задание (ТЗ) для приложения на Flutter
#### 1. Общее описание
Приложение предназначено для уведомления пользователя о днях рождения и других значимых событиях его знакомых. Приложение работает полностью оффлайн, синхронизируется с контактами телефона и позволяет добавлять события вручную. Все данные хранятся в локальной базе данных на устройстве.
---
#### 2. Основные функции
##### 2.1. Синхронизация с контактами
- Приложение должно иметь возможность синхронизироваться со списком контактов на устройстве.
- Пользователь может выбрать, какие контакты добавить в приложение для отслеживания дней рождения.
- Если у контакта в телефонной книге указан день рождения, он автоматически добавляется в приложение.
##### 2.2. Ручное добавление записей
- Пользователь может вручную добавлять записи о днях рождения и других событиях.
- Для каждой записи можно указать:
- Имя человека.
- Дата события (день рождения или другое событие).
- Примечания (например, "Любит шоколад").
- Ссылки на социальные сети (опционально).
##### 2.3. Хранение данных
Все данные сохраняются в локальной базе данных на устройстве
База данных должна поддерживать миграции для обновления структуры при выходе новых версий приложения.
##### 2.4. Привязка заметок к контактам
- Пользователь может добавлять свободные заметки к каждому контакту / событию.
- Заметки сохраняются локально и привязываются к конкретному контакту / событию.
##### 2.5. Ссылки на социальные сети
- Пользователь может добавлять ссылки на социальные сети (например, Instagram, Facebook, VK) к контактам.
- Ссылки должны быть кликабельными и открываться в браузере или соответствующем приложении.
##### 2.6. Настройка уведомлений
- Пользователь может настроить, за сколько дней до события присылать уведомление (например, за 1, 3, 7 дней).
- Уведомления должны быть локальными и могут быть в виде пуш уведомлений (скрытых на экране блокировки).
##### 2.7. Добавление других значимых событий
- Пользователь может добавлять события, не связанные с днями рождения (например, годовщина, важная встреча).
- Для каждого события можно указать название, дату и примечания.
##### 2.8. Оффлайн-работа
- Приложение должно работать полностью оффлайн.
- Все данные хранятся только на устройстве, синхронизация с сервером не предусмотрена.
---
#### 3. Требования к интерфейсу
##### 3.1. Главный экран
Список всех добавленных событий, отраженных на календаре в виде точек.
При нажатии на день календаря под ним появляются карточки с описанием события в этот день
По умолчанию под календарем отображаются 3 ближайших события
- Возможность фильтрации событий (например, только дни рождения, только другие события).
- Поиск по имени или дате.
##### 3.2. Экран добавления/редактирования события
- Форма для ввода данных:
- Контакт (из него будет вести ссылка).
- Дата события (С возможностью не указывать год и возможностью указать интервал повторений)
- Уведомления
- Примечания.
- Кнопки "Сохранить" и "Отмена".
##### 3.3. Экран настроек
- Настройка уведомлений (дефолтных) (за сколько дней напоминать).
- Возможность очистить базу данных.
Информация о версии приложения.
Инструкция по использованию
##### 3.4. Экран контакта
Отображение базовой информации о контакте (имя-фамилия, телефон)
В списке карточек отображены ближайшие события (по клику на каждую возможность настроить это событие)
Есть кнопка настроек для контакта, в настройках можно редактировать контакт,
##### 3.5. Уведомления
Уведомления построены иерархично - для каждого события привязывается один из пресетов уведомления (уведомление на событие, на контакт или дефолтное)
На каждом уровне (дефолтное, на контакт или на событие) можно сделать настройку уведомлений, указав, за сколько должно быть оповещение (пока так, дальше будет расширение)
---
#### 4. Технические требования
##### 4.1. Платформа
- Приложение должно быть разработано на Flutter.
- Поддержка Android и iOS.
Goldstein, [02.02.2025 18:16]
##### 4.2. База данных
- Реализовать механизм миграции базы данных для поддержки обновлений.
##### 4.3. Оффлайн-работа
- Приложение не должно требовать подключения к интернету.
- Все данные хранятся только на устройстве.
---
#### 5. Требования к дизайну
- Минималистичный и интуитивно понятный интерфейс.
- Адаптивный дизайн для разных размеров экранов (только мобильные устройства, можно только портретный вариант).
---
#### 6. Этапы разработки
1. Проектирование:
- Проектирование структуры базы данных.
2. Разработка:
- определяется исполнителем
3. Тестирование:
- Тестирование на разных устройствах (Android и iOS).
- Проверка корректности уведомлений.
- Проверка миграции базы данных.
4. Публикация:
- Подготовка приложения к публикации в Google Play и App Store.
---
#### 7. Дополнительные требования
- Приложение должно быть оптимизировано для работы на слабых устройствах.
- Код должен быть хорошо документирован.