Skip to content

Instantly share code, notes, and snippets.

View codigoconjuan's full-sized avatar

Juan Pablo De la torre Valdez codigoconjuan

View GitHub Profile
@codigoconjuan
codigoconjuan / ChangePasswordForm.tsx
Last active March 2, 2026 19:51
Permitirle al Usuario Cambiar su Contraseña
"use client"
export default function ChangePasswordForm() {
return (
<>
<Heading level={2} className="mt-10">
Cambiar Password
</Heading>
@codigoconjuan
codigoconjuan / 1.- meeti.store.ts
Last active March 2, 2026 19:47
Contenido para Eliminar un Meeti
import { create } from 'zustand'
import { SelectMeeti } from '../types/meeti.types'
type Store = {
meeti: SelectMeeti | null
setMeeti: (meeti: SelectMeeti | null) => void
open: boolean
setOpen: (open: boolean) => void
}
@codigoconjuan
codigoconjuan / CategoryCard.tsx
Created February 23, 2026 19:21
Componente de Card para Categorías de Meeti
export default function CategoryCard() {
return (
<li>
<a
className="block relative w-full size-70 overflow-hidden group cursor-pointer"
>
<img
className="object-cover transition-transform duration-300 ease-in-out group-hover:scale-120"
/>
@codigoconjuan
codigoconjuan / CommunityCard.tsx
Created February 22, 2026 23:11
Card para Comunidades
export default function CommunityCard() {
return (
<div className="border border-slate-200 bg-white hover:shadow-lg transition-shadow">
<div className="overflow-hidden">
<img
className="object-cover h-60 w-full transition-transform duration-300 ease-in-out hover:scale-120"
/>
</div>
<div className="p-5 space-y-5">
<a
@codigoconjuan
codigoconjuan / page.tsx
Last active March 2, 2026 19:33
Gist Página de Perfil
<main className="max-w-7xl mx-auto mt-10 space-y-5 px-5 lg:p-0 ">
<div className="space-y-7 mt-10">
<div className="relative size-64 mx-auto aspect-square overflow-hidden rounded-full border border-gray-400">
<img
alt="Imagen Perfil"
className="object-cover size-64"
priority
/>
</div>
@codigoconjuan
codigoconjuan / profileSchema.ts
Last active March 2, 2026 19:00
Schema para Perfiles de Meeti
import z from "zod";
export const ProfileSchema = z.object({
name: z.string()
.min(3, {error: 'Tu nombre es Obligatorio'}),
bio: z.string()
.min(1, {error: 'Añade una descripción o biografía'}),
image: z.url({ protocol: /^https?$/, hostname: z.regexes.domain, error: 'La imagen es obligatoria' }),
})
@codigoconjuan
codigoconjuan / ProfileForm.tsx
Created February 20, 2026 23:53
Perfil de Usuario
<Form>
<FormLabel htmlFor='name'>Nombre:</FormLabel>
<FormInput
id="name"
type='text'
placeholder='Tu Nombre'
/>
<FormLabel id='bio'>Biografía</FormLabel>
<FormTextArea
@codigoconjuan
codigoconjuan / 1 - UpcomingCommunityMeetis.tsx
Last active March 2, 2026 18:58
Próximos Meetis Por Comunidad
<section className="max-w-7xl mx-auto mt-10">
<div className="mt-10 grid grid-cols-1 lg:grid-cols-3 gap-5 p-5 lg:p-0">
<p className="text-center py-10 text-lg text-gray-600 col-span-1 lg:col-span-3">No Hay Próximos Meetis en esta comunidad</p>
</div>
</section>
@codigoconjuan
codigoconjuan / page.tsx
Last active March 2, 2026 18:48
Asistentes Confirmados al Meeti
<div className="mx-auto max-w-2xl mt-10">
{attendees.length ? (
<ul role="list" className="divide-y divide-gray-100 dark:divide-white/5 mt-10 shadow-lg p-10">
{attendees.map(({user}) => (
<li key={user.id}>
<p className="font-bold text-lg">{user.name}</p>
<p className="text-gray-600 text-sm">{user.email}</p>
</li>
))}
</ul>
@codigoconjuan
codigoconjuan / ip.ts
Created February 19, 2026 23:31
Identificar IP
import { headers } from "next/headers";
export async function getClientIp(): Promise<string> {
const headersList = await headers();
return (
headersList.get("cf-connecting-ip") || // Cloudflare
headersList.get("x-vercel-forwarded-for") || // Vercel
headersList.get("x-real-ip") || // Nginx / proxies
headersList.get("x-forwarded-for")?.split(",")[0].trim() || // standard