dineway
v0.1.48
Published
Agentic Website builder for restaurants — structured content meets AI via the Model Context Protocol
Maintainers
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
- Node.js 22 or later — download here
- An AI agent environment — any of these:
- OpenAI Codex
- Claude Code
- OpenCode
- OpenClaw
- Any agent that supports skill packs
- 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 higherIf 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-skillsThis 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:
- Search for your restaurant and fetch real business data (hours, reviews, photos, location)
- Download and curate the best photos
- Design an information architecture with Blog, News, Menu, Reviews, and Gallery
- Build a polished Astro website with local SEO and JSON-LD
- Create the Dineway CMS schema and seed content
- 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 devThe 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
- Open
http://localhost:4321/_dineway/admin - The Setup Wizard appears on first visit
- Enter your email and display name
- Register a passkey (fingerprint, Face ID, or security key)
- 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.jsonManage 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 listManage 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-itemsGenerate TypeScript Types
npx dineway typesFor agents: All CLI commands support
--jsonfor 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 deployWhat happens:
- 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. - You verify your email address (Dineway account). The first verified email to publish a
placeIdclaims that restaurant site. - The CLI recovers an existing site by
placeIdfor the same owner, or creates the one allowed site for that restaurant. - 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.
- The site is scanned, changed files are uploaded, global CDN is configured, and remote build progress is polled.
- On first bootstrap issue, you receive a one-time setup link to register your admin passkey on the live site.
DINEWAY_SITE_URLandDINEWAY_TOKENare saved to your project.envautomatically so remote CLI commands work out of the box. Repeat deploys refreshDINEWAY_TOKENfrom 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-seedThe 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:
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 });
- Local SQLite (Standard): Best for single-container VPS or Fly.io with a persistent volume.
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, });
- Local Uploads: Saves images directly on the server's hard disk (ideal for local VPS).
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.comStep 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:
--tokenflag (highest priority)DINEWAY_TOKENfrom shell environment or.envfile- Stored credentials from
dineway login - 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-linkOpen 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 creationAutomated 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 deployKey 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.jsonDocumentation
Full documentation, guides, and API reference: docs.dineway.ai
