Installation Guide

This guide will help you set up a single-language shipyard site from scratch.

Prerequisites

Before you begin, make sure you have:

  • Node.js 18+: Download from nodejs.org
  • npm or pnpm: Package manager (comes with Node.js)
  • Git: For version control
  • Code editor: VS Code recommended

Create New Project

1. Initialize Project

# Create new directory
mkdir my-single-lang-site
cd my-single-lang-site

# Initialize package.json
npm init -y

2. Install Dependencies

Install Astro and shipyard packages:

```bash npm install astro @astrojs/tailwind tailwindcss daisyui ```
```bash yarn add astro @astrojs/tailwind tailwindcss daisyui ```
```bash pnpm add astro @astrojs/tailwind tailwindcss daisyui ```
```bash npm install @levino/shipyard-base @levino/shipyard-blog @levino/shipyard-docs ```
```bash yarn add @levino/shipyard-base @levino/shipyard-blog @levino/shipyard-docs ```
```bash pnpm add @levino/shipyard-base @levino/shipyard-blog @levino/shipyard-docs ```

Install dev dependencies:

```bash npm install --save-dev @tailwindcss/typography typescript ```
```bash yarn add --dev @tailwindcss/typography typescript ```
```bash pnpm add -D @tailwindcss/typography typescript ```

3. Configure Astro

Create astro.config.mjs:

import tailwind from '@astrojs/tailwind'
import shipyard from '@levino/shipyard-base'
import shipyardDocs from '@levino/shipyard-docs'
import shipyardBlog from '@levino/shipyard-blog'
import { defineConfig } from 'astro/config'

export default defineConfig({
  // Note: No i18n configuration for single-language sites
  integrations: [
    tailwind({
      applyBaseStyles: false,
    }),
    shipyard({
      navigation: {
        docs: { label: 'Docs', href: '/docs' },
        blog: { label: 'Blog', href: '/blog' },
        about: { label: 'About', href: '/about' },
      },
      title: 'My Site',
      tagline: 'Single language site powered by shipyard',
      brand: 'My Brand',
    }),
    shipyardDocs(['docs']),
    shipyardBlog(['blog']),
  ],
})

Project Structure

Set up your project structure:

my-single-lang-site/
├── astro.config.mjs      # Astro configuration
├── package.json          # Dependencies
├── src/
│   ├── env.d.ts         # TypeScript definitions
│   ├── content.config.ts # Content collections
│   └── pages/           # Static pages
│       ├── index.md     # Homepage
│       └── about.md     # About page
├── blog/                # Blog posts (no language dirs!)
│   └── welcome.md       # First blog post
└── docs/                # Documentation (no language dirs!)
    ├── index.md         # Docs homepage
    └── installation.md  # This page

Content Configuration

Create src/content.config.ts:

import { defineCollection } from 'astro:content'
import { docsSchema } from '@levino/shipyard-docs'
import { blogSchema } from '@levino/shipyard-blog'
import { glob } from 'astro/loaders'

const blog = defineCollection({
  schema: blogSchema,
  loader: glob({ pattern: '**/*.md', base: './blog' }),
})

const docs = defineCollection({
  schema: docsSchema,
  loader: glob({ pattern: '**/*.md', base: './docs' }),
})

export const collections = { blog, docs }

Development

Start the development server:

npm run dev

Your site will be available at http://localhost:4321

Next Steps

  • Add content: Create your first blog post and documentation pages
  • Customize: Modify themes, colors, and layouts
  • Deploy: Deploy to Vercel, Netlify, or your preferred host

Troubleshooting

Common Issues

Build errors: Make sure all peer dependencies are installed Styling issues: Check that Tailwind CSS is properly configured Route problems: Verify your content collections are set up correctly

Need more help? Check our configuration guide for advanced setup options.