Compare commits

...

6 Commits

8 changed files with 5074 additions and 5128 deletions

27
Dockerfile Normal file
View File

@@ -0,0 +1,27 @@
FROM node:22-alpine AS build
WORKDIR /web
COPY package.json ./
RUN npm install
COPY . .
RUN npm run build
FROM node:22-alpine AS runtime
WORKDIR /app
# Copiar archivos generados y dependencias necesarias
COPY --from=build /web/dist ./dist
COPY --from=build /web/node_modules ./node_modules
COPY --from=build /web/package.json ./package.json
# Configuración de red interna de Docker
ENV HOST=0.0.0.0
ENV PORT=4321
EXPOSE 4321
CMD ["node", "./dist/server/entry.mjs"]

View File

@@ -1,5 +1,13 @@
// @ts-check // @ts-check
import { defineConfig } from 'astro/config'; import { defineConfig } from "astro/config";
import node from "@astrojs/node";
// https://astro.build/config // https://astro.build/config
export default defineConfig({}); export default defineConfig({
output: "server",
adapter: node({
mode: "standalone",
}),
});

7
docker-compose.yaml Normal file
View File

@@ -0,0 +1,7 @@
services:
web:
build:
context: .
dockerfile: Dockerfile
ports:
- "4321:4321"

15
nginx.conf Normal file
View File

@@ -0,0 +1,15 @@
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
try_files $uri $uri/ /index.html;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}

1485
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -9,7 +9,8 @@
"astro": "astro" "astro": "astro"
}, },
"dependencies": { "dependencies": {
"astro": "^5.17.1", "@astrojs/node": "^10.0.4",
"astro": "^6.1.3",
"lenis": "^1.3.17", "lenis": "^1.3.17",
"nodemailer": "^8.0.1" "nodemailer": "^8.0.1"
}, },

View File

@@ -24,6 +24,11 @@ const { pageTitle } = Astro.props;
<link rel="icon" href="/favicon.ico" /> <link rel="icon" href="/favicon.ico" />
<meta name="generator" content={Astro.generator} /> <meta name="generator" content={Astro.generator} />
<title>{pageTitle ? `Naliia | ${pageTitle}` : "Naliia"}</title> <title>{pageTitle ? `Naliia | ${pageTitle}` : "Naliia"}</title>
<link
rel="stylesheet"
href="https://unpkg.com/lenis@1.3.17/dist/lenis.css"
/>
</head> </head>
<body> <body>
@@ -86,6 +91,22 @@ const { pageTitle } = Astro.props;
<footer class="footer"> <footer class="footer">
<Footer /> <Footer />
</footer> </footer>
<script>
import Lenis from "lenis";
const lenis = new Lenis({
touchMultiplier: 2,
infinite: false,
});
function raf(time: number) {
lenis.raf(time);
requestAnimationFrame(raf);
}
requestAnimationFrame(raf);
</script>
</body> </body>
</html> </html>
@@ -100,47 +121,7 @@ const { pageTitle } = Astro.props;
} }
</script> </script>
<script>
import Lenis from "lenis";
// Inicialización de Lenis
const lenis = new Lenis({
duration: 1.2,
easing: (t) => Math.min(1, 1.001 - Math.pow(2, -10 * t)),
direction: "vertical",
gestureDirection: "vertical",
smoothHover: true,
// En móviles a veces es mejor dejarlo en false para no interferir con el scroll nativo
smoothTouch: false,
});
// Función de actualización (Raf)
function raf(time: number) {
lenis.raf(time);
requestAnimationFrame(raf);
}
requestAnimationFrame(raf);
</script>
<style> <style>
/* Estilos base para Lenis */
html.lenis {
height: auto;
}
.lenis.lenis-smooth {
scroll-behavior: auto !important;
}
.lenis.lenis-smooth [data-lenis-prevent] {
overscroll-behavior: contain;
}
.lenis.lenis-stopped {
overflow: hidden;
}
/* Estilos globales */ /* Estilos globales */
html { html {
margin: 0; margin: 0;
@@ -161,10 +142,6 @@ const { pageTitle } = Astro.props;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
overflow-x: clip; overflow-x: clip;
/* background-image: url("/src/assets/imgs/n-naliia-rosada-fondo.webp");
background-repeat: no-repeat;
background-position: top right; */
} }
body::before { body::before {

View File

@@ -116,8 +116,6 @@ const videosList = Object.keys(videoFiles).map((key) => {
const name = item.getAttribute("data-name"); const name = item.getAttribute("data-name");
const matches = name && name.includes(query); const matches = name && name.includes(query);
// Usamos toggle: si matches es true, hidden es false (se muestra)
// Si matches es false, hidden es true (se oculta)
item.classList.toggle("hidden", !matches); item.classList.toggle("hidden", !matches);
if (matches) { if (matches) {