Compare commits
3 Commits
20d50411aa
...
5741e68181
| Author | SHA1 | Date | |
|---|---|---|---|
| 5741e68181 | |||
| 5c0ed95e9e | |||
| 9218c5d483 |
+2
-2
@@ -1,4 +1,4 @@
|
||||
FROM node:20-alpine AS builder
|
||||
FROM node:22-alpine AS builder
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
@@ -9,7 +9,7 @@ COPY . .
|
||||
RUN npm run build
|
||||
|
||||
# ── Runtime ──────────────────────────────────────────
|
||||
FROM node:20-alpine AS runtime
|
||||
FROM node:22-alpine AS runtime
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
|
||||
+1
-1
@@ -4,7 +4,7 @@ HOST = "0.0.0.0"
|
||||
PORT = "4321"
|
||||
|
||||
[phases.setup]
|
||||
nixPkgs = ["nodejs_20"]
|
||||
nixPkgs = ["nodejs_22"]
|
||||
|
||||
[start]
|
||||
cmd = "node ./dist/server/entry.mjs"
|
||||
|
||||
Generated
+1672
-3037
File diff suppressed because it is too large
Load Diff
+5
-5
@@ -12,12 +12,12 @@
|
||||
},
|
||||
"type": "module",
|
||||
"dependencies": {
|
||||
"@astrojs/node": "^9.5.5",
|
||||
"@astrojs/sitemap": "^3.7.3",
|
||||
"astro": "^5.18.1"
|
||||
"@astrojs/node": "^11.1.5",
|
||||
"@astrojs/sitemap": "^3.7.4",
|
||||
"astro": "^7.3.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@astrojs/check": "^0.9.9",
|
||||
"typescript": "^5.9.3"
|
||||
"@astrojs/check": "^0.9.10",
|
||||
"typescript": "^6.0.3"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,6 +2,8 @@ MNQ Catering y Evento
|
||||
|
||||
- Canonical domain: https://www.mnqcatering.com
|
||||
- Business type: Premium catering service
|
||||
- Address: Calle Camino Vivero, 6, 29014, Málaga, España
|
||||
- Area served: Málaga (city) and Provincia de Málaga
|
||||
- Services: Bodas, eventos corporativos, reuniones familiares
|
||||
- Primary contact channels: WhatsApp (+34 678 17 15 13), phone (+34 678 17 15 13)
|
||||
- Key pages: /, /nosotros, /bodas-reales, /corporativo-business, /reuniones-familiares, /contacto
|
||||
|
||||
@@ -20,6 +20,7 @@ const whatsappAriaLabel = 'Contactar con MNQ por WhatsApp';
|
||||
<div style="display:flex;flex-direction:column;gap:0.35rem;margin-top:var(--space-4);">
|
||||
<a href="tel:+34678171513" class="footer-link" style="width:fit-content;">+34 678 17 15 13</a>
|
||||
<a href="https://www.mnqcatering.com" class="footer-link" style="width:fit-content;">www.mnqcatering.com</a>
|
||||
<p class="text-body-sm" style="width:fit-content;">Calle Camino Vivero, 6, 29014, Málaga</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -42,6 +42,26 @@ const baseStructuredData = {
|
||||
'Servicio de catering para bodas, eventos corporativos y reuniones familiares con enfoque premium.',
|
||||
telephone: '+34 678 17 15 13',
|
||||
serviceType: ['Bodas', 'Eventos corporativos', 'Reuniones familiares'],
|
||||
// Verified business address (owner-confirmed). Geo coordinates not confirmed — left out.
|
||||
address: {
|
||||
'@type': 'PostalAddress',
|
||||
streetAddress: 'Calle Camino Vivero, 6',
|
||||
postalCode: '29014',
|
||||
addressLocality: 'Málaga',
|
||||
addressRegion: 'Málaga',
|
||||
addressCountry: 'ES',
|
||||
},
|
||||
// Kept conservative to the confirmed service area: city + province of Málaga.
|
||||
areaServed: [
|
||||
{
|
||||
'@type': 'City',
|
||||
name: 'Málaga',
|
||||
},
|
||||
{
|
||||
'@type': 'AdministrativeArea',
|
||||
name: 'Provincia de Málaga',
|
||||
},
|
||||
],
|
||||
contactPoint: {
|
||||
'@type': 'ContactPoint',
|
||||
contactType: 'customer service',
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
import { defineMiddleware } from 'astro:middleware';
|
||||
|
||||
const CANONICAL_HOST = 'www.mnqcatering.com';
|
||||
|
||||
/**
|
||||
* SEO: this site is undesirably mirrored at mnqeventos.es (same content, no
|
||||
* redirect at the DNS/hosting level). This middleware enforces the canonical
|
||||
* host at the application layer for any host that isn't exactly
|
||||
* www.mnqcatering.com (covers mnqeventos.es, www.mnqeventos.es, and the bare
|
||||
* mnqcatering.com apex).
|
||||
*
|
||||
* NOTE: this must also be verified at the reverse-proxy/hosting layer — host
|
||||
* detection here depends on how the Host header (or X-Forwarded-Host, when
|
||||
* behind a proxy) actually arrives in production. If the proxy doesn't
|
||||
* forward the original host, this check will see the wrong value.
|
||||
*/
|
||||
export const onRequest = defineMiddleware((context, next) => {
|
||||
const requestHost = context.url.host;
|
||||
|
||||
if (requestHost !== CANONICAL_HOST) {
|
||||
const redirectUrl = new URL(context.url.pathname + context.url.search, `https://${CANONICAL_HOST}`);
|
||||
return context.redirect(redirectUrl.toString(), 301);
|
||||
}
|
||||
|
||||
return next();
|
||||
});
|
||||
@@ -93,6 +93,14 @@ const whatsappAriaLabel = 'Contactar con MNQ por WhatsApp';
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="stack-4">
|
||||
<span class="label-caps text-primary">Dirección</span>
|
||||
<div style="display:flex;align-items:center;gap:var(--space-4);">
|
||||
<Icon name="architecture" class="text-primary" />
|
||||
<p class="text-muted">Calle Camino Vivero, 6, 29014, Málaga</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="stack-4">
|
||||
<span class="label-caps text-primary">Sitio web</span>
|
||||
<div style="display:flex;align-items:center;gap:var(--space-4);">
|
||||
|
||||
Reference in New Issue
Block a user