Files
opencode-skill/skills/website-creator/templates/astro-tina-starter/AGENTS.md
Kunthawat Greethong 628298183a feat: migrate website-creator from Next.js+Payload to Astro+Tina CMS
Major changes:
- Replace Payload CMS with Tina CMS (self-hosted)
- Add Astro DB for consent logging (PDPA compliant)
- Update Tailwind v3 to v4 (@tailwindcss/vite plugin)
- Add astro-tina-starter template
- Rewrite consent template for Astro (ConsentBanner.astro, Astro DB, Nano Stores)
- Add install-tina-backend.sh for self-hosted Tina per customer
- Rename convert-astro.sh to migrate-tina.sh
- Add AGENTS.md template for generated websites
- Delete all Payload/Next.js files

Technical updates:
- Astro DB using defineDb with eq operators for queries
- Tailwind v4 with @theme block
- Tina CMS local development mode
- Proper Astro API routes for consent

Research-verified with official documentation (April 2026)
2026-04-17 14:52:59 +07:00

3.9 KiB

Astro Tina Starter - Agent Knowledge Base

Generated: 2026-04-17
Version: 1.0.0
Type: Astro 6 + Tina CMS Starter Template


OVERVIEW

Starter template for building websites with Astro 6, Tina CMS, and Tailwind CSS 4.x.

Tech Stack

Component Technology Version
Framework Astro 6.1.7
CMS Tina CMS 2.x
Styling Tailwind CSS 4.x
Database Astro DB 0.14.x
State Nano Stores 0.11.x

Key Features

  • Self-hosted Tina CMS with schema-based content
  • Tailwind CSS 4.x using @tailwindcss/vite plugin
  • Astro DB for consent logging (PDPA compliant)
  • Thai language support with Noto Sans Thai
  • Docker-ready deployment

PROJECT STRUCTURE

astro-tina-starter/
├── .tina/
│   ├── config.ts       # Tina CMS configuration
│   └── schema.ts       # Content schema definitions
├── db/
│   ├── config.ts       # Astro DB schema
│   └── seed.ts         # Database seed script
├── src/
│   ├── styles/
│   │   └── global.css  # Tailwind v4 styles + @theme
│   ├── layouts/
│   │   └── Layout.astro
│   ├── pages/
│   │   └── index.astro
│   ├── components/
│   │   └── Header.astro
│   └── content/
│       ├── config.ts   # Astro content collections
│       ├── posts/       # Blog posts (MDX)
│       ├── pages/       # Static pages (MDX)
│       └── settings/    # Site settings (JSON)
├── public/
│   └── favicon.svg
├── Dockerfile
├── astro.config.mjs
├── tsconfig.json
└── package.json

IMPORTANT CONVENTIONS

Tailwind CSS 4.x Setup

CRITICAL: This template uses @tailwindcss/vite plugin, NOT @astrojs/tailwind.

// astro.config.mjs
import tailwindcss from '@tailwindcss/vite'

export default defineConfig({
  vite: {
    plugins: [tailwindcss()],
  },
})
/* src/styles/global.css */
@import "tailwindcss";

@theme {
  --color-primary: #1a1a1a;
  --color-accent: #3b82f6;
}

Tina CMS Content

Tina CMS manages content in src/content/:

  • posts/ - Blog posts (MDX format)
  • pages/ - Static pages (MDX format)
  • settings/ - Site settings (JSON format)

Schema defined in .tina/schema.ts.

Astro DB Schema

Consent log table for PDPA compliance in db/config.ts.


CREDENTIALS

No external API credentials required for this template.

Optional Environment Variables

Variable Description
TINA_TOKEN Tina CMS production authentication
TINA_CLIENT_ID Tina CMS client ID
DATABASE_URL Custom database connection (optional)

COMMANDS

# Install dependencies
npm install

# Development
npm run dev          # Full dev (Tina + Astro)
npm run dev:astro    # Astro only
npm run dev:tina     # Tina CMS only

# Build
npm run build        # Production build
npm run preview      # Preview production build

# Database
npm run db:push      # Push schema to database
npm run db:seed      # Seed database

PDPA COMPLIANCE

Template includes consent logging via Astro DB:

// db/config.ts
export const ConsentLog = defineTable({
  columns: {
    action: text(),
    purpose: text(),
    analytics: boolean(),
    marketing: boolean(),
    functional: boolean(),
    userAgent: text(),
    ip: text(),
    timestamp: text(),
  },
})

ANTI-PATTERNS

  • NEVER use @astrojs/tailwind (deprecated)
  • ALWAYS use @tailwindcss/vite for Tailwind v4
  • NEVER commit environment files (.env)

DEPLOYMENT

Docker

docker build -t astro-tina-starter .
docker run -p 8080:80 astro-tina-starter

Manual

npm install
npm run build
# Serve dist/ folder with any static server

NOTES