Commit graph

6 commits

Author SHA1 Message Date
Vadym Samoilenko
d1268c47a8 feat(deploy): SQL delta migration + NEXT_PUBLIC_SITE_URL build arg
Some checks are pending
CI / Type Check (push) Waiting to run
CI / Lint (push) Waiting to run
CI / Unit Tests (push) Waiting to run
Deploy / Build & Push Image (push) Waiting to run
Deploy / Deploy to VPS (push) Blocked by required conditions
- migrations/0002_delta.sql: idempotent SQL extracted from 20260515_162527.ts
  (redirects table, locations detail fields, globals versioning, new pages)
  so the psql migrator container applies it on next deploy
- Dockerfile: ARG/ENV NEXT_PUBLIC_SITE_URL in builder stage so the URL is
  baked into the Next.js bundle (fixes postMessage origin warning in admin)
- docker-compose.prod.yml: pass build arg NEXT_PUBLIC_SITE_URL=https://shumi.ai-impress.com

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-15 18:56:56 +01:00
Vadym Samoilenko
c707a70065 feat(migrations): remove push:true, run migrations automatically on deploy
Some checks are pending
CI / Type Check (push) Waiting to run
CI / Lint (push) Waiting to run
CI / Unit Tests (push) Waiting to run
Deploy / Build & Push Image (push) Waiting to run
Deploy / Deploy to VPS (push) Blocked by required conditions
- Remove push:true from postgres adapter (unreliable for new columns)
- Remove profile:tools from migrate service so it runs on every deploy
- Add restart:no to migrate service (one-shot runner)
- App now depends on migrate with service_completed_successfully condition:
  postgres healthy → migrate applies pending → app starts

Workflow for future schema changes:
  1. Add field to collection/global TypeScript
  2. ssh server: docker-compose run --rm migrate migrate:create --name <field>
  3. git pull the generated .ts migration file
  4. commit + push → next deploy applies it automatically

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-13 19:11:50 +01:00
Vadym Samoilenko
03c7640874 feat(migrations): add Payload migrator infrastructure
Some checks are pending
CI / Type Check (push) Waiting to run
CI / Lint (push) Waiting to run
CI / Unit Tests (push) Waiting to run
Deploy / Build & Push Image (push) Waiting to run
Deploy / Deploy to VPS (push) Blocked by required conditions
Add Dockerfile.migrator (node:22-alpine + full source) and
docker-compose.prod.yml `migrate` service (profile: tools) so
migrations can be generated and applied on the server without
Node.js v26/tsx compatibility issues.

Workflow:
  # generate migration:
  docker compose --profile tools run --rm migrate migrate:create --name <desc>
  # apply pending migrations:
  docker compose --profile tools run --rm migrate

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-13 17:45:21 +01:00
Vadym Samoilenko
2fa4040114 fix: media uploads 500 error + add video review card to Reviews
Some checks are pending
CI / Type Check (push) Waiting to run
CI / Lint (push) Waiting to run
CI / Unit Tests (push) Waiting to run
Deploy / Build & Push Image (push) Waiting to run
Deploy / Deploy to VPS (push) Blocked by required conditions
- Dockerfile: create /app/media dir with nextjs ownership before USER switch
- docker-compose.prod.yml: mount named volume shumiland-media-uploads → /app/media
- Reviews: add VideoReviewCard component with 9:16 portrait inline player
- Add review-video.mp4 (93s, 720×1280, 15MB) + poster from IMG_8336.MOV

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-11 14:17:05 +01:00
Vadym Samoilenko
1cd20291d0 feat: wire all sections to Payload CMS + header dropdown + deploy config
- New collections: Locations, Reviews, BirthdayPackages
- New lib: getHomeData() — single cache-wrapped data fetch for homepage
- All sections now read from CMS with static fallbacks
- Header dropdown auto-populates 5 locations from Locations collection
- Seed API at /api/admin/seed creates all collections + uploads media
- docker-compose.prod.yml: replaced nginx/certbot with Traefik labels (shumi.ai-impress.com)
- Fixed image assignments: Locations 3-5 use gallery images (not news-bg)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-10 21:39:29 +01:00
Vadym Samoilenko
9b41fa447a feat: complete backend B1-B7 — Payload CMS, ezy payments, leads, deploy
Some checks are pending
CI / Type Check (push) Waiting to run
CI / Lint (push) Waiting to run
CI / Unit Tests (push) Waiting to run
Deploy / Build & Push Image (push) Waiting to run
Deploy / Deploy to VPS (push) Blocked by required conditions
- B1: Next.js 15 + Payload CMS 3.0 + Postgres 16, ESLint, Prettier, Husky, Vitest
- B2: 9 collections, 6 globals, 12 Page Builder blocks, access control, slugify/revalidate hooks
- B3: ezy.com.ua payments, Binotel HMAC webhook, leads API, Telegram bot, Resend email, rate limiting
- B4: Tariffs collection with ezy API sync (cron + manual), dynamic pricing source-of-truth
- B5: 13 test files covering unit libs and all API routes
- B6: Dockerfile multi-stage, docker-compose.prod.yml, nginx.conf SSL, GitHub Actions CI/CD, health endpoint
- B7: docs/admin-guide-ua.md (marketer guide), docs/deploy.md (VPS instructions), README quickstart

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-09 19:14:54 +01:00