├── .gitattributes ├── .github └── pull_request_template.md ├── .gitignore ├── .npmrc ├── .prettierignore ├── .prettierrc ├── .vscode ├── extensions.json ├── launch.json ├── settings.json └── tailwindcss.json ├── CONTRIBUTING.md ├── LICENSE.md ├── README.md ├── astro.config.mjs ├── eslint.config.js ├── package.json ├── pnpm-lock.yaml ├── public ├── favicon.svg ├── fonts │ ├── anisette-black.woff2 │ ├── anisette-bold.woff2 │ ├── anisette-light.woff2 │ └── anisette-medium.woff2 ├── images │ ├── entradas-la-velada.webp │ ├── fighters │ │ ├── big │ │ │ ├── abby.webp │ │ │ ├── alana.webp │ │ │ ├── andoni.webp │ │ │ ├── arigeli.webp │ │ │ ├── carlos.webp │ │ │ ├── gaspi.webp │ │ │ ├── grefg.webp │ │ │ ├── peereira.webp │ │ │ ├── perxitaa.webp │ │ │ ├── rivaldios.webp │ │ │ ├── roro.webp │ │ │ ├── tomas.webp │ │ │ ├── viruzz-b.webp │ │ │ ├── viruzz.webp │ │ │ └── westcol.webp │ │ ├── cards │ │ │ ├── abby.webp │ │ │ ├── alana.webp │ │ │ ├── andoni.webp │ │ │ ├── arigeli.webp │ │ │ ├── carlos.webp │ │ │ ├── gaspi.webp │ │ │ ├── grefg.webp │ │ │ ├── peereira.webp │ │ │ ├── perxitaa.webp │ │ │ ├── rivaldios.webp │ │ │ ├── roro.webp │ │ │ ├── tomas.webp │ │ │ ├── viruzz.webp │ │ │ └── westcol.webp │ │ ├── gallery │ │ │ ├── abby │ │ │ │ ├── 1.webp │ │ │ │ ├── 2.webp │ │ │ │ └── 3.webp │ │ │ ├── alana │ │ │ │ ├── 1.webp │ │ │ │ ├── 2.webp │ │ │ │ ├── 3.webp │ │ │ │ ├── 4.webp │ │ │ │ └── 5.webp │ │ │ ├── andoni │ │ │ │ ├── 1.webp │ │ │ │ ├── 2.webp │ │ │ │ ├── 3.webp │ │ │ │ └── 4.webp │ │ │ ├── arigeli │ │ │ │ ├── 1.webp │ │ │ │ ├── 2.webp │ │ │ │ ├── 3.webp │ │ │ │ ├── 4.webp │ │ │ │ └── 5.webp │ │ │ ├── carlos │ │ │ │ ├── 1.webp │ │ │ │ └── 2.webp │ │ │ ├── gaspi │ │ │ │ ├── 1.webp │ │ │ │ └── 2.webp │ │ │ ├── grefg │ │ │ │ ├── 1.webp │ │ │ │ └── 2.webp │ │ │ ├── peereira │ │ │ │ ├── 1.webp │ │ │ │ └── 2.webp │ │ │ ├── perxitaa │ │ │ │ ├── 1.webp │ │ │ │ ├── 2.webp │ │ │ │ └── 3.webp │ │ │ ├── rivaldios │ │ │ │ ├── 1.webp │ │ │ │ └── 2.webp │ │ │ ├── roro │ │ │ │ ├── 1.webp │ │ │ │ └── 2.webp │ │ │ ├── tomas │ │ │ │ ├── 1.webp │ │ │ │ ├── 2.webp │ │ │ │ ├── 3.webp │ │ │ │ └── 4.webp │ │ │ └── westcol │ │ │ │ ├── 1.webp │ │ │ │ └── 2.webp │ │ ├── text │ │ │ ├── abby.png │ │ │ ├── abby.webp │ │ │ ├── alana.png │ │ │ ├── alana.webp │ │ │ ├── andoni.png │ │ │ ├── andoni.webp │ │ │ ├── arigeli.png │ │ │ ├── arigeli.webp │ │ │ ├── carlos.png │ │ │ ├── carlos.webp │ │ │ ├── gaspi.png │ │ │ ├── gaspi.webp │ │ │ ├── grefg.png │ │ │ ├── grefg.webp │ │ │ ├── peereira.png │ │ │ ├── peereira.webp │ │ │ ├── perxitaa.png │ │ │ ├── perxitaa.webp │ │ │ ├── rivaldios.png │ │ │ ├── rivaldios.webp │ │ │ ├── roro.png │ │ │ ├── roro.webp │ │ │ ├── tomas.png │ │ │ ├── tomas.webp │ │ │ ├── viruzz.png │ │ │ ├── viruzz.webp │ │ │ ├── westcol.png │ │ │ └── westcol.webp │ │ └── workoutThumbnails │ │ │ ├── abby-thumbnail.webp │ │ │ ├── alana-thumbnail.webp │ │ │ ├── andoni-thumbnail.webp │ │ │ ├── arigeli-thumbnail.webp │ │ │ ├── carlos-thumbnail.webp │ │ │ ├── grefg-thumbnail.webp │ │ │ ├── peereira-thumbnail.webp │ │ │ ├── perxitaa-thumbnail.webp │ │ │ ├── rivaldios-thumbnail.webp │ │ │ ├── tomas-thumbnail.webp │ │ │ ├── viruzz-thumbnail.webp │ │ │ └── westcol-thumbnail.webp │ ├── flags │ │ ├── ar.webp │ │ ├── co.webp │ │ ├── es.webp │ │ └── mx.webp │ ├── footer.webp │ ├── hero.avif │ ├── hero.png │ ├── hero.webp │ ├── logo.png │ ├── logo.webp │ ├── presentation-video-cover.webp │ ├── versus.png │ └── versus.webp ├── laveladaes.ics └── og.jpg ├── scripts └── generate-blur-placeholders.mjs ├── server.js ├── src ├── assets │ ├── banners │ │ ├── alsa.webp │ │ └── revolut.webp │ ├── sponsors │ │ ├── Alsa.svg │ │ ├── Cerave.svg │ │ ├── CocaCola.svg │ │ ├── Grefusa.svg │ │ ├── Infojobs.svg │ │ ├── Mahou.svg │ │ ├── Maxibon.svg │ │ ├── Nothing.svg │ │ ├── Revolut.svg │ │ ├── Spotify.svg │ │ └── Vicio.svg │ └── svg │ │ ├── close.svg │ │ ├── github.svg │ │ ├── instagram.svg │ │ ├── kick.svg │ │ ├── logo.svg │ │ ├── tiktok.svg │ │ ├── twitch.svg │ │ ├── x.svg │ │ └── youtube.svg ├── components │ ├── BoxerCard.astro │ ├── BoxerCardCss.astro │ ├── BoxerClip.astro │ ├── BoxerClipCard.astro │ ├── BoxerClipDrawer.astro │ ├── BoxerClipList.astro │ ├── BoxerClipPlayerCard.astro │ ├── BoxerGallery.astro │ ├── BoxerProfileCard.astro │ ├── BoxerSocialLink.astro │ ├── BoxerWorkout.astro │ ├── Boxers │ │ ├── BoxerBigImages.astro │ │ ├── ColumnBoxers.astro │ │ └── SelectYourBoxer.astro │ ├── CountdownSmall.astro │ ├── Date.astro │ ├── FAQ.astro │ ├── FighterSelector.astro │ ├── HeroCss.astro │ ├── Icons │ │ ├── HorizontalScroll.astro │ │ └── index.ts │ ├── LinkToAddCalendar.astro │ ├── LiteYouTube.astro │ ├── OptimizedImage.astro │ ├── SectionTitle.astro │ ├── Spotlight.astro │ └── SynthwaveText.astro ├── consts │ ├── bannerData.ts │ ├── combats.ts │ ├── countries.ts │ ├── fighters.ts │ ├── pageTitles.ts │ ├── social.ts │ └── sponsors.ts ├── layouts │ ├── BackgroundLayout.astro │ └── Layout.astro ├── lib │ ├── countdown.ts │ ├── dom-selector.ts │ └── get-boxers.ts ├── pages │ ├── 404.astro │ ├── combates │ │ ├── [id].astro │ │ └── index.astro │ ├── index.astro │ ├── la-porra.astro │ └── luchador │ │ └── [id].astro ├── sections │ ├── BannerSponsors.astro │ ├── Countdown.astro │ ├── Entradas.astro │ ├── Footer.astro │ ├── Header.astro │ ├── Hero.astro │ ├── Presentation.astro │ └── Sponsors.astro ├── styles │ └── global.css ├── types │ ├── Combat.ts │ ├── bannerType.ts │ ├── fighters.ts │ ├── social.ts │ └── sponsors.ts └── utils │ ├── get-blurred-image-url.ts │ ├── get-image-count.ts │ ├── get-optimized-image-url.ts │ └── remove-mirrored-pairs.ts └── tsconfig.json /.gitattributes: -------------------------------------------------------------------------------- 1 | * text=auto 2 | *.css linguist-vendored 3 | *.scss linguist-vendored 4 | 5 | *.astro linguist-language=TypeScript 6 | -------------------------------------------------------------------------------- /.github/pull_request_template.md: -------------------------------------------------------------------------------- 1 | ## Describe your changes 2 | 3 | 4 | ## Include a screenshot/video where applicable 5 | 6 | 7 | ## Type of change 8 | 9 | 10 | - [ ] Bug fix (non-breaking change which fixes an issue) 11 | - [ ] New feature (non-breaking change which adds functionality) 12 | - [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected) 13 | - [ ] Documentation update 14 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # build output 2 | dist/ 3 | 4 | # generated types 5 | .astro/ 6 | 7 | # package-lock.json 8 | package-lock.json 9 | 10 | # dependencies 11 | node_modules/ 12 | 13 | # logs 14 | npm-debug.log* 15 | yarn-debug.log* 16 | yarn-error.log* 17 | pnpm-debug.log* 18 | 19 | # environment variables 20 | .env 21 | .env.production 22 | 23 | # macOS-specific files 24 | .DS_Store 25 | 26 | # jetbrains setting folder 27 | .idea/ 28 | 29 | package-lock.json 30 | 31 | # ignore vercel build 32 | .vercel/ 33 | 34 | # ignore blur placeholders 35 | src/blur-placeholders.json 36 | -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | enable-pre-post-scripts=true -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | # build output 2 | dist/ 3 | .output/ 4 | 5 | # dependencies 6 | node_modules/ 7 | 8 | # logs 9 | npm-debug.log* 10 | yarn-debug.log* 11 | yarn-error.log* 12 | pnpm-debug.log* 13 | 14 | # environment variables 15 | .env 16 | .env.production 17 | 18 | # macOS-specific files 19 | .DS_Store 20 | 21 | # Astro generated files 22 | .astro/ 23 | 24 | # Lock files 25 | package-lock.json 26 | yarn.lock 27 | pnpm-lock.yaml -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "printWidth": 100, 3 | "semi": false, 4 | "singleQuote": true, 5 | "tabWidth": 2, 6 | "trailingComma": "all", 7 | "useTabs": false, 8 | "plugins": ["prettier-plugin-astro", "prettier-plugin-tailwindcss"], 9 | "tailwindStylesheet": "./src/styles/globals.css", 10 | "overrides": [ 11 | { 12 | "files": "*.astro", 13 | "options": { 14 | "parser": "astro" 15 | } 16 | } 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": ["astro-build.astro-vscode"], 3 | "unwantedRecommendations": [] 4 | } 5 | -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "0.2.0", 3 | "configurations": [ 4 | { 5 | "command": "./node_modules/.bin/astro dev", 6 | "name": "Development server", 7 | "request": "launch", 8 | "type": "node-terminal" 9 | } 10 | ] 11 | } 12 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "css.customData": [ 3 | ".vscode/tailwindcss.json" 4 | ], 5 | "prettier.documentSelectors": [ 6 | "**/*.astro" 7 | ], 8 | "[astro]": { 9 | "editor.defaultFormatter": "esbenp.prettier-vscode" 10 | }, 11 | "editor.codeActionsOnSave": { 12 | "source.fixAll": "explicit" 13 | }, 14 | "files.associations": { 15 | "*.css": "tailwindcss" 16 | }, 17 | "editor.quickSuggestions": { 18 | "strings": "on" 19 | } 20 | } -------------------------------------------------------------------------------- /.vscode/tailwindcss.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": 4.0, 3 | "atDirectives": [ 4 | { 5 | "name": "@import", 6 | "description": "Use the `@import` directive to inline import CSS files, including Tailwind itself.", 7 | "references": [ 8 | { 9 | "name": "Tailwind Documentation", 10 | "url": "https://tailwindcss.com/docs/functions-and-directives#import-directive" 11 | } 12 | ] 13 | }, 14 | { 15 | "name": "@theme", 16 | "description": "Use the `@theme` directive to define your project's custom design tokens, like fonts, colors, and breakpoints.", 17 | "references": [ 18 | { 19 | "name": "Tailwind Documentation", 20 | "url": "https://tailwindcss.com/docs/functions-and-directives#theme-directive" 21 | } 22 | ] 23 | }, 24 | { 25 | "name": "@source", 26 | "description": "Use the `@source` directive to explicitly specify source files that aren't picked up by Tailwind's automatic content detection.", 27 | "references": [ 28 | { 29 | "name": "Tailwind Documentation", 30 | "url": "https://tailwindcss.com/docs/functions-and-directives#source-directive" 31 | } 32 | ] 33 | }, 34 | { 35 | "name": "@utility", 36 | "description": "Use the `@utility` directive to add custom utilities to your project that work with variants like `hover`, `focus` and `lg`.", 37 | "references": [ 38 | { 39 | "name": "Tailwind Documentation", 40 | "url": "https://tailwindcss.com/docs/functions-and-directives#utility-directive" 41 | } 42 | ] 43 | }, 44 | { 45 | "name": "@variant", 46 | "description": "Use the `@variant` directive to apply a Tailwind variant to styles in your CSS. If you need to apply multiple variants at the same time, use nesting.", 47 | "references": [ 48 | { 49 | "name": "Tailwind Documentation", 50 | "url": "https://tailwindcss.com/docs/functions-and-directives#variant-directive" 51 | } 52 | ] 53 | }, 54 | { 55 | "name": "@custom-variant", 56 | "description": "Use the `@custom-variant` directive to add a custom variant in your project. This lets you write utilities like `pointer-coarse:size-48` and `theme-midnight:bg-slate-900`.", 57 | "references": [ 58 | { 59 | "name": "Tailwind Documentation", 60 | "url": "https://tailwindcss.com/docs/functions-and-directives#custom-variant-directive" 61 | } 62 | ] 63 | }, 64 | { 65 | "name": "@apply", 66 | "description": "Use the `@apply` directive to inline any existing utility classes into your own custom CSS. This is useful when you need to write custom CSS (like to override the styles in a third-party library) but still want to work with your design tokens and use the same syntax you’re used to using in your HTML.", 67 | "references": [ 68 | { 69 | "name": "Tailwind Documentation", 70 | "url": "https://tailwindcss.com/docs/functions-and-directives#apply-directive" 71 | } 72 | ] 73 | }, 74 | { 75 | "name": "@reference", 76 | "description": "If you want to use `@apply` or `@variant` in the ` 8 | -------------------------------------------------------------------------------- /public/fonts/anisette-black.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/fonts/anisette-black.woff2 -------------------------------------------------------------------------------- /public/fonts/anisette-bold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/fonts/anisette-bold.woff2 -------------------------------------------------------------------------------- /public/fonts/anisette-light.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/fonts/anisette-light.woff2 -------------------------------------------------------------------------------- /public/fonts/anisette-medium.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/fonts/anisette-medium.woff2 -------------------------------------------------------------------------------- /public/images/entradas-la-velada.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/entradas-la-velada.webp -------------------------------------------------------------------------------- /public/images/fighters/big/abby.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/big/abby.webp -------------------------------------------------------------------------------- /public/images/fighters/big/alana.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/big/alana.webp -------------------------------------------------------------------------------- /public/images/fighters/big/andoni.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/big/andoni.webp -------------------------------------------------------------------------------- /public/images/fighters/big/arigeli.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/big/arigeli.webp -------------------------------------------------------------------------------- /public/images/fighters/big/carlos.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/big/carlos.webp -------------------------------------------------------------------------------- /public/images/fighters/big/gaspi.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/big/gaspi.webp -------------------------------------------------------------------------------- /public/images/fighters/big/grefg.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/big/grefg.webp -------------------------------------------------------------------------------- /public/images/fighters/big/peereira.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/big/peereira.webp -------------------------------------------------------------------------------- /public/images/fighters/big/perxitaa.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/big/perxitaa.webp -------------------------------------------------------------------------------- /public/images/fighters/big/rivaldios.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/big/rivaldios.webp -------------------------------------------------------------------------------- /public/images/fighters/big/roro.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/big/roro.webp -------------------------------------------------------------------------------- /public/images/fighters/big/tomas.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/big/tomas.webp -------------------------------------------------------------------------------- /public/images/fighters/big/viruzz-b.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/big/viruzz-b.webp -------------------------------------------------------------------------------- /public/images/fighters/big/viruzz.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/big/viruzz.webp -------------------------------------------------------------------------------- /public/images/fighters/big/westcol.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/big/westcol.webp -------------------------------------------------------------------------------- /public/images/fighters/cards/abby.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/cards/abby.webp -------------------------------------------------------------------------------- /public/images/fighters/cards/alana.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/cards/alana.webp -------------------------------------------------------------------------------- /public/images/fighters/cards/andoni.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/cards/andoni.webp -------------------------------------------------------------------------------- /public/images/fighters/cards/arigeli.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/cards/arigeli.webp -------------------------------------------------------------------------------- /public/images/fighters/cards/carlos.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/cards/carlos.webp -------------------------------------------------------------------------------- /public/images/fighters/cards/gaspi.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/cards/gaspi.webp -------------------------------------------------------------------------------- /public/images/fighters/cards/grefg.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/cards/grefg.webp -------------------------------------------------------------------------------- /public/images/fighters/cards/peereira.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/cards/peereira.webp -------------------------------------------------------------------------------- /public/images/fighters/cards/perxitaa.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/cards/perxitaa.webp -------------------------------------------------------------------------------- /public/images/fighters/cards/rivaldios.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/cards/rivaldios.webp -------------------------------------------------------------------------------- /public/images/fighters/cards/roro.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/cards/roro.webp -------------------------------------------------------------------------------- /public/images/fighters/cards/tomas.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/cards/tomas.webp -------------------------------------------------------------------------------- /public/images/fighters/cards/viruzz.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/cards/viruzz.webp -------------------------------------------------------------------------------- /public/images/fighters/cards/westcol.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/cards/westcol.webp -------------------------------------------------------------------------------- /public/images/fighters/gallery/abby/1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/gallery/abby/1.webp -------------------------------------------------------------------------------- /public/images/fighters/gallery/abby/2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/gallery/abby/2.webp -------------------------------------------------------------------------------- /public/images/fighters/gallery/abby/3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/gallery/abby/3.webp -------------------------------------------------------------------------------- /public/images/fighters/gallery/alana/1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/gallery/alana/1.webp -------------------------------------------------------------------------------- /public/images/fighters/gallery/alana/2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/gallery/alana/2.webp -------------------------------------------------------------------------------- /public/images/fighters/gallery/alana/3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/gallery/alana/3.webp -------------------------------------------------------------------------------- /public/images/fighters/gallery/alana/4.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/gallery/alana/4.webp -------------------------------------------------------------------------------- /public/images/fighters/gallery/alana/5.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/gallery/alana/5.webp -------------------------------------------------------------------------------- /public/images/fighters/gallery/andoni/1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/gallery/andoni/1.webp -------------------------------------------------------------------------------- /public/images/fighters/gallery/andoni/2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/gallery/andoni/2.webp -------------------------------------------------------------------------------- /public/images/fighters/gallery/andoni/3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/gallery/andoni/3.webp -------------------------------------------------------------------------------- /public/images/fighters/gallery/andoni/4.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/gallery/andoni/4.webp -------------------------------------------------------------------------------- /public/images/fighters/gallery/arigeli/1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/gallery/arigeli/1.webp -------------------------------------------------------------------------------- /public/images/fighters/gallery/arigeli/2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/gallery/arigeli/2.webp -------------------------------------------------------------------------------- /public/images/fighters/gallery/arigeli/3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/gallery/arigeli/3.webp -------------------------------------------------------------------------------- /public/images/fighters/gallery/arigeli/4.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/gallery/arigeli/4.webp -------------------------------------------------------------------------------- /public/images/fighters/gallery/arigeli/5.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/gallery/arigeli/5.webp -------------------------------------------------------------------------------- /public/images/fighters/gallery/carlos/1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/gallery/carlos/1.webp -------------------------------------------------------------------------------- /public/images/fighters/gallery/carlos/2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/gallery/carlos/2.webp -------------------------------------------------------------------------------- /public/images/fighters/gallery/gaspi/1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/gallery/gaspi/1.webp -------------------------------------------------------------------------------- /public/images/fighters/gallery/gaspi/2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/gallery/gaspi/2.webp -------------------------------------------------------------------------------- /public/images/fighters/gallery/grefg/1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/gallery/grefg/1.webp -------------------------------------------------------------------------------- /public/images/fighters/gallery/grefg/2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/gallery/grefg/2.webp -------------------------------------------------------------------------------- /public/images/fighters/gallery/peereira/1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/gallery/peereira/1.webp -------------------------------------------------------------------------------- /public/images/fighters/gallery/peereira/2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/gallery/peereira/2.webp -------------------------------------------------------------------------------- /public/images/fighters/gallery/perxitaa/1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/gallery/perxitaa/1.webp -------------------------------------------------------------------------------- /public/images/fighters/gallery/perxitaa/2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/gallery/perxitaa/2.webp -------------------------------------------------------------------------------- /public/images/fighters/gallery/perxitaa/3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/gallery/perxitaa/3.webp -------------------------------------------------------------------------------- /public/images/fighters/gallery/rivaldios/1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/gallery/rivaldios/1.webp -------------------------------------------------------------------------------- /public/images/fighters/gallery/rivaldios/2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/gallery/rivaldios/2.webp -------------------------------------------------------------------------------- /public/images/fighters/gallery/roro/1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/gallery/roro/1.webp -------------------------------------------------------------------------------- /public/images/fighters/gallery/roro/2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/gallery/roro/2.webp -------------------------------------------------------------------------------- /public/images/fighters/gallery/tomas/1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/gallery/tomas/1.webp -------------------------------------------------------------------------------- /public/images/fighters/gallery/tomas/2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/gallery/tomas/2.webp -------------------------------------------------------------------------------- /public/images/fighters/gallery/tomas/3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/gallery/tomas/3.webp -------------------------------------------------------------------------------- /public/images/fighters/gallery/tomas/4.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/gallery/tomas/4.webp -------------------------------------------------------------------------------- /public/images/fighters/gallery/westcol/1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/gallery/westcol/1.webp -------------------------------------------------------------------------------- /public/images/fighters/gallery/westcol/2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/gallery/westcol/2.webp -------------------------------------------------------------------------------- /public/images/fighters/text/abby.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/text/abby.png -------------------------------------------------------------------------------- /public/images/fighters/text/abby.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/text/abby.webp -------------------------------------------------------------------------------- /public/images/fighters/text/alana.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/text/alana.png -------------------------------------------------------------------------------- /public/images/fighters/text/alana.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/text/alana.webp -------------------------------------------------------------------------------- /public/images/fighters/text/andoni.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/text/andoni.png -------------------------------------------------------------------------------- /public/images/fighters/text/andoni.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/text/andoni.webp -------------------------------------------------------------------------------- /public/images/fighters/text/arigeli.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/text/arigeli.png -------------------------------------------------------------------------------- /public/images/fighters/text/arigeli.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/text/arigeli.webp -------------------------------------------------------------------------------- /public/images/fighters/text/carlos.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/text/carlos.png -------------------------------------------------------------------------------- /public/images/fighters/text/carlos.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/text/carlos.webp -------------------------------------------------------------------------------- /public/images/fighters/text/gaspi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/text/gaspi.png -------------------------------------------------------------------------------- /public/images/fighters/text/gaspi.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/text/gaspi.webp -------------------------------------------------------------------------------- /public/images/fighters/text/grefg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/text/grefg.png -------------------------------------------------------------------------------- /public/images/fighters/text/grefg.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/text/grefg.webp -------------------------------------------------------------------------------- /public/images/fighters/text/peereira.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/text/peereira.png -------------------------------------------------------------------------------- /public/images/fighters/text/peereira.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/text/peereira.webp -------------------------------------------------------------------------------- /public/images/fighters/text/perxitaa.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/text/perxitaa.png -------------------------------------------------------------------------------- /public/images/fighters/text/perxitaa.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/text/perxitaa.webp -------------------------------------------------------------------------------- /public/images/fighters/text/rivaldios.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/text/rivaldios.png -------------------------------------------------------------------------------- /public/images/fighters/text/rivaldios.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/text/rivaldios.webp -------------------------------------------------------------------------------- /public/images/fighters/text/roro.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/text/roro.png -------------------------------------------------------------------------------- /public/images/fighters/text/roro.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/text/roro.webp -------------------------------------------------------------------------------- /public/images/fighters/text/tomas.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/text/tomas.png -------------------------------------------------------------------------------- /public/images/fighters/text/tomas.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/text/tomas.webp -------------------------------------------------------------------------------- /public/images/fighters/text/viruzz.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/text/viruzz.png -------------------------------------------------------------------------------- /public/images/fighters/text/viruzz.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/text/viruzz.webp -------------------------------------------------------------------------------- /public/images/fighters/text/westcol.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/text/westcol.png -------------------------------------------------------------------------------- /public/images/fighters/text/westcol.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/text/westcol.webp -------------------------------------------------------------------------------- /public/images/fighters/workoutThumbnails/abby-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/workoutThumbnails/abby-thumbnail.webp -------------------------------------------------------------------------------- /public/images/fighters/workoutThumbnails/alana-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/workoutThumbnails/alana-thumbnail.webp -------------------------------------------------------------------------------- /public/images/fighters/workoutThumbnails/andoni-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/workoutThumbnails/andoni-thumbnail.webp -------------------------------------------------------------------------------- /public/images/fighters/workoutThumbnails/arigeli-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/workoutThumbnails/arigeli-thumbnail.webp -------------------------------------------------------------------------------- /public/images/fighters/workoutThumbnails/carlos-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/workoutThumbnails/carlos-thumbnail.webp -------------------------------------------------------------------------------- /public/images/fighters/workoutThumbnails/grefg-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/workoutThumbnails/grefg-thumbnail.webp -------------------------------------------------------------------------------- /public/images/fighters/workoutThumbnails/peereira-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/workoutThumbnails/peereira-thumbnail.webp -------------------------------------------------------------------------------- /public/images/fighters/workoutThumbnails/perxitaa-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/workoutThumbnails/perxitaa-thumbnail.webp -------------------------------------------------------------------------------- /public/images/fighters/workoutThumbnails/rivaldios-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/workoutThumbnails/rivaldios-thumbnail.webp -------------------------------------------------------------------------------- /public/images/fighters/workoutThumbnails/tomas-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/workoutThumbnails/tomas-thumbnail.webp -------------------------------------------------------------------------------- /public/images/fighters/workoutThumbnails/viruzz-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/workoutThumbnails/viruzz-thumbnail.webp -------------------------------------------------------------------------------- /public/images/fighters/workoutThumbnails/westcol-thumbnail.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/fighters/workoutThumbnails/westcol-thumbnail.webp -------------------------------------------------------------------------------- /public/images/flags/ar.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/flags/ar.webp -------------------------------------------------------------------------------- /public/images/flags/co.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/flags/co.webp -------------------------------------------------------------------------------- /public/images/flags/es.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/flags/es.webp -------------------------------------------------------------------------------- /public/images/flags/mx.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/flags/mx.webp -------------------------------------------------------------------------------- /public/images/footer.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/footer.webp -------------------------------------------------------------------------------- /public/images/hero.avif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/hero.avif -------------------------------------------------------------------------------- /public/images/hero.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/hero.png -------------------------------------------------------------------------------- /public/images/hero.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/hero.webp -------------------------------------------------------------------------------- /public/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/logo.png -------------------------------------------------------------------------------- /public/images/logo.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/logo.webp -------------------------------------------------------------------------------- /public/images/presentation-video-cover.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/presentation-video-cover.webp -------------------------------------------------------------------------------- /public/images/versus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/versus.png -------------------------------------------------------------------------------- /public/images/versus.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/images/versus.webp -------------------------------------------------------------------------------- /public/laveladaes.ics: -------------------------------------------------------------------------------- 1 | BEGIN:VCALENDAR 2 | VERSION:2.0 3 | CALSCALE:GREGORIAN 4 | BEGIN:VTIMEZONE 5 | TZID:Europe/Madrid 6 | BEGIN:DAYLIGHT 7 | TZNAME:CEST 8 | TZOFFSETFROM:+0100 9 | TZOFFSETTO:+0200 10 | DTSTART:19700329T020000 11 | RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU 12 | END:DAYLIGHT 13 | BEGIN:STANDARD 14 | TZNAME:CET 15 | TZOFFSETFROM:+0200 16 | TZOFFSETTO:+0100 17 | DTSTART:19701025T030000 18 | RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU 19 | END:STANDARD 20 | END:VTIMEZONE 21 | BEGIN:VEVENT 22 | DTSTAMP:20250401T120000Z 23 | UID:velada5-20250726-001 24 | DTSTART;TZID=Europe/Madrid:20250726T180000 25 | DTEND;TZID=Europe/Madrid:20250727T020000 26 | SUMMARY:Velada del Año 5 27 | URL:https://www.twitch.tv/ibai 28 | DESCRIPTION:🔥 ¡Vuelve la Velada del Año! 🔥\n📅 Fecha: 26 de julio de 2025\n📍 Lugar: Estadio La Cartuja, Sevilla, España\n\n¡No te pierdas el evento de boxeo más esperado del año organizado por Ibai Llanos! 🥊💥\n✨ ¿Qué te espera?\n\n🏆 Combates emocionantes entre creadores de contenido.\n🎤 Espectáculos y actuaciones en vivo.\n🎮 Actividades y sorpresas para la comunidad.\n\nSigue la transmisión en vivo en Twitch y únete a la conversación en redes sociales con el hashtag #Velada5. ¡Nos vemos allí! 🚀\n\n🔗 Más información: https://www.infolavelada.com/ 29 | LOCATION:Estadio La Cartuja, Sevilla, España 30 | BEGIN:VALARM 31 | ACTION:DISPLAY 32 | DESCRIPTION:Velada del Año 5 33 | TRIGGER:-P1D 34 | END:VALARM 35 | BEGIN:VALARM 36 | ACTION:DISPLAY 37 | DESCRIPTION:Velada del Año 5 - Recordatorio 3 horas antes 38 | TRIGGER:-PT3H 39 | END:VALARM 40 | END:VEVENT 41 | END:VCALENDAR 42 | -------------------------------------------------------------------------------- /public/og.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/public/og.jpg -------------------------------------------------------------------------------- /scripts/generate-blur-placeholders.mjs: -------------------------------------------------------------------------------- 1 | import fs from 'node:fs/promises' 2 | import path from 'node:path' 3 | import { fileURLToPath } from 'node:url' 4 | import sharp from 'sharp' 5 | 6 | const __dirname = path.dirname(fileURLToPath(import.meta.url)) 7 | const PUBLIC_DIR = path.join(__dirname, '../public') 8 | const BLUR_DATA_FILE = path.join(__dirname, '../src/blur-placeholders.json') 9 | 10 | const VALID_EXTENSIONS = ['.jpg', '.jpeg', '.png', '.webp', '.avif'] 11 | 12 | // Load existing data 13 | const existingData = await fs.readFile(BLUR_DATA_FILE, 'utf8') 14 | .then(json => JSON.parse(json)) 15 | .catch(() => ({})) 16 | 17 | async function generateBlurPlaceholder(imagePath) { 18 | try { 19 | const imageBuffer = await sharp(imagePath) 20 | .resize(10) // tiny size 21 | .webp({ quality: 20 }) // convert to webp with low quality 22 | .toBuffer() 23 | 24 | // Convert to base64 25 | return `data:image/webp;base64,${imageBuffer.toString('base64')}` 26 | } catch (error) { 27 | console.error(`Error processing ${imagePath}:`, error) 28 | return null 29 | } 30 | } 31 | 32 | async function* walkDirectory(dir) { 33 | const files = await fs.readdir(dir, { withFileTypes: true }) 34 | for (const file of files) { 35 | const res = path.resolve(dir, file.name) 36 | if (file.isDirectory()) { 37 | yield* walkDirectory(res) 38 | } else { 39 | yield res 40 | } 41 | } 42 | } 43 | 44 | async function generatePlaceholders() { 45 | const blurData = {} 46 | let count = 0 47 | let skipped = 0 48 | 49 | try { 50 | for await (const filePath of walkDirectory(PUBLIC_DIR)) { 51 | const ext = path.extname(filePath).toLowerCase() 52 | if (VALID_EXTENSIONS.includes(ext)) { 53 | const relativePath = path.relative(PUBLIC_DIR, filePath) 54 | const stat = await fs.stat(filePath) 55 | const lastModified = stat.mtimeMs 56 | 57 | // Skip if already processed and unchanged 58 | if (existingData[relativePath] && existingData[relativePath].mtime === lastModified) { 59 | blurData[relativePath] = existingData[relativePath] 60 | skipped++ 61 | continue 62 | } 63 | 64 | console.log(`Processing: ${relativePath}`) 65 | 66 | const placeholder = await generateBlurPlaceholder(filePath) 67 | 68 | if (placeholder) { 69 | blurData[relativePath] = { 70 | placeholder, 71 | mtime: lastModified, 72 | } 73 | count++ 74 | } 75 | } 76 | } 77 | 78 | // Save the blur data 79 | await fs.writeFile(BLUR_DATA_FILE, JSON.stringify(blurData, null, 2)) 80 | 81 | count > 0 && console.log(`🆕 Generated blur placeholders for ${count} images`) 82 | skipped > 0 && console.log(`✅ Skipped ${skipped} unchanged images`) 83 | console.log(`📝 Data saved to ${path.relative(process.cwd(), BLUR_DATA_FILE)}`) 84 | } catch (error) { 85 | console.error('Error generating placeholders:', error) 86 | process.exit(1) 87 | } 88 | } 89 | 90 | generatePlaceholders() 91 | -------------------------------------------------------------------------------- /server.js: -------------------------------------------------------------------------------- 1 | import http from 'http'; 2 | 3 | const hostname = '127.0.0.1'; 4 | const port = 3000; 5 | 6 | const server = http.createServer((req, res) => { 7 | res.statusCode = 200; 8 | res.setHeader('Content-Type', 'text/plain'); 9 | res.end('Hola, mundo!\n'); 10 | }); 11 | 12 | server.listen(port, hostname, () => { 13 | console.log(`Servidor corriendo en http://${hostname}:${port}/`); 14 | }); 15 | -------------------------------------------------------------------------------- /src/assets/banners/alsa.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/src/assets/banners/alsa.webp -------------------------------------------------------------------------------- /src/assets/banners/revolut.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/midudev/la-velada-web-oficial/078ffef5bff6534c50a9d3e9da0d0a0b3eec6980/src/assets/banners/revolut.webp -------------------------------------------------------------------------------- /src/assets/sponsors/Alsa.svg: -------------------------------------------------------------------------------- 1 | 8 | 12 | 13 | -------------------------------------------------------------------------------- /src/assets/sponsors/Cerave.svg: -------------------------------------------------------------------------------- 1 | 8 | 12 | 13 | -------------------------------------------------------------------------------- /src/assets/sponsors/CocaCola.svg: -------------------------------------------------------------------------------- 1 | 2 | 6 | -------------------------------------------------------------------------------- /src/assets/sponsors/Infojobs.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /src/assets/sponsors/Mahou.svg: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 11 | 14 | 17 | 20 | -------------------------------------------------------------------------------- /src/assets/sponsors/Revolut.svg: -------------------------------------------------------------------------------- 1 | 2 | 5 | -------------------------------------------------------------------------------- /src/assets/sponsors/Spotify.svg: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 10 | 12 | 13 | 16 | 17 | -------------------------------------------------------------------------------- /src/assets/sponsors/Vicio.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | -------------------------------------------------------------------------------- /src/assets/svg/close.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/svg/github.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/svg/instagram.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/svg/kick.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/svg/logo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | -------------------------------------------------------------------------------- /src/assets/svg/tiktok.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/svg/twitch.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/svg/x.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/svg/youtube.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/components/BoxerClip.astro: -------------------------------------------------------------------------------- 1 | --- 2 | interface Clip { 3 | text: string 4 | url: string 5 | } 6 | 7 | interface BoxerClipProps { 8 | clips?: Clip[] 9 | } 10 | 11 | const { clips = [] } = Astro.props as BoxerClipProps 12 | --- 13 | 14 | 30 | -------------------------------------------------------------------------------- /src/components/BoxerClipCard.astro: -------------------------------------------------------------------------------- 1 | --- 2 | const { index, text, url, externalPlayer } = Astro.props 3 | const delay = index * 400 4 | --- 5 | 6 |
  • 10 | { 11 | externalPlayer && ( 12 | 17 | {text} 18 | 19 | 20 | ) 21 | } 22 | { 23 | !externalPlayer && ( 24 |
    25 | {text} 26 | 27 |
    28 | ) 29 | } 30 |
  • 31 | -------------------------------------------------------------------------------- /src/components/BoxerClipDrawer.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import BoxerClipPlayer from './BoxerClipPlayerCard.astro' 3 | import Youtube from '@/assets/svg/youtube.svg' 4 | import CloseIcon from '@/assets/svg/close.svg' 5 | 6 | interface Clip { 7 | text: string 8 | url: string 9 | } 10 | 11 | interface BoxerClipProps { 12 | clips?: Clip[] 13 | externalPlayer?: boolean 14 | } 15 | 16 | const { clips = [] } = Astro.props as BoxerClipProps 17 | 18 | // Función para extraer el id del clip del video de una URL de YouTube 19 | const extractVideoClipId = (url: string, type: string = 'clip_id') => { 20 | let match = null 21 | if (type === 'clip_id') { 22 | match = url.match(/\/embed\/(.+)/) 23 | } else { 24 | match = url.match(/\/embed\/([^?]+)/) 25 | } 26 | return match ? match[1] : null 27 | } 28 | 29 | const extractVideoIdFromClips = (clips: Clip[]) => { 30 | const [clip] = clips 31 | if (!clip) return null 32 | return extractVideoClipId(clip.url, 'video_id') 33 | } 34 | --- 35 | 36 |
    39 |
    40 |
    44 | Clips del combate 45 |
    46 | 58 |
    59 |
    60 | 71 | { 72 | clips.length > 0 && ( 73 | 78 | 79 | Ver video completo 80 | 81 | ) 82 | } 83 |
    84 |
    85 | -------------------------------------------------------------------------------- /src/components/BoxerClipList.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import BoxerClipCard from './BoxerClipCard.astro' 3 | import Youtube from '@/assets/svg/youtube.svg' 4 | 5 | interface Clip { 6 | text: string 7 | url: string 8 | } 9 | 10 | interface BoxerClipProps { 11 | clips?: Clip[] 12 | externalPlayer?: boolean 13 | } 14 | 15 | const { clips = [], externalPlayer } = Astro.props as BoxerClipProps 16 | const clips_sorted_by_text_size = clips.sort((a, b) => b.text.length - a.text.length) 17 | --- 18 | 19 | 20 | 21 | 38 | 39 | -------------------------------------------------------------------------------- /src/components/BoxerClipPlayerCard.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import LiteYouTube from './LiteYouTube.astro' 3 | const { videoId, clipId, text } = Astro.props 4 | --- 5 | 6 |
  • 7 |
    8 | 13 |
    14 |
    15 |

    {text}

    16 |
    17 |
  • 18 | -------------------------------------------------------------------------------- /src/components/BoxerProfileCard.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import Logo from '@/assets/svg/logo.svg' 3 | 4 | const { fighter, birthDate } = Astro.props 5 | 6 | const generateRandomBars = () => { 7 | const bars = [] 8 | for (let i = 0; i < 20; i++) { 9 | // Random width between 4px and 20px 10 | bars.push(Math.floor(Math.random() * (2 - 1 + 1)) + 2) 11 | } 12 | return bars 13 | } 14 | 15 | const bars = generateRandomBars() 16 | --- 17 | 18 |
    21 | 22 |
    23 | 24 |
    25 | 26 |
    27 |

    30 | {fighter.realName} 31 |

    32 |
    33 | 34 |
    35 |
    36 | Edad 37 | {fighter.age} años 38 |
    39 |
    40 | Peso 41 | {fighter.weight}kg 42 |
    43 |
    44 | Nacimiento 45 | {birthDate} 46 |
    47 |
    48 | Altura 49 | {fighter.height}m 50 |
    51 |
    52 |
    53 | 54 |
    57 |
    58 | {`Tarjeta 63 |
    64 |
    65 |
    66 | 67 | 68 | 94 |
    95 | -------------------------------------------------------------------------------- /src/components/BoxerSocialLink.astro: -------------------------------------------------------------------------------- 1 | --- 2 | // BoxerSocialLink.astro 3 | import type { Social } from '../types/social'; 4 | const { social } = Astro.props as { social: Social }; 5 | 6 | const getColorBySocialNetwork = (name: string) => { 7 | const socialNewtwork = name.toLowerCase(); 8 | const commonClass = 'text-white bg-gradient-to-br'; 9 | switch (socialNewtwork) { 10 | case 'facebook': 11 | return `${commonClass} from-blue-600 to-blue-800`; 12 | case 'instagram': 13 | return `${commonClass} from-yellow-400 via-pink-500 to-purple-600`; 14 | case 'x': // Twitter / X 15 | return `${commonClass} from-gray-800 to-black`; 16 | case 'youtube': 17 | return `${commonClass} from-red-600 to-red-800`; 18 | case 'tiktok': 19 | return `${commonClass} from-black via-gray-800 to-pink-600`; 20 | case 'twitch': 21 | return `${commonClass} from-purple-500 to-purple-800`; 22 | case 'kick': 23 | return `${commonClass} from-green-500 to-green-700`; 24 | default: 25 | return `${commonClass} from-gray-400 to-gray-600`; 26 | } 27 | }; 28 | --- 29 | 30 | 36 | {social.image?.logo && ( 37 | // Asegúrate de que logo es un componente o imagen 38 | typeof social.image.logo === 'string' ? ( 39 | {social.name} 40 | ) : ( 41 | 42 | ) 43 | )} 44 | {social.followers} 45 | -------------------------------------------------------------------------------- /src/components/BoxerWorkout.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import LiteYouTube from './LiteYouTube.astro' 3 | import SectionTitle from './SectionTitle.astro' 4 | interface Props { 5 | workout?: { 6 | videoID: string 7 | thumbnail: string 8 | } 9 | } 10 | const { workout = undefined } = Astro.props 11 | const hasWorkout = workout !== undefined 12 | --- 13 | 14 | { 15 | hasWorkout && ( 16 |
    17 |
    18 | 19 |

    Preparación para el combate

    20 |
    21 |
    22 | 23 |
    24 |
    25 | ) 26 | } 27 | -------------------------------------------------------------------------------- /src/components/Boxers/BoxerBigImages.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import type { Fighters } from '@/types/fighters' 3 | interface Props { 4 | boxers: Fighters[] 5 | } 6 | 7 | const { boxers } = Astro.props 8 | --- 9 | 10 |
    11 |
    12 | { 13 | boxers.map(({ id, name }) => ( 14 |
    15 | 23 |
    27 |
    28 | )) 29 | } 30 |
    31 | 32 |
    35 | { 36 | boxers.map(({ id, name }) => ( 37 | 46 | )) 47 | } 48 |
    49 |
    50 | -------------------------------------------------------------------------------- /src/components/Boxers/ColumnBoxers.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import BoxerCard from '@/components/BoxerCard.astro' 3 | import type { HTMLAttributes } from 'astro/types' 4 | 5 | import type { Fighters } from '@/types/fighters' 6 | 7 | interface Props { 8 | boxer: Fighters 9 | versus: Fighters 10 | class?: string 11 | selectedBoxer: Fighters 12 | imgLoading?: HTMLAttributes<'img'>['loading'] 13 | } 14 | 15 | const { boxer, versus, class: className = '', selectedBoxer, imgLoading } = Astro.props 16 | 17 | const hasSameOpponents = (selectedBoxerOpponents: string[], opponents: string[]) => { 18 | return selectedBoxerOpponents.every((sBoxerOpponent) => opponents.includes(sBoxerOpponent)) 19 | } 20 | 21 | const isOpponent = (id: Fighters['id'], versus: Fighters['versus']) => { 22 | const selectedBoxerOpponents = Array.isArray(selectedBoxer.versus) 23 | ? selectedBoxer.versus 24 | : [selectedBoxer.versus] 25 | 26 | const opponents = Array.isArray(versus) ? versus : [versus] 27 | 28 | return ( 29 | selectedBoxerOpponents.includes(id) || 30 | (hasSameOpponents(selectedBoxerOpponents, opponents) && id !== selectedBoxer.id) 31 | ) 32 | } 33 | --- 34 | 35 |
    36 | 37 | Imagen de Versus 44 | 45 |
    46 | 47 | 116 | -------------------------------------------------------------------------------- /src/components/Boxers/SelectYourBoxer.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import BoxerCard from '@/components/BoxerCard.astro' 3 | import BoxerBigImages from '@/components/Boxers/BoxerBigImages.astro' 4 | import ColumnBoxers from '@/components/Boxers/ColumnBoxers.astro' 5 | import type { Fighters } from '@/types/fighters' 6 | import HorizontalScroll from '@/components/Icons/HorizontalScroll.astro' 7 | import { getBoxerById, getBoxerVersusById } from '@/lib/get-boxers' 8 | import { removeMirroredPairs } from '@/utils/remove-mirrored-pairs' 9 | 10 | interface Props { 11 | boxers: Fighters[] 12 | selectedBoxer: Fighters 13 | } 14 | 15 | const { boxers, selectedBoxer } = Astro.props 16 | 17 | const firstRow = boxers.slice(0, 6) 18 | const leftRow = firstRow.slice(0, 3) 19 | const rightRow = firstRow.slice(3) 20 | 21 | const secondRow = boxers.slice(6) 22 | const leftSecondRow = secondRow.slice(0, 4) 23 | const rightSecondRow = secondRow.slice(4, 8) 24 | 25 | let groupBoxersByVersus = boxers.reduce( 26 | (acc, boxer) => { 27 | const { id, versus } = boxer 28 | if (acc[versus]) { 29 | acc[versus].push(id) 30 | } else { 31 | acc[versus] = [id] 32 | } 33 | return acc 34 | }, 35 | {} as Record, 36 | ) 37 | 38 | groupBoxersByVersus = removeMirroredPairs(groupBoxersByVersus) 39 | 40 | // Ordenar para que el combate principal sea el primero 41 | const mobileBoxers = [ 42 | Object.keys(groupBoxersByVersus).find((boxerId) => boxerId === 'westcol'), 43 | ...Object.keys(groupBoxersByVersus).filter((boxerId) => boxerId !== 'westcol'), 44 | ] 45 | 46 | const animationDelay = [500, 700, 800] 47 | const reverseDelay = [...animationDelay].reverse() 48 | 49 | const animationDelaySecondRow = [...animationDelay, 900] 50 | const reverseDelaySecondRow = [...animationDelaySecondRow].reverse() 51 | --- 52 | 53 | <> 54 | 55 | 56 |
    60 | 87 | 88 | 108 |
    109 |
    110 |
    111 |
    114 | { 115 | mobileBoxers.map((boxerId, index) => { 116 | const boxer = getBoxerById(boxerId) 117 | return ( 118 |
    121 | 126 |
    127 | ) 128 | }) 129 | } 130 |
    131 |
    132 | 133 |
    134 | 135 | 136 | 147 | -------------------------------------------------------------------------------- /src/components/CountdownSmall.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import Date from '@/components/Date.astro' 3 | 4 | interface Props { 5 | timestamp: number 6 | } 7 | 8 | const { timestamp } = Astro.props 9 | const textResponsiveStyles = 'text-base font-bold md:text-xl lg:text-2xl' 10 | --- 11 | 12 |
    16 |
    22 | 30 | 38 | 46 | 54 |
    55 |
    56 | 57 | 64 | 65 | 181 | -------------------------------------------------------------------------------- /src/components/Date.astro: -------------------------------------------------------------------------------- 1 | --- 2 | interface Props { 3 | wrapperClassName: string 4 | dateType: string 5 | attribute: Record 6 | max: number 7 | className?: string 8 | withBackground?: boolean 9 | } 10 | 11 | const { 12 | dateType, 13 | attribute, 14 | className, 15 | max, 16 | wrapperClassName, 17 | withBackground = false, 18 | } = Astro.props 19 | const maximumSplit = Astro.props.max.toString().split('') 20 | const FLIP_CARD_STYLES = 'flip-card w-[.7em] sm:w-[.725em] h-[1em] inline-flex flex-col relative' 21 | --- 22 | 23 |
    24 |
    32 |
    33 |
    34 |
    35 |
    38 | {maximumSplit[0]} 39 |
    40 |
    41 | {maximumSplit[0]} 42 |
    43 |
    44 |
    45 |
    46 |
    47 |
    50 | {maximumSplit[1]} 51 |
    52 |
    53 | {maximumSplit[1]} 54 |
    55 |
    56 |
    57 | { 58 | max > 99 && ( 59 |
    60 |
    61 |
    62 | {maximumSplit[2]} 63 |
    64 |
    65 | {maximumSplit[2]} 66 |
    67 |
    68 |
    69 | ) 70 | } 71 |
    72 | {dateType} 76 |
    77 |
    78 | -------------------------------------------------------------------------------- /src/components/FAQ.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import SectionTitle from './SectionTitle.astro' 3 | 4 | const faqs = [ 5 | { 6 | question: '¿Qué es La Velada del Año?', 7 | answer: 8 | 'La Velada del Año acoge combates de boxeo entre los mayores streamers y creadores contenido del mundo en habla hispana. Durante meses, dejan su habitual rutina para prepararse física y mentalmente para combatir en el cuadrilátero en un estadio a reventar. Además del esperado desenlace sobre el ring, se disfruta de un espectacular show musical en vivo con estrellas nacionales e internacionales.', 9 | }, 10 | { 11 | question: '¿Dónde puedo ver el evento?', 12 | answer: `El evento se transmite en directo por el canal de Twitch de Ibai Llanos: twitch.tv/ibai Actualmente, La Velada posee el récord de la emisión más vista en la historia de Twitch, con más de 3,8 millones de dispositivos conectados al mismo tiempo en la pasada edición en el Estadio Santiago Bernabéu en 2024. En el top 3 de emisiones más vistas de la plataforma se encuentran las tres últimas veladas.`, 13 | }, 14 | { 15 | question: '¿A qué hora empieza La Velada V?', 16 | answer: 17 | 'El horario oficial se anunciará próximamente en las redes sociales de Ibai y en la web oficial.', 18 | }, 19 | { 20 | question: '¿Quién va a pelear en La Velada del Año V?', 21 | answer: `
      22 |
    • Primer combate: Peereira7 vs Rivaldios
    • 23 |
    • Segundo combate: Perxitaa vs Gaspi
    • 24 |
    • Tercer combate: Abby vs Roro
    • 25 |
    • Cuarto combate: Andoni vs Carlos Belcast
    • 26 |
    • Quinto combate: Alana vs Ari Geli
    • 27 |
    • Sexto combate: Viruzz vs Tomás Mazza
    • 28 |
    • Séptimo combate: TheGrefg vs Westcol
    • 29 |
    `, 30 | }, 31 | { 32 | question: '¿Qué artistas participan este año?', 33 | answer: 34 | 'Pronto Ibai anunciará en directo quiénes serán los artistas nacionales e internacionales que aportarán el show entre combates a La Velada V.', 35 | }, 36 | { 37 | question: '¿Habrá comida en el evento? ¿Puedo llevar la mía?', 38 | answer: 39 | 'Sí, habrá comida en el evento que podrás comprar. Además, puedes llevar la tuya de casa. Sólo ten en cuenta que se te retirarán los tapones de las botellas y cualquier objeto que pudieras lanzar, por motivos de seguridad.', 40 | }, 41 | ] 42 | --- 43 | 44 |
    45 | 46 |
      47 | { 48 | faqs.map((faq) => ( 49 |
    • 50 |
      51 | 52 | 62 | {faq.question} 63 | 64 |
      65 |

      66 |

      67 |
      68 |
    • 69 | )) 70 | } 71 |
    72 | {/* Animación fadeInFaq para respuestas */} 73 | 88 |
    89 | -------------------------------------------------------------------------------- /src/components/FighterSelector.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import BoxerCard from "./BoxerCard.astro"; 3 | 4 | const { id, name, boxerCardClass, versus } = Astro.props; 5 | --- 6 | 7 |
    8 | 9 | 38 |
    39 | -------------------------------------------------------------------------------- /src/components/HeroCss.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { FIGHTERS } from '@/consts/fighters' 3 | import FighterSelector from './FighterSelector.astro' 4 | 5 | const firstRow = FIGHTERS.slice(0, 6) 6 | const leftRow = firstRow.slice(0, 3) 7 | const rightRow = firstRow.slice(3) 8 | const secondRow = FIGHTERS.slice(6) 9 | --- 10 | 11 |
    12 |
    15 |
    16 | 17 |
    18 |
    26 |

    29 | 26 DE
    JULIO 30 |

    31 |
    32 | La Velada del Año V 39 |
    40 |
    41 | 42 |
    43 |

    46 | ESTADIO
    LA CARTUJA,
    SEVILLA 47 |

    48 |
    49 | 55 | TWITCH.TV
    IBAI 56 |
    57 |
    58 |
    59 | 60 |
    61 |
    62 |
    63 | { 64 | leftRow.map(({ id, name, versus }) => ( 65 | 71 | )) 72 | } 73 |
    74 |
    75 | { 76 | rightRow.map(({ id, name, versus }) => ( 77 | 83 | )) 84 | } 85 |
    86 |
    87 | 88 |
    89 | { 90 | secondRow.map(({ id, name, versus }) => ( 91 | 97 | )) 98 | } 99 |
    100 |
    101 |
    102 |
    103 | 104 | 109 | -------------------------------------------------------------------------------- /src/components/Icons/HorizontalScroll.astro: -------------------------------------------------------------------------------- 1 | 17 | -------------------------------------------------------------------------------- /src/components/Icons/index.ts: -------------------------------------------------------------------------------- 1 | import { ChevronLeft, ChevronRight, XIcon, type Icon } from '@lucide/astro' 2 | 3 | export const Icons: Record = { 4 | ChevronLeft, 5 | ChevronRight, 6 | XIcon, 7 | } 8 | -------------------------------------------------------------------------------- /src/components/LinkToAddCalendar.astro: -------------------------------------------------------------------------------- 1 | --- 2 | interface Props { 3 | url?: string 4 | class?: string 5 | } 6 | const { url = '/laveladaes.ics', class: className } = Astro.props 7 | --- 8 | 9 | 19 |
    22 |
    23 |
    24 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 |
    46 |
    47 | -------------------------------------------------------------------------------- /src/components/OptimizedImage.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { getBlurredImageUrl } from '@/utils/get-blurred-image-url' 3 | import { getOptimizedImageUrl } from '@/utils/get-optimized-image-url' 4 | import type { GetImageResult, ImageMetadata } from 'astro' 5 | import type { HTMLAttributes } from 'astro/types' 6 | import { Image } from 'astro:assets' 7 | 8 | type ImageSource = string | ImageMetadata | Promise<{ default: ImageMetadata }> 9 | 10 | type Props = HTMLAttributes<'img'> & { 11 | src: ImageSource 12 | alt: string 13 | containerClassName?: string 14 | class?: string 15 | width?: number 16 | height?: number 17 | } 18 | 19 | const { src, alt, containerClassName, class: imageClassName, width, height, ...rest } = Astro.props 20 | 21 | const imageObject = await getOptimizedImageUrl({ src, width, height }) 22 | 23 | const blurredPlaceholder = await getBlurredImageUrl(imageObject) 24 | --- 25 | 26 |
    27 | {/* Blurred placeholder */} 28 | 36 | 37 | {/* Main image */} 38 | {alt} 47 |
    48 | -------------------------------------------------------------------------------- /src/components/SectionTitle.astro: -------------------------------------------------------------------------------- 1 | --- 2 | interface Props { 3 | class?: string 4 | title: string 5 | } 6 | 7 | const { class: className, title } = Astro.props 8 | --- 9 | 10 |

    11 |
    12 | {title} 13 |
    14 |

    15 | -------------------------------------------------------------------------------- /src/components/Spotlight.astro: -------------------------------------------------------------------------------- 1 | --- 2 | export interface Props { 3 | gradientFirst?: string 4 | gradientSecond?: string 5 | gradientThird?: string 6 | translateY?: number 7 | width?: number 8 | height?: number 9 | smallWidth?: number 10 | duration?: number 11 | xOffset?: number 12 | fixed?: boolean 13 | } 14 | 15 | const { 16 | gradientFirst = 'radial-gradient(68.54% 68.72% at 55.02% 31.46%, oklch(82.97% 0.148864 181.7442 / .58) 0, oklch(100% 55% 181 / .02) 50%, oklch(45% 100% 181 / 0) 80%)', 17 | gradientSecond = 'radial-gradient(50% 50% at 50% 50%, oklch(82.97% 0.148864 181.7442 / .56) 0, oklch(100% 55% 181 / .02) 80%, transparent 100%)', 18 | gradientThird = 'radial-gradient(50% 50% at 50% 50%, oklch(82.97% 0.148864 181.7442 / .24) 0, oklch(100% 45% 181 / .02) 80%, transparent 100%)', 19 | 20 | translateY = -350, 21 | width = 560, 22 | height = 1380, 23 | smallWidth = 240, 24 | duration = 7, 25 | xOffset = 100, 26 | 27 | fixed = false, 28 | } = Astro.props 29 | --- 30 | 31 | 119 | 120 | 151 | -------------------------------------------------------------------------------- /src/components/SynthwaveText.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import type { HTMLAttributes, HTMLTag, Polymorphic } from 'astro/types' 3 | import type { ErrorWithMetadata } from 'node_modules/astro/dist/core/errors' 4 | 5 | type Props = Polymorphic<{ as: Tag }> & HTMLAttributes 6 | 7 | const { as: Element = 'h1', class: className, ...rest } = Astro.props 8 | 9 | // Throw an error if the component is used without a default slot 10 | if (!Astro.slots.has('default')) { 11 | const noSlotError = new Error( 12 | 'SynthwaveText component must have a text content.', 13 | ) as ErrorWithMetadata 14 | noSlotError.name = 'SynthwaveTextError' 15 | noSlotError.hint = `See the examples below: \n✅ Valid \n peereira7 \n❌ Invalid \n ` 16 | throw noSlotError 17 | } 18 | 19 | // Get the rendered HTML content of the default slot 20 | const text = await Astro.slots.render('default') 21 | 22 | // Throw error if the slot contains HTML tags 23 | if (!text || text.match(/(<([^>]+)>)/gi)) { 24 | const invalidTextError = new Error("SynthwaveText's content must be text.") as ErrorWithMetadata 25 | invalidTextError.name = 'SynthwaveTextError' 26 | invalidTextError.hint = `If you want to use HTML tags, use the \`as\` prop to specify the element type. \nSee the examples below: \n✅ Valid \n \`peereira7\`\n❌ Invalid \n \`peereira7\`` 27 | throw invalidTextError 28 | } 29 | --- 30 | 31 | 36 | {text} 37 | 38 | 39 | 101 | -------------------------------------------------------------------------------- /src/consts/bannerData.ts: -------------------------------------------------------------------------------- 1 | import RevolutBanner from '@/assets/banners/revolut.webp' 2 | import AlsaBanner from '@/assets/banners/alsa.webp' 3 | import type { Banner } from '@/types/bannerType' 4 | 5 | export const BANNERS: Banner[] = [ 6 | { 7 | id: "revolut", 8 | name: "Revolut", 9 | url: "https://get.revolut.com/z4lF/velada5nl", 10 | label: "Ir a la promoción de Revolut", 11 | image: { 12 | logo: RevolutBanner.src, 13 | width: 600, 14 | height: 200, 15 | }, 16 | }, 17 | { 18 | id: 'alsa', 19 | name: 'Alsa', 20 | url: 'https://alsabuslaveladav.qr4events.com/?utm_source=twitch&utm_medium=socialmedia&utm_campaign=2025_05_busesveladav&utm_content=', 21 | label: 'Ir a la promoción de Alsa', 22 | image: { 23 | logo: AlsaBanner.src, 24 | width: 600, 25 | height: 200, 26 | }, 27 | }, 28 | ] 29 | -------------------------------------------------------------------------------- /src/consts/combats.ts: -------------------------------------------------------------------------------- 1 | import type { Combat } from '../types/Combat' 2 | 3 | export const COMBATS: Combat[] = [ 4 | { 5 | id: '1-peereira-vs-rivaldios', 6 | number: 1, 7 | fighters: ['peereira', 'rivaldios'], 8 | title: 'Peereira7 vs Rivaldios', 9 | video: '', 10 | description: 11 | 'El mayor ‘beef’ en la historia de La Velada del Año tardó segundos en evidenciarse durante la presentación de esta quinta edición, con Pereira y Rivaldios muy calientes y teniendo que ser separados en el escenario. Y todo por un pique que viene de El Partidazo de YouTubers 4 y ninguno parece haber olvidado. Chispas aseguradas para abrir el evento.', 12 | }, 13 | { 14 | id: '2-perxitaa-vs-gaspi', 15 | number: 2, 16 | fighters: ['perxitaa', 'gaspi'], 17 | title: 'Perxitaa vs Gaspi', 18 | video: '', 19 | description: 20 | 'El duelo más inesperado de esta Velada viene marcado por las dudas de Perxitaa sobre si su rival Gaspi se toma a broma el combate o realmente solo está jugando al despiste para dejarlo KO en La Cartuja delante de todos. Sea como sea, enfrentamiento de mucha altura y peso que asegura espectáculo.', 21 | }, 22 | { 23 | id: '3-abby-vs-roro', 24 | number: 3, 25 | fighters: ['abby', 'roro'], 26 | title: 'Abby vs Roro', 27 | video: '', 28 | description: 29 | 'Otro de los grandes piques de la noche del 26 de julio y el primero de los dos interesantísimos combates femeninos que regala La Velada V. Abby vs Roro será un duelo entre dos creadoras muy diferentes, que han tenido sus palabras en el pasado. La fuerte personalidad de Abby contrasta con la aparente dulzura de Roro, pero a veces las apariencias son solo eso.', 30 | }, 31 | { 32 | id: '4-andoni-vs-carlos', 33 | number: 4, 34 | fighters: ['andoni', 'carlos'], 35 | title: 'Andoni vs Carlos Belcast', 36 | video: '', 37 | description: 38 | 'Duelo de titanes, de bestias, amigos y cracks del culturismo que hará temblar el ring. Será el combate más pesado de esta edición de La Velada y probablemente el de más músculo de su historia. Y aquí la gran pregunta es cómo encajará el otro un buen golpe de su oponente. ¿Se viene victoria por KO? Andoni y Carlos son capaces.', 39 | }, 40 | { 41 | id: '5-alana-vs-arigeli', 42 | number: 5, 43 | fighters: ['alana', 'arigeli'], 44 | title: 'Alana vs Ari Geli', 45 | video: '', 46 | description: 47 | '“Tuviste suerte, Alana”, decía el tiktok de Ari Geli en 2024 mientras la española entrenaba boxeo, sugiriendo que en un combate entre ambas la mexicana no tendría nada que hacer. Entonces no se vieron las caras, pero el ‘beef’ ya estaba naciendo y un año después Sevilla será testigo de lo que estas dos creadoras y deportistas pueden dar de sí mismas. Es difícil encontrar una contrincante que pueda hacer frente a Alana por lo que ha demostrado, pero Ari se presenta como una oponente a la altura.', 48 | }, 49 | { 50 | id: '6-viruzz-vs-tomas', 51 | number: 6, 52 | fighters: ['viruzz', 'tomas'], 53 | title: 'Viruzz vs Tomas Mazza', 54 | video: '', 55 | description: 56 | 'El único combate sin casco de la noche, debido a la experiencia boxística de estos dos monstruos, enfrentará al veterano Viruzz contra la savia nueva de Tomás Mazza. Duelo hispanoargentino del que se espera mucho entre dos creadores que han prometido algo muy loco: el perdedor se tatuará el nombre del rival.', 57 | }, 58 | { 59 | id: '7-grefg-vs-westcol', 60 | number: 7, 61 | fighters: ['grefg', 'westcol'], 62 | title: 'The Grefg vs Westcol', 63 | video: '', 64 | description: 65 | 'El ‘main event’ de La Velada del Año V, el broche perfecto a una cita mágica con este cara a cara entre dos de los más grandes creadores de contenido en habla hispana a ambos lados del Atlántico. Con apuestas cruzadas, una de ellas la bolsa del combate, el respeto que ambos se tienen se complementa con un ‘beef’ que va creciendo con el paso de los meses. ¿Confirmará TheGrefg su a priori mejor preparación física? ¿Sorprenderá Westcol a todos y romperá el favoritismo del rival?', 66 | }, 67 | ] 68 | -------------------------------------------------------------------------------- /src/consts/countries.ts: -------------------------------------------------------------------------------- 1 | import ar from '../../public/images/flags/ar.webp' 2 | import mx from '../../public/images/flags/mx.webp' 3 | import co from '../../public/images/flags/co.webp' 4 | import es from '../../public/images/flags/es.webp' 5 | 6 | export type Country = { 7 | id: string 8 | name: string 9 | image: any // Assuming the image type is any for now 10 | continent: string 11 | } 12 | 13 | export const countries: Country[] = [ 14 | { 15 | id: 'ar', 16 | name: 'Argentina', 17 | image: ar, 18 | continent: 'South America', 19 | }, 20 | { 21 | id: 'mx', 22 | name: 'México', 23 | image: mx, 24 | continent: 'North America', 25 | }, 26 | { 27 | id: 'co', 28 | name: 'Colombia', 29 | image: co, 30 | continent: 'South America', 31 | }, 32 | { 33 | id: 'es', 34 | name: 'España', 35 | image: es, 36 | continent: 'Europe', 37 | }, 38 | ] 39 | -------------------------------------------------------------------------------- /src/consts/pageTitles.ts: -------------------------------------------------------------------------------- 1 | export const fixedTitle: string = 'La Velada del Año V Web Oficial - Evento de boxeo de Ibai Llanos con creadores de contenido' 2 | 3 | export const porra: string = `La Porra - ${fixedTitle}` 4 | 5 | export const combates: string = `Combates - ${fixedTitle}` 6 | 7 | export const combate = (fighter1: string | undefined, fighter2: string | undefined): string => `${fighter1} vs ${fighter2} - ${fixedTitle}` 8 | 9 | export const entradas: string = `Entradas - ${fixedTitle}` -------------------------------------------------------------------------------- /src/consts/social.ts: -------------------------------------------------------------------------------- 1 | import type { Social } from "@/types/social"; 2 | 3 | import X from "@/assets/svg/x.svg"; 4 | import Instagram from "@/assets/svg/instagram.svg"; 5 | import GitHub from "@/assets/svg/github.svg"; 6 | 7 | export const SOCIAL: Social[] = [ 8 | { 9 | id: "x", 10 | name: "X", 11 | url: "https://x.com/infolavelada", 12 | label: "Visitar perfil de InfoLaVelada en X", 13 | image: { 14 | logo: X, 15 | width: 200, 16 | height: 200, 17 | }, 18 | }, 19 | 20 | { 21 | id: "instagram", 22 | name: "Instagram", 23 | url: "https://instagram.com/infoLaVelada", 24 | label: "Visitar perfil de InfoLaVelada en Instagram", 25 | image: { 26 | logo: Instagram, 27 | width: 200, 28 | height: 200, 29 | }, 30 | }, 31 | 32 | { 33 | id: "github", 34 | name: "GitHub", 35 | url: "https://github.com/midudev/la-velada-web-oficial", 36 | label: "Visitar repositorio de la Velada Oficial en GitHub", 37 | image: { 38 | logo: GitHub, 39 | width: 200, 40 | height: 200, 41 | }, 42 | }, 43 | ]; 44 | -------------------------------------------------------------------------------- /src/consts/sponsors.ts: -------------------------------------------------------------------------------- 1 | import type { Sponsors } from '@/types/sponsors' 2 | 3 | import Alsa from '@/assets/sponsors/Alsa.svg' 4 | import Cerave from '@/assets/sponsors/Cerave.svg' 5 | import CocaCola from '@/assets/sponsors/CocaCola.svg' 6 | import Grefusa from '@/assets/sponsors/Grefusa.svg' 7 | import Infojobs from '@/assets/sponsors/Infojobs.svg' 8 | import Mahou from '@/assets/sponsors/Mahou.svg' 9 | import Maxibon from '@/assets/sponsors/Maxibon.svg' 10 | import Nothing from '@/assets/sponsors/Nothing.svg' 11 | import Revolut from '@/assets/sponsors/Revolut.svg' 12 | import Spotify from '@/assets/sponsors/Spotify.svg' 13 | import Vicio from '@/assets/sponsors/Vicio.svg' 14 | 15 | export const SPONSORS: Sponsors[] = [ 16 | { 17 | id: 'alsa', 18 | name: 'Alsa', 19 | url: 'https://www.alsa.es/', 20 | label: 'Ir a la página web de Alsa', 21 | image: { 22 | logo: Alsa, 23 | width: 200, 24 | height: 200, 25 | }, 26 | }, 27 | { 28 | id: 'grefusa', 29 | name: 'Grefusa', 30 | url: 'https://www.grefusa.com/', 31 | label: 'Ir a la página web de Grefusa', 32 | image: { 33 | logo: Grefusa, 34 | width: 200, 35 | height: 200, 36 | }, 37 | }, 38 | { 39 | id: 'spotify', 40 | name: 'Spotify', 41 | url: 'https://www.spotify.com/', 42 | label: 'Ir a la página web de Spotify', 43 | image: { 44 | logo: Spotify, 45 | width: 200, 46 | height: 200, 47 | }, 48 | }, 49 | { 50 | id: 'revolut', 51 | name: 'Revolut', 52 | url: 'https://www.revolut.com/', 53 | label: 'Ir a la página web de Revolut', 54 | image: { 55 | logo: Revolut, 56 | width: 200, 57 | height: 200, 58 | }, 59 | }, 60 | { 61 | id: 'vicio', 62 | name: 'Vicio', 63 | url: 'https://www.vicio.com/', 64 | label: 'Ir a la página web de Vicio', 65 | image: { 66 | logo: Vicio, 67 | width: 200, 68 | height: 200, 69 | }, 70 | }, 71 | { 72 | id: 'coca-cola', 73 | name: 'Coca-Cola', 74 | url: 'https://www.cocacola.es/', 75 | label: 'Ir a la página web de Coca-Cola', 76 | image: { 77 | logo: CocaCola, 78 | width: 200, 79 | height: 200, 80 | }, 81 | }, 82 | { 83 | id: 'infojobs', 84 | name: 'Infojobs', 85 | url: 'https://www.infojobs.net/', 86 | label: 'Ir a la página web de Infojobs', 87 | image: { 88 | logo: Infojobs, 89 | width: 200, 90 | height: 200, 91 | }, 92 | }, 93 | { 94 | id: 'nothing', 95 | name: 'Nothing', 96 | url: 'https://www.nothing.tech/', 97 | label: 'Ir a la página web de Nothing', 98 | image: { 99 | logo: Nothing, 100 | width: 200, 101 | height: 200, 102 | }, 103 | }, 104 | { 105 | id: 'cerave', 106 | name: 'Cerave', 107 | url: 'https://www.cerave.es/', 108 | label: 'Ir a la página web de Cerave', 109 | image: { 110 | logo: Cerave, 111 | width: 200, 112 | height: 200, 113 | }, 114 | }, 115 | { 116 | id: 'mahou', 117 | name: 'Mahou', 118 | url: 'https://www.mahou.es/', 119 | label: 'Ir a la página web de Mahou', 120 | image: { 121 | logo: Mahou, 122 | width: 200, 123 | height: 200, 124 | }, 125 | }, 126 | { 127 | id: 'maxibon', 128 | name: 'Maxibon', 129 | url: 'https://froneri.es/nuestras-marcas/maxibon', 130 | label: 'Ir a la página web de Maxibon', 131 | image: { 132 | logo: Maxibon, 133 | width: 200, 134 | height: 200, 135 | }, 136 | }, 137 | ] as const 138 | -------------------------------------------------------------------------------- /src/layouts/BackgroundLayout.astro: -------------------------------------------------------------------------------- 1 |
    2 |
    5 | 6 |
    7 |
    8 | -------------------------------------------------------------------------------- /src/layouts/Layout.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { ClientRouter } from 'astro:transitions' 3 | import Analytics from '@vercel/analytics/astro' 4 | 5 | import '@/styles/global.css' 6 | 7 | import Header from '@/sections/Header.astro' 8 | import Footer from '@/sections/Footer.astro' 9 | import Sponsors from '@/sections/Sponsors.astro' 10 | import BannerSponsors from '@/sections/BannerSponsors.astro' 11 | import { fixedTitle } from '@/consts/pageTitles' 12 | import Spotlight from '@/components/Spotlight.astro' 13 | interface Props { 14 | title: string 15 | description?: string 16 | canonical?: string 17 | robots?: string 18 | } 19 | 20 | const { 21 | title = fixedTitle, 22 | description = 'Evento de boxeo aficionado entre streamers y creadores de contenido, organizado por Ibai Llanos', 23 | canonical, 24 | robots, 25 | } = Astro.props 26 | --- 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | {title} 35 | 36 | 37 | 38 | 39 | 46 | 47 | 48 | 55 | 62 | 69 | 76 | 77 | {canonical && } 78 | {robots && } 79 | 80 | 81 | 82 | 83 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 99 | 100 | 101 | 102 | 140 | 141 | 142 | 143 | 144 | 145 |
    146 |
    147 | 148 |
    149 | 150 | 151 |