Skip to content
zeitwordPublic

About

Resources

Contributing

Stars

85 stars

Watchers

1 watching

Forks

Latest commit

Β 

History

357 Commits

Folders and files

NameName
Last commit message
Last commit date
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Zeitword

An open-source, block-based headless CMS built with Nuxt

What is Zeitword?

Zeitword is a modern headless CMS that empowers developers to build content-rich applications while providing an intuitive interface for content creators. It combines the flexibility of a headless architecture with the simplicity of block-based editing.

Why Zeitword?

  • 🎨 Block-Based Editing - Intuitive content creation with modular blocks
  • πŸ”§ API-First - Build with your preferred stack using our simple API
  • πŸ“ User-Friendly - Let content creators work without understanding technical details
  • πŸš€ Developer-Focused - Easy to integrate, customize, and extend
  • πŸ’» Open Source - Transparent, community-driven development
  • ⚑ Performance - Built with modern technologies for speed

Tech Stack

Zeitword is built with modern and reliable technologies:

  • Frontend: Nuxt.js, Vue, TypeScript
  • Backend: Nitro
  • Database: PostgreSQL
  • ORM: Drizzle
  • Storage: MinIO/S3-compatible
  • Development: Node.js and npm, managed with mise

Getting Started

Prerequisites

Quick Start

  1. Clone and Install

    # Clone the repository
    git clone https://github.com/yourusername/zeitword.git
    cd zeitword
    
    # Trust and install Node.js 26.12.1
    mise trust
    mise install
    
    # Install dependencies
    mise exec -- npm ci
  2. Start the Infrastructure

    docker compose up -d

    This will start:

    • PostgreSQL database on port 5432
    • MinIO S3-compatible storage on port 9000
    • MinIO Console on port 9001
  3. Configure Environment

    cp .env.example .env

    The example configuration includes default values for local development with PostgreSQL and MinIO.

  4. Run Migrations

    mise exec -- npm run db:migrate
  5. Start Development Server

    mise exec -- npm run dev

Local Development Services

PostgreSQL

  • Host: localhost:5432
  • User: postgres
  • Password: postgres

MinIO (S3-compatible storage)

  • API Endpoint: http://localhost:9000
  • Console UI: http://localhost:9001
  • Access Key: admin
  • Secret Key: password
  • Default Bucket: zeitword

You can access the MinIO Console at http://localhost:9001 to manage your storage directly.

Database Management

Zeitword uses Drizzle ORM for database operations. Here are common commands:

# Generate migrations after schema changes
mise exec -- npm run db:generate

# Apply migrations to the database
mise exec -- npm run db:migrate

Environment Setup

For local development, the .env.example comes pre-configured for the included Docker services. For production, you'll need to update these values according to your deployment environment.

Required Environment Variables

  1. Database Configuration

    NUXT_DSN="postgresql://postgres:postgres@localhost:5432/postgres?sslmode=disable"
    NUXT_AUTH_SECRET="your-random-auth-secret-at-least-32-characters"
    NUXT_PUBLIC_APP_URL="http://localhost:3000"
    • NUXT_DSN: PostgreSQL connection string
    • NUXT_AUTH_SECRET: Random Better Auth signing secret, at least 32 characters
    • NUXT_PUBLIC_APP_URL: Canonical app origin (the public HTTPS origin in production), used for auth cookies, origin validation and recovery links
    • NUXT_AUTH_TRUSTED_PROXY_IPS: Optional comma-separated socket IPs of reverse proxies that overwrite X-Forwarded-For, used for auth rate limiting

    Existing installations must follow the Better Auth migration rollout.

  2. S3 Storage Configuration

    # Default values for local MinIO setup
    NUXT_S3_ACCESS_KEY_ID="admin"
    NUXT_S3_SECRET_ACCESS_KEY="password"
    NUXT_S3_ENDPOINT="http://localhost:9000"
    NUXT_S3_BUCKET="zeitword"
    NUXT_S3_REGION="us-east-1"
    • For local development, these values work with the included MinIO service
    • For production, replace with your preferred S3-compatible service credentials
  3. Waitlist Configuration

    NUXT_RESEND="your-resend-api-key"
    NUXT_PUBLIC_SITE_URL="https://your-site-url.com"
    • NUXT_RESEND: API key for email service
    • NUXT_PUBLIC_SITE_URL: Your site's public URL

Setting Up Environment Variables

  1. Create your .env file:

    cp .env.example .env
  2. Generate a secure session password:

    openssl rand -base64 32
  3. For production S3 storage:

    • Create an S3 bucket or use an S3-compatible service
    • Configure CORS settings for your bucket
    • Add your credentials to the .env file
  4. Configure email service:

    • Sign up for Resend
    • Add your API key to the .env file

Note

Never commit your .env file to version control. It's included in .gitignore by default.

Contributing

We welcome contributions! Please feel free to:

  • Submit bug reports
  • Propose new features
  • Create pull requests
  • Improve documentation

Check our Contributing Guidelines for more details.

License

MIT License

About

Resources

Contributing

Stars

85 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages