Skip to content

Commit e660b0b

Browse files
authored
feat: add changes to improve seo (#1)
1 parent 281b766 commit e660b0b

11 files changed

Lines changed: 182 additions & 12 deletions

File tree

README.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
![VaSLibre](/docs/logo-banner.png)
2+
3+
# VaSLibre
4+
5+
VaSLibre (Valencia/Venezuela Software Libre) nació de la nada, de un solo pensamiento, como un pensamiento radical, donde muchos de nosotros teníamos la misma meta, construir un grupo fuerte y solidario, contando para ello con una buena base de colaboradores.
6+
7+
## Objetivo
8+
9+
El objetivo de VaSLibre es promover el software libre, Linux y el código abierto en la región, fomentando la colaboración entre usuarios y desarrolladores, y promoviendo la educación en el uso y desarrollo de software libre.
10+
11+
### Contacto
12+
13+
- Telegram: https://t.me/comunidadvaslibre
14+
- Web: https://vaslibre.org.ve
15+
- GitHub: https://github.com/vaslibre
16+
- Twitter: https://twitter.com/vaslibre

app/layout.tsx

Lines changed: 56 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ const _geistMono = Geist_Mono({ subsets: ["latin"] });
1010

1111
// <CHANGE> Updated metadata for Linux User Group
1212
export const metadata: Metadata = {
13-
title: "VasLibre - Comunidad de Usuarios Linux",
13+
title: "VaSLibre - Comunidad de Usuarios Linux",
1414
description:
1515
"Comunidad apasionada por el software libre, Linux y el código abierto. Únete a nosotros y forma parte del movimiento open source.",
1616
generator: "v0.app",
@@ -31,17 +31,72 @@ export const metadata: Metadata = {
3131
],
3232
apple: "/images/logovaslibre.svg",
3333
},
34+
openGraph: {
35+
title: "VaSLibre - Comunidad de Usuarios Linux",
36+
description:
37+
"Comunidad apasionada por el software libre, Linux y el código abierto. Únete a nosotros y forma parte del movimiento open source.",
38+
url: "https://vaslibre.org.ve",
39+
siteName: "VaSLibre - Comunidad de Usuarios Linux",
40+
images: [
41+
{
42+
url: "https://vaslibre.org.ve/images/vaslibre-og.png", // Must be an absolute URL
43+
width: 800,
44+
height: 600,
45+
alt: "VaSLibre - Comunidad de Usuarios Linux",
46+
},
47+
// Add more images if needed
48+
],
49+
locale: "es_Es",
50+
type: "website",
51+
},
52+
twitter: {
53+
// Optional: for Twitter Cards
54+
card: "summary_large_image",
55+
title: "VaSLibre - Comunidad de Usuarios Linux",
56+
description:
57+
"Comunidad apasionada por el software libre, Linux y el código abierto. Únete a nosotros y forma parte del movimiento open source.",
58+
images: ["https://vaslibre.org.ve/images/vaslibre-og.png"],
59+
},
60+
alternates: {
61+
canonical: "https://vaslibre.org.ve",
62+
},
63+
robots: {
64+
index: true,
65+
follow: true,
66+
},
3467
};
3568

3669
export default function RootLayout({
3770
children,
3871
}: Readonly<{
3972
children: React.ReactNode;
4073
}>) {
74+
const jsonLd = {
75+
"@context": "https://schema.org",
76+
"@type": "Organization",
77+
name: "VaSLibre",
78+
alternateName: "VaSLibre - Comunidad de Usuarios Linux",
79+
url: "https://vaslibre.org.ve",
80+
logo: "https://vaslibre.org.ve/images/logovaslibre.svg",
81+
description:
82+
"Comunidad de usuarios Linux dedicada a compartir conocimiento, organizar talleres y apoyar a nuevos usuarios.",
83+
sameAs: [
84+
"https://github.com/vaslibre",
85+
"https://twitter.com/vaslibre",
86+
"https://t.me/comunidadvaslibre",
87+
],
88+
};
89+
4190
return (
4291
<html lang="es" suppressHydrationWarning>
4392
<body className={`font-sans antialiased`}>
4493
<Providers>
94+
<script
95+
type="application/ld+json"
96+
dangerouslySetInnerHTML={{
97+
__html: JSON.stringify(jsonLd),
98+
}}
99+
/>
45100
{children}
46101
<Analytics />
47102
</Providers>

app/manifest.ts

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import type { MetadataRoute } from 'next'
2+
3+
export const dynamic = "force-static";
4+
5+
export default function manifest(): MetadataRoute.Manifest {
6+
return {
7+
name: 'VaSLibre',
8+
short_name: 'VaSLibre',
9+
description: 'VaSLibre - Comunidad de Usuarios Linux',
10+
start_url: '/',
11+
display: 'standalone',
12+
background_color: '#000',
13+
theme_color: '#000',
14+
icons: [
15+
{
16+
src: '/images/logovaslibre.svg',
17+
sizes: 'any',
18+
type: 'image/svg+xml',
19+
},
20+
],
21+
}
22+
}

app/robots.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import type { MetadataRoute } from 'next'
2+
3+
export const dynamic = "force-static";
4+
5+
export default function robots(): MetadataRoute.Robots {
6+
return {
7+
rules: [
8+
{
9+
userAgent: '*',
10+
allow: ['/'],
11+
},
12+
],
13+
sitemap: 'https://vaslibre.org.ve/sitemap.xml',
14+
}
15+
}

app/sitemap.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
// app/sitemap.ts
2+
import type { MetadataRoute } from 'next';
3+
4+
export const dynamic = "force-static";
5+
6+
export default function sitemap(): MetadataRoute.Sitemap {
7+
return [
8+
{
9+
url: 'https://vaslibre.org.ve',
10+
lastModified: new Date(),
11+
changeFrequency: 'yearly',
12+
priority: 1,
13+
},
14+
];
15+
}

components/footer.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ export function Footer() {
3939

4040
<p className="text-sm text-muted-foreground flex items-center gap-1">
4141
Hecho con{" "}
42-
<Heart className="h-4 w-4 text-red-500 fill-red-500" />{" "}
42+
<Heart className="h-4 w-4 text-[tomato] fill-[tomato]" />{" "}
4343
y software libre
4444
</p>
4545
</div>

components/hero-section.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ export function HeroSection() {
5151
<Button
5252
size="lg"
5353
variant="outline"
54-
className="gap-2 border-border hover:bg-secondary hover:border-primary bg-transparent transition-all duration-300"
54+
className="gap-2 border-border hover:bg-secondary hover:text-primary hover:border-primary bg-transparent transition-all duration-300"
5555
>
5656
Ver Eventos
5757
</Button>

components/members-section.tsx

Lines changed: 53 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,13 @@ const members = [
2222
github: "#",
2323
twitter: "#",
2424
},
25+
{
26+
name: "John Vera",
27+
role: "",
28+
image: "/images/team/generic.png",
29+
github: "#",
30+
twitter: "#",
31+
},
2532
{
2633
name: "Angel Cruz",
2734
role: "",
@@ -43,6 +50,48 @@ const members = [
4350
github: "#",
4451
linkedin: "#",
4552
},
53+
{
54+
name: "Jeidi Brito",
55+
role: "",
56+
image: "/images/team/generic.png",
57+
github: "#",
58+
twitter: "#",
59+
},
60+
{
61+
name: "David Rondón",
62+
role: "",
63+
image: "/images/team/generic.png",
64+
github: "#",
65+
twitter: "#",
66+
},
67+
{
68+
name: "Jorge Castellano",
69+
role: "",
70+
image: "/images/team/generic.png",
71+
github: "#",
72+
twitter: "#",
73+
},
74+
{
75+
name: "Karla Hurtado",
76+
role: "",
77+
image: "/images/team/generic.png",
78+
github: "#",
79+
twitter: "#",
80+
},
81+
{
82+
name: "Nani Garcia",
83+
role: "",
84+
image: "/images/team/generic.png",
85+
github: "#",
86+
twitter: "#",
87+
},
88+
{
89+
name: "Decio Rodríguez",
90+
role: "",
91+
image: "/images/team/generic.png",
92+
github: "#",
93+
twitter: "#",
94+
},
4695
];
4796

4897
export function MembersSection() {
@@ -63,22 +112,19 @@ export function MembersSection() {
63112
</p>
64113
</div>
65114

66-
<div className="grid sm:grid-cols-2 lg:grid-cols-3 gap-8">
115+
<div className="flex flex-wrap justify-center gap-4">
67116
{members.map((member, index) => (
68117
<div
69118
key={index}
70-
className="group bg-card border border-border rounded-xl overflow-hidden hover:border-primary/50 transition-all duration-300 hover:shadow-xl hover:shadow-primary/5"
119+
className="group bg-card border border-border rounded-xl overflow-hidden hover:border-primary/50 transition-all duration-300 hover:shadow-xl hover:shadow-primary/5 w-full sm:basis-[calc((100%-1rem)/2)] lg:basis-[calc((100%-4rem)/5)]"
71120
>
72121
<div className="aspect-square overflow-hidden relative">
73122
<img
74-
src={
75-
member.image ||
76-
"/images/placeholder.svg"
77-
}
123+
src={member.image}
78124
alt={member.name}
79125
className="w-full h-full object-cover group-hover:scale-105 transition-transform duration-500"
80126
/>
81-
<div className="absolute inset-0 bg-gradient-to-t from-background/80 to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-300" />
127+
<div className="absolute inset-0 bg-linear-to-t from-background/80 to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-300" />
82128
</div>
83129
<div className="p-6">
84130
<h3 className="font-semibold text-lg">

components/navbar.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,8 @@ export function Navbar() {
3636
alt="Logo"
3737
width={200}
3838
height={200}
39-
className="h-20 w-auto"
39+
className="h-28 w-auto"
40+
loading="eager"
4041
/>
4142
</Link>
4243
<div className="hidden md:flex items-center gap-8">
@@ -94,7 +95,7 @@ export function Navbar() {
9495
</button>
9596
<Link
9697
href="#contact"
97-
className="bg-primary text-primary-foreground px-4 py-2 rounded-lg text-sm font-medium hover:bg-primary/90 hover:shadow-lg hover:scale-105 transition-all duration-300"
98+
className="bg-primary text-primary-foreground px-4 py-2 rounded-full text-sm font-medium hover:bg-primary/90 hover:shadow-lg hover:scale-105 transition-all duration-300"
9899
>
99100
Únete
100101
</Link>

docs/logo-banner.png

304 KB
Loading

0 commit comments

Comments
 (0)