Added runner
Some checks failed
Build and Deploy Astro Landing / deploy (push) Failing after 1m14s

This commit is contained in:
Sergejs Kozinecs 2026-07-29 18:58:05 +03:00
parent 5614ad39ca
commit 7a3321334e
12 changed files with 803 additions and 746 deletions

4
.dockerignore Normal file
View file

@ -0,0 +1,4 @@
node_modules
.astro
dist
.git

View file

@ -0,0 +1,28 @@
name: Build and Deploy Astro Landing
on:
push:
branches:
- main
- master
jobs:
deploy:
runs-on: ubuntu-latest # Метка вашего Forgejo Runner
steps:
- name: Deploy to VPS via SSH
uses: appleboy/ssh-action@v1.0.3
with:
host: ${{ secrets.VPS_HOST }}
username: ${{ secrets.VPS_USER }}
key: ${{ secrets.VPS_SSH_KEY }}
port: 22
script: |
# 1. Переходим в директорию лендинга
cd /var/www/Landing
# 2. Подтягиваем свежие коммиты из Git
git pull origin main
# 3. Пересобираем Docker-образ и перезапускаем контейнер
docker compose up -d --build

View file

@ -8,149 +8,18 @@
</component>
<component name="ChangeListManager">
<list default="true" id="01345e21-67ff-441a-b47b-439ace178327" name="Changes" comment="WIP: Cleaning">
<change afterPath="$PROJECT_DIR$/src/pages/api/subscribe.ts" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.gitignore" beforeDir="false" afterPath="$PROJECT_DIR$/.gitignore" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.dockerignore" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.forgejo/workflows/deploy.yml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/Dockerfile" afterDir="false" />
<change afterPath="$PROJECT_DIR$/docker-compose.local.yaml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/docker-compose.yaml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/AstroLanding/.gitignore" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/AstroLanding/.vscode/extensions.json" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/AstroLanding/.vscode/launch.json" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/AstroLanding/AGENTS.md" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/AstroLanding/CLAUDE.md" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/AstroLanding/README.md" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/AstroLanding/astro.config.mjs" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/AstroLanding/package.json" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/AstroLanding/pnpm-lock.yaml" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/AstroLanding/pnpm-workspace.yaml" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/AstroLanding/src/assets/blog-placeholder-1.jpg" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/AstroLanding/src/assets/blog-placeholder-2.jpg" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/AstroLanding/src/assets/blog-placeholder-3.jpg" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/AstroLanding/src/assets/blog-placeholder-4.jpg" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/AstroLanding/src/assets/blog-placeholder-5.jpg" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/AstroLanding/src/assets/blog-placeholder-about.jpg" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/AstroLanding/src/assets/fonts/atkinson-bold.woff" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/AstroLanding/src/assets/fonts/atkinson-regular.woff" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/AstroLanding/src/assets/images/main/about-us/rocket.png" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/AstroLanding/src/assets/images/main/contact-form/Austronaut.svg" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/AstroLanding/src/assets/images/main/contact-form/Mask Group.svg" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/AstroLanding/src/assets/images/main/contact-form/Mask.svg" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/AstroLanding/src/assets/images/main/contact-form/Planet Blue.svg" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/AstroLanding/src/assets/images/main/contact-form/Planet Yellow.svg" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/AstroLanding/src/assets/images/main/contact-form/dog-in-space.svg" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/AstroLanding/src/assets/images/main/footer/email.png" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/AstroLanding/src/assets/images/main/footer/logo.svg" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/AstroLanding/src/assets/images/main/footer/phone.png" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/AstroLanding/src/assets/images/main/footer/phone.svg" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/AstroLanding/src/assets/images/main/footer/telegram.png" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/AstroLanding/src/assets/images/main/footer/top-line.png" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/AstroLanding/src/assets/images/main/footer/top-line.svg" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/AstroLanding/src/assets/images/main/footer/whatsapp.png" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/AstroLanding/src/assets/images/main/header/Menu.svg" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/AstroLanding/src/assets/images/main/header/logo.svg" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/AstroLanding/src/assets/images/main/header/menu-close.svg" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/AstroLanding/src/assets/images/main/intro/astronaut.png" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/AstroLanding/src/assets/images/main/intro/spaceship.svg" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/AstroLanding/src/assets/images/main/projects/Inflid.png" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/AstroLanding/src/assets/images/main/projects/browser-window.png" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/AstroLanding/src/assets/images/main/projects/custom-pc4u.png" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/AstroLanding/src/assets/images/main/projects/inflid_full_1.png" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/AstroLanding/src/assets/images/main/projects/inflid_part_1.png" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/AstroLanding/src/assets/images/main/projects/mockba-modular.png" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/AstroLanding/src/assets/images/main/projects/projects-ui.svg" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/AstroLanding/src/assets/images/main/projects/pryatki.png" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/AstroLanding/src/assets/images/main/projects/sizzapp.png" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/AstroLanding/src/assets/images/main/projects/trackpro.png" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/AstroLanding/src/assets/images/main/services/circle.png" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/AstroLanding/src/assets/images/main/services/mobile_app.svg" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/AstroLanding/src/assets/images/main/services/ui_animations.svg" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/AstroLanding/src/assets/images/main/services/web_development.svg" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/AstroLanding/src/components/BaseHead.astro" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/AstroLanding/src/components/ContactForm/ContactForm.astro" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/AstroLanding/src/components/ContactForm/contact-form.style.css" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/AstroLanding/src/components/Contacts/Contacts.astro" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/AstroLanding/src/components/Contacts/contacts.style.css" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/AstroLanding/src/components/Footer/Footer.astro" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/AstroLanding/src/components/Footer/footer.style.css" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/AstroLanding/src/components/FormInput/FormInput.astro" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/AstroLanding/src/components/FormInput/form-input.style.css" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/AstroLanding/src/components/FormattedDate.astro" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/AstroLanding/src/components/Header/Header.astro" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/AstroLanding/src/components/Header/header.style.css" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/AstroLanding/src/components/HeaderLink.astro" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/AstroLanding/src/components/HomePage.astro" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/AstroLanding/src/consts.ts" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/AstroLanding/src/content.config.ts" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/AstroLanding/src/content/blog/first-post.md" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/AstroLanding/src/content/blog/markdown-style-guide.md" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/AstroLanding/src/content/blog/second-post.md" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/AstroLanding/src/content/blog/third-post.md" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/AstroLanding/src/content/blog/using-mdx.mdx" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/AstroLanding/src/i18n/ui.ts" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/AstroLanding/src/i18n/utils.ts" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/AstroLanding/src/layouts/BlogPost.astro" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/AstroLanding/src/pages/about.astro" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/AstroLanding/src/pages/blog/[...slug].astro" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/AstroLanding/src/pages/blog/index.astro" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/AstroLanding/src/pages/en/index.astro" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/AstroLanding/src/pages/index.astro" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/AstroLanding/src/pages/lv/index.astro" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/AstroLanding/src/pages/rss.xml.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/AstroLanding/src/styles/global.css" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/AstroLanding/src/styles/index.css" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/AstroLanding/src/styles/reset.css" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/AstroLanding/src/translations/en.json" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/AstroLanding/src/translations/lv.json" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/AstroLanding/tsconfig.json" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/README.md" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/gatsby-config.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/package.json" beforeDir="false" afterPath="$PROJECT_DIR$/package.json" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/assets/stylesheets/abstracts/_functions.scss" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/src/assets/stylesheets/abstracts/_mixins.scss" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/src/assets/stylesheets/abstracts/_variables.scss" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/src/assets/stylesheets/base/_colors.scss" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/src/assets/stylesheets/base/_reset.scss" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/src/assets/stylesheets/base/_typography.scss" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/src/assets/stylesheets/layout/_grid.scss" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/src/assets/stylesheets/style.scss" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/src/components/about/about.component.jsx" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/src/components/about/about.style.scss" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/src/components/contact-form/contact-form.component.jsx" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/src/components/contact-form/contact-form.style.scss" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/src/components/contacts/contacts.component.jsx" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/src/components/contacts/contacts.style.scss" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/src/components/custom-button/custom-button.component.jsx" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/src/components/custom-button/custom-button.style.scss" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/src/components/footer/footer.component.jsx" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/src/components/footer/footer.style.scss" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/src/components/form-input/form-input.component.jsx" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/src/components/form-input/form-input.style.scss" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/src/components/header/header.component.jsx" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/src/components/header/header.style.scss" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/src/components/intro/intro.component.jsx" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/src/components/intro/intro.styles.scss" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/src/components/language-switch/language-switch.component.jsx" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/src/components/language-switch/language-switch.style.scss" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/src/components/projects/projects.component.jsx" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/src/components/projects/projects.style.scss" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/src/components/section/section.component.jsx" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/src/components/section/section.style.scss" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/src/components/seo.jsx" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/src/components/services-card/card.component.jsx" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/src/components/services-card/card.style.scss" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/src/components/services/services.component.jsx" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/src/components/services/services.style.scss" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/src/components/swiper/mid-swiper.component.jsx" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/src/components/swiper/swiper-test.style.scss" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/src/components/swiper/swiper.style.scss" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/src/hooks/use-site-metadata.jsx" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/src/i18n.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/src/images/icon.png" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/main.component.jsx" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/main.style.scss" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/src/pages/404.js" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/src/pages/index.jsx" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/src/translations/en.json" beforeDir="false" afterPath="$PROJECT_DIR$/src/translations/en.json" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/translations/lv.json" beforeDir="false" afterPath="$PROJECT_DIR$/src/translations/lv.json" afterDir="false" />
<change beforePath="$PROJECT_DIR$/yarn.lock" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/astro.config.mjs" beforeDir="false" afterPath="$PROJECT_DIR$/astro.config.mjs" afterDir="false" />
<change beforePath="$PROJECT_DIR$/pnpm-lock.yaml" beforeDir="false" afterPath="$PROJECT_DIR$/pnpm-lock.yaml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/pnpm-workspace.yaml" beforeDir="false" afterPath="$PROJECT_DIR$/pnpm-workspace.yaml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/components/ContactForm/ContactForm.astro" beforeDir="false" afterPath="$PROJECT_DIR$/src/components/ContactForm/ContactForm.astro" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/pages/api/subscribe.ts" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/src/styles/index.css" beforeDir="false" afterPath="$PROJECT_DIR$/src/styles/index.css" afterDir="false" />
</list>
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
@ -167,8 +36,9 @@
<list>
<option value="Astro Component" />
<option value="CSS File" />
<option value="Docker Compose" />
<option value="TypeScript File" />
<option value="Dockerfile" />
<option value="Docker Compose" />
</list>
</option>
</component>
@ -281,7 +151,7 @@
<workItem from="1784537953715" duration="6202000" />
<workItem from="1784899208755" duration="13951000" />
<workItem from="1785220782898" duration="240000" />
<workItem from="1785317634340" duration="6157000" />
<workItem from="1785317634340" duration="17052000" />
</task>
<task id="LOCAL-00001" summary="Add captcha verification to contact form and improve error handling">
<option name="closed" value="true" />
@ -299,7 +169,23 @@
<option name="project" value="LOCAL" />
<updated>1785320748598</updated>
</task>
<option name="localTasksCounter" value="3" />
<task id="LOCAL-00003" summary="WIP: Cleaning">
<option name="closed" value="true" />
<created>1785324636646</created>
<option name="number" value="00003" />
<option name="presentableId" value="LOCAL-00003" />
<option name="project" value="LOCAL" />
<updated>1785324636646</updated>
</task>
<task id="LOCAL-00004" summary="WIP: Cleaning">
<option name="closed" value="true" />
<created>1785324665763</created>
<option name="number" value="00004" />
<option name="presentableId" value="LOCAL-00004" />
<option name="project" value="LOCAL" />
<updated>1785324665763</updated>
</task>
<option name="localTasksCounter" value="5" />
<servers />
</component>
<component name="TypeScriptGeneratedFilesManager">

26
Dockerfile Normal file
View file

@ -0,0 +1,26 @@
FROM node:24-alpine AS build
ENV PNPM_HOME="/pnpm"
ENV PATH="$PNPM_HOME:$PATH"
ENV CI=true
RUN corepack enable
WORKDIR /app
COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./
RUN pnpm install --frozen-lockfile
COPY . .
RUN pnpm run build
FROM node:24-alpine AS runtime
WORKDIR /app
ENV NODE_ENV=production
ENV HOST=0.0.0.0
ENV PORT=4321
RUN addgroup -S nodejs && adduser -S astro -G nodejs
COPY --from=build /app/dist ./dist
USER astro
EXPOSE 4321
CMD ["node", "dist/server/entry.mjs"]

View file

@ -10,7 +10,6 @@ import node from "@astrojs/node";
export default defineConfig({
site: "https://midcreative.eu",
integrations: [mdx(), sitemap()],
output: "static",
fonts: [
{

30
docker-compose.local.yaml Normal file
View file

@ -0,0 +1,30 @@
services:
midcreative:
image: midcreative:latest
build:
context: .
dockerfile: Dockerfile
container_name: midcreative
restart: unless-stopped
environment:
NODE_ENV: production
HOST: 0.0.0.0
PORT: 4321
# Добавьте эту секцию для локальной проверки:
ports:
- "4321:4321"
expose:
- "4321"
networks:
- traefik_proxy
labels:
- "traefik.enable=true"
- "traefik.http.routers.midcreative.rule=Host(`midcreative.eu`) || Host(`www.midcreative.eu`)"
- "traefik.http.routers.midcreative.entrypoints=websecure"
- "traefik.http.routers.midcreative.tls=true"
- "traefik.http.routers.midcreative.tls.certresolver=letsencrypt"
- "traefik.http.services.midcreative.loadbalancer.server.port=4321"
networks:
traefik_proxy:
external: true

28
docker-compose.yaml Normal file
View file

@ -0,0 +1,28 @@
services:
midcreative:
# Оставляем image, чтобы CI/CD мог за push/pull обновлять образ
image: midcreative:latest
build:
context: .
dockerfile: Dockerfile
container_name: midcreative
restart: unless-stopped
environment:
NODE_ENV: production
HOST: 0.0.0.0
PORT: 4321
expose:
- "4321"
networks:
- traefik_proxy
labels:
- "traefik.enable=true"
- "traefik.http.routers.midcreative.rule=Host(`midcreative.eu`) || Host(`www.midcreative.eu`)"
- "traefik.http.routers.midcreative.entrypoints=websecure"
- "traefik.http.routers.midcreative.tls=true"
- "traefik.http.routers.midcreative.tls.certresolver=letsencrypt"
- "traefik.http.services.midcreative.loadbalancer.server.port=4321"
networks:
traefik_proxy:
external: true

View file

@ -10,10 +10,10 @@ importers:
dependencies:
'@astrojs/mdx':
specifier: ^7.0.3
version: 7.0.3(@astrojs/markdown-satteri@0.3.4)(astro@7.1.3(@astrojs/markdown-remark@7.2.1)(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.2)(@types/node@24.13.3))
version: 7.0.4(@astrojs/markdown-satteri@0.3.4)(astro@7.1.4(@astrojs/markdown-remark@7.2.1)(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@24.13.3))
'@astrojs/node':
specifier: ^11.0.3
version: 11.0.3(astro@7.1.3(@astrojs/markdown-remark@7.2.1)(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.2)(@types/node@24.13.3))
version: 11.0.3(astro@7.1.4(@astrojs/markdown-remark@7.2.1)(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@24.13.3))
'@astrojs/rss':
specifier: ^4.0.19
version: 4.0.19
@ -22,10 +22,10 @@ importers:
version: 3.7.3
astro:
specifier: ^7.1.3
version: 7.1.3(@astrojs/markdown-remark@7.2.1)(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.2)(@types/node@24.13.3)
version: 7.1.4(@astrojs/markdown-remark@7.2.1)(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@24.13.3)
motion:
specifier: ^12.42.2
version: 12.42.2(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
version: 12.43.0(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
react:
specifier: ^19.2.8
version: 19.2.8
@ -125,8 +125,8 @@ packages:
'@astrojs/markdown-satteri@0.3.4':
resolution: {integrity: sha512-6Lvt/bQZEBW+zzdhPblvfZEy5PGEYJaUsUqaCgwHeRPxZJL1gc9I+DRLKWJjjYTWDzVUTzXlMq4WwSK+X34CVw==}
'@astrojs/mdx@7.0.3':
resolution: {integrity: sha512-RxyIwU0uFam5ftwqKOjpIdhnFxZ/kEikeimLyQy3eGXbHT8WgRGzzesOIHVU8+m9TY8ag5WVOyvV24/GyqPdPQ==}
'@astrojs/mdx@7.0.4':
resolution: {integrity: sha512-fH4ouVZCgmLOH5z+GYnJMDOSUohn9U2W3p79Ck7PDK3EdGpe/crZAtT6Sp1ziEurj5NSQh7TxP8MSR4NOcC6fQ==}
engines: {node: '>=22.12.0'}
peerDependencies:
'@astrojs/markdown-satteri': ^0.3.1
@ -235,15 +235,24 @@ packages:
'@emnapi/core@1.11.1':
resolution: {integrity: sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ==}
'@emnapi/core@2.0.0-alpha.3':
resolution: {integrity: sha512-AZypUeJ/yByuxyS7BlSNRDOMLMlROYtjYdIAuBmJssVz1UJDSeYxLrdizhXCFYhedC5bqd/ASy8EuNXbVVXp9g==}
'@emnapi/runtime@1.11.1':
resolution: {integrity: sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw==}
'@emnapi/runtime@1.11.2':
resolution: {integrity: sha512-kyOl3X0DuTiT1h2ft8r2fYO8JYtU9a9Xis/zBSiGArNaagCOWx90N1k2wxp18czFDH+OgcWGb5ZP/XMt3dcyPA==}
'@emnapi/runtime@1.11.3':
resolution: {integrity: sha512-Xz4Tpyki7XyrpbUK1jR1AhdAdaXyhhY4lZ3neLodmhpuWfy2PAQN5B46sAiU4liOXGLkHypn/qU+jvfWSCYYLA==}
'@emnapi/runtime@2.0.0-alpha.3':
resolution: {integrity: sha512-hFPAhMUjJD9BSyCANEISPOogeXC9Zo9ZQl7L6vKnaVsMkCtzznaW/naYypeyl0Gv5rYfWYsZbpixTMpjDJzQeA==}
'@emnapi/wasi-threads@1.2.2':
resolution: {integrity: sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==}
'@emnapi/wasi-threads@2.0.1':
resolution: {integrity: sha512-9DsSk+o5NBX0CCJT8s0EROGSGxjR/tKu6aBTaVyq+SjAEQH4XcdcRxPBRzsBLizTTJ49MJjF+jgu3qnO9GLQcQ==}
'@esbuild/aix-ppc64@0.28.1':
resolution: {integrity: sha512-Svl7tq8k/08+p6CXPpRjQ1fKX+1odH/BQbb48fV6fj3CWHhsoIOoY87w1oHXm0qEpkIK3ZfVgp0hed3XBXzXMQ==}
engines: {node: '>=18'}
@ -568,11 +577,12 @@ packages:
'@mdx-js/mdx@3.1.1':
resolution: {integrity: sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ==}
'@napi-rs/wasm-runtime@1.1.6':
resolution: {integrity: sha512-ZLv/JdUfkvOy9eCnnBaGfiO+XimbjebAeO+MRQqD/B+FR1tnRN0tpKSJHRbE8sFfS6aqsXZ67TQjfwfsxULVbg==}
'@napi-rs/wasm-runtime@1.2.0':
resolution: {integrity: sha512-kDoONqMa+VnZ4vvvu/ZUurpJ4gkZU57e7g69qpNgWhYcZFPUHZM2CEMKm+cG6ufDVALbjMvfmMjFVqaK7uEMnA==}
engines: {node: ^20.19.0 || ^22.13.0 || >=23.5.0}
peerDependencies:
'@emnapi/core': ^1.7.1
'@emnapi/runtime': ^1.7.1
'@emnapi/core': ^2.0.0-alpha.3
'@emnapi/runtime': ^2.0.0-alpha.3
'@nodable/entities@3.0.0':
resolution: {integrity: sha512-8L9xFeTYKhm49xfIypoe2W5wV1m/3Z58kT+7kR9A8OyFxcPduI4VmxaUMQyKYrRjUoLLSXv6EKKID5Tvj9cUVw==}
@ -768,8 +778,8 @@ packages:
peerDependencies:
acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
acorn@8.17.0:
resolution: {integrity: sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg==}
acorn@8.18.0:
resolution: {integrity: sha512-lGq+9yr1/GuAWaVYIHRjvvySG5/4VfKIvC8EWxStPdcDh/Ka7FG3twP6v4d5BkravUilhIAsG4Qj83t02LWUPQ==}
engines: {node: '>=0.4.0'}
hasBin: true
@ -801,8 +811,8 @@ packages:
resolution: {integrity: sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==}
hasBin: true
astro@7.1.3:
resolution: {integrity: sha512-4dhPyAAXthf3xLEYnG8SeL7yr/nTPPABfY7e9YF0yuO+vK9Xp+8Q5j4xzsmL3GueukQv4oNwGNTBepLOiDGeJA==}
astro@7.1.4:
resolution: {integrity: sha512-e0gkBReJECAZuuTgpEB5JMUc6J4mM6boD6wuVE1pBf/fMywG47f8qm9XQoA6kZB1RWHiHmUlLuQ2jd9Q5+72HQ==}
engines: {node: '>=22.12.0', npm: '>=9.6.5', pnpm: '>=7.1.0'}
hasBin: true
peerDependencies:
@ -1054,8 +1064,8 @@ packages:
resolution: {integrity: sha512-Wp1zXWPVUPBmfoa3Cqc9ctaKuzKAV6uLstRqlR56kSjplf5uAce+qeyYym7F+PHbGTk+tCEdkCW6RD7DX/gBZw==}
engines: {node: '>=20'}
framer-motion@12.42.2:
resolution: {integrity: sha512-5XY9luDiu0oHfHBjpDthFMh0ES+122w6p/papSJBweMkO8Sn+PW2QaEgRblQBpWFnuvZS5qvarpt/hO2pjGmnw==}
framer-motion@12.43.0:
resolution: {integrity: sha512-1eaL3RvR/kAlbG7UYcpMptEyzPoENO0c6w7ZnB3/hh2vSAz/6uGAFn6fdoqTBguNstf3MsFhJHsD/0DHiclG+g==}
peerDependencies:
'@emotion/is-prop-valid': '*'
react: ^18.0.0 || ^19.0.0
@ -1257,8 +1267,8 @@ packages:
resolution: {integrity: sha512-4pfM1Ff0x50o0tQwb5ucw/RzNyD0/YJME6IVcStalZuMWxdt3sR3huStTtxz4PUmvZfRguvDejasvQ2kifR11g==}
engines: {node: 20 || >=22}
magic-string@0.30.21:
resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==}
magic-string@1.1.0:
resolution: {integrity: sha512-kS3VHe0nEPST2saQV4Rbkchcd3UBRkVTQHo1D3h/ZTwFDhai/mfKkmtPAtD129EOI7K3HlHIsFOt0WrI2/oU9g==}
magicast@0.5.3:
resolution: {integrity: sha512-pVKE4UdSQ7DvHzivsCIFx2BJn1mHG6KsyrFcaxFx6tONdneEuThrDx0Cj3AMg58KyN4pzYT+LHOotxDQDjNvkw==}
@ -1440,14 +1450,14 @@ packages:
resolution: {integrity: sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==}
engines: {node: '>=18'}
motion-dom@12.42.2:
resolution: {integrity: sha512-5gIMWLp/PycBtJRJWRgjxke5n8dlvkSn2DrYW+tr3XcqAZY1xZh6BJyooJXCM8wdfM7wfMjkBJNLge1CKPUIRA==}
motion-dom@12.43.0:
resolution: {integrity: sha512-azKON4d9S65PEoFUiQTMTgPheEmzf2QngdRc50AKfJp9Q9mmcBVw22c8eMq9k8kxOFHdL7+WZY7N/5F/lwiDag==}
motion-utils@12.39.0:
resolution: {integrity: sha512-8nadJAJjTtqRkmRF36FoJTrywK9nnFmnPwnSMyxaOCU7GDjN9RTMJIxx9De8ErM+vpPhMccr/6fo5WciyQLnMQ==}
motion@12.42.2:
resolution: {integrity: sha512-Atvv11yUKIid41cVrRBDVX5m8tF8kNpExRSlbpt6APClhDjtwQssgFHhQzejxw7/7YYbjHSPKBVbHo05BuJT5Q==}
motion@12.43.0:
resolution: {integrity: sha512-BQgQbSa9Hn3/mtbib0MK53y6JSANa+YKUKlaYnWzAVDH424RYQ5LVpV3pNiWH00BA2z4ojsSdMzqT7g2FQwjuQ==}
peerDependencies:
'@emotion/is-prop-valid': '*'
react: ^18.0.0 || ^19.0.0
@ -1482,8 +1492,8 @@ packages:
node-fetch-native@1.6.7:
resolution: {integrity: sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==}
node-mock-http@1.0.4:
resolution: {integrity: sha512-8DY+kFsDkNXy1sJglUfuODx1/opAGJGyrTuFqEoN90oRc2Vk0ZbD4K2qmKXBBEhZQzdKHIVfEJpDU8Ak2NJEvQ==}
node-mock-http@1.0.5:
resolution: {integrity: sha512-KQyt/wLjG3TAc7DOUhpqWzgd4ERxR80JOlTK5VE5R1S12IaPVN5qkj4klBce9HPG1Njuup4Sb5bljaT34lIyjw==}
normalize-path@3.0.0:
resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
@ -1554,8 +1564,8 @@ packages:
resolution: {integrity: sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==}
engines: {node: '>=12'}
postcss@8.5.22:
resolution: {integrity: sha512-KBDEIpLrvpv16pp3K0Fw+UCoZfopFjjgeB+0tA/aaThfEE74kKDLrgg603YvOWJyg3+WYtyq3xYsQWsIyZlPqQ==}
postcss@8.5.24:
resolution: {integrity: sha512-8RyVklq0owXUTa4xlpzu4l9AaVKIdQvAcOHZWaMh98HgySsUtxRVf/chRe3dsSLqb6i40BzGRzEUddRaI+9TSw==}
engines: {node: ^10 || ^12 || >=14}
prettier-plugin-astro@0.14.1:
@ -1678,8 +1688,8 @@ packages:
satteri@0.9.5:
resolution: {integrity: sha512-ZuWVl+vnM64y+/TtX8Kosv2c00W+hLQiiwnEL6H0UKVVrxFqMw4D2CJHHQaouVd89OAhtBBfjWLqhKi3TVUV4w==}
sax@1.6.0:
resolution: {integrity: sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA==}
sax@1.6.1:
resolution: {integrity: sha512-42tBVwLWnaQvW5zc4HbZrTuWccECCZfBi92FDuwtqxasH+JbPB3/FOKb1m222K42R4WxuxzzMsTswfzgtSu64Q==}
engines: {node: '>=11.0.0'}
scheduler@0.27.0:
@ -1721,8 +1731,8 @@ packages:
engines: {node: '>=20.19.5', npm: '>=10.8.2'}
hasBin: true
smol-toml@1.7.0:
resolution: {integrity: sha512-aqVvWoyO21L23mb+drl4RmMXbf6N7FdHjAhTRA9ZBL7apWBgfWC16KjrASI+1p9GAroljyMHj6fK67i0UiTNvQ==}
smol-toml@1.7.1:
resolution: {integrity: sha512-PPlsspAZ4jbMBu5DMFhfUGDQLu/vrL4SyBROVS37x8ynnVmFIs1VPBz1Co8Xks3TvpIaZXmU85y4DrQ+UyVFoQ==}
engines: {node: '>= 18'}
source-map-js@1.2.1:
@ -2005,9 +2015,9 @@ snapshots:
'@astrojs/compiler-binding-linux-x64-musl@0.3.1':
optional: true
'@astrojs/compiler-binding-wasm32-wasi@0.3.1(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.2)':
'@astrojs/compiler-binding-wasm32-wasi@0.3.1(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)':
dependencies:
'@napi-rs/wasm-runtime': 1.1.6(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.2)
'@napi-rs/wasm-runtime': 1.2.0(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)
transitivePeerDependencies:
- '@emnapi/core'
- '@emnapi/runtime'
@ -2019,7 +2029,7 @@ snapshots:
'@astrojs/compiler-binding-win32-x64-msvc@0.3.1':
optional: true
'@astrojs/compiler-binding@0.3.1(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.2)':
'@astrojs/compiler-binding@0.3.1(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)':
optionalDependencies:
'@astrojs/compiler-binding-darwin-arm64': 0.3.1
'@astrojs/compiler-binding-darwin-x64': 0.3.1
@ -2027,16 +2037,16 @@ snapshots:
'@astrojs/compiler-binding-linux-arm64-musl': 0.3.1
'@astrojs/compiler-binding-linux-x64-gnu': 0.3.1
'@astrojs/compiler-binding-linux-x64-musl': 0.3.1
'@astrojs/compiler-binding-wasm32-wasi': 0.3.1(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.2)
'@astrojs/compiler-binding-wasm32-wasi': 0.3.1(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)
'@astrojs/compiler-binding-win32-arm64-msvc': 0.3.1
'@astrojs/compiler-binding-win32-x64-msvc': 0.3.1
transitivePeerDependencies:
- '@emnapi/core'
- '@emnapi/runtime'
'@astrojs/compiler-rs@0.3.1(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.2)':
'@astrojs/compiler-rs@0.3.1(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)':
dependencies:
'@astrojs/compiler-binding': 0.3.1(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.2)
'@astrojs/compiler-binding': 0.3.1(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)
transitivePeerDependencies:
- '@emnapi/core'
- '@emnapi/runtime'
@ -2051,7 +2061,7 @@ snapshots:
picomatch: 4.0.5
retext-smartypants: 6.2.0
shiki: 4.3.1
smol-toml: 1.7.0
smol-toml: 1.7.1
unified: 11.0.5
'@astrojs/internal-helpers@0.10.2':
@ -2062,7 +2072,7 @@ snapshots:
picomatch: 4.0.5
retext-smartypants: 6.2.0
shiki: 4.3.1
smol-toml: 1.7.0
smol-toml: 1.7.1
unified: 11.0.5
'@astrojs/markdown-remark@7.2.1':
@ -2095,13 +2105,13 @@ snapshots:
hast-util-from-html: 2.0.3
satteri: 0.9.5
'@astrojs/mdx@7.0.3(@astrojs/markdown-satteri@0.3.4)(astro@7.1.3(@astrojs/markdown-remark@7.2.1)(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.2)(@types/node@24.13.3))':
'@astrojs/mdx@7.0.4(@astrojs/markdown-satteri@0.3.4)(astro@7.1.4(@astrojs/markdown-remark@7.2.1)(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@24.13.3))':
dependencies:
'@astrojs/internal-helpers': 0.10.1
'@astrojs/markdown-remark': 7.2.1
'@mdx-js/mdx': 3.1.1
acorn: 8.17.0
astro: 7.1.3(@astrojs/markdown-remark@7.2.1)(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.2)(@types/node@24.13.3)
acorn: 8.18.0
astro: 7.1.4(@astrojs/markdown-remark@7.2.1)(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@24.13.3)
es-module-lexer: 2.3.1
estree-util-visit: 2.0.0
hast-util-to-html: 9.0.5
@ -2117,10 +2127,10 @@ snapshots:
transitivePeerDependencies:
- supports-color
'@astrojs/node@11.0.3(astro@7.1.3(@astrojs/markdown-remark@7.2.1)(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.2)(@types/node@24.13.3))':
'@astrojs/node@11.0.3(astro@7.1.4(@astrojs/markdown-remark@7.2.1)(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@24.13.3))':
dependencies:
'@astrojs/internal-helpers': 0.10.2
astro: 7.1.3(@astrojs/markdown-remark@7.2.1)(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.2)(@types/node@24.13.3)
astro: 7.1.4(@astrojs/markdown-remark@7.2.1)(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@24.13.3)
send: 1.2.1
server-destroy: 1.0.1
transitivePeerDependencies:
@ -2184,7 +2194,7 @@ snapshots:
dependencies:
'@emnapi/core': 1.11.1
'@emnapi/runtime': 1.11.1
'@napi-rs/wasm-runtime': 1.1.6(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)
'@napi-rs/wasm-runtime': 1.2.0(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)
optional: true
'@bruits/satteri-win32-arm64-msvc@0.9.5':
@ -2215,12 +2225,23 @@ snapshots:
tslib: 2.8.1
optional: true
'@emnapi/core@2.0.0-alpha.3':
dependencies:
'@emnapi/wasi-threads': 2.0.1
tslib: 2.8.1
optional: true
'@emnapi/runtime@1.11.1':
dependencies:
tslib: 2.8.1
optional: true
'@emnapi/runtime@1.11.2':
'@emnapi/runtime@1.11.3':
dependencies:
tslib: 2.8.1
optional: true
'@emnapi/runtime@2.0.0-alpha.3':
dependencies:
tslib: 2.8.1
optional: true
@ -2230,6 +2251,11 @@ snapshots:
tslib: 2.8.1
optional: true
'@emnapi/wasi-threads@2.0.1':
dependencies:
tslib: 2.8.1
optional: true
'@esbuild/aix-ppc64@0.28.1':
optional: true
@ -2397,7 +2423,7 @@ snapshots:
'@img/sharp-wasm32@0.35.3':
dependencies:
'@emnapi/runtime': 1.11.2
'@emnapi/runtime': 1.11.3
optional: true
'@img/sharp-webcontainers-wasm32@0.35.3':
@ -2422,7 +2448,7 @@ snapshots:
'@types/estree-jsx': 1.0.5
'@types/hast': 3.0.5
'@types/mdx': 2.0.14
acorn: 8.17.0
acorn: 8.18.0
collapse-white-space: 2.1.0
devlop: 1.1.0
estree-util-is-identifier-name: 3.0.0
@ -2431,7 +2457,7 @@ snapshots:
hast-util-to-jsx-runtime: 2.3.6
markdown-extensions: 2.0.0
recma-build-jsx: 1.0.0
recma-jsx: 1.0.1(acorn@8.17.0)
recma-jsx: 1.0.1(acorn@8.18.0)
recma-stringify: 1.0.0
rehype-recma: 1.0.0
remark-mdx: 3.1.1
@ -2446,17 +2472,17 @@ snapshots:
transitivePeerDependencies:
- supports-color
'@napi-rs/wasm-runtime@1.1.6(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)':
'@napi-rs/wasm-runtime@1.2.0(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)':
dependencies:
'@emnapi/core': 1.11.1
'@emnapi/runtime': 1.11.1
'@tybys/wasm-util': 0.10.3
optional: true
'@napi-rs/wasm-runtime@1.1.6(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.2)':
'@napi-rs/wasm-runtime@1.2.0(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)':
dependencies:
'@emnapi/core': 1.11.1
'@emnapi/runtime': 1.11.2
'@emnapi/core': 2.0.0-alpha.3
'@emnapi/runtime': 2.0.0-alpha.3
'@tybys/wasm-util': 0.10.3
optional: true
@ -2506,7 +2532,7 @@ snapshots:
dependencies:
'@emnapi/core': 1.11.1
'@emnapi/runtime': 1.11.1
'@napi-rs/wasm-runtime': 1.1.6(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)
'@napi-rs/wasm-runtime': 1.2.0(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)
optional: true
'@rolldown/binding-win32-arm64-msvc@1.1.5':
@ -2608,11 +2634,11 @@ snapshots:
'@ungap/structured-clone@1.3.3': {}
acorn-jsx@5.3.2(acorn@8.17.0):
acorn-jsx@5.3.2(acorn@8.18.0):
dependencies:
acorn: 8.17.0
acorn: 8.18.0
acorn@8.17.0: {}
acorn@8.18.0: {}
am-i-vibing@0.4.0:
dependencies:
@ -2635,9 +2661,9 @@ snapshots:
astring@1.9.0: {}
astro@7.1.3(@astrojs/markdown-remark@7.2.1)(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.2)(@types/node@24.13.3):
astro@7.1.4(@astrojs/markdown-remark@7.2.1)(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)(@types/node@24.13.3):
dependencies:
'@astrojs/compiler-rs': 0.3.1(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.2)
'@astrojs/compiler-rs': 0.3.1(@emnapi/core@2.0.0-alpha.3)(@emnapi/runtime@2.0.0-alpha.3)
'@astrojs/internal-helpers': 0.10.1
'@astrojs/markdown-satteri': 0.3.4
'@astrojs/telemetry': 3.3.3
@ -2665,7 +2691,7 @@ snapshots:
http-cache-semantics: 4.2.0
js-yaml: 4.3.0
jsonc-parser: 3.3.1
magic-string: 0.30.21
magic-string: 1.1.0
magicast: 0.5.3
mrmime: 2.0.1
neotraverse: 1.0.1
@ -2677,7 +2703,7 @@ snapshots:
picomatch: 4.0.5
semver: 7.8.5
shiki: 4.3.1
smol-toml: 1.7.0
smol-toml: 1.7.1
svgo: 4.0.2
tinyclip: 0.1.15
tinyexec: 1.2.4
@ -2858,7 +2884,7 @@ snapshots:
esast-util-from-js@2.0.1:
dependencies:
'@types/estree-jsx': 1.0.5
acorn: 8.17.0
acorn: 8.18.0
esast-util-from-estree: 2.0.0
vfile-message: 4.0.3
@ -2974,9 +3000,9 @@ snapshots:
dependencies:
tiny-inflate: 1.0.3
framer-motion@12.42.2(react-dom@19.2.8(react@19.2.8))(react@19.2.8):
framer-motion@12.43.0(react-dom@19.2.8(react@19.2.8))(react@19.2.8):
dependencies:
motion-dom: 12.42.2
motion-dom: 12.43.0
motion-utils: 12.39.0
tslib: 2.8.1
optionalDependencies:
@ -3001,7 +3027,7 @@ snapshots:
defu: 6.1.7
destr: 2.0.5
iron-webcrypto: 1.2.1
node-mock-http: 1.0.4
node-mock-http: 1.0.5
radix3: 1.1.2
ufo: 1.6.4
uncrypto: 0.1.3
@ -3230,7 +3256,7 @@ snapshots:
lru-cache@11.5.2: {}
magic-string@0.30.21:
magic-string@1.1.0:
dependencies:
'@jridgewell/sourcemap-codec': 1.5.5
@ -3536,8 +3562,8 @@ snapshots:
micromark-extension-mdxjs@3.0.0:
dependencies:
acorn: 8.17.0
acorn-jsx: 5.3.2(acorn@8.17.0)
acorn: 8.18.0
acorn-jsx: 5.3.2(acorn@8.18.0)
micromark-extension-mdx-expression: 3.0.1
micromark-extension-mdx-jsx: 3.0.2
micromark-extension-mdx-md: 2.0.0
@ -3687,15 +3713,15 @@ snapshots:
dependencies:
mime-db: 1.54.0
motion-dom@12.42.2:
motion-dom@12.43.0:
dependencies:
motion-utils: 12.39.0
motion-utils@12.39.0: {}
motion@12.42.2(react-dom@19.2.8(react@19.2.8))(react@19.2.8):
motion@12.43.0(react-dom@19.2.8(react@19.2.8))(react@19.2.8):
dependencies:
framer-motion: 12.42.2(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
framer-motion: 12.43.0(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
tslib: 2.8.1
optionalDependencies:
react: 19.2.8
@ -3715,7 +3741,7 @@ snapshots:
node-fetch-native@1.6.7: {}
node-mock-http@1.0.4: {}
node-mock-http@1.0.5: {}
normalize-path@3.0.0: {}
@ -3791,7 +3817,7 @@ snapshots:
picomatch@4.0.5: {}
postcss@8.5.22:
postcss@8.5.24:
dependencies:
nanoid: 3.3.16
picocolors: 1.1.1
@ -3830,10 +3856,10 @@ snapshots:
estree-util-build-jsx: 3.0.1
vfile: 6.0.3
recma-jsx@1.0.1(acorn@8.17.0):
recma-jsx@1.0.1(acorn@8.18.0):
dependencies:
acorn: 8.17.0
acorn-jsx: 5.3.2(acorn@8.17.0)
acorn: 8.18.0
acorn-jsx: 5.3.2(acorn@8.18.0)
estree-util-to-js: 2.0.0
recma-parse: 1.0.0
recma-stringify: 1.0.0
@ -4002,7 +4028,7 @@ snapshots:
'@bruits/satteri-win32-arm64-msvc': 0.9.5
'@bruits/satteri-win32-x64-msvc': 0.9.5
sax@1.6.0: {}
sax@1.6.1: {}
scheduler@0.27.0: {}
@ -4079,9 +4105,9 @@ snapshots:
'@types/node': 24.13.3
'@types/sax': 1.2.7
arg: 5.0.2
sax: 1.6.0
sax: 1.6.1
smol-toml@1.7.0: {}
smol-toml@1.7.1: {}
source-map-js@1.2.1: {}
@ -4122,7 +4148,7 @@ snapshots:
css-what: 6.2.2
csso: 5.0.5
picocolors: 1.1.1
sax: 1.6.0
sax: 1.6.1
tiny-inflate@1.0.3: {}
@ -4243,7 +4269,7 @@ snapshots:
dependencies:
lightningcss: 1.33.0
picomatch: 4.0.5
postcss: 8.5.22
postcss: 8.5.24
rolldown: 1.1.5
tinyglobby: 0.2.17
optionalDependencies:

View file

@ -1,6 +1,5 @@
allowBuilds:
esbuild: true
sharp: true
minimumReleaseAgeExclude:
- '@astrojs/internal-helpers@0.10.2'
- '@astrojs/node@11.0.3'

View file

@ -24,7 +24,7 @@ const t = useTranslations(lang);
/>
</div>
<form class="container">
<form class="container" id="form">
<div id="success-message" class="success" style="display: none;"></div>
<div id="error-message" class="error" style="display: none;"></div>
@ -47,26 +47,44 @@ const t = useTranslations(lang);
required
/>
<cap-widget
data-cap-api-endpoint="https://cap.midcreative.eu/8e5272fb9c08/api/"
></cap-widget>
<div
id="captcha-error"
class="error"
style="display: none; margin-top: 10px;"
>
{t("contacts.captchaError") || "Please complete the captcha"}
</div>
<button type="submit">{t("contacts.send")}</button>
<button class="btn" type="submit">{t("contacts.send")}</button>
</form>
</div>
<script>
const form = document.querySelector(".contact-form form");
form?.addEventListener("submit", (e) => {
const form = document.getElementById("form");
const submitBtn = form.querySelector('button[type="submit"]');
form.addEventListener("submit", async (e) => {
e.preventDefault();
console.log("Form submitted - add your logic here");
const formData = new FormData(form);
formData.append("access_key", "045fb2da-314b-4d25-b127-b36c15d50031");
const originalText = submitBtn.textContent;
submitBtn.textContent = "Sending...";
submitBtn.disabled = true;
try {
const response = await fetch("https://api.web3forms.com/submit", {
method: "POST",
body: formData,
});
const data = await response.json();
if (response.ok) {
alert("Success! Your message has been sent.");
form.reset();
} else {
alert("Error: " + data.message);
}
} catch (error) {
alert("Something went wrong. Please try again.");
} finally {
submitBtn.textContent = originalText;
submitBtn.disabled = false;
}
});
</script>

View file

@ -1,61 +0,0 @@
import type { APIRoute } from "astro";
// Говорим Astro, что этот эндпоинт НЕ должен пререндериться в статику
export const prerender = false;
export const POST: APIRoute = async ({ request }) => {
try {
const data = await request.json();
const { email, name, phone } = data;
if (!email) {
return new Response(JSON.stringify({ message: "Email required" }), {
status: 400,
});
}
const listmonkUrl = import.meta.env.LISTMONK_URL;
const username = import.meta.env.LISTMONK_USER;
const password = import.meta.env.LISTMONK_PASS;
const authHeader =
"Basic " + Buffer.from(`${username}:${password}`).toString("base64");
const response = await fetch(`${listmonkUrl}/api/subscribers`, {
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: authHeader,
},
body: JSON.stringify({
email: email,
name: name || "",
status: "enabled",
lists: [6], // Ваш ID 6
attribs: {
phone: phone || "",
},
}),
});
const resData = await response.json();
if (!response.ok) {
return new Response(
JSON.stringify({ message: resData.message || "Error subscribing" }),
{
status: response.status,
},
);
}
return new Response(JSON.stringify({ success: true, data: resData }), {
status: 200,
});
} catch (error: any) {
return new Response(
JSON.stringify({ message: error.message || "Server error" }),
{ status: 500 },
);
}
};

File diff suppressed because it is too large Load diff