This page documents all content blocks available for Charter Boats articles. We use a block-based content model that stores rich text as typed JSON blocks instead of HTML. This approach is similar to EditorJS, Slate, and Portable Text (Sanity). It keeps content structured and presentation-agnostic, making it easy for AI to generate and for the frontend to render consistently.

Schema & Types

The TypeScript schema lives at app/types/content.ts. It defines all block types, their properties, and valid values. When creating content programmatically (via AI or API), reference this file for the exact structure.

Articles are stored in the content_articles table with the body column containing a JSON array of blocks.

Text Blocks

Headings

Use heading with level: 2 or level: 3 to structure content. Level 1 is reserved for the page title.

Paragraphs with Inline Formatting

Paragraphs use a children array supporting bold, italic, code, and links. This allows rich formatting while keeping content structured.

Lists

Bullet list (bulletList):

  • First item
  • Second item
  • Third item

Numbered list (numberedList):

  1. Step one
  2. Step two
  3. Step three

Blockquote

Use blockquote with optional attribution:

The sea, once it casts its spell, holds one in its net of wonder forever.

— Jacques Cousteau

Image

Use image with src, alt, and optional caption:

Sailing yacht at sunset
A yacht sailing into the sunset in the Mediterranean

Data Display Blocks

Stat Bar

Display key metrics with statBar:

2,500+

Marinas

12

POI Categories

25m

Route Resolution

Free

Sea Routing

Season Calendar

Show seasonal ratings with seasonCalendar:

Jan
Not recommended
Off season
Feb
Not recommended
Off season
Mar
Poor
Early season
Apr
Fair
Shoulder season
May
Good
Good sailing
Jun
Excellent
Peak season
Jul
Excellent
Peak season
Aug
Excellent
Peak season
Sep
Excellent
Best month
Oct
Good
Good sailing
Nov
Poor
Late season
Dec
Not recommended
Off season
Excellent
Fair
Not recommended

Price Comparison

Compare options with priceComparison:

OptionPriceNotes
Bareboat Charter€350You captain
Skippered Charter€500With captain
Crewed Charter€800Full service

List Blocks

Checklist

Use checklist for packing lists, requirements, or to-dos:

Charter Packing List

2/5
  • Passport and travel documents
  • Sunscreen and sunglasses
  • Soft-sided luggage (no hard cases)
  • Non-marking boat shoes
  • Light layers for evening

FAQ

Use faq for question-answer pairs:

For bareboat charters, yes - typically RYA Day Skipper or equivalent. For skippered charters, no experience needed.

Base charter fee includes the boat, basic equipment, and insurance. Extras like fuel, provisioning, and marina fees are typically additional.

Pros & Cons

Use prosCons for balanced comparisons:

Pros

  • Complete freedom to explore
  • More affordable than hotels
  • Wake up in a new location each day
  • Connect with nature

Cons

  • Weather dependent
  • Limited space for luggage
  • Requires some sailing knowledge (bareboat)
  • Seasickness possible

How It Works

Use howItWorks for step-by-step processes. Optional title adds a header:

Booking Process

1
Search - Find boats by location, dates, and preferences
2
Request - Send a booking request to the owner
3
Confirm - Owner accepts and you pay securely
4
Sail - Pick up the boat and start your adventure

Visual Blocks

Feature Grid

Use featureGrid for feature cards with icons. Supports 2 or 3 columns. Each item has title, description, optional icon, and optional items array for bullet points:

For Beginners

  • Skippered charters available
  • Calm water destinations
  • Full briefing included

For Experienced Sailors

  • Bareboat options
  • Challenging routes
  • Remote anchorages

Available icons: anchor, ship, compass, users, calendar, route, shield, zap, check, star, bot, globe, database

Use linkGrid for clickable resource links. Supports 2, 3, or 4 columns:

Available icons: globe, database, map, bot, anchor, ship, compass, heart, star, check

Entity Blocks

These blocks embed live data from the database.

Boat Blocks

Single boat by ID (boatCard):

Search-based list (boatList) - uses same filters as /search page. Available filters: type, guests, cabins, location, manufacturer, priceMin, priceMax, instantBook:

Marina Blocks

Single marina (marinaCard) and grid (marinaGrid):

Route Blocks

Single route (routePreview) and grid (routeGrid) embed saved itineraries.

Interactive Blocks

Call to Action

Use cta for prominent action buttons:

Ready to Start Sailing?

Browse hundreds of boats across the Mediterranean and Caribbean.

Find Your Boat

Use searchBox to embed a search form with optional default filters:

Creating Articles via API

Articles can be created programmatically via the POST /api/content/articles endpoint. The request body should include:

  • slug - URL-friendly identifier
  • title - Article title (used as h1)
  • excerpt - Short description for previews
  • body - Array of content blocks
  • meta_title, meta_description - SEO metadata
  • keywords - Array of topic tags
  • status - "draft" or "published"

For AI-generated content, include ai_generated: true and ai_model to track the source.