Introdução

Nesta página

Este guia acompanha-o desde a instalação até publicar o primeiro artigo num site EmDash.

Pré-requisitos

  • Node.js v22.12.0 ou superior (versões ímpares não são suportadas)
  • npm, pnpm ou yarn
  • Um editor de código (recomendado VS Code)

Criar um projeto novo

npm

npm create emdash@latest

pnpm

pnpm create emdash@latest

yarn

yarn create emdash

Siga as instruções para nomear o projeto e definir as preferências.

Iniciar o servidor de desenvolvimento

  1. Entre na pasta do projeto:

    cd my-emdash-site
  2. Instale as dependências:

    npm install
  3. Inicie o servidor de desenvolvimento:

    npm run dev
  4. Abra o browser em http://localhost:4321

Concluir o assistente de configuração

Na primeira visita ao painel de administração, o assistente de configuração do EmDash guia-o na configuração inicial:

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

  2. Será redirecionado para o assistente. Introduza:

    • Site Title — O nome do site
    • Tagline — Uma breve descrição
    • Admin Email — O seu email
  3. Clique em Create Site para registar a passkey

  4. O browser pedirá que crie uma passkey com Touch ID, Face ID, Windows Hello ou uma chave de segurança

Quando a passkey estiver registada, fica autenticado e é redirecionado para o painel de administração.

Painel de administração EmDash com visão geral de conteúdo, atividade recente e barra lateral de navegação

O seu primeiro artigo

  1. Na barra lateral do admin, clique em Posts em Content.

  2. Clique em New Post.

  3. Introduza um título e escreva conteúdo com o editor de texto rico.

    Editor de artigos EmDash com barra de ferramentas de texto rico e barra lateral de publicação
  4. Defina o estado como Published e clique em Save.

  5. Visite a página inicial do site para ver o artigo em direto — sem reconstruir!

Estrutura do projeto

O projeto EmDash segue a estrutura Astro padrão com algumas adições:

my-emdash-site/
├── astro.config.mjs      # Configuração Astro + EmDash
├── src/
│   ├── live.config.ts    # Configuração das Live Collections
│   ├── pages/
│   │   ├── index.astro   # Página inicial
│   │   └── posts/
│   │       └── [...slug].astro  # Páginas dinâmicas de artigos
│   ├── layouts/
│   │   └── Base.astro    # Layout base
│   └── components/       # Os seus componentes Astro
├── .emdash/
│   ├── seed.json         # Ficheiro seed do modelo
│   └── types.ts          # Tipos TypeScript gerados
└── package.json

Ficheiros de configuração

astro.config.mjs

Configura o EmDash como integração Astro:

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

export default defineConfig({
	integrations: [
		emdash({
			database: sqlite({ url: "file:./data.db" }),
			storage: local({
				directory: "./uploads",
				baseUrl: "/_emdash/api/media/file",
			}),
		}),
	],
});

src/live.config.ts

Liga o EmDash ao sistema de conteúdos do Astro:

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

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

Variáveis de ambiente

Em implementações de produção precisa de definir:

# Required for authentication
EMDASH_AUTH_SECRET=your-secret-here

# Optional: for content preview
EMDASH_PREVIEW_SECRET=your-preview-secret

Gere um segredo de autenticação seguro com:

npx emdash auth secret

Consultar conteúdo nas páginas

Use as funções de consulta do EmDash nas páginas Astro. Seguem o padrão de live collections do Astro e devolvem { entries, error } para coleções e { entry, error } para entradas individuais:

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

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

<Base title="Home">
  <h1>Latest Posts</h1>
  <ul>
    {posts.map((post) => (
      <li>
        <a href={`/posts/${post.slug}`}>{post.data.title}</a>
      </li>
    ))}
  </ul>
</Base>

Para uma única entrada:

---
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>

Gerar tipos TypeScript

Para segurança de tipos completa, gere tipos a partir do esquema da base de dados:

npx emdash types

Isto cria .emdash/types.ts com interfaces para todas as coleções. O editor completa nomes de campos e deteta erros de tipo.

Próximos passos

Já tem um site EmDash a funcionar! Continue aqui: