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):
- Step one
- Step two
- Step three
Blockquote
Use blockquote with optional attribution:
The sea, once it casts its spell, holds one in its net of wonder forever.
Image
Use image with src, alt, and optional caption:
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:
Price Comparison
Compare options with priceComparison:
| Option | Price | Notes |
|---|---|---|
| Bareboat Charter | €350 | You captain |
| Skippered Charter | €500 | With captain |
| Crewed Charter | €800 | Full 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
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
Link Grid
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:
Featured Boats

Beneteau Oceanis 35.1 · Bela

Northman Maxus 33.1 RS · Kalska Brama

Northman Maxus 33.1 RS · Poganckie Kepy
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 BoatSearch Box
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.
