npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

dineway

v0.1.48

Published

Agentic Website builder for restaurants — structured content meets AI via the Model Context Protocol

Readme

Dineway — Build Your Restaurant Website with AI

Dineway is the Agentic Website builder for restaurants and local businesses. You don't need to write code. Just tell an AI agent your restaurant name and city, and it builds a professional website — with menus, blog, reviews, gallery, and local SEO — automatically.

How it works: You paste this guide into an AI agent (Codex, Claude, OpenClaw, or similar). The agent reads it, installs the tools, and builds your site end-to-end. You review, approve, and publish.


What You Get

| Feature | Description | | ------------------------- | --------------------------------------------------------------------------------------------------- | | 🍽️ Restaurant Website | A polished, mobile-first site built from your real business data — hours, location, reviews, photos | | 📝 Blog & News | Articles derived from real customer reviews and restaurant updates | | 🍕 Menu Display | Structured menu with items, prices, descriptions, and photos | | ⭐ Reviews Showcase | Curated real reviews that highlight your restaurant's character | | 🖼️ Photo Gallery | A CMS-managed gallery with your best images | | 🔍 Local SEO | JSON-LD structured data, meta tags, and local business schema — all automatic | | 🛠️ Admin Panel | A visual dashboard to edit content, manage media, and publish changes | | 🤖 AI-Powered | 50+ MCP tools let AI agents manage content, menus, and marketing on your behalf |


Before You Start

What You Need

  1. Node.js 22 or laterdownload here
  2. An AI agent environment — any of these:
  3. Your restaurant info — name and city (that's it!)

Check Node.js

Open a terminal and run:

node --version
# Should print v22.x.x or higher

If you don't have Node.js, download it from nodejs.org and install it first.


Step 1 — Install Dineway Skills

Dineway Skills are instruction packs that teach your AI agent how to build restaurant websites. Install them with one command:

npx skills add dineway/dineway-skills

This installs the following skills into your project:

| Skill | What It Does | | -------------------------- | ---------------------------------------------------------------------- | | building-restaurant-site | End-to-end restaurant site creation from real place data | | building-dineway-site | General Dineway site building patterns | | dineway-cli | CLI commands for managing content, schema, media, and deployment | | enrich-place-details | Fetches your restaurant's real data (hours, reviews, photos, location) | | frontend-design | Creates distinctive, production-grade visual design | | brainstorming | Explores design and architecture options before building |


Step 2 — Create Your Restaurant Site

Option A: Tell the Agent (Recommended)

Paste this into your AI agent's input:

Use building-restaurant-site to build an AI-ready Dineway restaurant site for "YOUR RESTAURANT NAME" in "YOUR CITY, COUNTRY".

Replace with your real restaurant name and city. Examples:

Use building-restaurant-site to build an AI-ready Dineway restaurant site for "Peace Harmony" in "Sydney, Australia".
Use building-restaurant-site to build an AI-ready Dineway restaurant site for "La Maison Rouge" in "Paris, France".

The agent will automatically:

  1. Search for your restaurant and fetch real business data (hours, reviews, photos, location)
  2. Download and curate the best photos
  3. Design an information architecture with Blog, News, Menu, Reviews, and Gallery
  4. Build a polished Astro website with local SEO and JSON-LD
  5. Create the Dineway CMS schema and seed content
  6. Start a local dev server for you to preview

Option B: Manual Project Creation

If you prefer to start with a blank project and build it yourself:

# Create a new Dineway project
npm create dineway@latest my-restaurant

# Enter the project directory
cd my-restaurant

# Install dependencies
npm install

# Start the dev server
npx dineway dev

The dev server starts at http://localhost:4321. The admin panel is at http://localhost:4321/_dineway/admin.


Step 3 — Preview Your Site

Once the agent finishes building (or you've started the dev server manually), open your browser:

  • Your site: http://localhost:4321
  • Admin panel: http://localhost:4321/_dineway/admin

On your first visit to the admin panel, the Setup Wizard runs automatically — it creates the database and prompts you to create your admin account.

Create Your Admin Account

  1. Open http://localhost:4321/_dineway/admin
  2. The Setup Wizard appears on first visit
  3. Enter your email and display name
  4. Register a passkey (fingerprint, Face ID, or security key)
  5. You're now the site administrator

Tip: In dev mode, you can skip passkey setup by visiting: http://localhost:4321/_dineway/api/setup/dev-bypass?redirect=/_dineway/admin


Step 4 — Manage Content with Dineway CLI

The Dineway CLI is your command-line tool for managing everything about your site. The AI agent uses it automatically, but you can also use it directly.

Seed Your Site with Content

If you have a seed file (the agent creates one automatically):

npx dineway seed seed/seed.json

Manage Menu Items

# List all menu items
npx dineway content list menu-items

# Add a new menu item
npx dineway content create menu-items --data '{
  "title": "Grilled Salmon",
  "description": "Atlantic salmon with seasonal vegetables",
  "price": 28.50
}'

# Update a menu item (use the ID from a prior list/get)
npx dineway content get menu-items grilled-salmon
npx dineway content update menu-items 01ABC123 --rev MToyMDI2... --data '{"price": 32.00}'

Manage Blog Posts

# List posts
npx dineway content list posts

# Create a new blog post
npx dineway content create posts --data '{
  "title": "Spring Menu Now Available",
  "content": "# Fresh Flavors for the Season\n\nWe are excited to announce our new spring menu..."
}'

Upload Photos

# Upload a dish photo
npx dineway media upload ./dish-photo.jpg --alt "Grilled salmon plate" --caption "Our signature dish"

# List all media
npx dineway media list

Manage Schema (Collections & Fields)

# List all collections
npx dineway schema list

# Add a field to menu items
npx dineway schema add-field menu-items calories --type integer --label "Calories"

# Create a new collection
npx dineway schema create specials --label "Daily Specials"

Search Content

npx dineway search "salmon" --collection menu-items

Generate TypeScript Types

npx dineway types

For agents: All CLI commands support --json for machine-readable output. It's auto-enabled when stdout is piped:

npx dineway content list posts --json | jq '.items[].slug'

Step 5 — Deploy Your Site & Own Your Website

Unlike standard SaaS website builders, Dineway lets you fully own your website. Your code, your structured menus, your blog posts, and your media files belong entirely to you. You can choose to deploy to Dineway's official platform or host it on your own server or cloud provider with zero vendor lock-in.

Option A: Deploy to Dineway (Simplest & Managed)

Dineway provides a first-party hosting platform for your website. It's the easiest way to go live:

npx dineway deploy

What happens:

  1. The CLI resolves the restaurant placeId. On first publish you can provide only restaurant name and city; the CLI creates a quota-protected anonymous shadow session, searches for the place, and binds the selected place before asking for email verification.
  2. You verify your email address (Dineway account). The first verified email to publish a placeId claims that restaurant site.
  3. The CLI recovers an existing site by placeId for the same owner, or creates the one allowed site for that restaurant.
  4. The managed database is provisioned and initialized. Repeat deploys skip migrations and seed when local deploy metadata already matches the current site, database, Dineway migration set, and seed file.
  5. The site is scanned, changed files are uploaded, global CDN is configured, and remote build progress is polled.
  6. On first bootstrap issue, you receive a one-time setup link to register your admin passkey on the live site.
  7. DINEWAY_SITE_URL and DINEWAY_TOKEN are saved to your project .env automatically so remote CLI commands work out of the box. Repeat deploys refresh DINEWAY_TOKEN from Forgeway's already-issued bootstrap response.

If package.json declares a different dineway runtime version than the deploy CLI, Forgeway deploy prints a warning and continues. If a later migration or startup error follows, update package.json and reinstall to match the CLI, or rerun deploy with the CLI version that matches the current manifest.

Examples:

# First publish; place search is handled by the CLI.
npx dineway deploy --restaurant-name "Cafe Star" --city "Seattle" --email [email protected]

# Authoritative place id; skips place search.
npx dineway deploy --place-id ChIJ... --restaurant-name "Cafe Star" --city "Seattle" --email [email protected]

# Show detailed timing and deployment status logs.
npx dineway deploy --verbose

# Force database migrations and seed even when local fingerprint metadata matches.
npx dineway deploy --force-db-init

# Skip seed application during database initialization.
npx dineway deploy --skip-seed

The same verified email can republish the same restaurant from a fresh local checkout or a new shadow session. A different verified email is stopped by the restaurant claim check.

Important: Open the setup link in your browser immediately. It lets you register your secure passkey for the live admin panel. If you lose or expire the link, regenerate it with npx dineway auth setup-link.


Option B: Self-Host Anywhere (Maximum Ownership)

You can host Dineway on your own infrastructure. Dineway runs as a standard Node.js server.

# Choose a platform target to generate configurations and deploy
npx dineway deploy railway    # Generates railway.json & deploys to Railway
npx dineway deploy fly        # Generates fly.toml & deploys to Fly.io with persistent volumes
npx dineway deploy docker     # Generates Dockerfile & .dockerignore
npx dineway deploy docker --compose  # Generates Dockerfile + docker-compose.yml for local VPS hosting
npx dineway deploy gcp        # Google Cloud Run (experimental)

Configuring Your Database & Media Storage for Self-Hosting

When self-hosting, you specify how the database and media files are stored in astro.config.mjs using environment variables or configuration blocks:

  1. Database Options:

    • Local SQLite (Standard): Best for single-container VPS or Fly.io with a persistent volume.
      database: sqlite({ url: "file:./data/data.db" });
    • Remote libSQL (Turso): Excellent for serverless or ephemeral platforms like Railway, Fly, or GCP.
      database: libsql({
      	url: process.env.DINEWAY_DATABASE_URL || "libsql://...",
      	authToken: process.env.DINEWAY_DATABASE_TOKEN,
      });
    • PostgreSQL: Industry-standard relational database.
      database: postgres({ connectionString: process.env.DATABASE_URL });
  2. Media Storage Options:

    • Local Uploads: Saves images directly on the server's hard disk (ideal for local VPS).
      storage: local({ directory: "./uploads", baseUrl: "/_dineway/api/media/file" });
    • S3-Compatible Storage (AWS S3, Cloudflare R2, MinIO): Best for ephemeral hosts (Railway, Cloud Run) so files are never lost when the container restarts.
      storage: s3({
      	bucket: process.env.S3_BUCKET_NAME,
      	region: process.env.S3_REGION,
      	endpoint: process.env.S3_ENDPOINT, // e.g. Cloudflare R2 or MinIO endpoint
      	accessKeyId: process.env.S3_ACCESS_KEY_ID,
      	secretAccessKey: process.env.S3_SECRET_ACCESS_KEY,
      });

After Deployment

Once deployed, manage your live site remotely:

# Log in to your live site
npx dineway login --url https://your-site.example.com

# Check who you're logged in as
npx dineway whoami

# Manage content remotely
npx dineway content list posts --url https://your-site.example.com

Step 6 — Ongoing Management with AI

After your site is live, continue using your AI agent for ongoing tasks:

Use dineway-cli to create a new blog post about our weekend brunch special.
Use dineway-cli to update the menu with new summer dishes.
Use dineway-cli to upload these new restaurant photos and add them to the gallery.

The agent reads the dineway-cli skill and translates your natural-language requests into CLI commands automatically.


Quick Reference

CLI Command Categories

| Category | Commands | Needs Server? | | ------------ | ------------------------------------------------------------------ | ------------- | | Setup | init, dev, seed, export-seed | No | | Deploy | deploy forgeway/railway/docker/fly/gcp | No | | Auth | login, logout, whoami, auth setup-link, auth secret | Yes (remote) | | Content | content list/get/create/update/delete/publish/unpublish/schedule | Yes | | Schema | schema list/get/create/delete/add-field/remove-field | Yes | | Media | media list/get/upload/delete | Yes | | Search | search | Yes | | Taxonomy | taxonomy list/terms/add-term | Yes | | Menu | menu list/get | Yes | | Types | types | Yes |

Field Types for Schema

When adding fields to collections, use these types:

| Type | Use For | | -------------- | -------------------------------- | | string | Short text (titles, names) | | text | Long plain text | | number | Decimal numbers (prices) | | integer | Whole numbers (counts, calories) | | boolean | Yes/No flags | | datetime | Dates and times | | image | Photos and images | | reference | Link to another content item | | portableText | Rich text with formatting | | json | Structured data |

Authentication Flow

The CLI resolves authentication automatically:

  1. --token flag (highest priority)
  2. DINEWAY_TOKEN from shell environment or .env file
  3. Stored credentials from dineway login
  4. Dev bypass — localhost only, no auth needed

For local development, just run commands — auth is handled automatically.


Common Questions

How do I access the admin panel?

Visit http://localhost:4321/_dineway/admin (local) or https://your-site.example.com/_dineway/admin (deployed). You need an admin account — create one through the Setup Wizard on first visit.

How do I reset my admin account?

Generate a new one-time setup link:

npx dineway auth setup-link

Open the link in your browser to register a new passkey.

Can I edit the site design after it's built?

Yes. The site is a standard Astro project. You (or your AI agent) can modify the HTML, CSS, and components in the src/ directory. Content managed by Dineway CMS is edited through the admin panel or CLI.

What data does the agent use to build my site?

The agent fetches publicly available business data: your restaurant name, address, hours, reviews, photos, and menu information. It does not access private accounts or require credentials.

Can I use Dineway for non-restaurant businesses?

Yes. While optimized for restaurants, Dineway's content engine, admin panel, and plugin system work for any local business. Use the building-dineway-site skill instead of building-restaurant-site.


Agent Automation Reference

This section is for AI agents that read this README to automate site creation. Human readers can skip this.

Automated Restaurant Site Build

STEP 1: Install skills
  RUN: npx skills add dineway/dineway-skills

STEP 2: Build the site
  INVOKE SKILL: building-restaurant-site
  INPUTS: restaurant name, city/country
  The skill internally invokes:
    - enrich-place-details (fetch real place data)
    - brainstorming (design decisions)
    - frontend-design (visual implementation)
    - building-dineway-site (CMS integration)
    - dineway-cli (content seeding, media upload)

STEP 3: Validate
  RUN: npx dineway dev
  VERIFY: Site loads at http://localhost:4321
  VERIFY: Admin panel loads at http://localhost:4321/_dineway/admin
  VERIFY: Blog, News, Menu, Reviews, Gallery pages exist and render

STEP 4: Deploy
  RUN: npx dineway deploy
  CAPTURE: Setup link from output
  PRESENT: Setup link to user for admin account creation

Automated Content Management

# List content in a collection
RUN: npx dineway content list {collection} --json

# Create content (auto-publishes)
RUN: npx dineway content create {collection} --data '{...}' --json

# Update content (requires --rev from a prior get)
RUN: npx dineway content get {collection} {id} --json
# Extract _rev from response
RUN: npx dineway content update {collection} {id} --rev {_rev} --data '{...}' --json

# Upload media
RUN: npx dineway media upload {filepath} --alt "{description}" --json

# Deploy changes
RUN: npx dineway deploy

Key Files in a Dineway Project

my-restaurant/
├── astro.config.mjs          # Astro + Dineway configuration
├── src/
│   ├── live.config.ts         # Dineway content loader (boilerplate)
│   ├── pages/                 # Site pages (server-rendered)
│   ├── layouts/               # Layout components
│   └── components/            # Reusable UI components
├── seed/
│   └── seed.json              # Schema + demo content seed file
├── .dineway/
│   ├── types.ts               # Generated TypeScript types
│   └── schema.json            # Generated schema
└── package.json

Documentation

Full documentation, guides, and API reference: docs.dineway.ai