Primeiros passos

Nesta página

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

Pré-requisitos

  • Node.js v22.16.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 até 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 o navegador em http://localhost:4321

Completar o assistente de configuração

Ao visitar o painel admin pela primeira vez, o assistente de configuração do EmDash guia você pela configuração inicial:

  1. Navegue até 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 breve descrição
    • Email do administrador — 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 é registrada, você está logado e redirecionado para o dashboard de administração.

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

Seu primeiro post

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

  2. Clique em New Post.

  3. Digite um título e escreva algum 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 de Live Collections
│   ├── pages/
│   │   ├── index.astro   # Página inicial
│   │   └── posts/
│   │       └── [...slug].astro  # Páginas dinâmicas de posts
│   ├── 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 o EmDash como integração Astro com um 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 UI admin é um 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 o EmDash ao sistema de conteúdo do Astro através de uma única live collection:

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 segredos 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 segredos de plugins em repouso. Defina-a agora para que sua implantação esteja pronta quando a criptografia de segredos de plugins a usar.

EMDASH_ENCRYPTION_KEY=emdash_enc_v1_...

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

O segredo HMAC de preview e o salt de hash de IP do comentarista são gerados e armazenados no banco de dados no primeiro uso, então você não precisa defini-los. Sobrescreva o segredo 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. Elas seguem o padrão de live collections 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="Home">
  <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 única entrada 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 do seu esquema de banco de dados:

npx emdash types

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

Próximos passos

Com o site rodando, as seguintes páginas cobrem o que fazer em seguida: