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.

                   +---------------------------+
                   |       USUARIO FINAL       |
                   +-------------+-------------+
                                 |
                                 | HTTPS
                                 v
              +-------------------------------------+
              |          VERCEL (CDN Global)        |
              |   React SPA + Rewrites (/api ->)    |
              +-------------------------------------+
                   |                        |
            HTML/CSS/JS             /api/* (rewrite)
                   |                        |
                   v                        v
            +-------------+    +---------------------------+
            |  Navegador  |    |  CLOUDFLARE WORKERS       |
            |  (SPA)      |    |  Serverless API (Hono)    |
            +-------------+    +-----------+---------------+
                                           |
                              +------------+-------------+
                              |                          |
                              v                          v
                 +---------------------+    +------------------------+
                 |     SUPABASE        |    |    CLOUDFLARE R2       |
                 |  PostgreSQL + REST  |    |   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:

POST   /api/upload              Subir imagen a R2 (multipart/form-data)
GET    /api/projects            Listar proyectos (con imagenes anidadas)
GET    /api/projects/:id        Detalle de proyecto
POST   /api/projects            Crear proyecto (requiere x-admin-password)
PUT    /api/projects/:id        Actualizar proyecto (requiere x-admin-password)
DELETE /api/projects/:id        Eliminar proyecto + imagenes R2
GET    /api/comments            Listar comentarios
POST   /api/comments            Crear comentario
DELETE /api/comments/:id        Eliminar comentario
POST   /api/admin/login         Login con contrasena

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 de administracion
|   |   |-- ProjectPage.jsx       # Detalle con modal
|   |   |-- PinDetail.jsx         # Modal imagen + comentarios
|   |   |-- ProjectsCovers.jsx    # Grilla de portadas
|   |   +-- Landing.jsx, Hero.jsx, About.jsx...
|   |-- context/AdminContext.jsx  # Estado global de sesion admin
|   |-- hooks/                    # Hooks personalizados
|   +-- data/data.js              # Contenido estatico
|
|-- worker/                       # Cloudflare Worker (API)
|   |-- src/index.ts              # Hono app: rutas /api/*
|   |-- wrangler.toml             # Config del Worker
|   +-- seed.sh                   # Subida de imagenes a R2
|
|-- supabase/schema.sql           # Esquema de la base de datos
|-- vercel.json                   # Rewrites SPA + proxy a Workers
+-- vite.config.js                # Config Vite

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.