No description
| .opencode/skills | ||
| backend | ||
| frontend | ||
| .gitignore | ||
| bun.lock | ||
| bunfig.toml | ||
| null | ||
| package.json | ||
| QWEN.md | ||
| README.md | ||
Astro + PocketBase Monorepo — Minivan Berlin
Монорепозиторий для веб-сайта Minivan Berlin — сервиса аренды автомобилей в Берлине. Проект сочетает современный SSR-фронтенд на Astro с backend-ом на PocketBase в качестве headless CMS и системы аутентификации.
🚀 Технологический стек
Frontend
- Astro 6 — SSR-фреймворк с поддержкой островной архитектуры
- SolidJS — реактивные компоненты для интерактивных элементов
- Tailwind CSS 4 — утилитарные стили
- TypeScript — типизация всего проекта
- PocketBase JS SDK — клиент для взаимодействия с backend
- astro-icon — иконки в проекте
- @astrojs/sitemap — генерация sitemap для SEO
- @astrojs/mdx — поддержка MDX для контента
Backend
- PocketBase — легковесный backend с SQLite, аутентификацией и админ-панелью
- Миграции — управление схемой данных через JS-миграции
Инфраструктура
- Bun — пакетный менеджер и рантайм
- Maildev — локальный SMTP-сервер для тестирования email
- Concurrently — параллельный запуск нескольких серверов
- Docker — контейнеризация (Dockerfile в frontend и backend)
📁 Структура проекта
astro_minivan/
├── frontend/ # Astro-приложение
│ ├── src/
│ │ ├── components/ # SolidJS и Astro компоненты
│ │ │ ├── auth/ # Компоненты аутентификации
│ │ │ ├── booking/ # Компоненты бронирования
│ │ │ ├── home/ # Компоненты главной страницы
│ │ │ ├── blog/ # Компоненты блога
│ │ │ └── ... # Другие секции сайта
│ │ ├── pages/ # Страницы Astro
│ │ │ ├── api/ # API endpoints
│ │ │ ├── auth/ # Страницы аутентификации
│ │ │ └── *.astro # Основные страницы сайта
│ │ ├── lib/ # Утилиты и сервисы
│ │ │ ├── authService.ts # Сервис аутентификации
│ │ │ ├── emailService.ts # Отправка email через Nodemailer
│ │ │ ├── pocketbase.js # Клиент PocketBase
│ │ │ └── ...
│ │ ├── layouts/ # Layouts Astro
│ │ ├── styles/ # Глобальные стили
│ │ ├── types/ # TypeScript типы
│ │ ├── constants/ # Константы приложения
│ │ ├── emails/ # Шаблоны email-писем
│ │ └── middleware.js # Middleware для аутентификации
│ ├── astro.config.mjs # Конфигурация Astro
│ ├── tsconfig.json # TypeScript конфигурация
│ └── Dockerfile
│
├── backend/ # PocketBase backend
│ ├── pb_migrations/ # Миграции базы данных
│ ├── pb_data/ # Данные PocketBase (игнорируется в git)
│ ├── pocketbase.exe # Бинарник PocketBase
│ └── start.sh / start.bat # Скрипты запуска
│
├── bunfig.toml # Конфигурация Bun (workspaces)
├── package.json # Корневой package.json
└── .gitignore
⚙️ Установка
Требования
- Bun (рекомендуемая версия указывается в
.nvmrc) - Node.js (совместимая версия)
Установка зависимостей
bun install
🛠️ Разработка
Запуск всех сервисов одновременно
# Фронтенд + бэкенд
bun run dev
# Фронтенд + бэкенд + почтовый сервер (для тестирования email)
bun run dev:all
Запуск отдельных сервисов
# Только фронтенд (Astro на порту 4321)
bun run frontend:dev
# Только бэкенд (PocketBase на порту 8090)
bun run backend:dev
# Только почтовый сервер (Maildev)
bun run maildev
Доступные адреса
| Сервис | URL | Описание |
|---|---|---|
| Frontend | http://localhost:4321 | Astro приложение (SSR) |
| Backend | http://localhost:8090 | PocketBase API и админ-панель |
| Maildev | http://localhost:1080 | Веб-интерфейс почтового сервера |
| Maildev SMTP | localhost:1025 | SMTP сервер для отправки писем |
📦 Сборка и продакшен
Сборка проекта
# Сборка фронтенда
bun run build
# Или напрямую
cd frontend && bun run build
Запуск продакшен-версии
bun run start
🔐 Аутентификация
Проект использует встроенную систему аутентификации PocketBase:
- OAuth2 провайдеры — поддержка входа через Google, Apple и другие
- Email/пароль — классическая аутентификация
- JWT токены — хранятся в cookies
- Middleware — автоматическая проверка сессии на каждом запросе
Файлы аутентификации:
frontend/src/lib/authService.ts— сервис управления сессиямиfrontend/src/middleware.js— middleware для проверки авторизацииfrontend/src/components/auth/— UI компоненты входа/регистрации
📧 Email-рассылка
Для отправки уведомлений используется Nodemailer:
- Подтверждение бронирования
- Уведомления администратору
- Верификация email
Локальное тестирование почты
bun run maildev
Веб-интерфейс: http://localhost:1080
API endpoints для отправки писем
POST /api/send-email— произвольное письмоPOST /api/send-booking-confirmation— подтверждение бронированияPOST /api/send-admin-notification— уведомление администратора
🗄️ База данных и миграции
PocketBase использует SQLite. Миграции хранятся в backend/pb_migrations/.
Применение миграций
bun run backend:migrate
Основные коллекции
users— пользователиposts— статьи блогаfaq_items— FAQslider_cars— слайдер автомобилейpremium_fleet— премиум автопаркvip_services— VIP услугиreviews— отзывыpages— статические страницыsite_settings— настройки сайта
🔧 Переменные окружения
Frontend (.env)
# PocketBase
POCKETBASE_URL=http://localhost:8090
# Почта (SMTP)
MAIL_HOST=localhost
MAIL_PORT=1025
MAIL_FROM=no-reply@minv-berlin.de
ADMIN_EMAIL=admin@minivan-berlin.de
⚠️ Важно: В продакшене замените
localhostна реальные адреса и используйте безопасные SMTP-настройки.
🌐 Сайт
Основной домен: https://minivan-berlin.de
Страницы сайта
- Главная (
/) - О нас (
/ueber-uns) - Цены (
/preise) - Премиум флот (
/premium-flotte) - VIP услуги (
/vip-services) - Блог (
/blog) - Отзывы (
/bewertungen) - Партнёры (
/partner) - Карьера (
/karriere) - Контакты (
/kontakt) - Помощь (
/hilfe) - AGB, Datenschutz, Impressum
📝 Скрипты npm
| Команда | Описание |
|---|---|
bun run dev |
Запуск фронтенда и бэкенда |
bun run dev:all |
Запуск всех сервисов (включая maildev) |
bun run frontend:dev |
Только фронтенд |
bun run frontend:build |
Сборка фронтенда |
bun run frontend:start |
Preview собранного фронтенда |
bun run backend:dev |
Только бэкенд (PocketBase) |
bun run backend:migrate |
Применение миграций БД |
bun run maildev |
Запуск почтового сервера |
bun run build |
Сборка проекта |
bun run start |
Запуск продакшен-версии |
🐳 Docker
Проект включает Dockerfile для контейнеризации:
frontend/Dockerfile— образ для Astro приложенияbackend/Dockerfile— образ для PocketBase
📚 Документация
📄 Лицензия
ISC