No es un sitio para cualquier persona. Es para gente súper nerd, apasionada por el software, y está optimizado para que esa gente tenga una gran experiencia.
Esa es la decisión de diseño de la que salen todas las demás. Un sitio para todo el mundo tiene que explicar cada cosa, esconder la densidad y sonar neutro; uno para nerds puede hablar en el idioma de la terminal, mostrar mucha información por pantalla, premiar a quien usa el teclado y esconder detalles para quien los busque (probá ?, ⌘K o gg). El sitio no se achica para gustarle a todo el mundo: quien llega con curiosidad aprende el idioma rápido.
$ pro · moderno · hacky · compacto · al grano
La estética actual no salió de un Figma: se fue encontrando commit a commit, sacando cosas más que agregándolas. Esta es la historia contada desde git log; cada hito linkea a sus commits.
2024-06-22
El sitio arranca como cualquier proyecto: shadcn/ui con sus defaults y Geist en lugar de Inter. La única decisión estética que sobrevive hasta hoy es la tipografía.
2024-08-21
Toggle de tema claro/oscuro, una card por cada cosa (consejos, miembros activos, crecimiento, eventos, sponsors) y un hero con vortex y texto brillante de Aceternity. Ya aparece la primera pista: las frases motivacionales en fuente de código.
2024-09-13
El tema oscuro pasa a fondo negro puro. Todavía convive con el tema claro, pero el sitio ya se siente mejor de noche.
2025-06-03
Glass cards, gradientes en cada tarjeta y una flickering card. Mucho brillo y mucho espacio vacío entre cajas: lindo en una captura, lento para escanear.
2026-04-14
Se van los zoom-in al pasar el mouse, se fuerza el modo oscuro y desaparece el selector de tema. El título del hero pasa a Geist Mono: la primera vez que la mono es protagonista.
2026-09-29
Landing y sidebar nuevos, y los logos de los partners sin placas de fondo: el logo flota sobre la pantalla, como un sprite.
2026-09-30
El día con más commits de la historia del repo (174). Paleta de fósforo verde sobre negro, Geist Mono para todo lo que es chrome, bordes neutros reemplazados por hairlines verdes, las cards reemplazadas por grillas con líneas compartidas, el breadcrumb reemplazado por un título ~/ruta, tabs tipo HUD, menús que bootean como un CRT, toasts como notificaciones de PCN_OS, el buscador $ grep -i en cada página, 404 de terminal, ⌘K, atajos de vim y PCN OS en pantallas grandes.
1bf9b5d91101affc02c68a43ab3d7b8f6fca135d1ed29066d949a77464d14b612732443ecffea4dbfb29
2026-10-01
Todo botón con relleno y borde nombra su acción como una llamada: crearEvento();, cancelar();. Los campos de formulario se vuelven prompts de terminal, con caret de bloque que deja ver la letra que tiene abajo.
2026-10-02
Campos que comparten fila alineados exactamente, labels que nunca se parten en dos líneas, botones de guardar pegados al borde inferior en formularios largos y emails transaccionales con la misma estética.
2026-10-03
El buscador se achica, todos los controles de filtro de un header miden h-8, tabs + búsqueda + filtros entran en una sola fila, las pantallas de carga pasan a skeletons con la forma real de la página y PCN OS suma un modo liviano para computadoras con pocos recursos.
Ocho reglas, en orden de importancia. Cuando dos chocan, gana la de arriba.
El público es gente apasionada por el software. No optimizamos para la persona que nunca abrió una terminal: optimizamos para la que se siente en casa en una. Si un detalle hace sonreír a un dev, vale más que uno que agrada a cualquiera.
Cada pieza de UI tiene un equivalente en una terminal o un editor: prompts, rutas, comentarios, headers de markdown, procesos, notificaciones del sistema. Si no tiene un equivalente, probablemente no hace falta.
Una persona nerd escanea, no lee de punta a punta. Más información por pantalla, filas en lugar de cards y nada de espacios vacíos entre cajas.
El verde fósforo #04f4be es el único color que llama la atención. Todo lo demás es negro, gris verdoso o una transparencia del mismo verde, así el acento siempre significa algo: interactivo, activo o importante.
Quien vive en un editor espera poder moverse sin mouse. Cada página responde a / para buscar, Esc para limpiar, j/k/gg/G para moverse, [ y ] para saltar entre secciones y ⌘K para ir a cualquier lado.
La diferencia entre un sitio con estética hacker y un disfraz está en los detalles: el caret de bloque que deja leer la letra de abajo, los brackets que se abren al hacer hover, el beam que recorre el campo enfocado, el glitch de un error.
Los nerds notan un desfase de 2px. Los controles que comparten fila miden lo mismo (h-8 en headers), los inputs lado a lado arrancan a la misma altura y ningún label se parte en dos líneas.
Un dev abre el sitio con veinte pestañas y un IDE corriendo. Skeletons con la forma real de la página, nada de loaders a pantalla completa, prefers-reduced-motion respetado y un modo liviano de PCN OS para máquinas con pocos recursos.
Negro con un tinte verde y un único acento: el verde fósforo #04f4be. Los tokens semánticos de shadcn viven en src/app/globals.css (bloque .dark) y la escala pcnGreen en tailwind.config.ts. Los valores de abajo se leen en vivo de las variables CSS de esta página.
--background
…
fondo de toda la pantalla
--foreground
…
texto principal
--card
…
paneles y popovers
--primary
…
acento, ring de foco
--secondary
…
botón secondary
--secondary-foreground
…
texto sobre secondary
--muted
…
fondos apagados
--muted-foreground
…
meta y descripciones
--accent
…
item resaltado
--accent-foreground
…
texto resaltado
--border
…
borde por defecto
--input
…
borde de campos
--destructive
…
errores y borrar
En lugar de tonos más claros u oscuros, la escala es el mismo verde con más o menos alfa: sobre negro se lee como fósforo más o menos encendido y nunca desentona.
pcnGreen-50
…
fondos muy sutiles
pcnGreen-100
…
fondo de badge, skeleton
pcnGreen-200
…
hairlines
pcnGreen-300
…
bordes de badges
pcnGreen-400
…
borde de paneles y menús
pcnGreen-500
…
prompts: $ ## > ›
pcnGreen-600
…
texto de prompt
pcnGreen-700
…
texto secundario verde
pcnGreen-800
…
labels
pcnGreen-900
…
texto de botón outline
pcnGreen
…
acento puro #04f4be
Geist es la única familia del sitio: font-sans (Geist Sans) para leer y font-mono (Geist Mono) para todo lo que es chrome de terminal: títulos, labels, botones, meta, fechas y campos. font-serif está remapeada a Geist Sans para que nunca entre otra familia.
font-sans · Geist Sans
Una comunidad de gente que programa, comparte lo que aprende y se junta a hacer cosas. El cuerpo de texto se lee cómodo en párrafos largos.
font-mono · Geist Mono
~/eventos $ grep -i meetup
crearEvento(); 0O 1lI {} => !=
Pesos: 400 para texto, 500 para controles y 600 (font-semibold) para títulos; nunca bold extremo. Labels y tabs en UPPERCASE con tracking-[0.14em]; el resto en minúscula o como se escribe.
Escala de Tailwind (múltiplos de 4px) usada con disciplina: pocas medidas que se repiten en todo el sitio. Lo más importante es la altura de los controles, porque es lo que hace que una fila se vea prolija.
✓ RuledGrid
✗ cards con gap
El movimiento cuenta qué está pasando: algo se enfocó, algo falló, algo está cargando. Las animaciones viven en tailwind.config.ts y globals.css.
✓ crearEvento();
✗ Crear evento
✓ ~/eventos/meetup
✗ Inicio > Eventos > Meetup
✓ $ sin resultados para "cobol"
✗ ¡Ups! No encontramos nada
✓ > HANDLE
✗ Nombre de usuario *
✓ // se ve en tu perfil
✗ Este campo será visible públicamente
✓ ERR ese handle ya está en uso
✗ Error: campo inválido
Los componentes reales del sitio, importados de src/components: no son capturas ni copias. Cada uno muestra sus estados uno al lado del otro; los de interacción (:hover, :focus, :active) se fuerzan copiando las reglas CSS del sitio a un wrapper con data-force-state, como el addon de pseudo-estados de Storybook. Con el selector de estado mirás uno solo y en $ probalo lo usás de verdad.
Toda búsqueda de página es un prompt de shell: $ grep -i. La tecla / la enfoca desde cualquier lado y Esc la limpia.
$ probalo
Input, Textarea y el trigger del Select comparten .field-surface: texto mono, scanlines, esquinas iluminadas que se encienden con el foco y un haz que recorre el borde.
Label como prompt (> HANDLE) que se enciende cuando su campo tiene foco, hint con // y error con un tag ERR que entra con un glitch.
se ve en tu perfil
se ve en tu perfil
se ve en tu perfil
se ve en tu perfil
$ probalo
como te conoce la comunidad
Un slot vacío que se llena con un bloque verde brillante al marcarse. Es un <input type="checkbox"> nativo con checkboxClassName.
Filtros de pocas opciones: botones pegados que comparten bordes; el activo se invierte (verde con letra negra).
Tira tipo HUD: barra con scanlines, ticks en las esquinas y la tab activa con subrayado brillante y el label entre [ ].
Marcas personales (leído, visto, guardado) que viven arriba de una fila clickeable sin disparar su link.
Etiquetas de 11px en mono con borde fino: estado, conteos y categorías.
El título de cada página es su ruta: ~/desarrollo/diseno. ~ y cada segmento padre son links, así funciona también como breadcrumb.
design system · 15 componentes
La pieza central del sistema: listas y catálogos sin cards. La grilla dibuja el borde de arriba y de la izquierda; cada celda, el de abajo y el de la derecha.
neovim
editor modal, configurable en Lua
tmux
multiplexor de terminales
ripgrep
grep, pero rápido
neovim
editor modal, configurable en Lua
tmux
multiplexor de terminales
ripgrep
grep, pero rápido
$ sin resultados para "cobol"
La fila más vista del sitio: flyer chico, fecha en mono, nombre, descripción recortada y lugar, todo dentro de una celda de RuledGrid.
Un panel de terminal con cuatro esquinas iluminadas y scanlines que se enciende como un CRT. El título es un prompt (>) y los separadores son punteados.
subir foto
jpg o png, hasta 10 MB
$ probalo
Notificaciones de PCN_OS: panel con scanlines, borde izquierdo encendido del color del tipo, un > antes del título y una barra que se consume mientras está en pantalla.
$ probalo
Lo que todavía no sigue estas reglas. Si tocás alguno de estos archivos, es un buen momento para alinearlo.