Primeros pasos

En esta página

Esta guía te acompaña en la creación de tu primer sitio EmDash, desde la instalación hasta la publicación de tu primera entrada.

Requisitos previos

  • Node.js v22.12.0 o superior (las versiones impares no son compatibles)
  • npm, pnpm o yarn
  • Un editor de código (VS Code recomendado)

Crear un nuevo proyecto

npm

npm create emdash@latest

pnpm

pnpm create emdash@latest

yarn

yarn create emdash

Sigue las indicaciones para nombrar tu proyecto y configurar tus preferencias.

Iniciar el servidor de desarrollo

  1. Navega al directorio de tu proyecto:

    cd my-emdash-site
  2. Instala las dependencias:

    npm install
  3. Inicia el servidor de desarrollo:

    npm run dev
  4. Abre tu navegador en http://localhost:4321

Completar el asistente de configuración

Cuando visitas por primera vez el panel de administración, el Asistente de Configuración de EmDash te guía a través de la configuración inicial:

  1. Navega a http://localhost:4321/_emdash/admin

  2. Serás redirigido al Asistente de Configuración. Introduce:

    • Título del sitio — El nombre de tu sitio
    • Eslogan — Una breve descripción
    • Email del admin — Tu dirección de email
  3. Haz clic en Create Site para registrar tu passkey

  4. Tu navegador te pedirá crear un passkey usando Touch ID, Face ID, Windows Hello o una llave de seguridad

Una vez registrado tu passkey, estás conectado y redirigido al panel de administración.

Panel de administración de EmDash mostrando resumen de contenido, actividad reciente y barra lateral de navegación

Tu primera entrada

  1. En la barra lateral del admin, haz clic en Posts bajo Contenido.

  2. Haz clic en New Post.

  3. Introduce un título y escribe contenido usando el editor de texto enriquecido.

    Editor de entradas de EmDash con barra de herramientas de texto enriquecido y barra lateral de publicación
  4. Establece el estado en Published y haz clic en Save.

  5. Visita la página principal de tu sitio. La entrada aparece inmediatamente.

Estructura del proyecto

Tu proyecto EmDash sigue una estructura Astro estándar con algunas adiciones:

my-emdash-site/
├── astro.config.mjs      # Configuración de Astro + EmDash
├── src/
│   ├── live.config.ts    # Configuración de Live Collections
│   ├── pages/
│   │   ├── index.astro   # Página principal
│   │   └── posts/
│   │       └── [...slug].astro  # Páginas dinámicas de entradas
│   ├── layouts/
│   │   └── Base.astro    # Layout base
│   └── components/       # Tus componentes Astro
├── .emdash/
│   ├── seed.json         # Archivo seed de plantilla
│   └── types.ts          # Tipos TypeScript generados
└── package.json

Archivos de configuración

astro.config.mjs

La siguiente configuración registra EmDash como integración Astro con una base de datos SQLite local y almacenamiento de archivos local:

import { defineConfig } from "astro/config";
import react from "@astrojs/react";
import emdash, { local } from "emdash/astro";
import { sqlite } from "emdash/db";

export default defineConfig({
	integrations: [
		react(), // Requerido — la interfaz admin es una app React
		emdash({
			database: sqlite({ url: "file:./data.db" }),
			storage: local({
				directory: "./uploads",
				baseUrl: "/_emdash/api/media/file",
			}),
		}),
	],
});

src/live.config.ts

El siguiente archivo conecta EmDash al sistema de contenido de Astro a través de una única colección en vivo:

import { defineLiveCollection } from "astro:content";
import { emdashLoader } from "emdash/runtime";

export const collections = {
	_emdash: defineLiveCollection({ loader: emdashLoader() }),
};

Variables de entorno

Para producción, genera una clave de cifrado para los secrets de plugins con el siguiente comando:

npx emdash secrets generate

Añade el valor generado a tu entorno como EMDASH_ENCRYPTION_KEY, como se muestra a continuación. Esta clave cifra los secrets de plugins en reposo. Configúrala ahora para que tu despliegue esté listo cuando el cifrado de secrets de plugins la use.

EMDASH_ENCRYPTION_KEY=emdash_enc_v1_...

La clave nunca se almacena en la base de datos — solo texto cifrado. Resguárdala en un lugar duradero, porque perderla significa perder cada secret cifrado con ella.

El secret HMAC de preview y el salt de hash de IP de comentaristas se generan y almacenan en la base de datos en el primer uso, por lo que no necesitas configurarlos. Sobrescribe el secret de preview solo si un proceso separado necesita verificar los mismos tokens que tu sitio principal, como se muestra a continuación.

EMDASH_PREVIEW_SECRET=your-preview-secret

Consultar contenido en páginas

Usa las funciones de consulta de EmDash en tus páginas Astro. Estas siguen el patrón de colecciones en vivo de Astro, devolviendo { entries, error } para colecciones y { entry, error } para entradas individuales:

---
import { getEmDashCollection } from "emdash";
import Base from "../layouts/Base.astro";

const { entries: posts } = await getEmDashCollection("posts");
---

<Base title="Inicio">
  <h1>Últimas entradas</h1>
  <ul>
    {posts.map((post) => (
      <li>
        <a href={`/posts/${post.slug}`}>{post.data.title}</a>
      </li>
    ))}
  </ul>
</Base>

La siguiente página obtiene una entrada individual por slug:

---
import { getEmDashEntry } from "emdash";

const { slug } = Astro.params;
const { entry: post } = await getEmDashEntry("posts", slug);

if (!post) {
  return Astro.redirect("/404");
}
---

<h1>{post.data.title}</h1>

Generar tipos TypeScript

Para seguridad de tipos completa, genera tipos desde el esquema de tu base de datos:

npx emdash types

Esto crea .emdash/types.ts con interfaces para todas tus colecciones. Tu editor ahora autocompletará nombres de campos y detectará errores de tipo.

Próximos pasos

Con el sitio en funcionamiento, las siguientes páginas cubren qué hacer a continuación: