brxan.art - Portafolio de Diseno Grafico & Arte Digital

React, Vite, TypeScript, Cloudflare Workers, Supabase, Cloudflare R2, Hono, Vercel

Main project image

Portafolio web profesional para Bryan - Disenador Grafico, Ilustrador Digital y artista visual. Aplicacion SPA construida con React 19 + Vite, desplegada en Vercel, con API serverless en Cloudflare Workers, almacenamiento de imagenes en Cloudflare R2 y base de datos en Supabase.

Visitar el proyecto ↗

Tabla de Contenidos

  1. Descripcion General
  2. Arquitectura
  3. Stack Tecnologico
  4. Implementacion
  5. Estructura del Proyecto
  6. Desafios y Aprendizajes
  7. Reflexiones Finales

Descripcion General

brxan.art es un portafolio web profesional disenado para Bryan, un disenador grafico, ilustrador digital y artista visual. La aplicacion es una SPA (Single Page Application) construida con React 19 y Vite, desplegada en Vercel, con una API serverless en Cloudflare Workers, almacenamiento de imagenes en Cloudflare R2 y base de datos PostgreSQL en Supabase.

El objetivo principal era crear una plataforma elegante y performante para exhibir el trabajo artistico de Bryan, con un panel de administracion completo que le permitiera gestionar sus proyectos, subir imagenes y moderar comentarios de forma autonoma.


Arquitectura en la Nube

El proyecto sigue una arquitectura serverless de tres capas con coste operativo de $0/mes dentro de los planes gratuitos de cada proveedor.

flowchart TB
    User["Usuario Final"] -->|HTTPS| Vercel["Vercel — CDN Global<br/>React SPA + Rewrites /api"]
    Vercel -->|HTML / CSS / JS| Browser["Navegador<br/>(SPA)"]
    Vercel -->|/api/* rewrite| Workers["Cloudflare Workers<br/>Serverless API (Hono)"]
    Workers --> Supabase["Supabase<br/>PostgreSQL + REST"]
    Workers --> R2["Cloudflare R2<br/>Object Storage"]

Por que esta arquitectura


Stack Tecnologico

Frontend

TecnologiaUso
React 19UI con Hooks y Context API
Vite 6Build ultrarapido con HMR
React Router 7Rutas SPA
CSS nativoEstilos con variables CSS y media queries

Backend (Cloudflare Worker)

TecnologiaUso
Hono 4Framework web ultraligero para Workers
TypeScriptTipado estatico
@supabase/supabase-jsCliente Supabase con service_role
Wrangler 4CLI de Cloudflare para deploy

Infraestructura

ServicioProveedorFuncion
VercelVercel Inc.Hosting SPA, CDN global, rewrites
Cloudflare WorkersCloudflareAPI serverless (edge runtime)
Cloudflare R2CloudflareAlmacenamiento de objetos S3-compatible
SupabaseSupabase Inc.Base de datos PostgreSQL + API REST

Implementacion

Cloudflare Workers - API Serverless

El Worker expone una API REST bajo el framework Hono con los siguientes endpoints:

MétodoRutaDescripción
POST/api/uploadSubir imagen a R2 (multipart/form-data)
GET/api/projectsListar proyectos (con imágenes anidadas)
GET/api/projects/:idDetalle de proyecto
POST/api/projectsCrear proyecto (requiere x-admin-password)
PUT/api/projects/:idActualizar proyecto (requiere x-admin-password)
DELETE/api/projects/:idEliminar proyecto + imágenes R2
GET/api/commentsListar comentarios
POST/api/commentsCrear comentario
DELETE/api/comments/:idEliminar comentario
POST/api/admin/loginLogin con contraseña

Cloudflare R2 - Almacenamiento de Imagenes

Supabase - Base de Datos PostgreSQL

Tres tablas con relaciones en cascada:

projects         -> portada, metadata del proyecto
project_images   -> imagenes asociadas con orden (position)
comments         -> comentarios por imagen (author, text, image_index)

Vercel - Hosting del Frontend

El archivo vercel.json configura rewrites criticos que transparentan las llamadas /api/* del frontend hacia el Worker de Cloudflare, desacoplando completamente el frontend del backend.


Estructura del Proyecto

portafolio_bryan/
├── src/                  # SPA React
│   ├── App.jsx           # Router principal
│   ├── components/
│   │   ├── Admin/        # Panel administración
│   │   ├── ProjectPage.jsx
│   │   ├── PinDetail.jsx # Modal + comentarios
│   │   ├── ProjectsCovers.jsx
│   │   └── Landing, Hero, About…
│   ├── context/AdminContext.jsx
│   ├── hooks/            # Hooks personalizados
│   └── data/data.js      # Contenido estático
├── worker/               # Cloudflare Worker (API)
│   ├── src/index.ts      # Hono app: rutas /api/*
│   ├── wrangler.toml
│   └── seed.sh           # Subida de imágenes a R2
├── supabase/schema.sql
├── vercel.json           # Rewrites SPA + proxy
└── vite.config.js

Desafios y Aprendizajes

1. Arquitectura Serverless Multi-Proveedor

Coordinar tres proveedores de cloud (Vercel, Cloudflare, Supabase) requirio un diseno cuidadoso de la comunicacion entre servicios, manejo de errores y gestion de secrets.

2. Storage en el Edge con R2

Migrar de almacenamiento tradicional a object storage en el edge de Cloudflare presento desafios en la gestion de uploads multipart y la construccion de URLs publicas consistentes.

3. Panel de Administracion Seguro

Implementar autenticacion y autorizacion sin un backend tradicional requirio soluciones creativas con sessionStorage en el cliente y validacion por headers en el servidor.

4. Optimizacion de Imagenes Artisticas

Para un portafolio de arte digital, la calidad de imagen es critica. Se implemento una estrategia que balancea calidad y performance con imagenes servidas desde R2.

5. Gestion de Estado Compleja

La combinacion de proyectos, imagenes anidadas y comentarios requirio un diseno robusto del estado global usando Context API y hooks personalizados.


Reflexiones Finales

  1. Serverless es el futuro para portafolios: Coste cero, escalabilidad infinita y cero mantenimiento hacen que esta arquitectura sea ideal para proyectos personales y de showcase.

  2. La experiencia del artista importa: Un portafolio no solo debe ser bonito, sino tambien facil de gestionar. El panel de administracion fue clave para la autonomia del cliente.

  3. Cloudflare Workers es sorprendentemente potente: El edge runtime de Cloudflare ofrece una latencia increible y un modelo de programacion elegante con Hono.

  4. La seguridad no es opcional: Mantener credenciales como secrets del Worker y nunca exponerlas al cliente fue una decision arquitectonica fundamental.

  5. Iteracion continua: El roadmap incluye mejoras como dominio personalizado, CORS restringido, rate limiting y optimizacion automatica de imagenes, demostrando que un proyecto vivo siempre evoluciona.


Hecho con React + Vite, desplegado en Vercel, potenciado por Cloudflare Workers, R2 y Supabase.