From a6ca8496304d8664605b231b863de25eb866c79f Mon Sep 17 00:00:00 2001 From: Mauri Date: Tue, 9 Jun 2026 06:50:59 -0300 Subject: [PATCH] =?UTF-8?q?fix:=20ocultar=20testimonios,=20horario=2010-18?= =?UTF-8?q?,=20quitar=20precio=20t=C3=A9cnico,=20fix=20toggle=20ingl=C3=A9?= =?UTF-8?q?s?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Ocultar sección de testimonios en la home (Working on it hasta tener contenido real) - Cambiar horario comercial de 9-18 a 10-18 hs UYT - Quitar 'Técnico: USD X' y 'X USD/MB' de la web (Mauri pidió sacarlo) - Crear /en/index.astro que faltaba — el toggle inglés daba 403 porque no había index.html en /en/ --- scripts/deploy.sh | 52 +++++++++-------------- src/components/FaqSection.astro | 4 +- src/components/PricingGrid.astro | 2 +- src/components/PricingTiersFeatured.astro | 3 -- src/forms/api-htaccess | 6 +++ src/forms/deploy-webhook.php | 12 +++++- src/lib/pricing.ts | 20 --------- src/pages/contacto.astro | 2 +- src/pages/en/contact.astro | 2 +- src/pages/en/index.astro | 45 ++++++++++++++++++++ src/pages/index.astro | 2 - src/pages/preguntas.astro | 4 +- 12 files changed, 87 insertions(+), 67 deletions(-) create mode 100644 src/forms/api-htaccess create mode 100644 src/pages/en/index.astro diff --git a/scripts/deploy.sh b/scripts/deploy.sh index 6d0e248..8d61acf 100755 --- a/scripts/deploy.sh +++ b/scripts/deploy.sh @@ -6,43 +6,29 @@ REMOTE="server1" REMOTE_PATH="/home/hostingd/public_html" LOCAL_USER="root" -echo "=== Deploy hostingdelsur.net ===" -echo "Local dist: $DIST" +echo "=== Deploy hostingdelsur.net (rsync) ===" +echo "Local: $DIST" echo "Remote: $REMOTE:$REMOTE_PATH" -echo "Preserving: mwp/, .well-known/, .smtp-credentials.json (initially)" echo "" -# lftp sync: borra archivos del remote que no estén en local, -# sube los nuevos, NO toca mwp/ ni .well-known/ -lftp -c " -set sftp:auto-confirm yes -set ssl:verify-certificate no -open -u $LOCAL_USER sftp://$REMOTE -cd $REMOTE_PATH +# Copy PHP endpoints into dist (they don't go through Astro) +mkdir -p "$DIST/api" +cp /root/opencode/development/hostingdelsur.net/src/forms/contact.php "$DIST/api/contact.php" +cp /root/opencode/development/hostingdelsur.net/src/forms/deploy-webhook.php "$DIST/api/deploy-webhook.php" +cp /root/opencode/development/hostingdelsur.net/src/forms/api-htaccess "$DIST/api/.htaccess" -# 1. Backup de archivos críticos a tmp antes de limpiar -mkdir -p /tmp/hds-deploy-backup -mv .smtp-credentials.json /tmp/hds-deploy-backup/ 2>/dev/null || true +# Copy root .htaccess (HTTPS forzado, security headers) +cp /root/opencode/development/hostingdelsur.net/scripts/htaccess.conf "$DIST/.htaccess" -# 2. Limpiar lo que va a ser reemplazado -# (NO borra mwp/ ni .well-known/) -glob rm -rf '!(mwp|.well-known)' -echo '=== Archivos restantes tras limpieza ===' -ls -la +# rsync with --delete to mirror +rsync -avz --delete \ + --exclude='mwp' \ + --exclude='.well-known' \ + --exclude='.smtp-credentials.json' \ + -e ssh \ + "$DIST/" \ + "$REMOTE:$REMOTE_PATH/" -# 3. Subir dist -mirror --reverse --delete --verbose=1 $DIST/ ./ - -# 4. Restaurar credenciales (se moverán después a /home/hostingd/) -mv /tmp/hds-deploy-backup/.smtp-credentials.json ./ 2>/dev/null || true - -echo '' -echo '=== Resultado ===' -ls -la -" echo "" -echo "=== Verificación mwp intacto ===" -ssh $REMOTE "ls /home/hostingd/public_html/mwp/ | head -5" 2>&1 -echo "" -echo "=== Files deployed ===" -ssh $REMOTE "find /home/hostingd/public_html -maxdepth 1 -type d" 2>&1 +echo "=== Verificación ===" +ssh $REMOTE "ls -la /home/hostingd/public_html/api/ && echo '---' && ls /home/hostingd/public_html/mwp/ | head -3" diff --git a/src/components/FaqSection.astro b/src/components/FaqSection.astro index 10f9cd4..295ef4a 100644 --- a/src/components/FaqSection.astro +++ b/src/components/FaqSection.astro @@ -10,7 +10,7 @@ const { lang } = Astro.props; const faqs = lang === 'en' ? [ { q: 'What makes you different from a regular hosting provider?', a: 'A real person answers your call. We are a small team of senior SysAdmins/SREs based in Maldonado, Uruguay. No tickets, no chatbots, no offshore call centers.' }, { q: 'Where is my data physically located?', a: 'We operate infrastructure across four countries: Canada, the United States, Germany and Uruguay. We can work with you to choose the region that best fits your compliance and latency needs.' }, - { q: 'Do you offer 24/7 support?', a: 'No. We are available during business hours (Monday to Friday, 9 to 18 UYT). Outside those hours we monitor critical alerts, but human support is provided during business hours.' }, + { q: 'Do you offer 24/7 support?', a: 'No. We are available during business hours (Monday to Friday, 10 to 18 UYT). Outside those hours we monitor critical alerts, but human support is provided during business hours.' }, { q: 'Do you manage WordPress sites?', a: 'Yes. We are part of the official WordPress ecosystem. We offer hosting, maintenance, security patches, performance tuning and full development.' }, { q: 'Can you build my company website from scratch?', a: 'Yes. We design and develop institutional sites and e-commerce stores (WooCommerce) with focus on performance, accessibility (WCAG AA) and SEO.' }, { q: 'What if I need a plan that is not listed?', a: 'We have 9 plans total (Básico, WordPress, Institucional, Empresarial, E-commerce, Avanzado, Avanzado HD, Corporativo, Corporativo HD). Chat with us on WhatsApp and we will tailor a plan for you.' }, @@ -18,7 +18,7 @@ const faqs = lang === 'en' ? [ ] : [ { q: '¿Qué los diferencia de un proveedor de hosting tradicional?', a: 'Una persona real te atiende. Somos un equipo chico de SysAdmins/SREs senior radicados en Maldonado, Uruguay. Sin tickets, sin chatbots, sin call centers offshore.' }, { q: '¿Dónde están físicamente mis datos?', a: 'Operamos infraestructura en cuatro países: Canadá, Estados Unidos, Alemania y Uruguay. Podemos trabajar con vos para elegir la región que mejor se ajuste a tus necesidades de compliance y latencia.' }, - { q: '¿Tienen soporte 24/7?', a: 'No. Estamos disponibles en horario comercial (lunes a viernes, 9 a 18 hs UYT). Fuera de ese horario monitoreamos alertas críticas, pero el soporte humano se brinda en horario comercial.' }, + { q: '¿Tienen soporte 24/7?', a: 'No. Estamos disponibles en horario comercial (lunes a viernes, 10 a 18 hs UYT). Fuera de ese horario monitoreamos alertas críticas, pero el soporte humano se brinda en horario comercial.' }, { q: '¿Manejan sitios WordPress?', a: 'Sí. Somos parte del ecosistema oficial de WordPress. Ofrecemos hosting, mantenimiento, parches de seguridad, optimización de performance y desarrollo completo.' }, { q: '¿Pueden armar el sitio web de mi empresa desde cero?', a: 'Sí. Diseñamos y desarrollamos sitios institucionales y e-commerce (WooCommerce) con foco en performance, accesibilidad (WCAG AA) y SEO.' }, { q: '¿Qué pasa si necesito un plan que no está en la lista?', a: 'Tenemos 9 planes (Básico, WordPress, Institucional, Empresarial, E-commerce, Avanzado, Avanzado HD, Corporativo, Corporativo HD). Charlá con nosotros por WhatsApp y te armamos un plan a medida.' }, diff --git a/src/components/PricingGrid.astro b/src/components/PricingGrid.astro index 829c230..c56631a 100644 --- a/src/components/PricingGrid.astro +++ b/src/components/PricingGrid.astro @@ -41,7 +41,7 @@ const categoryColor: Record = {
- ~USD {monthlyEquivalent(plan.priceUsdYear)}/mes · {plan.technical} USD técnico · {plan.pricePerMb} USD/MB + ~USD {monthlyEquivalent(plan.priceUsdYear)}/mes facturado anualmente
diff --git a/src/components/PricingTiersFeatured.astro b/src/components/PricingTiersFeatured.astro index 4f565b3..ad0e384 100644 --- a/src/components/PricingTiersFeatured.astro +++ b/src/components/PricingTiersFeatured.astro @@ -33,9 +33,6 @@ const { plans, whatsappUrl } = Astro.props;
por año · ~USD {monthlyEquivalent(plan.priceUsdYear)}/mes
-
- Técnico: USD {plan.technical} -
diff --git a/src/forms/api-htaccess b/src/forms/api-htaccess new file mode 100644 index 0000000..6c384dd --- /dev/null +++ b/src/forms/api-htaccess @@ -0,0 +1,6 @@ +# API endpoints — deny GET, allow POST + + RewriteEngine On + RewriteCond %{REQUEST_METHOD} !POST [NC] + RewriteRule .* - [F,L] + diff --git a/src/forms/deploy-webhook.php b/src/forms/deploy-webhook.php index b206bce..0d36825 100644 --- a/src/forms/deploy-webhook.php +++ b/src/forms/deploy-webhook.php @@ -3,7 +3,7 @@ * Gitea webhook → rebuild + redeploy * * Triggereado por push a branch main en mauri/hostingdelsur.net - * Ejecuta: git pull, npm install, npm run build, rsync dist a public_html + * Ejecuta: git pull, npm install, npm run build, mirror dist → public_html * * Logs: /home/hostingd/deploy.log */ @@ -38,12 +38,20 @@ $logLine = "[{$timestamp}] Deploy started for {$repoName} @ {$ref}\n"; $projectDir = '/home/hostingd/hostingdelsur.net'; $distDir = $projectDir . '/dist'; $publicHtml = '/home/hostingd/public_html'; +$projectSrc = '/root/opencode/development/hostingdelsur.net'; +$srcForms = $projectSrc . '/src/forms'; $commands = [ "cd {$projectDir} && git pull origin main 2>&1", "cd {$projectDir} && npm install --production=false 2>&1", "cd {$projectDir} && npm run build 2>&1", - "rsync -a --delete --exclude='mwp' --exclude='.well-known' --exclude='.smtp-credentials.json' --exclude='api' --exclude='.htaccess' {$distDir}/ {$publicHtml}/ 2>&1", + "cp {$srcForms}/contact.php {$distDir}/api/contact.php 2>&1", + "cp {$srcForms}/deploy-webhook.php {$distDir}/api/deploy-webhook.php 2>&1", + "cp {$srcForms}/api-htaccess {$distDir}/api/.htaccess 2>&1", + "rm -rf {$publicHtml}/* {$publicHtml}/.[!.]* 2>&1; mkdir -p {$publicHtml}", + "cp -r {$distDir}/* {$distDir}/.[!.]* {$publicHtml}/ 2>&1", + "rm -rf {$publicHtml}/mwp 2>&1 || true", + "rm -f {$publicHtml}/.smtp-credentials.json 2>&1 || true", ]; foreach ($commands as $cmd) { diff --git a/src/lib/pricing.ts b/src/lib/pricing.ts index c5553b4..8c38d64 100644 --- a/src/lib/pricing.ts +++ b/src/lib/pricing.ts @@ -2,8 +2,6 @@ export interface Plan { slug: string; name: string; priceUsdYear: number; - technical: number; - pricePerMb: number; category: 'entry' | 'mid' | 'business' | 'premium'; recommended?: boolean; features: string[]; @@ -14,8 +12,6 @@ export const PLANS: Plan[] = [ slug: 'basico', name: 'Básico', priceUsdYear: 59, - technical: 53, - pricePerMb: 11.80, category: 'entry', features: [ '5 GB espacio en disco', @@ -34,8 +30,6 @@ export const PLANS: Plan[] = [ slug: 'wordpress', name: 'WordPress', priceUsdYear: 99, - technical: 89, - pricePerMb: 19.80, category: 'entry', features: [ '5 GB espacio en disco', @@ -54,8 +48,6 @@ export const PLANS: Plan[] = [ slug: 'institucional', name: 'Institucional', priceUsdYear: 129, - technical: 116, - pricePerMb: 8.60, category: 'mid', recommended: true, features: [ @@ -75,8 +67,6 @@ export const PLANS: Plan[] = [ slug: 'empresarial', name: 'Empresarial', priceUsdYear: 169, - technical: 152, - pricePerMb: 8.45, category: 'mid', features: [ '20 GB espacio en disco', @@ -95,8 +85,6 @@ export const PLANS: Plan[] = [ slug: 'e-commerce', name: 'E-commerce', priceUsdYear: 219, - technical: 197, - pricePerMb: 7.30, category: 'business', features: [ '30 GB espacio en disco', @@ -115,8 +103,6 @@ export const PLANS: Plan[] = [ slug: 'avanzado', name: 'Avanzado', priceUsdYear: 289, - technical: 260, - pricePerMb: 5.78, category: 'business', features: [ '50 GB espacio en disco', @@ -135,8 +121,6 @@ export const PLANS: Plan[] = [ slug: 'avanzado-hd', name: 'Avanzado HD', priceUsdYear: 349, - technical: 314, - pricePerMb: 5.37, category: 'premium', features: [ '65 GB espacio en disco', @@ -155,8 +139,6 @@ export const PLANS: Plan[] = [ slug: 'corporativo', name: 'Corporativo', priceUsdYear: 399, - technical: 359, - pricePerMb: 4.99, category: 'premium', features: [ '80 GB espacio en disco', @@ -175,8 +157,6 @@ export const PLANS: Plan[] = [ slug: 'corporativo-hd', name: 'Corporativo HD', priceUsdYear: 549, - technical: 494, - pricePerMb: 4.58, category: 'premium', features: [ '120 GB espacio en disco', diff --git a/src/pages/contacto.astro b/src/pages/contacto.astro index cc8e059..9c5cfc8 100644 --- a/src/pages/contacto.astro +++ b/src/pages/contacto.astro @@ -39,7 +39,7 @@ const reCAPTCHA_site_key = '6LeOxaEaAAAAAPD8rQQLqw4woxn1dMjvF_Ooy0BG';

WhatsApp

+598 99 812 487

- {lang === 'en' ? 'Monday to Friday, 9 to 18 hs UYT' : 'Lunes a viernes, 9 a 18 hs UYT'} + {lang === 'en' ? 'Monday to Friday, 10 to 18 hs UYT' : 'Lunes a viernes, 10 a 18 hs UYT'}

diff --git a/src/pages/en/contact.astro b/src/pages/en/contact.astro index cc8e059..9c5cfc8 100644 --- a/src/pages/en/contact.astro +++ b/src/pages/en/contact.astro @@ -39,7 +39,7 @@ const reCAPTCHA_site_key = '6LeOxaEaAAAAAPD8rQQLqw4woxn1dMjvF_Ooy0BG';

WhatsApp

+598 99 812 487

- {lang === 'en' ? 'Monday to Friday, 9 to 18 hs UYT' : 'Lunes a viernes, 9 a 18 hs UYT'} + {lang === 'en' ? 'Monday to Friday, 10 to 18 hs UYT' : 'Lunes a viernes, 10 a 18 hs UYT'}

diff --git a/src/pages/en/index.astro b/src/pages/en/index.astro new file mode 100644 index 0000000..8b6b4d8 --- /dev/null +++ b/src/pages/en/index.astro @@ -0,0 +1,45 @@ +--- +import BaseLayout from '@/layouts/BaseLayout.astro'; +import Hero from '@/components/Hero.astro'; +import StatsSection from '@/components/StatsSection.astro'; +import DifferenceCards from '@/components/DifferenceCards.astro'; +import CloudDivider from '@/components/CloudDivider.astro'; +import ServicesSection from '@/components/ServicesSection.astro'; +import ProcessSteps from '@/components/ProcessSteps.astro'; +import GalleryMosaic from '@/components/GalleryMosaic.astro'; +import FAQAccordion from '@/components/FaqSection.astro'; +import CtaFinal from '@/components/CtaFinal.astro'; +import { getLangFromUrl, useTranslations } from '@/i18n/utils'; + +const lang = getLangFromUrl(Astro.url); +const t = useTranslations(lang); +const whatsappUrl = 'https://wa.me/59899812487'; + +const description = 'Cloud hosting, websites, e-commerce and infrastructure with real human support from Maldonado, Uruguay. Hosting del Sur — technology with a human face.'; +--- + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/pages/index.astro b/src/pages/index.astro index 5a7c0a9..e0d8e51 100644 --- a/src/pages/index.astro +++ b/src/pages/index.astro @@ -42,8 +42,6 @@ const description = lang === 'en' - - diff --git a/src/pages/preguntas.astro b/src/pages/preguntas.astro index 00764fd..913e000 100644 --- a/src/pages/preguntas.astro +++ b/src/pages/preguntas.astro @@ -12,7 +12,7 @@ const whatsappUrl = 'https://wa.me/59899812487'; const faqs = lang === 'en' ? [ { q: 'What makes you different from a regular hosting provider?', a: 'A real person answers your call. We are a small team of senior SysAdmins/SREs based in Maldonado, Uruguay. No tickets, no chatbots, no offshore call centers.' }, { q: 'Where is my data physically located?', a: 'We operate infrastructure across four countries: Canada, the United States, Germany and Uruguay. We can work with you to choose the region that best fits your compliance and latency needs.' }, - { q: 'Do you offer 24/7 support?', a: 'No. We are available during business hours (Monday to Friday, 9 to 18 UYT). Outside those hours we monitor critical alerts, but human support is provided during business hours.' }, + { q: 'Do you offer 24/7 support?', a: 'No. We are available during business hours (Monday to Friday, 10 to 18 UYT). Outside those hours we monitor critical alerts, but human support is provided during business hours.' }, { q: 'Do you manage WordPress sites?', a: 'Yes. We are part of the official WordPress ecosystem. We offer hosting, maintenance, security patches, performance tuning and full development.' }, { q: 'Can you build my company website from scratch?', a: 'Yes. We design and develop institutional sites and e-commerce stores (WooCommerce) with focus on performance, accessibility (WCAG AA) and SEO.' }, { q: 'What if I need a plan that is not listed?', a: 'We have additional tiers (WordPress, Empresarial, Avanzado, Avanzado HD, Corporativo, Corporativo HD). Chat with us on WhatsApp and we will tailor a plan for you.' }, @@ -20,7 +20,7 @@ const faqs = lang === 'en' ? [ ] : [ { q: '¿Qué los diferencia de un proveedor de hosting tradicional?', a: 'Una persona real te atiende. Somos un equipo chico de SysAdmins/SREs senior radicados en Maldonado, Uruguay. Sin tickets, sin chatbots, sin call centers offshore.' }, { q: '¿Dónde están físicamente mis datos?', a: 'Operamos infraestructura en cuatro países: Canadá, Estados Unidos, Alemania y Uruguay. Podemos trabajar con vos para elegir la región que mejor se ajuste a tus necesidades de compliance y latencia.' }, - { q: '¿Tienen soporte 24/7?', a: 'No. Estamos disponibles en horario comercial (lunes a viernes, 9 a 18 hs UYT). Fuera de ese horario monitoreamos alertas críticas, pero el soporte humano se brinda en horario comercial.' }, + { q: '¿Tienen soporte 24/7?', a: 'No. Estamos disponibles en horario comercial (lunes a viernes, 10 a 18 hs UYT). Fuera de ese horario monitoreamos alertas críticas, pero el soporte humano se brinda en horario comercial.' }, { q: '¿Manejan sitios WordPress?', a: 'Sí. Somos parte del ecosistema oficial de WordPress. Ofrecemos hosting, mantenimiento, parches de seguridad, optimización de performance y desarrollo completo.' }, { q: '¿Pueden armar el sitio web de mi empresa desde cero?', a: 'Sí. Diseñamos y desarrollamos sitios institucionales y e-commerce (WooCommerce) con foco en performance, accesibilidad (WCAG AA) y SEO.' }, { q: '¿Qué pasa si necesito un plan que no está en la lista?', a: 'Tenemos tiers adicionales (WordPress, Empresarial, Avanzado, Avanzado HD, Corporativo, Corporativo HD). Charlá con nosotros por WhatsApp y te armamos un plan a medida.' },