vault backup: 2026-05-13 11:00:11

This commit is contained in:
Vadym Samoilenko 2026-05-13 11:00:11 +01:00
parent 09aa48e394
commit 66b987d706

View file

@ -0,0 +1,185 @@
---
name: "Shumiland"
client: Aimpress LTD
status: active
server: aimpress
tech: [Next.js 16, Payload CMS 3, PostgreSQL 16, Docker, Traefik]
local_path: /Users/ai_leed/Documents/Projects/Shumiland
repo: https://git.ai-impress.com/Aimpress/Shumiland.git
deploy: "ssh aimpress → /opt/03-business/shumiland → git pull + docker compose build + up"
url: https://shumi.ai-impress.com
tags: [shumiland, nextjs, payload-cms, docker, ukraine, children-park]
created: 2026-05-13
last_commit: 2026-05-13
port: 3000
---
# Shumiland — Сайт дитячого парку
Сайт для дитячого розважального парку «Шуміленд» (Умань, Україна).
Fullstack Next.js + Payload CMS з PostgreSQL. Деплой через Docker Compose + Traefik на сервері Aimpress.
> [!info] Production
> **URL:** https://shumi.ai-impress.com
> **Admin:** https://shumi.ai-impress.com/admin
> **Server:** `ssh aimpress``57.128.160.249:1220` (ubuntu)
> **App dir:** `/opt/03-business/shumiland/`
## Tech Stack
- **Frontend:** Next.js 16, React 19, TypeScript, Tailwind CSS v4
- **CMS:** Payload CMS 3 (адмін-панель, колекції, globals)
- **Database:** PostgreSQL 16 (Docker volume `shumiland-postgres-data`)
- **Media:** локальний volume `/app/media` (mapped `shumiland-media-uploads`)
- **Package manager:** pnpm 11
- **Process/deploy:** Docker Compose + Traefik (TLS через Cloudflare)
- **Fonts:** Montserrat (основний), Poppins (допоміжний)
## Architecture
```
Browser
└── Traefik (shumi.ai-impress.com) → shumiland-app:3000
├── / (Next.js frontend)
│ ├── / → Hero, Locations, Reviews, Video, WhyParents sections
│ ├── /lokatsii → список локацій
│ ├── /lokatsii/dyvolis → сторінка ДивоЛіс
│ ├── /kvytky → сторінка квитків
│ ├── /blog → блог
│ ├── /dni-narodzhennia → дні народження
│ └── /grupovi-vidviduvannia → групові відвідування
└── /admin (Payload CMS)
```
## Server
| | |
|---|---|
| **SSH alias** | `ssh aimpress` |
| **IP / Port** | `57.128.160.249:1220` |
| **User** | `ubuntu` |
| **App dir** | `/opt/03-business/shumiland/` |
| **Compose file** | `docker-compose.prod.yml` |
| **Env file** | `.env.production` (на сервері, не в git) |
| **Logs** | `docker logs shumiland-app --tail=50` |
| **DB volume** | `shumiland-postgres-data` |
| **Media volume** | `shumiland-media-uploads` |
## Deployment
```bash
# 1. Локально: push змін
git push origin main
# 2. На сервері
ssh aimpress
cd /opt/03-business/shumiland
# 3. Pull нового коду
git pull origin main
# 4. Rebuild + restart (zero-downtime через Traefik)
docker compose -f docker-compose.prod.yml build app
docker compose -f docker-compose.prod.yml up -d --force-recreate app
# 5. Перевірити
docker logs shumiland-app --tail=20
```
> [!warning] git branch
> Локально — гілка `main`. На сервері — перемкнуто на `main` (раніше було `master`).
> Завжди `git pull origin main`.
## Environment Variables (.env.production на сервері)
| Variable | Value |
|---|---|
| `DATABASE_URL` | `postgresql://shumiland:***@shumiland-postgres:5432/shumiland` |
| `PAYLOAD_SECRET` | (у файлі на сервері) |
| `NEXT_PUBLIC_SITE_URL` | `https://shumi.ai-impress.com` |
| `NODE_ENV` | `production` |
> [!tip] Credentials
> Детальні креди — в `[[Credentials]]` (не в iCloud).
## Key Files
| File/Dir | Purpose |
|---|---|
| `src/app/(frontend)/` | Усі frontend-сторінки |
| `src/components/sections/` | Секції (Hero, Gallery, WhyParents, VideoSection, DyvoLis…) |
| `src/components/ui/` | UI-компоненти (BtnPrimary, AccordionItem, Container…) |
| `src/components/layout/` | Header, Footer |
| `src/collections/` | Payload CMS колекції |
| `public/images/` | Статичні зображення |
| `docker-compose.prod.yml` | Продакшн Docker Compose |
| `.env.production` | Змінні середовища (лише на сервері) |
## Useful Commands
```bash
# SSH
ssh aimpress
# Переглянути статус контейнерів
docker ps --filter name=shumiland
# Логи
docker logs shumiland-app --tail=50 -f
# DB backup вручну
docker exec shumiland-postgres pg_dump -U shumiland shumiland | gzip > backup.sql.gz
# Зайти в контейнер
docker exec -it shumiland-app sh
# Payload migrations (з контейнера)
pnpm payload migrate
```
## Pages
| Page | URL |
|---|---|
| Головна | `/` |
| Локації (список) | `/lokatsii` |
| ДивоЛіс | `/lokatsii/dyvolis` |
| Квитки | `/kvytky` |
| Блог | `/blog` |
| Дні народження | `/dni-narodzhennia` |
| Групові відвідування | `/grupovi-vidviduvannia` |
| Admin CMS | `/admin` |
## Integration: ezy.com.ua (Білетна каса)
Деталі інтеграції — в `[[Шумиленд касса]]`.
- **Activity key:** `fda5a0acfe1dad42867ea88dbe13008a10c391f2`
- **Partner key:** у `~/.secrets/Credentials.md`
- **Endpoint тарифів:** `GET https://www.ezy.com.ua/ipay/default/get-partner-tariff?activity=...`
- **Endpoint оплати:** `POST https://www.ezy.com.ua/ipay/pay/partner-pay`
- **Редирект:** на url з відповіді (Monobank)
---
## Sessions
### 2026-05-13 — DyvoLis page + first deploy
**Asked:** Реалізувати сторінку ДивоЛіс по двом Figma-дизайнам, запушити в git і задеплоїти на aimpress.
**Done:**
- Завантажив дизайн через Figma MCP (ноди 3:77 та 4:205)
- Скачав Figma-ассети до `public/images/dyvolis/` (hero-cat.png, gallery-14.jpg, video-thumb.jpg)
- Створив секції: `DyvoLisHero`, `DyvoLisGallery`, `DyvoLisWhyVisit`, `DyvoLisTickets`
- Нова сторінка `/lokatsii/dyvolis`
- Нода 4:205 (BtnPrimary) — вже існувала в проекті, покрита
- Фікс `.gitignore`: `*.png/jpg/jpeg``/*.png/jpg/jpeg` (root-only)
- Push на `main`, git pull на aimpress, `docker compose build + up --force-recreate`
- Сервер: `ssh aimpress``/opt/03-business/shumiland/`
---
## Change Log
| Date | Changed |
|---|---|
| 2026-05-13 | DyvoLis location page: Hero, Gallery, WhyVisit, Tickets sections; fix .gitignore |