com um clique
seed-packs
// 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.
// 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.
Evaluate themes for accessibility, contrast, and design issues. Use when auditing themes for WCAG compliance, checking color contrast ratios, or identifying visual/UX problems.
Create new themes for PropertyWebBuilder. Use when creating custom themes, styling websites, or modifying theme templates. Handles theme registration, view templates, CSS, and asset configuration.
Playwright E2E testing and Lighthouse performance auditing. Use when setting up E2E tests, running Playwright tests, performing Lighthouse audits, or debugging E2E test failures.
Help with Rails testing including unit tests, integration tests, fixtures, and debugging test failures. Use when working on tests or debugging test issues.
| 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 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.
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)
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
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
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"
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
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
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
# 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]
mkdir -p db/seeds/packs/my_new_pack/{properties,content,translations,images}
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"
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
Create content files for each page:
# content/home.yml
heroes/hero_centered:
title:
en: "Welcome to My Agency"
cta_text:
en: "Browse Properties"
# Preview first
rails pwb:seed_packs:preview[my_new_pack]
# Apply to test website
rails pwb:seed_packs:apply[my_new_pack]
Packs can inherit from parent packs:
# Child pack inherits field_keys, links from base
inherits_from: base
When applied:
Always provide translations for supported locales:
title:
en: "English Title"
es: "Título en Español"
de: "Deutscher Titel"
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
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
Images are looked up in order:
images/ directorydb/seeds/images/ directoryimage: villa_ocean.jpg # Filename only, no path
| 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 |