NECK Stack

create-neck-stack

NECK Stack

Nuxt and Encore apps with production shape already wired: generated clients, Caddy ingress, Komodo deploy resources, CI, migrations, and shared NECK Dash observability.

Nuxtfrontend routes and composables
Encore.tstyped backend primitives
Caddysingle-domain ingress
NECK Dashtraces, logs, metrics, Flow

Stack shape

The default repo already knows where things belong.

Nuxt frontend

Routes, composables, build output, and the generated Encore client stay in the Nuxt lane.

Encore.ts backend

Typed APIs, services, secrets, SQL, cache, Pub/Sub, crons, streams, logs, traces, and tests.

Caddy ingress

One public domain serves Nuxt, proxies /api, and mounts the shared dashboard under /__neck_dash.

Komodo deploy

Compose, infra config, CI, image builds, migrations, and webhooks are generated from app metadata.

Why NECK

Opinionated where full-stack apps usually drift.

Generated client first

Frontend calls go through Encore's generated client, so route changes are caught before deploy.

Production config from metadata

Infra files are generated from Encore metadata instead of a second hand-maintained source scan.

Observability included

NECK Dash scopes traces, logs, metrics, Flow, service catalog, and OpenAPI by app on the shared server.

Agent-readable defaults

The scaffold includes canonical rules for coding agents, editor configs, CI, scripts, and deployment paths.

Production path

From scaffold to server without reshaping the app later.

The generated project keeps runtime paths explicit: Caddy owns public ingress, Encore owns backend primitives, Komodo owns server deployment, and NECK Dash stays shared per host.

  1. Create a Nuxt + Encore workspace

  2. Generate clients and OpenAPI

  3. Build frontend, backend, and migrations

  4. Deploy through Komodo with Caddy on one domain

Quick start

Initialize the repo and keep moving.

Use the published initializer for a blank app, or run the interactive wizard when the domain, registry, Komodo server, or dashboard credentials should be captured up front.

pnpm create neck-stack my-app
cd my-app
pnpm dlx zx scripts/install.mjs
pnpm check
pnpm dev