# Astro Frontend для Redi.dev Современный веб-сайт-портфолио, разработанный на Astro с использованием PocketBase в качестве CMS. ## 🚀 Стек технологий - **Astro 6** - фреймворк для создания быстрых сайтов - **TypeScript** - строгая типизация - **Tailwind CSS** - стилизация - **Solid.js** - реактивные компоненты - **PocketBase** - headless CMS и бэкенд - **Bun** - пакетный менеджер и рантайм - **Nanostores** - управление состоянием ## 📁 Структура проекта ``` astro_redi/ ├── .env # Переменные окружения (в корне проекта!) ├── frontend/ # Исходный код frontend части │ ├── public/ # Статические файлы │ ├── src/ │ │ ├── assets/ # Стили, изображения │ │ ├── components/ # Astro и Solid.js компоненты │ │ ├── layouts/ # Макеты страниц │ │ ├── lib/ # Вспомогательные библиотеки (PocketBase клиент) │ │ ├── pages/ # Страницы приложения │ │ └── globalInterfaces.ts # Глобальные TypeScript интерфейсы │ ├── astro.config.mjs # Конфигурация Astro │ ├── package.json # Зависимости │ └── tsconfig.json # Конфигурация TypeScript ├── astro_redidev/ # Резервная копия старой версии ├── backend/ # Бэкенд часть (если есть) └── scripts/ └── dev-server.js # Скрипт запуска локальных серверов ``` ## ⚙️ Переменные окружения Файл `.env` должен находиться в **корне проекта** (`astro_redi/.env`): ```env # Локальная разработка PUBLIC_SITE_URL=http://localhost:4321 PUBLIC_POCKETBASE_URL=http://127.0.0.1:8090 # Продакшен (раскомментировать при деплое) # PUBLIC_SITE_URL=https://redib.ru # PUBLIC_POCKETBASE_URL=http://pocketbase-y8oskk4kgkgko0s88c8c4oo0.144.124.229.64.sslip.io:8080 ``` ## 🛠️ Установка и запуск ### Требования - **Bun** (рекомендуется) или Node.js 22+ - **PocketBase** (локально или удалённо) ### Локальная разработка 1. **Установите зависимости:** ```bash bun install ``` 2. **Запустите PocketBase:** ```bash # PocketBase должен быть запущен на порту 8090 # Используйте скрипт dev-server.js для одновременного запуска node scripts/dev-server.js ``` 3. **Откройте браузер:** - Astro: http://localhost:4321 - PocketBase Admin: http://localhost:8090/_/ ### Сборка для продакшена ```bash bun run build ``` ### Продакшен запуск ```bash bun run start ``` ## 📊 Коллекции PocketBase Проект использует следующие коллекции: | Коллекка | Описание | Поля | |----------|----------|------| | `projects` | Проекты портфолио | `name`, `description`, `short_description`, `long_description`, `stack`, `image`, `url_site`, `github`, `order`, `isActive` | | `featured_projects` | Избранные проекты | `name`, `description`, `image`, `url`, `github`, `stack`, `featured`, `forSale`, `order`, `isActive` | | `posts` | Блог | `title`, `description`, `publishDate`, `tags`, `coverImage`, `coverImageAlt`, `isFeatured`, `isActive` | | `about` | Информация об авторе | `title`, `description`, `professional_experience`, `skills`, `contact_title`, `contact_description`, `whatsapp_link`, `email`, `image`, `alt_text`, `isActive` | | `navigation` | Навигация сайта | `items` (JSON) | ## 🌐 Изображения из PocketBase Изображения загружаются напрямую из PocketBase по URL: ``` {PUBLIC_POCKETBASE_URL}/api/files/{collection_id}/{record_id}/{filename} ``` Пример: ``` http://127.0.0.1:8090/api/files/projects/t7i08mbfzuzp6e6/tech_news_ncqktq5j8r.avif ``` ## 📦 Деплой ### В Coolify Проект настроен для деплоя в Coolify с использованием адаптера `@astrojs/node`: 1. Укажите переменные окружения в Coolify: - `COOLIFY_FQDN` — домен приложения - `COOLIFY_URL` — URL приложения - `PUBLIC_SITE_URL` — публичный URL сайта - `PUBLIC_POCKETBASE_URL` — URL PocketBase 2. Команды сборки и запуска: - Build: `bun run build` - Start: `bun run start` - Install: `bun install` ### Другие платформы Проект совместим с: - Vercel - Netlify - Cloudflare Pages - Любые VPS с Node.js/Bun ## 🔧 Скрипты | Команда | Описание | |---------|----------| | `bun install` | Установка зависимостей | | `bun run dev` | Запуск режима разработки | | `bun run build` | Сборка проекта | | `bun run start` | Запуск продакшен версии | | `bun run astro check` | Проверка типов TypeScript | ## 📝 Особенности реализации - **SSR (Server-Side Rendering)** — динамические страницы рендерятся на сервере - **Статическая генерация** — пагинация проектов генерируется при сборке - **Оптимизация изображений** — ленивая загрузка, правильные размеры - **SEO** — sitemap, метатеги, семантическая разметка - **Тёмная тема** — автоматическое переключение по системным настройкам - **Адаптивный дизайн** — мобильная версия, планшет, десктоп ## 👨‍💻 Автор **RediBedi** — веб-разработчик, специализирующийся на Astro и современных frontend технологиях. - Портфолио: [redib.ru](https://redib.ru) - GitHub: [RediBedi](https://github.com/RediBedi)