Claude Code Plugins

Community-maintained marketplace

Feedback

Create and manage seed packs for PropertyWebBuilder. Use when creating new scenario-based seed data bundles, adding properties to packs, or setting up new tenant websites with pre-configured content.

Install Skill

1Download skill
2Enable skills in Claude

Open claude.ai/settings/capabilities and find the "Skills" section

3Upload to Claude

Click "Upload skill" and select the downloaded ZIP file

Note: Please verify skill by going through its instructions before using it.

SKILL.md

name seed-packs
description Create and manage seed packs for PropertyWebBuilder. Use when creating new scenario-based seed data bundles, adding properties to packs, or setting up new tenant websites with pre-configured content.

Seed Packs for PropertyWebBuilder

What Are Seed Packs?

Seed packs are pre-configured bundles of seed data representing real-world property management scenarios. They provide a way to quickly spin up fully functional tenant websites with realistic data for testing, demonstrations, or initial setup.

Directory Structure

db/seeds/packs/
├── base/                     # Root pack (inherited by all others)
│   ├── pack.yml              # Pack metadata (REQUIRED)
│   ├── field_keys.yml        # Property types, states, features
│   └── links.yml             # Navigation structure
│
└── [pack_name]/              # Scenario pack (e.g., spain_luxury)
    ├── pack.yml              # Pack config (REQUIRED)
    ├── properties/           # Property YAML files
    │   └── *.yml             # One file per property
    ├── content/              # Page content by page slug
    │   ├── home.yml
    │   ├── about-us.yml
    │   └── contact-us.yml
    ├── translations/         # Custom i18n translations
    │   ├── en.yml
    │   └── es.yml
    └── images/               # Property photos (optional)

Core Files

1. pack.yml (REQUIRED)

The main configuration file for the pack:

name: pack_name                          # Unique identifier (matches folder name)
display_name: "Human Readable Name"      # Display name
description: "Description of the pack"   # Brief description
version: "1.0"                           # Version number

# Optional - inherit from another pack
inherits_from: base

# Website Configuration
website:
  theme_name: bristol                    # Theme to use
  default_client_locale: en              # Default locale
  supported_locales:                     # Supported languages
    - en
    - es
    - de
  currency: EUR                          # Default currency
  area_unit: sqm                         # sqm or sqft

# Agency Configuration
agency:
  display_name: "Agency Name"
  email: "info@example.com"
  phone: "+1 234 567 890"
  address:
    street_address: "123 Main Street"
    city: London
    region: Greater London
    country: UK
    postal_code: "SW1A 1AA"

# Page Parts - specify which templates to use per page
page_parts:
  home:
    - key: heroes/hero_centered
      order: 1
    - key: features/feature_grid_3col
      order: 2
  about-us:
    - key: content_html
      order: 1

# Users to create
users:
  - email: admin@example.com
    role: admin
    password: demo123
  - email: agent@example.com
    role: agent
    password: demo123

2. properties/*.yml

One YAML file per property:

# Property identifier
reference: UK-VILLA-001

# Property classification (uses field_keys)
prop_type: types.villa
prop_state: states.excellent

# Location
address: "123 Park Lane"
city: London
region: Greater London
country: UK
postal_code: "W1K 7AA"
latitude: 51.5074
longitude: -0.1278

# Property Details
bedrooms: 5
bathrooms: 4
garages: 2
constructed_area: 450      # In configured area_unit
plot_area: 800
year_built: 2020

# Sale Listing (optional - omit if not for sale)
sale:
  highlighted: true
  price_cents: 500000000   # Price in cents (e.g., 5000000.00 GBP)
  title:
    en: "Luxury Villa in Mayfair"
    es: "Villa de lujo en Mayfair"
  description:
    en: "Stunning 5-bedroom villa with private garden..."
    es: "Impresionante villa de 5 dormitorios..."

# Rental Listing (optional - omit if not for rent)
rental:
  highlighted: false
  long_term: true
  short_term: false
  furnished: true
  monthly_price_cents: 1500000  # Monthly price in cents
  title:
    en: "Modern Apartment for Rent"
  description:
    en: "Beautiful modern apartment..."

# Features (reference field_keys)
features:
  - features.private_pool
  - features.private_garden
  - features.terrace
  - amenities.air_conditioning
  - amenities.alarm_system

# Image filename (from pack's images/ dir or db/seeds/images/)
image: villa_luxury.jpg

3. content/*.yml

Page content organized by page slug:

# Content keys match page part templates
heroes/hero_centered:
  pretitle:
    en: "Welcome"
    es: "Bienvenido"
  title:
    en: "Find Your Dream Home"
    es: "Encuentra tu hogar soñado"
  subtitle:
    en: "Luxury properties in prime locations"
    es: "Propiedades de lujo en ubicaciones privilegiadas"
  cta_text:
    en: "View Properties"
    es: "Ver propiedades"
  cta_link: "/search/buy"
  background_image: "db/example_images/hero_background.jpg"

features/feature_grid_3col:
  section_title:
    en: "Our Services"
    es: "Nuestros servicios"
  feature_1_icon: "fa-home"
  feature_1_title:
    en: "Buying"
    es: "Compra"
  feature_1_description:
    en: "We guide you through the buying process"
    es: "Te guiamos en el proceso de compra"

4. field_keys.yml

Property taxonomy (types, states, features, amenities):

# Property Types
types:
  villa:
    en: Villa
    es: Villa
  apartment:
    en: Apartment
    es: Apartamento
  penthouse:
    en: Penthouse
    es: Ático

# Property States
states:
  new_build:
    en: New Build
    es: Obra nueva
  excellent:
    en: Excellent
    es: Excelente
  good:
    en: Good
    es: Bueno

# Features
features:
  private_pool:
    en: Private Pool
    es: Piscina privada
  sea_views:
    en: Sea Views
    es: Vistas al mar

# Amenities
amenities:
  air_conditioning:
    en: Air Conditioning
    es: Aire acondicionado
  elevator:
    en: Elevator
    es: Ascensor

5. links.yml

Navigation structure:

# Top Navigation
- slug: home
  page_slug: home
  link_title: Home
  placement: top_nav
  sort_order: 1
  visible: true

- slug: buy
  page_slug: buy
  link_title: Buy
  placement: top_nav
  sort_order: 2
  visible: true

# Footer Navigation
- slug: footer_privacy
  page_slug: privacy
  link_title: Privacy Policy
  placement: footer
  sort_order: 1
  visible: true

Implementation

Core Class: Pwb::SeedPack

Located at lib/pwb/seed_pack.rb:

# Find and apply a pack
pack = Pwb::SeedPack.find('spain_luxury')
pack.apply!(website: website)

# Preview what will be created (dry run)
pack.preview

# Apply with options
pack.apply!(
  website: website,
  options: {
    skip_properties: false,
    skip_users: true,
    skip_content: false,
    dry_run: false,
    verbose: true
  }
)

# List all available packs
Pwb::SeedPack.available

Rake Tasks

# List available packs
rails pwb:seed_packs:list

# Preview what a pack would create
rails pwb:seed_packs:preview[pack_name]

# Apply pack to default website
rails pwb:seed_packs:apply[pack_name]

# Apply pack to specific website
rails pwb:seed_packs:apply[pack_name,website_id]

# Apply with skip options
rails pwb:seed_packs:apply_with_options[pack_name,'skip_users,skip_properties']

# Reset and apply (WARNING: destroys existing data)
rails pwb:seed_packs:reset_and_apply[pack_name]

Creating a New Seed Pack

Step 1: Create Directory Structure

mkdir -p db/seeds/packs/my_new_pack/{properties,content,translations,images}

Step 2: Create pack.yml

Start with the minimum required configuration:

name: my_new_pack
display_name: "My New Pack"
description: "Description of what this pack represents"
version: "1.0"
inherits_from: base

website:
  theme_name: bristol
  default_client_locale: en
  supported_locales: [en]
  currency: GBP
  area_unit: sqft

agency:
  display_name: "My Agency Name"
  email: "info@myagency.com"

Step 3: Add Properties

Create property files in properties/ directory:

# properties/property_001.yml
reference: MY-001
prop_type: types.house
prop_state: states.good
city: London
bedrooms: 3
bathrooms: 2
constructed_area: 1500

sale:
  price_cents: 45000000
  title:
    en: "Charming Family Home"
  description:
    en: "Beautiful 3-bedroom house..."

features:
  - features.private_garden
  - amenities.central_heating

Step 4: Add Content (Optional)

Create content files for each page:

# content/home.yml
heroes/hero_centered:
  title:
    en: "Welcome to My Agency"
  cta_text:
    en: "Browse Properties"

Step 5: Test the Pack

# Preview first
rails pwb:seed_packs:preview[my_new_pack]

# Apply to test website
rails pwb:seed_packs:apply[my_new_pack]

Inheritance

Packs can inherit from parent packs:

# Child pack inherits field_keys, links from base
inherits_from: base

When applied:

  1. Parent pack is applied first (with skip_website and skip_agency)
  2. Child pack is applied, overriding parent where specified

Key Patterns

Multi-Language Content

Always provide translations for supported locales:

title:
  en: "English Title"
  es: "Título en Español"
  de: "Deutscher Titel"

Price Format

Prices are always in cents to avoid floating-point issues:

sale:
  price_cents: 395000000  # = 3,950,000.00
rental:
  monthly_price_cents: 150000  # = 1,500.00/month

Feature References

Features reference field_keys using dot notation:

features:
  - features.private_pool      # from field_keys.yml features section
  - amenities.air_conditioning # from field_keys.yml amenities section
  - types.villa                # from field_keys.yml types section

Image Handling

Images are looked up in order:

  1. Pack's images/ directory
  2. Shared db/seeds/images/ directory
image: villa_ocean.jpg  # Filename only, no path

Existing Packs Reference

base

  • Foundation pack inherited by all others
  • Contains common field_keys and navigation links
  • No properties or users

spain_luxury

  • Spanish Costa del Sol luxury real estate scenario
  • 7 properties (villas, apartments, penthouses)
  • 3 languages (es, en, de)
  • Complete home page content

Files Reference

File Location Purpose
SeedPack class lib/pwb/seed_pack.rb Main implementation
Rake tasks lib/tasks/seed_packs.rake CLI interface
Base pack db/seeds/packs/base/ Foundation pack
Spain luxury db/seeds/packs/spain_luxury/ Example pack
Documentation docs/seeding/seed_packs_plan.md Detailed docs