Skip to main content

Quickstart

Prerequisites

  • Node.js 22+ (24 LTS recommended)
  • pnpm 10+
  • Git 2.30+

1. Clone the Template

git clone https://github.com/ever-works/directory-web-minimal-template my-directory
cd my-directory
pnpm install

2. Add Content

Create a .content/ directory in apps/web/ with your data:

apps/web/.content/
├── .works/
│ └── works.yml # Site name, URL, branding
├── categories.yml # Category definitions
├── tags.yml # Tag definitions
├── collections.yml # Optional item collections
├── data/
│ ├── my-item/
│ │ └── my-item.yml # Item data (YAML)
│ └── another-item/
│ └── another-item.yml
└── comparisons/ # Optional item comparisons

Minimal .works/works.yml

company_name: "My Directory"
items_name: "Tools"
item_name: "Tool"
app_url: "https://my-directory.example.com"

Minimal item YAML

name: "My First Tool"
slug: "my-first-tool"
description: "A great tool for doing things."
source_url: "https://example.com"
category: "utilities"
tags: ["open-source", "typescript"]
status: "approved"
updated_at: "2026-01-01 00:00"

Or clone from a git repo by setting the DATA_REPOSITORY environment variable:

# .env
DATA_REPOSITORY=https://github.com/your-org/your-content-repo

3. Start Development

pnpm dev:web

Open http://localhost:4321.

4. Customize Pages

Edit pages in apps/web/src/pages/. The template uses headless components from @ever-works/ui:

---
import ItemGrid from '@ever-works/ui/astro/ItemGrid.astro';
import { getContent } from '../lib/content';
const { items } = await getContent();
---
<ItemGrid items={items} />

Apply your own Tailwind CSS styles — the components are unstyled by default.

5. Build and Deploy

pnpm build # Build all apps

Deploy to Vercel:

npx vercel deploy

Or push to GitHub with the included CI/CD workflow (.github/workflows/deploy.yml).

Common Commands

CommandDescription
pnpm devStart all dev servers
pnpm dev:webStart web app only
pnpm dev:docsStart the Docusaurus docs site
pnpm buildBuild all apps
pnpm typecheckType-check all packages
pnpm lintLint all packages
pnpm testRun unit tests (Vitest)
pnpm test:coverageRun unit tests with V8 coverage reports
pnpm test:ctRun @ever-works/ui Playwright Component Tests (real Chromium; first run requires pnpm test:ct:install)
pnpm coverageMerge Vitest + Playwright CT V8 coverage into a single report at packages/ui/coverage/merged/
pnpm test:e2eRun Playwright E2E tests
pnpm formatFormat code with Prettier
pnpm cleanClean build artifacts

For the canonical and exhaustive list (including the defensive pnpm test:ui:safe per-file Vitest fallback), see CLAUDE.md "Common Commands".

Next Steps