Esta es una plantilla lista para que estudiantes creen sitios dinámicos conectados a Baserow y publicados en GitHub Pages.
- Baserow: Una base de datos de código abierto que funciona como un Excel avanzado en la web
- GitHub Pages: Servicio gratuito de GitHub para publicar sitios web estáticos
- Esta plantilla: Conecta Baserow con GitHub Pages para crear un sitio que se actualiza automáticamente
- Ve a baserow.io y crea una cuenta gratuita
- Crea una nueva Base de Datos
- Crea una Tabla con los campos que quieras mostrar (ejemplo: "Proyectos")
- Agrega datos a tu tabla
- En Baserow, ve a Settings → Account → API tokens
- Crea un nuevo token y cópialo
- Ve a tu base de datos y anota estos números de la URL:
https://api.baserow.io/database/[DB_ID]/table/[TABLE_ID]/- DB_ID: ID de tu base de datos
- TABLE_ID: ID de tu tabla
- Abre el archivo
src/config.js - Llena los campos con tu información:
export const BASEROW = {
urlBaserow: 'https://api.baserow.io',
token: 'TU_TOKEN_AQUI',
idBaseDatos: 123456, // Tu número
};
export const TABLA_PROYECTOS = {
id: 654321, // Tu número
campos: {
titulo: 'Título', // Nombre exacto de tu columna en Baserow
descripcion: 'Descripción',
imagen: 'Imagen',
enlace: 'Enlace',
},
};npm installnpm run devVisita http://localhost:3000 en tu navegador. Deberías ver tu contenido de Baserow.
- Abre GitHub.com y crea un nuevo repositorio
- Clona el repositorio en tu computadora con GitHub Desktop
- Copia los archivos de esta plantilla en la carpeta del repositorio
- En la terminal, dentro de la carpeta del proyecto:
npm run build
- Abre GitHub Desktop, verás los cambios
- Escribe un mensaje (ej: "Primera publicación") y haz clic en "Commit"
- Haz clic en "Publish branch"
- En GitHub.com, ve a Settings → Pages → Selecciona Deploy from a branch → Rama main → Carpeta /(root)
- ¡Listo! En unos minutos tu sitio estará en línea
Crea un archivo .github/workflows/build-and-deploy.yml:
name: Build and Deploy
on:
push:
branches: [main]
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: '18'
- run: npm install
- run: npm run build
- uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./distAsí, cada vez que hagas push, el sitio se actualiza automáticamente.
proyecto/
├── src/
│ ├── config.js ⭐ EDITAR: Tu configuración de Baserow
│ ├── programa.js Código principal (lógica del sitio)
│ ├── baserow.js Módulo para conectar con Baserow
│ ├── componentes.js Funciones para crear elementos HTML
│ └── scss/
│ └── estilos.scss ⭐ EDITAR: Tus estilos personalizados
├── index.html ⭐ EDITAR: Estructura HTML del sitio
├── vite.config.js ⭐ EDITAR: Configuración si publicas en subruta
├── package.json Dependencias del proyecto
└── estaticos/ Carpeta para imágenes y otros archivos
⭐ = Archivos que probablemente necesitarás editar
Abre src/scss/estilos.scss y modifica las variables al inicio:
$color-primario: #30cac0; // Color principal (turquesa)
$color-secundario: #130808; // Color secundario (negro)
$color-texto: #333; // Color del texto
$color-fondo: #ffffff; // Color de fondoEn src/scss/estilos.scss:
$font-principal: 'Tu Font Aqui', sans-serif;
$font-tamaño-base: 16px; // Tamaño base- En
src/config.js, agrega una nueva tabla:
export const TABLA_ARTICULOS = {
id: 999999,
campos: {
titulo: 'Título',
contenido: 'Contenido',
fecha: 'Publicado',
},
};- En
src/programa.js, carga esa tabla:
import { TABLA_ARTICULOS } from './config.js';
import { crearListaArticulos } from './componentes.js';
async function cargarArticulos() {
const articulos = await obtenerRegistrosTabla(TABLA_ARTICULOS.id);
const lista = crearListaArticulos(articulos);
document.querySelector('main').appendChild(lista);
}
cargarArticulos();El archivo src/componentes.js tiene funciones listas:
crearTarjetaProyecto()- Crea una tarjeta con imagen y enlacecrearListaArticulos()- Lista de artículos con fechascrearGaleria()- Galería de imágenescrearHereo()- Banner al inicio de la páginacrearSeccion()- Sección genérica
Ejemplo:
import { crearGaleria } from './componentes.js';
const galeria = crearGaleria([
{
url: 'https://ejemplo.com/foto1.jpg',
titulo: 'Mi primera foto',
descripcion: 'Tomada en...',
},
]);
document.querySelector('main').appendChild(galeria);-
Revisa la consola del navegador (F12 → Console):
- Si ves "Error de autenticación", tu token es incorrecto
- Si ves "No se encontró la tabla", tu ID de tabla es incorrecto
-
Verifica en Baserow:
- ¿Los datos están visibles en Baserow?
- ¿Copiaste el token completo?
- ¿Los IDs (DB_ID y TABLE_ID) son correctos?
-
Comprueba los nombres de campos:
- En
config.js, los nombres deben coincidir exactamente con los nombres en Baserow - Las mayúsculas importan
- En
- Asegúrate de haber hecho
yarn build - Verifica en Settings →npm ruPages** que está configurado correctamente
- Si publicas en una subruta, cambia en
vite.config.js:base: '/nombre-repositorio/',
Borra la carpeta node_modules y el archivo yarn.lock, luego:
package-lock.json`, luego:
npm install
npm ru
## Expandir el Proyecto
### Agregar formulario para recopilar datos
```javascript
async function crearFormulario() {
// En src/programa.js
const formulario = document.createElement('form');
// Agregar campos...
formulario.addEventListener('submit', async (e) => {
e.preventDefault();
// Llamar a crearRegistro() de baserow.js
});
}function filtrarProyectos(termino) {
const proyectos = document.querySelectorAll('.tarjeta-proyecto');
proyectos.forEach((tarjeta) => {
const titulo = tarjeta.textContent.toLowerCase();
if (titulo.includes(termino.toLowerCase())) {
tarjeta.style.display = '';
} else {
tarjeta.style.display = 'none';
}
});
}En src/baserow.js, la función obtenerRegistrosTabla() puede filtrar por página:
// Obtener página 2 (10 registros por página)
await obtenerRegistrosTabla(TABLA_PROYECTOS.id, {
size: 10,
page: 2,
});MIT - Libre para usar en proyectos personales y educativos.
Si tienes dudas:
- Revisa la consola del navegador (F12)
- Verifica los datos en Baserow
- Comprueba los valores en
config.js
¡A crear sitios increíbles! 🚀