Primeiros passos

Nesta página

Este guia te acompanha na criação do seu primeiro site EmDash, da instalação à publicação do seu primeiro post.

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 (VS Code recomendado)

Criar um novo projeto

npm

npm create emdash@latest

pnpm

pnpm create emdash@latest

yarn

yarn create emdash

Siga as instruções para nomear seu projeto e configurar suas preferências.

Iniciar o servidor de desenvolvimento

  1. Navegue para o diretório do projeto:

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

    npm install
  3. Inicie o servidor de desenvolvimento:

    npm run dev
  4. Abra seu navegador em http://localhost:4321

Completar o assistente de configuração

Quando você visita o painel admin pela primeira vez, o Assistente de Configuração do EmDash te guia pela configuração inicial:

  1. Navegue para http://localhost:4321/_emdash/admin

  2. Você será redirecionado para o Assistente de Configuração. Insira:

    • Título do site — O nome do seu site
    • Tagline — Uma descrição curta
    • Email do admin — Seu endereço de email
  3. Clique em Create Site para registrar sua passkey

  4. Seu navegador pedirá para criar uma passkey usando Touch ID, Face ID, Windows Hello ou uma chave de segurança

Uma vez que sua passkey está registrada, você está logado e redirecionado para o painel admin.

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

Seu primeiro post

  1. Na barra lateral do admin, clique em Posts em Conteúdo.

  2. Clique em New Post.

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

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

  5. Visite a página inicial do seu site. O post aparece imediatamente.

Estrutura do projeto

Seu projeto EmDash segue uma estrutura Astro padrão com algumas adições:

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

Arquivos de configuração

astro.config.mjs

A seguinte configuração registra EmDash como integração Astro com banco de dados SQLite local e armazenamento de arquivos 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(), // Obrigatório — a interface admin é uma app React
		emdash({
			database: sqlite({ url: "file:./data.db" }),
			storage: local({
				directory: "./uploads",
				baseUrl: "/_emdash/api/media/file",
			}),
		}),
	],
});

src/live.config.ts

O seguinte arquivo conecta EmDash ao sistema de conteúdo do Astro através de uma única coleção ao vivo:

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

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

Variáveis de ambiente

Para produção, gere uma chave de criptografia para secrets de plugins com o seguinte comando:

npx emdash secrets generate

Adicione o valor gerado ao seu ambiente como EMDASH_ENCRYPTION_KEY, como mostrado abaixo. Esta chave criptografa secrets de plugins em repouso. Configure-a agora para que seu deploy esteja pronto quando a criptografia de secrets de plugins a usar.

EMDASH_ENCRYPTION_KEY=emdash_enc_v1_...

A chave nunca é armazenada no banco de dados — apenas texto cifrado criptografado. Faça backup em um lugar durável, porque perdê-la significa perder cada secret criptografado com ela.

O secret HMAC de preview e o salt de hash de IP de comentaristas são gerados e armazenados no banco de dados no primeiro uso, então você não precisa configurá-los. Sobrescreva o secret de preview apenas se um processo separado precisar verificar os mesmos tokens do seu site principal, como mostrado abaixo.

EMDASH_PREVIEW_SECRET=your-preview-secret

Consultar conteúdo nas páginas

Use as funções de consulta do EmDash nas suas páginas Astro. Estas seguem o padrão de coleções ao vivo do Astro, retornando { 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="Início">
  <h1>Últimos posts</h1>
  <ul>
    {posts.map((post) => (
      <li>
        <a href={`/posts/${post.slug}`}>{post.data.title}</a>
      </li>
    ))}
  </ul>
</Base>

A seguinte página busca uma 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>

Gerar tipos TypeScript

Para segurança de tipos completa, gere tipos a partir do schema do seu banco de dados:

npx emdash types

Isso cria .emdash/types.ts com interfaces para todas as suas coleções. Seu editor agora irá autocompletar nomes de campos e detectar erros de tipo.

Próximos passos

Com o site rodando, as seguintes páginas cobrem o que fazer a seguir: