Мобильное приложение для семей для управления задачами и совместным расписанием.
Проект собран по материалам из:
Project seminar/2 module— требования, UML и ТЗ;Databases— схема из 7 связанных таблиц;Course project— исследование рынка, MVP и UX-направление.
apps/mobile— мобильный клиент на Expo + React Native + Expo Router.apps/server— API на Fastify + Prisma.packages/contracts— общие типы между клиентом и сервером.db/sql— SQL-артефакты под PostgreSQL.docs— архитектура, БД, API и диаграммы.
- Mobile: Expo, React Native, TypeScript, Expo Router, React Query, Zustand
- API: Fastify, Zod, Prisma
- Data: PostgreSQL 16, Prisma schema, Docker Compose
- Architecture: monorepo через npm workspaces
- Expo и React Native дают быстрый кроссплатформенный мобильный MVP под Android/iOS.
- Fastify проще и быстрее для компактного API, чем перегруженный серверный фреймворк.
- Prisma даёт единый источник истины для БД, типов и запросов.
- PostgreSQL соответствует вашим требованиям из ТЗ и учебным требованиям по БД.
- Семейная группа и роли
родитель/ребёнок - Домашний overview-экран
- Общий календарь
- Задачи с назначением исполнителей
- Общий список покупок
- База данных из 7 связанных таблиц, приведённых к 3НФ
- Скопировать
apps/server/.env.exampleвapps/server/.env. - Поднять PostgreSQL:
docker compose up -dЕсли контейнер уже существовал с другими учётными данными, пересоздайте его вместе с volume, иначе Postgres сохранит старый пароль:
docker compose down -v
docker compose up -d- Установить зависимости:
npm install- Сгенерировать Prisma client и применить миграции:
npm run db:generate
npm run db:migrate
npm run db:seed- Запустить API:
npm run dev:serverОпционально: запустить фоновые процессы (outbox worker + cron), чтобы работали email-уведомления и напоминания:
npm run worker:dev --workspace @family-app/server
npm run cron:dev --workspace @family-app/server- Запустить мобильный клиент:
npm run dev:mobileДля постоянного фонового запуска backend теперь есть Docker Compose сервисы:
postgresapiworkercron
Запуск:
npm run backend:upПолезные команды:
npm run backend:logs
npm run backend:restart
npm run backend:downСервисы backend запускаются с restart: unless-stopped, поэтому после старта Docker будет поднимать их автоматически после перезапуска Docker Desktop.
Чтобы автозапуск происходил после входа в Windows, можно установить launcher в папку Startup:
powershell -ExecutionPolicy Bypass -File .\scripts\install-backend-autostart.ps1Чтобы поставить приложение на телефон как обычное Android-приложение, используйте installable build через EAS:
- Проверьте
apps/mobile/.env:
EXPO_PUBLIC_API_URL=http://<IP_ВАШЕГО_КОМПЬЮТЕРА>:4000localhost здесь не подойдёт: на телефоне это будет сам телефон, а не ваш компьютер.
- Запустите backend и базу данных.
- Выполните вход в Expo:
npx eas-cli login- Запустите сборку APK:
npm run build:mobile:android:preview- После завершения EAS Build даст ссылку на
.apk. Этот файл можно скачать на телефон и установить без Expo Go.
Для публикации в Google Play используйте production-профиль:
npm run build:mobile:android:productionДля truly always-on режима добавлен render.yaml в корень репозитория. Он описывает удалённый backend-контур в Render:
family-app-api— публичный web servicefamily-app-worker— фоновый обработчик outboxfamily-app-cron— long-running процесс напоминанийfamily-app-postgres— managed PostgreSQL
Почему именно так:
- free web service у Render засыпает после 15 минут без трафика;
- free план недоступен для background workers;
- free Postgres у Render истекает через 30 дней.
Поэтому для независимого постоянного backend нужен платный минимальный контур.
Деплой:
- Убедитесь, что
render.yamlуже запушен в GitHub. - Откройте:
https://dashboard.render.com/blueprint/new?repo=https://github.com/Stepanda1/Family-App
- Подтвердите создание Blueprint.
- Заполните секреты:
JWT_ACCESS_SECRETMFA_ENCRYPTION_KEY- при необходимости
GOOGLE_CLIENT_ID - при необходимости
APPLE_CLIENT_ID
- После первого деплоя возьмите публичный URL
family-app-apiи пропишите его вapps/mobile/.env:
EXPO_PUBLIC_API_URL=https://<your-render-api>.onrender.com- После этого пересоберите APK, чтобы мобильное приложение ходило уже в удалённый backend.
Если нужен бесплатный удалённый backend без sleep-режима, подготовлен отдельный комплект под Oracle VM:
- oracle-cloud-deploy.md
ops/oracle-cloud/docker-compose.oracle.ymlops/oracle-cloud/.env.oracle.exampleops/oracle-cloud/bootstrap-ubuntu-arm.shops/oracle-cloud/family-app.service
Это путь без зависимости от ноутбука: backend живёт на вашей VM и стартует через systemd после ребута самой машины.
Если удобнее взять 2 месяца гранта в Yandex Cloud, добавлен отдельный Terraform-комплект:
- yandex-cloud-deploy.md
ops/yandex-cloud/terraform/*
Он создаёт VM и сеть в Yandex Cloud, а затем поднимает backend на самой VM через cloud-init и systemd.
Дом— ключевые события и срочные делаКалендарь— совместное расписание семьиСписки— задачи и покупки в одном потокеСемья— участники и код приглашения