feat: static pages

This commit is contained in:
2023-09-19 21:20:33 -06:00
parent a8c579b94e
commit 33a3e7bb70
7 changed files with 336 additions and 68 deletions
+31 -15
View File
@@ -1,26 +1,15 @@
import { css, cx } from '@/styled-system/css' import { css, cx } from '@/styled-system/css'
import { Container } from '@/styled-system/jsx' import { Container } from '@/styled-system/jsx'
import { center } from '@/styled-system/patterns' import { center } from '@/styled-system/patterns'
import { card, iconButton } from '@/styled-system/recipes' import { button, card, iconButton } from '@/styled-system/recipes'
import { type IconDefinition } from '@fortawesome/fontawesome-svg-core' import { type TeamMember } from '@/types/User'
import { faFacebook, faInstagram, faTwitch, faTwitter, faYoutube } from '@fortawesome/free-brands-svg-icons' import { faFacebook, faInstagram, faTwitch, faTwitter, faYoutube } from '@fortawesome/free-brands-svg-icons'
import { faGlobe } from '@fortawesome/free-solid-svg-icons' import { faGlobe } from '@fortawesome/free-solid-svg-icons'
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
import NextImage from 'next/image' import NextImage from 'next/image'
import NextLink from 'next/link'
import { type FC } from 'react' import { type FC } from 'react'
interface TeamMember {
image: string
name: string
role: 'moderator' | 'administrator' | 'collaborator'
description: string
socialNetworks: Array<{
label: string
url: string
icon: IconDefinition
}>
}
const team: TeamMember[] = [ const team: TeamMember[] = [
{ {
image: '/images/team/SrJuggernaut.png', image: '/images/team/SrJuggernaut.png',
@@ -41,11 +30,15 @@ const team: TeamMember[] = [
const Team: FC = () => { const Team: FC = () => {
return ( return (
<section <section
className={center({ className={css({
minHeight: '75vh', minHeight: '75vh',
backgroundImage: 'url(/images/backgrounds/MysteriousForest.jpg)' backgroundImage: 'url(/images/backgrounds/MysteriousForest.jpg)'
})} })}
> >
<div
className={center()}
>
<Container <Container
className={css({ className={css({
display: 'flex', display: 'flex',
@@ -101,6 +94,29 @@ const Team: FC = () => {
</div> </div>
))} ))}
</Container> </Container>
</div>
<div
className={css({
display: 'flex',
alignItems: 'center',
justifyContent: 'space-evenly',
gap: 'medium',
marginBlock: 'medium'
})}
>
<NextLink
className={button({ color: 'info' })}
href="/equipo"
>
Ver el equipo completo
</NextLink>
<NextLink
className={button({ color: 'primary' })}
href="/equipo/join"
>
Únete al equipo
</NextLink>
</div>
</section> </section>
) )
} }
+59
View File
@@ -0,0 +1,59 @@
import Typography from '@/components/ui/Typography'
import { css } from '@/styled-system/css'
import { Container } from '@/styled-system/jsx'
import { faChevronRight } from '@fortawesome/free-solid-svg-icons'
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
import { type FC } from 'react'
const ClanesPage: FC = () => {
return (
<Container>
<Typography variant="h1" align="center">Clanes</Typography>
<Typography variant="body1">Los clanes son espacios donde compartir nuestros gustos con otros usuarios, dándonos la oportunidad de organizar proyectos y eventos en los cuales formar parte.</Typography>
<div
className={css({
display: 'grid',
gridTemplateColumns: { base: '1fr 1fr', smDown: '1fr' },
gap: 'medium'
})}
>
<div>
<Typography variant="h2">Beneficios de los clanes</Typography>
<Typography variant="body1">La intención de EntGamers es brindar beneficios a los clanes que les permitan operar en un ambiente de comunicación y colaboración.</Typography>
<ul className="fa-ul">
<li><FontAwesomeIcon icon={faChevronRight} listItem /> Espacio en el servidor de Discord.</li>
<li><FontAwesomeIcon icon={faChevronRight} listItem /> Apoyo de la administración con proyectos y eventos.</li>
<li><FontAwesomeIcon icon={faChevronRight} listItem /> Apoyo del equipo de moderación.</li>
</ul>
</div>
<div>
<Typography variant="h2">Requisitos para formar un clan</Typography>
<Typography variant="body1">Todos los clanes deben cumplir con los siguientes requisitos:</Typography>
<ul className="fa-ul">
<li><FontAwesomeIcon icon={faChevronRight} listItem /> Tener un encargado.</li>
<li><FontAwesomeIcon icon={faChevronRight} listItem /> Fomentar el compañerismo y la comunidad.</li>
<li><FontAwesomeIcon icon={faChevronRight} listItem /> Aportar contenido de forma periódica para la comunidad.</li>
<li><FontAwesomeIcon icon={faChevronRight} listItem /> Realizar al menos una actividad mensual con los integrantes.</li>
</ul>
</div>
</div>
<Typography variant="h2">Clanes activos</Typography>
<div
className={css({
backgroundColor: 'info',
color: 'info.contrast',
borderRadius: 'medium',
padding: 'medium',
marginBlock: 'medium',
'& a': {
color: 'info.contrast',
fontWeight: 'bold'
}
})}
>
Esta sección está en construcción. Puedes ver los clanes activos en nuestro <a href="http://discord.gg/nqwzHJC">Servidor de Discord</a>.
</div>
</Container>
)
}
export default ClanesPage
+130
View File
@@ -0,0 +1,130 @@
import Typography from '@/components/ui/Typography'
import { css, cx } from '@/styled-system/css'
import { Container } from '@/styled-system/jsx'
import { center } from '@/styled-system/patterns'
import { button, card, iconButton } from '@/styled-system/recipes'
import { type TeamMember } from '@/types/User'
import { faFacebook, faInstagram, faTwitch, faTwitter, faYoutube } from '@fortawesome/free-brands-svg-icons'
import { faGlobe } from '@fortawesome/free-solid-svg-icons'
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
import NextImage from 'next/image'
import NextLink from 'next/link'
import { type FC } from 'react'
const team: TeamMember[] = [
{
image: '/images/team/SrJuggernaut.png',
name: 'SrJuggernaut',
role: 'administrator',
description: 'Soy desarrollador web y me gusta jugar videojuegos.',
socialNetworks: [
{ url: 'https://www.facebook.com/SrJuggernaut', label: 'SrJuggernaut Facebook', icon: faFacebook },
{ url: 'https://twitter.com/SrJuggernaut', label: 'SrJuggernaut Twitter', icon: faTwitter },
{ url: 'https://youtube.com/juggernautplays', label: 'SrJuggernaut YouTube', icon: faYoutube },
{ url: 'https://twitch.tv/juggernautplays', label: 'SrJuggernaut Twitch', icon: faTwitch },
{ url: 'https://www.instagram.com/sr_juggernaut', label: 'SrJuggernaut Instagram', icon: faInstagram },
{ url: 'https://srjuggernaut.dev/', label: 'SrJuggernaut Website', icon: faGlobe }
]
}
]
const EquipoPage: FC = () => {
return (
<Container>
<Typography variant="h1" align="center">Equipo</Typography>
<Typography variant="body1">
El equipo de EntGamers está formado por personas que se dedican a la administración de la comunidad, a la organización de eventos y a la creación de contenido. EntGamers siempre intenta recompensar a sus miembros más activos, por lo que si quieres formar parte de nuestro equipo, ¡no dudes en contactar con nosotros!
</Typography>
<Typography variant="h2" align="center">Administradores</Typography>
<Typography variant="body1">
Los administradores son quienes se encargan de que todo funcione como es debido en la comunidad, desde la moderación de los grupos hasta la organización de eventos.
</Typography>
<Container
className={css({
display: 'flex',
flexDirection: 'column',
alignItems: 'center',
justifyContent: 'center',
gap: 'medium',
flexWrap: 'wrap'
})}
>
{team.map((member, index) => (
<div
key={`team-member-${index}`}
className={cx(card({ variant: 'retro' }).body, css({
maxWidth: '300px',
textAlign: 'center'
}))}
>
<div
className={cx(card({ variant: 'retro' }).media, center())}
>
<NextImage
src={member.image}
alt={member.name}
width={120}
height={120}
/>
</div>
<div
className={card({ variant: 'retro' }).content}
>
<h3>{member.name}</h3>
<p>{member.description}</p>
<div
className={css({
display: 'flex',
justifyContent: 'center',
gap: 'small',
flexWrap: 'wrap'
})}
>
{member.socialNetworks.map((socialNetwork, index) => (
<a
key={`team-member-${index}-social-network`}
className={iconButton()}
href={socialNetwork.url}
>
<FontAwesomeIcon icon={socialNetwork.icon} fixedWidth />
</a>
))}
</div>
</div>
</div>
))}
</Container>
<Typography variant="h2" align="center">Moderadores</Typography>
<Typography variant="body1">
Los moderadores son los encargados de mantener el orden en los grupos de la comunidad, así como de ayudar a los usuarios a resolver sus dudas.
</Typography>
<Typography variant="body2" color="info">
Ups, parece que ahora mismo no hay moderadores, pero en EntGamers siempre estamos buscando gente que quiera ayudar a la comunidad. si quieres ser moderador, puedes hacer click en el botón de abajo.
<div className={center()}>
<NextLink
className={button({ color: 'info' })}
href="/equipo/unirse"
>
¡Quiero ser moderador!
</NextLink>
</div>
</Typography>
<Typography variant="h2" align="center">Colaboradores</Typography>
<Typography variant="body1">
Los colaboradores son los encargados de crear contenido para la comunidad, como artículos, tutoriales, vídeos, eventos etc.
</Typography>
<Typography variant="body2" color="info">
Ups, parece que ahora mismo no hay colaboradores, pero en EntGamers siempre estamos buscando gente que quiera ayudar a la comunidad. si quieres ser colaborador, puedes hacer click en el botón de abajo.
</Typography>
<div className={center()}>
<NextLink
className={button({ color: 'info' })}
href="/equipo/unirse"
>
¡Quiero ser colaborador!
</NextLink>
</div>
</Container>
)
}
export default EquipoPage
+32
View File
@@ -0,0 +1,32 @@
import Typography from '@/components/ui/Typography'
import { css } from '@/styled-system/css'
import { Container } from '@/styled-system/jsx'
import { type FC } from 'react'
const EquipoUnirsePage: FC = () => {
return (
<Container>
<Typography variant="h1" align="center">Únete al Bosque</Typography>
<Typography variant="body1">
El equipo de EntGamers está formado por personas que se dedican a la administración de la comunidad, a la organización de eventos y a la creación de contenido. Aquí podrás enterarte cuales son las funciones de cada uno de los miembros del equipo y como puedes unirte a nosotros.
</Typography>
<div
className={css({
backgroundColor: 'info',
color: 'info.contrast',
borderRadius: 'medium',
padding: 'medium',
marginBlock: 'medium',
'& a': {
color: 'info.contrast',
fontWeight: 'bold'
}
})}
>
Esta sección está en construcción. Puedes unirte contactándonos mediante nuestro <a href="http://discord.gg/nqwzHJC">Servidor de Discord</a>.
</div>
</Container>
)
}
export default EquipoUnirsePage
+15
View File
@@ -0,0 +1,15 @@
import { type IconDefinition } from '@fortawesome/fontawesome-svg-core'
const trees: IconDefinition = {
icon: [
640,
512,
[],
'f7c5',
'M298.4 288H329c9 0 17-5 20.88-13c3.75-8.125 2.5-17.38-3.375-24.12L268.4 160h28.88c9.127 0 17.38-5.375 20.88-13.62c3.625-8.125 1.875-17.62-4.25-24.12L203.6 4.875c-6-6.5-17.25-6.5-23.25 0L69.97 122.3c-6 6.5-7.75 16-4.125 24.12C69.34 154.6 77.59 160 86.72 160h28.88L37.46 250.9c-5.875 6.875-7.125 16-3.375 24.12C37.96 283 45.84 288 54.96 288h30.63l-79.88 90.5c-6 6.75-7.377 16.12-3.625 24.25C5.834 410.8 14.08 416 23.09 416H160v64C160 497.7 174.3 512 192 512S224 497.7 224 480V416h136.9c9 0 17.25-5.25 21-13.25c3.75-8.125 2.5-17.5-3.5-24.25L298.4 288zM634.3 378.5L554.4 288h30.63c9 0 17-5 20.88-13c3.75-8.125 2.5-17.38-3.375-24.12L524.4 160h28.88c9.125 0 17.38-5.375 20.88-13.62c3.625-8.125 1.875-17.62-4.25-24.12l-110.3-117.4c-6-6.5-17.25-6.5-23.25 0l-95.14 101.3c11.13 15.38 14 35.25 6.377 52.88c-4 9.375-10.38 17.12-18.25 22.75l41.5 48.25c14 16.25 17.13 39.25 8.002 58.62c-4.25 8.875-10.5 16.12-18.13 21.5l41.63 47.13c8.625 9.875 13.37 14.2 13.62 26.7L416 480C416 497.7 430.3 512 448 512C465.7 512 480 497.7 480 480V416h136.9c9.002 0 17.25-5.25 21-13.25C641.7 394.6 640.3 385.3 634.3 378.5z'
],
iconName: 'trees',
prefix: 'fas'
}
export default trees
+8 -5
View File
@@ -1,9 +1,11 @@
import trees from '@/assets/icons/trees'
import BackDrop from '@/components/ui/BackDrop' import BackDrop from '@/components/ui/BackDrop'
import { css } from '@/styled-system/css' import { css } from '@/styled-system/css'
import { iconButton } from '@/styled-system/recipes' import { iconButton } from '@/styled-system/recipes'
import { type IconDefinition } from '@fortawesome/fontawesome-common-types' import { type IconDefinition } from '@fortawesome/fontawesome-common-types'
import { faBars, faHome, faTimes } from '@fortawesome/free-solid-svg-icons' import { faBars, faHome, faTimes, faUsers } from '@fortawesome/free-solid-svg-icons'
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
import NextLink from 'next/link'
import { usePathname } from 'next/navigation' import { usePathname } from 'next/navigation'
import { useCallback, useState, type FC } from 'react' import { useCallback, useState, type FC } from 'react'
@@ -15,8 +17,8 @@ interface MenuLink {
const menuLinks: MenuLink[] = [ const menuLinks: MenuLink[] = [
{ label: 'Home', href: '/', icon: faHome }, { label: 'Home', href: '/', icon: faHome },
{ label: 'About', href: '/about', icon: faHome }, { label: 'Clanes', href: '/clanes', icon: trees },
{ label: 'Contact', href: '/contact', icon: faHome } { label: 'Equipo', href: '/equipo', icon: faUsers }
] ]
const Menu: FC = () => { const Menu: FC = () => {
@@ -81,8 +83,9 @@ const Menu: FC = () => {
{menuLinks.map((menuLink, index) => ( {menuLinks.map((menuLink, index) => (
<li <li
key={`menu-link-${index}`} key={`menu-link-${index}`}
onClick={() => { setIsMenuOpen(false) }}
> >
<a <NextLink
className={css({ className={css({
display: 'flex', display: 'flex',
alignItems: 'center', alignItems: 'center',
@@ -108,7 +111,7 @@ const Menu: FC = () => {
data-active={pathName === menuLink.href} data-active={pathName === menuLink.href}
> >
<FontAwesomeIcon icon={menuLink.icon} fixedWidth />&nbsp;{menuLink.label} <FontAwesomeIcon icon={menuLink.icon} fixedWidth />&nbsp;{menuLink.label}
</a> </NextLink>
</li> </li>
))} ))}
</ul> </ul>
+13
View File
@@ -0,0 +1,13 @@
import { type IconDefinition } from '@fortawesome/fontawesome-svg-core'
export interface TeamMember {
image: string
name: string
role: 'moderator' | 'administrator' | 'collaborator'
description: string
socialNetworks: Array<{
label: string
url: string
icon: IconDefinition
}>
}