diff --git a/.astro/astro/content.d.ts b/.astro/astro/content.d.ts index e69de29..8893335 100644 --- a/.astro/astro/content.d.ts +++ b/.astro/astro/content.d.ts @@ -0,0 +1,173 @@ +declare module 'astro:content' { + interface Render { + '.mdx': Promise<{ + Content: import('astro').MarkdownInstance<{}>['Content']; + headings: import('astro').MarkdownHeading[]; + remarkPluginFrontmatter: Record; + components: import('astro').MDXInstance<{}>['components']; + }>; + } +} + +declare module 'astro:content' { + interface RenderResult { + Content: import('astro/runtime/server/index.js').AstroComponentFactory; + headings: import('astro').MarkdownHeading[]; + remarkPluginFrontmatter: Record; + } + interface Render { + '.md': Promise; + } + + export interface RenderedContent { + html: string; + metadata?: { + imagePaths: Array; + [key: string]: unknown; + }; + } +} + +declare module 'astro:content' { + type Flatten = T extends { [K: string]: infer U } ? U : never; + + export type CollectionKey = keyof AnyEntryMap; + export type CollectionEntry = Flatten; + + export type ContentCollectionKey = keyof ContentEntryMap; + export type DataCollectionKey = keyof DataEntryMap; + + type AllValuesOf = T extends any ? T[keyof T] : never; + type ValidContentEntrySlug = AllValuesOf< + ContentEntryMap[C] + >['slug']; + + /** @deprecated Use `getEntry` instead. */ + export function getEntryBySlug< + C extends keyof ContentEntryMap, + E extends ValidContentEntrySlug | (string & {}), + >( + collection: C, + // Note that this has to accept a regular string too, for SSR + entrySlug: E, + ): E extends ValidContentEntrySlug + ? Promise> + : Promise | undefined>; + + /** @deprecated Use `getEntry` instead. */ + export function getDataEntryById( + collection: C, + entryId: E, + ): Promise>; + + export function getCollection>( + collection: C, + filter?: (entry: CollectionEntry) => entry is E, + ): Promise; + export function getCollection( + collection: C, + filter?: (entry: CollectionEntry) => unknown, + ): Promise[]>; + + export function getEntry< + C extends keyof ContentEntryMap, + E extends ValidContentEntrySlug | (string & {}), + >(entry: { + collection: C; + slug: E; + }): E extends ValidContentEntrySlug + ? Promise> + : Promise | undefined>; + export function getEntry< + C extends keyof DataEntryMap, + E extends keyof DataEntryMap[C] | (string & {}), + >(entry: { + collection: C; + id: E; + }): E extends keyof DataEntryMap[C] + ? Promise + : Promise | undefined>; + export function getEntry< + C extends keyof ContentEntryMap, + E extends ValidContentEntrySlug | (string & {}), + >( + collection: C, + slug: E, + ): E extends ValidContentEntrySlug + ? Promise> + : Promise | undefined>; + export function getEntry< + C extends keyof DataEntryMap, + E extends keyof DataEntryMap[C] | (string & {}), + >( + collection: C, + id: E, + ): E extends keyof DataEntryMap[C] + ? Promise + : Promise | undefined>; + + /** Resolve an array of entry references from the same collection */ + export function getEntries( + entries: { + collection: C; + slug: ValidContentEntrySlug; + }[], + ): Promise[]>; + export function getEntries( + entries: { + collection: C; + id: keyof DataEntryMap[C]; + }[], + ): Promise[]>; + + export function render( + entry: AnyEntryMap[C][string], + ): Promise; + + export function reference( + collection: C, + ): import('astro/zod').ZodEffects< + import('astro/zod').ZodString, + C extends keyof ContentEntryMap + ? { + collection: C; + slug: ValidContentEntrySlug; + } + : { + collection: C; + id: keyof DataEntryMap[C]; + } + >; + // Allow generic `string` to avoid excessive type errors in the config + // if `dev` is not running to update as you edit. + // Invalid collection names will be caught at build time. + export function reference( + collection: C, + ): import('astro/zod').ZodEffects; + + type ReturnTypeOrOriginal = T extends (...args: any[]) => infer R ? R : T; + type InferEntrySchema = import('astro/zod').infer< + ReturnTypeOrOriginal['schema']> + >; + + type ContentEntryMap = { + "post": { +"get-started-website-with-astro-tailwind-css.md": { + id: "get-started-website-with-astro-tailwind-css.md"; + slug: "get-started-website-with-astro-tailwind-css"; + body: string; + collection: "post"; + data: InferEntrySchema<"post"> +} & { render(): Render[".md"] }; +}; + + }; + + type DataEntryMap = { + + }; + + type AnyEntryMap = ContentEntryMap & DataEntryMap; + + export type ContentConfig = typeof import("../../src/content/config.js"); +} diff --git a/.astro/settings.json b/.astro/settings.json index 317ed4f..c3c5728 100644 --- a/.astro/settings.json +++ b/.astro/settings.json @@ -1,5 +1,5 @@ { "_variables": { - "lastUpdateCheck": 1762037279844 + "lastUpdateCheck": 1772967993300 } } \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 07601c2..2993cec 100644 --- a/package-lock.json +++ b/package-lock.json @@ -205,8 +205,7 @@ "version": "2.10.3", "resolved": "https://registry.npmjs.org/@astrojs/compiler/-/compiler-2.10.3.tgz", "integrity": "sha512-bL/O7YBxsFt55YHU021oL+xz+B/9HvGNId3F9xURN16aeqDK9juHGktdkCSXz+U4nqFACq6ZFvWomOzhV+zfPw==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/@astrojs/internal-helpers": { "version": "0.4.1", @@ -445,7 +444,6 @@ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.0.tgz", "integrity": "sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==", "license": "MIT", - "peer": true, "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.26.0", @@ -794,7 +792,6 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.3.1.tgz", "integrity": "sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==", - "dev": true, "license": "MIT", "optional": true, "dependencies": { @@ -1484,7 +1481,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "Apache-2.0", "optional": true, "os": [ @@ -1507,7 +1503,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "Apache-2.0", "optional": true, "os": [ @@ -1530,7 +1525,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -1547,7 +1541,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -1564,7 +1557,6 @@ "cpu": [ "arm" ], - "dev": true, "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -1581,7 +1573,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -1598,7 +1589,6 @@ "cpu": [ "s390x" ], - "dev": true, "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -1615,7 +1605,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -1632,7 +1621,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -1649,7 +1637,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -1666,7 +1653,6 @@ "cpu": [ "arm" ], - "dev": true, "license": "Apache-2.0", "optional": true, "os": [ @@ -1689,7 +1675,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "Apache-2.0", "optional": true, "os": [ @@ -1712,7 +1697,6 @@ "cpu": [ "s390x" ], - "dev": true, "license": "Apache-2.0", "optional": true, "os": [ @@ -1735,7 +1719,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "Apache-2.0", "optional": true, "os": [ @@ -1758,7 +1741,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "Apache-2.0", "optional": true, "os": [ @@ -1781,7 +1763,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "Apache-2.0", "optional": true, "os": [ @@ -1804,7 +1785,6 @@ "cpu": [ "wasm32" ], - "dev": true, "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", "optional": true, "dependencies": { @@ -1824,7 +1804,6 @@ "cpu": [ "ia32" ], - "dev": true, "license": "Apache-2.0 AND LGPL-3.0-or-later", "optional": true, "os": [ @@ -1844,7 +1823,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "Apache-2.0 AND LGPL-3.0-or-later", "optional": true, "os": [ @@ -2730,7 +2708,6 @@ "integrity": "sha512-rBnTWHCdbYM2lh7hjyXqxk70wvon3p2FyaniZuey5TrcGBpfhVp0OxOa6gxr9Q9YhZFKyfbEnxc24ZnVbbUkCA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "8.18.1", "@typescript-eslint/types": "8.18.1", @@ -2997,7 +2974,6 @@ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", "license": "MIT", - "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -3196,7 +3172,6 @@ "resolved": "https://registry.npmjs.org/astro/-/astro-4.16.18.tgz", "integrity": "sha512-G7zfwJt9BDHEZwlaLNvjbInIw2hPryyD654314KV/XT34pJU6SfN1S+mWa8RAkALcZNJnJXCJmT3JXLQStD3Lw==", "license": "MIT", - "peer": true, "dependencies": { "@astrojs/compiler": "^2.10.3", "@astrojs/internal-helpers": "0.4.1", @@ -3583,7 +3558,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "caniuse-lite": "^1.0.30001688", "electron-to-chromium": "^1.5.73", @@ -4609,7 +4583,6 @@ "integrity": "sha512-evtlNcpJg+cZLcnVKwsai8fExnqjGPicK7gnUtlNuzu+Fv9bI0aLpND5T44VLQtoMEnI57LoXO9XAkIXwohKrA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.12.1", @@ -6337,7 +6310,6 @@ "integrity": "sha512-8f7aNmS1+etYSLHht0fQApPc2kNO8qGRutifN5rVIc6Xo6ABsEbqOr758UwI7ALVbTt4x1fllKt0PYgzD9S3yQ==", "devOptional": true, "license": "MPL-2.0", - "peer": true, "dependencies": { "detect-libc": "^1.0.3" }, @@ -6368,7 +6340,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -6389,7 +6360,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -6410,7 +6380,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -6431,7 +6400,6 @@ "cpu": [ "arm" ], - "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -6452,7 +6420,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -6473,7 +6440,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -6494,7 +6460,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -6515,7 +6480,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -6536,7 +6500,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -6557,7 +6520,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -8732,7 +8694,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "nanoid": "^3.3.7", "picocolors": "^1.1.1", @@ -8907,7 +8868,6 @@ "integrity": "sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==", "dev": true, "license": "MIT", - "peer": true, "bin": { "prettier": "bin/prettier.cjs" }, @@ -8924,7 +8884,6 @@ "integrity": "sha512-RiBETaaP9veVstE4vUwSIcdATj6dKmXljouXc/DDNwBSPTp8FRkLGDSGFClKsAFeeg+13SB0Z1JZvbD76bigJw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@astrojs/compiler": "^2.9.1", "prettier": "^3.0.0", @@ -9477,7 +9436,6 @@ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.28.1.tgz", "integrity": "sha512-61fXYl/qNVinKmGSTHAZ6Yy8I3YIJC/r2m9feHo6SwVAVcLT5MPwOUFe7EuURA/4m0NR8lXG4BBXuo/IZEsjMg==", "license": "MIT", - "peer": true, "dependencies": { "@types/estree": "1.0.6" }, @@ -10140,7 +10098,6 @@ "integrity": "sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@alloc/quick-lru": "^5.2.0", "arg": "^5.0.2", @@ -10289,7 +10246,6 @@ "integrity": "sha512-FsJZ7iZLd/BXkz+4xrRTGJ26o/6VTjQytUk8b8OxkwcD2I+79VPJlz7qss1+zE7h8GNIScFqXcDyJ/KqBYZFVA==", "devOptional": true, "license": "BSD-2-Clause", - "peer": true, "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.8.2", @@ -10415,7 +10371,7 @@ "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, + "devOptional": true, "license": "0BSD" }, "node_modules/type-check": { @@ -10455,7 +10411,6 @@ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.2.tgz", "integrity": "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==", "license": "Apache-2.0", - "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -10802,7 +10757,6 @@ "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.11.tgz", "integrity": "sha512-c7jFQRklXua0mTzneGW9QVyxFjUgwcihC4bXEtujIo2ouWCe1Ajt/amn2PCxYnhYfd5k09JX3SB7OYWFKYqj8Q==", "license": "MIT", - "peer": true, "dependencies": { "esbuild": "^0.21.3", "postcss": "^8.4.43", @@ -11585,7 +11539,6 @@ "resolved": "https://registry.npmjs.org/zod/-/zod-3.24.1.tgz", "integrity": "sha512-muH7gBL9sI1nciMZV67X5fTKKBLtwpZ5VBp1vsOQzj1MhrBZ4wlVCm3gedKZWLp0Oyel8sIGfeiz54Su+OVT+A==", "license": "MIT", - "peer": true, "funding": { "url": "https://github.com/sponsors/colinhacks" } diff --git a/src/assets/images/etsiit-logo.png b/src/assets/images/etsiit-logo.png new file mode 100644 index 0000000..dcca788 Binary files /dev/null and b/src/assets/images/etsiit-logo.png differ diff --git a/src/assets/images/jtsec.png b/src/assets/images/jtsec.png new file mode 100644 index 0000000..b7386b3 Binary files /dev/null and b/src/assets/images/jtsec.png differ diff --git a/src/assets/images/trevenque.png b/src/assets/images/trevenque.png new file mode 100644 index 0000000..2e6c228 Binary files /dev/null and b/src/assets/images/trevenque.png differ diff --git a/src/assets/images/ugr-logo.png b/src/assets/images/ugr-logo.png new file mode 100644 index 0000000..9597bdc Binary files /dev/null and b/src/assets/images/ugr-logo.png differ diff --git a/src/components/Logo.astro b/src/components/Logo.astro index ac88273..cd204fe 100644 --- a/src/components/Logo.astro +++ b/src/components/Logo.astro @@ -1,28 +1,25 @@ --- -import { SITE } from 'astrowind:config'; -import logoDark from '~/assets/images/logo-dark.svg'; // Logo negro para modo claro -import logoLight from '~/assets/images/logo-light.png'; // Logo blanco para modo oscuro -import Image from '~/components/common/Image.astro'; +import { Image } from 'astro:assets'; +import logoLight from '~/assets/images/logo-light.png'; +import logoDark from '~/assets/images/logo-dark.svg'; --- - - Hackiit - - \ No newline at end of file diff --git a/src/components/blog/GridItem.astro b/src/components/blog/GridItem.astro index cd02fa8..ca1dbb3 100644 --- a/src/components/blog/GridItem.astro +++ b/src/components/blog/GridItem.astro @@ -2,8 +2,7 @@ import { APP_BLOG } from 'astrowind:config'; import type { Post } from '~/types'; -import Image from '~/components/common/Image.astro'; - +import { Image } from 'astro:assets'; import { findImage } from '~/utils/images'; import { getPermalink } from '~/utils/permalinks'; @@ -30,10 +29,9 @@ const link = APP_BLOG?.post?.isEnabled ? getPermalink(post.permalink, 'post') : class="w-full md:h-full rounded shadow-lg bg-gray-400 dark:bg-slate-700" widths={[400, 900]} width={400} + height={225} sizes="(max-width: 900px) 400px, 900px" alt={post.title} - aspectRatio="16:9" - layout="cover" loading="lazy" decoding="async" /> @@ -44,10 +42,9 @@ const link = APP_BLOG?.post?.isEnabled ? getPermalink(post.permalink, 'post') : class="w-full md:h-full rounded shadow-lg bg-gray-400 dark:bg-slate-700" widths={[400, 900]} width={400} + height={225} sizes="(max-width: 900px) 400px, 900px" alt={post.title} - aspectRatio="16:9" - layout="cover" loading="lazy" decoding="async" /> @@ -68,4 +65,4 @@ const link = APP_BLOG?.post?.isEnabled ? getPermalink(post.permalink, 'post') :

{post.excerpt}

- + \ No newline at end of file diff --git a/src/components/blog/ListItem.astro b/src/components/blog/ListItem.astro index 6a416d6..3b8ab39 100644 --- a/src/components/blog/ListItem.astro +++ b/src/components/blog/ListItem.astro @@ -1,16 +1,14 @@ --- import type { ImageMetadata } from 'astro'; import { Icon } from 'astro-icon/components'; -import Image from '~/components/common/Image.astro'; +import { Image } from 'astro:assets'; import PostTags from '~/components/blog/Tags.astro'; import { APP_BLOG } from 'astrowind:config'; import type { Post } from '~/types'; - import { getPermalink } from '~/utils/permalinks'; import { findImage } from '~/utils/images'; import { getFormattedDate } from '~/utils/utils'; - export interface Props { post: Post; } @@ -35,9 +33,9 @@ const link = APP_BLOG?.post?.isEnabled ? getPermalink(post.permalink, 'post') : class="absolute inset-0 object-cover w-full h-full mb-6 rounded shadow-lg bg-gray-400 dark:bg-slate-700" widths={[400, 900]} width={900} + height={506} sizes="(max-width: 900px) 400px, 900px" alt={post.title} - aspectRatio="16:9" loading="lazy" decoding="async" /> @@ -52,9 +50,9 @@ const link = APP_BLOG?.post?.isEnabled ? getPermalink(post.permalink, 'post') : class="absolute inset-0 object-cover w-full h-full mb-6 rounded shadow-lg bg-gray-400 dark:bg-slate-700" widths={[400, 900]} width={900} + height={506} sizes="(max-width: 900px) 400px, 900px" alt={post.title} - aspectRatio="16:9" loading="lazy" decoding="async" /> @@ -117,4 +115,4 @@ const link = APP_BLOG?.post?.isEnabled ? getPermalink(post.permalink, 'post') : ) } - + \ No newline at end of file diff --git a/src/components/blog/SinglePost.astro b/src/components/blog/SinglePost.astro index 297cca9..5dc4fcb 100644 --- a/src/components/blog/SinglePost.astro +++ b/src/components/blog/SinglePost.astro @@ -1,21 +1,21 @@ --- import { Icon } from 'astro-icon/components'; -import Image from '~/components/common/Image.astro'; +import { Image } from 'astro:assets'; +import { findImage } from '~/utils/images'; import PostTags from '~/components/blog/Tags.astro'; import SocialShare from '~/components/common/SocialShare.astro'; - import { getPermalink } from '~/utils/permalinks'; import { getFormattedDate } from '~/utils/utils'; import type { Post } from '~/types'; - export interface Props { post: Post; url: string | URL; } const { post, url } = Astro.props; +const image = await findImage(post.image); ---
@@ -71,13 +71,13 @@ const { post, url } = Astro.props;

{ - post.image ? ( + image ? ( {post?.excerpt -
+ \ No newline at end of file diff --git a/src/layouts/Layout.astro b/src/layouts/Layout.astro index 0d07806..cbe48f8 100644 --- a/src/layouts/Layout.astro +++ b/src/layouts/Layout.astro @@ -40,7 +40,7 @@ const { language, textDirection } = I18N; - + diff --git a/src/pages/index.astro b/src/pages/index.astro index ebfad42..854495d 100644 --- a/src/pages/index.astro +++ b/src/pages/index.astro @@ -2,398 +2,93 @@ import Layout from '~/layouts/PageLayout.astro'; import Hero from '~/components/widgets/Hero.astro'; -import Note from '~/components/widgets/Note.astro'; -import Features from '~/components/widgets/Features.astro'; -import Features2 from '~/components/widgets/Features2.astro'; -import Steps from '~/components/widgets/Steps.astro'; -import Content from '~/components/widgets/Content.astro'; import BlogLatestPosts from '~/components/widgets/BlogLatestPosts.astro'; -import FAQs from '~/components/widgets/FAQs.astro'; -import Stats from '~/components/widgets/Stats.astro'; -import CallToAction from '~/components/widgets/CallToAction.astro'; + +// 1. Importamos el componente Image de Astro +import { Image } from 'astro:assets'; + +// 2. Importamos las imágenes de los logos locales +// (Asegúrate de tener estos archivos exactos en src/assets/images/) +import ugrLogo from '~/assets/images/ugr-logo.png'; +import etsiitLogo from '~/assets/images/etsiit-logo.png'; +import jtsecLogo from '~/assets/images/jtsec.png'; +import trevenqueLogo from '~/assets/images/trevenque.png'; const metadata = { - title: 'AstroWind — Free template for creating websites with Astro + Tailwind CSS', + title: 'Hackiit - UGR', ignoreTitleTemplate: true, }; --- - - - Free template for - Astro 4.0 + Tailwind CSS + Hackiit - - AstroWind: Production-ready. - Suitable for Startups, Small Business, SaaS websites, Professional Portfolios, Marketing websites, Landing Pages & - Blogs. + El Club de Hacking de la Universidad de Granada (UGR).
+ Un espacio dedicado a aprender sobre ciberseguridad, participar en competiciones CTF, investigar y compartir conocimiento entre estudiantes.
- - - - - - - - - - - - -

Building on modern foundations

- Gain a competitive advantage by incorporating industry leading practices -
- - -
-
-
- - - - - Ensure your online presence truly represents you. - - -
-
-
- - - - - Designed to foster growth and success. - - -
-
-
- - - - Download', - description: - "Kickstart with GitHub! Either fork the AstroWind template or simply click 'Use this template'. Your canvas awaits, ready for your digital masterpiece. In just a few clicks, you've already set the foundation.", - icon: 'tabler:package', - }, - { - title: 'Step 2: Add content', - description: - "Pour your vision into it. Add images, text, and all that jazz to breathe life into your digital space. Remember, it's the content that tells your story, so make it captivating.", - icon: 'tabler:letter-case', - }, - { - title: 'Step 3: Customize styles', - description: - 'Give it your personal touch. Tailor colors, fonts, and layouts until it feels just right. Your unique flair, amplified by AstroWind! Precision in design ensures a seamless user experience.', - icon: 'tabler:paint', - }, - { - title: 'Ready!', - icon: 'tabler:check', - }, - ]} - image={{ - src: 'https://images.unsplash.com/photo-1616198814651-e71f960c3180?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=987&q=80', - alt: 'Steps image', - }} - /> - - - - - -
-
-
- - - - - - - - - - - - - - - Astro + 
Tailwind CSS -
- - Be very surprised by these huge fake numbers you are seeing on this page. Don't - waste more time! :P - -
-
+
+
+

Con la colaboración de

+
+ + +
+ + \ No newline at end of file