chore: cleanup project
- Remove nodemailer (unused dependency) - Remove .opencode folder (skills moved to Hermes) - Remove .genkit folder (cache, not needed) - Remove AGENTS.md (info moved to skills) - Remove YANDEX_MAIL_SETUP.md (outdated) - Add typecheck script to package.json - Update bun.lockb
This commit is contained in:
parent
7f1a146da7
commit
0f7a83c9e9
8 changed files with 6 additions and 376 deletions
|
|
@ -1 +0,0 @@
|
|||
{"version":"1.21.0"}
|
||||
|
|
@ -1,99 +0,0 @@
|
|||
# avtourist
|
||||
|
||||
Проект: avtourist-surgut.ru — автоюрист в Сургуте.
|
||||
|
||||
Стек: Astro (SSR) + PocketBase + Tailwind CSS.
|
||||
|
||||
## Коллекции PocketBase
|
||||
|
||||
- `posts` — статьи блога
|
||||
- `reviews` — отзывы
|
||||
- `comments` — комментарии
|
||||
- `cases` — кейсы
|
||||
- `consultations` — консультации
|
||||
- `users` — пользователи
|
||||
- `post_votes` — голоса за посты
|
||||
|
||||
## Структура проекта
|
||||
|
||||
```
|
||||
frontend/
|
||||
├── src/
|
||||
│ ├── pages/
|
||||
│ │ ├── index.astro # Главная
|
||||
│ │ ├── services/ # Услуги
|
||||
│ │ ├── cases/ # Кейсы
|
||||
│ │ ├── blog/ # Блог
|
||||
│ │ ├── api/ # API эндпоинты
|
||||
│ │ └── auth/ # Авторизация
|
||||
│ ├── layouts/ # Layouts
|
||||
│ ├── lib/ # PocketBase клиент
|
||||
│ └── globalInterfaces.ts # Типы
|
||||
```
|
||||
|
||||
## Категории блога
|
||||
|
||||
- ДТП
|
||||
- Лишение прав
|
||||
- Страховые споры
|
||||
- Штрафы ГИБДД
|
||||
- Возмещение ущерба
|
||||
- Судебные дела
|
||||
|
||||
## Категории услуг
|
||||
|
||||
- Возврат прав
|
||||
- Оспаривание штрафов
|
||||
- Страховые споры (ОСАГО, КАСКО)
|
||||
- ДТП и здоровье
|
||||
- Представительство в суде
|
||||
- Обжалование постановлений
|
||||
|
||||
## Категории кейсов
|
||||
|
||||
- insurance — страховые
|
||||
- rights — лишение прав
|
||||
- accident — ДТП
|
||||
- court — судебные
|
||||
- consultation — консультации
|
||||
|
||||
## Компоненты
|
||||
|
||||
Использовать готовые компоненты из проекта:
|
||||
- ServiceCard — карточка услуги
|
||||
- CaseCard — карточка кейса
|
||||
- ReviewCard — карточка отзыва
|
||||
- ArticleCard — карточка статьи
|
||||
|
||||
## Типы
|
||||
|
||||
Все типы определены в `frontend/src/globalInterfaces.ts`:
|
||||
- Post
|
||||
- Review
|
||||
- Case
|
||||
- DocumentItem
|
||||
- CompanyInfo
|
||||
|
||||
## API-эндпоинты
|
||||
|
||||
- `/api/posts` — список постов
|
||||
- `/api/posts/[slug]` — один пост
|
||||
- `/api/reviews` — отзывы
|
||||
- `/api/comments` — комментарии
|
||||
- `/api/votes` — голоса
|
||||
- `/api/consultation` — форма консультации
|
||||
- `/api/auth/*` — авторизация
|
||||
|
||||
## Переменные окружения
|
||||
|
||||
```
|
||||
PB_POCKETBASE_URL=http://127.0.0.1:8090
|
||||
```
|
||||
|
||||
## Правила
|
||||
|
||||
1. Все запросы к PB — на сервере (frontmatter)
|
||||
2. Использовать типы из globalInterfaces.ts
|
||||
3. Не использовать any
|
||||
4. Компоненты — только .astro с Tailwind
|
||||
5. API-эндпоинты — в src/pages/api/
|
||||
|
|
@ -1 +0,0 @@
|
|||
C:/Users/Serg/.config/opencode/skills
|
||||
188
AGENTS.md
188
AGENTS.md
|
|
@ -1,188 +0,0 @@
|
|||
# Правила взаимодействия с Агентом
|
||||
|
||||
## Основные принципы
|
||||
|
||||
1. **Изменения в коде возможны только с явного разрешения пользователя**
|
||||
- Перед внесением любых изменений в файлы ассистент должен получить подтверждение от пользователя
|
||||
- Все изменения должны быть предварительно объяснены пользователю
|
||||
- Перед решением конкретной задачи всегда составлять план
|
||||
- После внесения изменений в код - проводить проверку - только после этого приступать к дальнейшему решению задачи
|
||||
- **НЕ производить сборку проекта (`bun run build`) без явного разрешения пользователя**
|
||||
|
||||
2. **Прозрачность действий**
|
||||
- Ассистент должен объяснить, какие изменения планируется внести
|
||||
- Необходимо указать, в какие файлы будут внесены изменения
|
||||
- Следует объяснить последствия предполагаемых изменений
|
||||
- Внимательно читай промпт и не выходи за рамки описанных в нем измнений
|
||||
|
||||
3. **Безопасность кода**
|
||||
- Все изменения должны проходить проверку на безопасность
|
||||
- Не должны вноситься изменения, которые могут повредить функциональность приложения
|
||||
- Рекомендуется создание резервных копий при значительных изменениях
|
||||
|
||||
4. **Согласование архитектурных решений**
|
||||
- При внесении изменений, затрагивающих архитектуру приложения, необходима дискуссия с пользователем
|
||||
- Предложения по улучшению архитектуры должны обсуждаться до реализации
|
||||
|
||||
5. **Работа с разными типами проектов**
|
||||
- Уважать существующую архитектуру и стиль кода проекта
|
||||
- Следовать установленным в проекте принципам и паттернам
|
||||
|
||||
6. **Использование Bun**
|
||||
- Все команды должны выполняться с использованием Bun (bun install, bun dev, bun build и т.д.)
|
||||
- При создании скриптов в package.json, они должны быть совместимы с Bun
|
||||
|
||||
7. **Язык общения**
|
||||
- Всё общение с пользователем происходит на русском языке
|
||||
|
||||
8 **Проверка типов данных**
|
||||
- Проверять проект на ошибки типизации через команду `bun run tsc --noEmit -p frontend/tsconfig.json`
|
||||
- НЕ производить сборку проекта (`bun run build`) без явного разрешения пользователя
|
||||
- В проекте не должно быть типов any
|
||||
- Все интерфейсы компонентов прописывать в файле globalInterfaces.ts
|
||||
- При работе с PocketBase использовать актуальные сигнатуры методов из файла `D:\Verstka\production\astro_minivan\frontend\node_modules\pocketbase\dist\pocketbase.es.d.ts`
|
||||
|
||||
9 **Плагин @astrojs/sitemap**
|
||||
- Обязательно к установке в проект пакета @astrojs/sitemap
|
||||
- Обязательно к созданию в проекте файл .nvmrc
|
||||
|
||||
|
||||
## Технические правила (Astro)
|
||||
|
||||
1. **Structure проекта**
|
||||
- Использовать рекомендуемую структуру Astro: src/components/, src/layouts/, src/pages/, src/styles/
|
||||
- Файлы конфигурации: astro.config.mjs
|
||||
|
||||
2. **Разработка компонентов**
|
||||
- Создавать .astro файлы для компонентов
|
||||
- Использовать framework-specific компоненты (React, Vue, Svelte) при необходимости
|
||||
- Использовать props для передачи данных
|
||||
- Использовать встроенные компоненты Astro (<Markdown /> и т.д.)
|
||||
|
||||
3. **Роутинг и страницы**
|
||||
- Использовать file-based routing в src/pages/
|
||||
- Реализовывать динамические маршруты через [...slug].astro синтаксис
|
||||
- Использовать getStaticPaths() для генерации статических страниц
|
||||
- Создать страницу 404.astro для обработки ошибок
|
||||
|
||||
4. **Контент**
|
||||
- Использовать Markdown (.md) или MDX (.mdx) для контентных страниц
|
||||
- Использовать frontmatter в Markdown файлах
|
||||
- Использовать content collections для организации контента
|
||||
|
||||
5. **Стилизация**
|
||||
- Использовать scoped styling с <style> тегами в .astro файлах
|
||||
- Использовать Tailwind CSS с интеграцией @astrojs/tailwind
|
||||
- Использовать Tailwind утилитарные классы
|
||||
- Использовать responsive дизайн (sm:, md:, lg: и т.д.)
|
||||
- НИКОГДА не использовать директиву @apply
|
||||
|
||||
6. **Оптимизация производительности**
|
||||
- Минимизировать client-side JavaScript
|
||||
- Использовать client:* директивы для partial hydration:
|
||||
- client:load для immediately needed interactivity
|
||||
- client:idle для non-critical interactivity
|
||||
- client:visible для components that should hydrate when visible
|
||||
- Использовать lazy loading для изображений
|
||||
- Использовать Astro Image component
|
||||
|
||||
7. **Data Fetching**
|
||||
- Использовать Astro.props для передачи данных
|
||||
- Использовать getStaticPaths() для fetching данных на этапе сборки
|
||||
- Использовать Astro.glob() для работы с локальными файлами
|
||||
|
||||
8. **SEO и Meta теги**
|
||||
- Использовать <head> тег для добавления meta информации
|
||||
- Реализовать canonical URLs
|
||||
- Использовать <SEO> компонент для reusable SEO
|
||||
|
||||
9. **Accessibility**
|
||||
- Использовать семантический HTML
|
||||
- Использовать ARIA атрибуты где необходимо
|
||||
- Обеспечить keyboard navigation поддержку
|
||||
|
||||
10. **Тестирование**
|
||||
- Реализовать unit тесты для utility функций
|
||||
- Использовать end-to-end тестирование (Cypress)
|
||||
- Реализовать visual regression тестирование если применимо
|
||||
|
||||
11. **Метрики производительности**
|
||||
- Приоритизировать Core Web Vitals (LCP, FID, CLS)
|
||||
- Использовать Lighthouse и WebPageTest для аудита производительности
|
||||
- Реализовать performance budgets
|
||||
|
||||
## SEO рекомендации
|
||||
|
||||
### Оптимальное количество страниц
|
||||
- **50-100 страниц** — хороший объём для тематики "автоюрист"
|
||||
- Минимум 30-50 страниц с уникальным контентом
|
||||
|
||||
### Структура страниц
|
||||
- Услуги (12 шт) — уже есть
|
||||
- Кейсы — минимум 20-30 реальных примеров
|
||||
- Блог — минимум 30-50 статей
|
||||
- FAQ — 20-30 вопросов
|
||||
- Городские страницы ("юрист в Сургуте", "возврат прав Сургут" и пр.)
|
||||
|
||||
### Требования к контенту
|
||||
- Каждая страница с уникальным текстом (не шаблон)
|
||||
- Длинные статьи в блог (3000-5000 слов)
|
||||
- Реальные кейсы с описанием проблемы и решения
|
||||
|
||||
### Внутренние ссылки
|
||||
- Связывать страницы между собой (услуги → кейсы → блог)
|
||||
- Использовать sitemap для всех публичных страниц
|
||||
|
||||
|
||||
## Ccылки на документацию
|
||||
- URL документации Astro: https://docs.astro.build/en/getting-started/
|
||||
- URL документации PocketBase: https://pocketbase.io/docs/
|
||||
- URL документации SolidJS: https://docs.solidjs.com/solid-start/getting-started
|
||||
- URL документации astro-icons: https://www.astroicon.dev/getting-started/
|
||||
|
||||
|
||||
## Переменные окружения для Production (Coolify)
|
||||
|
||||
### PocketBase
|
||||
```
|
||||
PB_POCKETBASE_URL=https://avt-back.ru
|
||||
PB_ADMIN_EMAIL=redibedi2019@gmail.com
|
||||
PB_ADMIN_PASSWORD=Stalin4444
|
||||
```
|
||||
PB_POCKETBASE_URL=https://avt-back.ru
|
||||
PB_ADMIN_EMAIL=redibedi2019@gmail.com
|
||||
PB_ADMIN_PASSWORD=Stalin4444
|
||||
```
|
||||
|
||||
### SMTP (Resend)
|
||||
```
|
||||
SMTP_HOST=smtp.resend.com
|
||||
SMTP_PORT=465
|
||||
SMTP_AUTH_USER=resend
|
||||
SMTP_AUTH_PASS=re_bAXEq3JU_3ezUi6XvBci7Biz48eAavW4M
|
||||
FROM_EMAIL=onboarding@resend.onlinemail.me
|
||||
FROM_NAME=Автоюрист Сургут
|
||||
```
|
||||
|
||||
### Site
|
||||
```
|
||||
SITE_URL=https://avtourist-surgut.ru
|
||||
```
|
||||
|
||||
### Флаг production
|
||||
```
|
||||
PROD=true
|
||||
```
|
||||
|
||||
### Как добавить в Coolify
|
||||
|
||||
1. Откройте Coolify → ваш проект
|
||||
2. Перейдите App Settings → Environment Variables
|
||||
3. Добавьте каждую переменную
|
||||
4. Перезапустите контейнер
|
||||
|
||||
|
||||
### SKILLS FOR AI
|
||||
1. C:\Users\Serg\.config\opencode\skills - общие скилы для всех проектов
|
||||
2. project/.opencode/skills/avtourist - скилы для конкретного проекта
|
||||
3. answer-unit-optimization - скилы для AI SEO
|
||||
|
|
@ -1,82 +0,0 @@
|
|||
# ============================================
|
||||
# НАСТРОЙКА ПОЧТОВОГО СЕРВЕЯ ЯНДЕКС
|
||||
# ============================================
|
||||
|
||||
## Вариант 1: Яндекс Mail (бесплатный)
|
||||
|
||||
### Настройки SMTP Яндекса:
|
||||
- SMTP_HOST = smtp.yandex.ru
|
||||
- SMTP_PORT = 587
|
||||
- FROM_EMAIL = ваш_логин@yandex.ru
|
||||
- FROM_NAME = Автоюрист Сургут
|
||||
|
||||
### Как получить пароль приложения:
|
||||
|
||||
1. Перейдите https://id.yandex.ru/security/
|
||||
2. Войдите в аккаунт Яндекса
|
||||
3. Перейдите в "Безопасность" → "Пароли приложений"
|
||||
4. Нажмите "Создать пароль приложения"
|
||||
5. Введите название (например, "SMTP сайт")
|
||||
6. Выберите "Почта (SMTP)"
|
||||
7. Скопируйте полученный пароль (16 символов)
|
||||
|
||||
### Значения для .env:
|
||||
```
|
||||
SMTP_HOST=smtp.yandex.ru
|
||||
SMTP_PORT=587
|
||||
FROM_EMAIL=ваш_логин@yandex.ru
|
||||
FROM_NAME=Автоюрист Сургут
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Вариант 2: Яндекс 360 (для бизнеса)
|
||||
|
||||
Если используете Яндекс 360 для бизнеса (домен avtourist-surgut.ru):
|
||||
|
||||
### Настройки SMTP:
|
||||
- SMTP_HOST = smtp.yandex.ru
|
||||
- SMTP_PORT = 587
|
||||
- FROM_EMAIL = info@avtourist-surgut.ru
|
||||
- FROM_NAME = Автоюрист Сургут
|
||||
|
||||
### Как получить пароль:
|
||||
|
||||
1. Перейдите https://domain.yandex.ru/ (для вашего домена)
|
||||
2. В разделе "Почта" → "Настройки почтового сервера"
|
||||
3. Включите SMTP
|
||||
4. Создайте пароль для внешних приложений
|
||||
|
||||
### Значения для .env:
|
||||
```
|
||||
SMTP_HOST=smtp.yandex.ru
|
||||
SMTP_PORT=587
|
||||
FROM_EMAIL=info@avtourist-surgut.ru
|
||||
FROM_NAME=Автоюрист Сургут
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Проверка настроек
|
||||
|
||||
После настройки проверьте отправку писем:
|
||||
1. Создайте тестовый файл send-test.ts
|
||||
2. Запустите: npx tsx send-test.ts
|
||||
|
||||
Или через форму консультации на сайте.
|
||||
|
||||
---
|
||||
|
||||
## Ошибки и решения
|
||||
|
||||
### "535 Incorrect authentication data"
|
||||
- Неправильный пароль приложения
|
||||
- Проверьте, что пароль создан именно для "Почта (SMTP)"
|
||||
|
||||
### "530 5.7.0 Must issue a STARTTLS command first"
|
||||
- Неправильный порт
|
||||
- Используйте порт 587 (не 465)
|
||||
|
||||
### "Authentication required"
|
||||
- Не включена двухэтапная аутентификация в Яндексе
|
||||
- Включите её в https://id.yandex.ru/security/2fa/
|
||||
BIN
bun.lockb
BIN
bun.lockb
Binary file not shown.
|
|
@ -9,7 +9,8 @@
|
|||
"dev": "astro dev",
|
||||
"build": "astro build",
|
||||
"preview": "astro preview",
|
||||
"astro": "astro"
|
||||
"astro": "astro",
|
||||
"typecheck": "astro check"
|
||||
},
|
||||
"dependencies": {
|
||||
"@astrojs/mdx": "5.0.4",
|
||||
|
|
@ -20,14 +21,14 @@
|
|||
"astro": "6.2.1",
|
||||
"astro-icon": "^1.1.5",
|
||||
"marked": "^18.0.0",
|
||||
"nodemailer": "^6.9.14",
|
||||
|
||||
"pocketbase": "^0.21.0",
|
||||
"solid-js": "^1.9.12",
|
||||
"tailwindcss": "^4.2.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@astrojs/check": "0.9.9",
|
||||
"@types/nodemailer": "^6.4.16",
|
||||
|
||||
"terser": "^5.46.1",
|
||||
"typescript": "^6.0.2"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -16,11 +16,11 @@
|
|||
"frontend"
|
||||
],
|
||||
"dependencies": {
|
||||
"nodemailer": "^8.0.5",
|
||||
|
||||
"pocketbase": "^0.26.8"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/nodemailer": "^8.0.0",
|
||||
|
||||
"gray-matter": "^4.0.3",
|
||||
"maildev": "^2.2.1"
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue