Установка
Требования
- Node.js v24.12.0 или выше
- pnpm >= 11.1.2
- Supabase CLI (для локального Supabase)
- Docker (для Supabase и PowerSync)
Установка
Клонируйте репозиторий
git clone https://github.com/ilkome/finapp.git
cd finapp
Установите зависимости
pnpm install
Настройте переменные окружения
Скопируйте пример env-файла и заполните значения:
cp app/.env.example app/.env
VITE_SUPABASE_URL=http://localhost:54321
VITE_SUPABASE_ANON_KEY=<anon key из вывода supabase start>
VITE_POWERSYNC_URL=http://localhost:8080
При локальной разработке supabase start выводит API URL (использовать как VITE_SUPABASE_URL) и anon key (использовать как VITE_SUPABASE_ANON_KEY). VITE_POWERSYNC_URL - это сервис PowerSync, запускаемый на следующем шаге.
Запустите локальный бэкенд
Выполните три команды из директории app/. После первоначальной настройки достаточно просто запускать контейнеры при необходимости.
1. Запустите Supabase (Postgres + Auth на порту 54321):
supabase start
2. Примените настройки репликации PowerSync:
docker exec -i supabase_db_app psql -U postgres -d postgres < supabase/powersync_setup.sql
Эта команда создаёт роль powersync_role с правами репликации и публикацию powersync для пяти таблиц Финапки.
3. Запустите сервис PowerSync (порт 8080):
docker compose -f powersync/docker-compose.yaml up -d
Запустите dev-сервер
pnpm dev
Приложение доступно на http://localhost:3050.
Playground дизайн-системы доступен на http://localhost:3050/dev в режиме разработки (скрыт в продакшене).
Вход через Google (опционально)
На экране входа есть кнопка Войти через Google. Вход по почте и паролю работает без этой настройки - настраивайте Google, только если хотите протестировать этот флоу локально.
Создайте OAuth-клиент Google
В Google Cloud Console создайте OAuth 2.0 Client ID (Web application) и добавьте локальный callback Supabase как разрешённый redirect URI:
http://127.0.0.1:54321/auth/v1/callback
Добавьте ключи в app/.env
SUPABASE_AUTH_EXTERNAL_GOOGLE_CLIENT_ID=<client id>
SUPABASE_AUTH_EXTERNAL_GOOGLE_SECRET=<client secret>
CLI Supabase загружает .env из директории запуска. Эти переменные подставляются в env() в app/supabase/config.toml и не попадают в клиент (без префикса VITE_).
Перезапустите Supabase
supabase stop && supabase start
Провайдер Google уже включён в config.toml ([auth.external.google], skip_nonce_check = true для локали), а dev-origin http://localhost:3050 добавлен в additional_redirect_urls.
Сборка
pnpm build
pnpm generate
pnpm preview